Не компилируется OnFormCreate

Тема в разделе "Delphi - FAQ", создана пользователем Vadik(R), 17 дек 2007.

Статус темы:
Закрыта.
  1. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    Люди, почему не компилируется программа во вложении? (в справочниках ответов не нашёл)
    И вообще почёму такой код может выполняться в процедуре onFormCreate, а в основном тексте после begin'а не выполняется? Почему в основном коде программы надо писать form1.button1..., а в процедурах можно сразу button1 без form1? Требую немного объяснений, я здесь чайник...причём чугунный...совсем :)
     

    Вложения:

    • 2.rar
      Размер файла:
      3,3 КБ
      Просмотров:
      41
  2. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Для: Vadik®
    Ознакомьтесь с п.2.6 правил. Последнее устное предупреждение
     
  3. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    согласен, что-то с названием темы я перемудрил :( . Но может всё-таки кто-нибудь скажет почёму не идёт код из вложения в #1.
     
  4. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
  5. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    .
    Похоже до меня начинает доходить. Код модулей выполняется реньше ж чем код самой проги? Тогда выходит я пытаюсь изменить надпись на кнопке, которой ещё не существует, правильно я понял? И нужный мне код надо вставлять после application.createform, так как после application.run мой код уже почему-то не выполняеться.

    или писать где-то в модуле begin with TButton.Create(Self) do begin parent:=form1... типа того?
     
  6. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    Насчёт Self я знаю только что это переводиться как "сам". И ещё в самоучителе видел код, который написал выше. Более конкретно про self я не знаю.
     
  7. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    Для: sax_ol.
    Спасибо за проявленное терпение. Теперь у меня заработала прога. :) :D :( :D :)
     
  8. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    <!--QuoteBegin-Vadik&reg;+18:12:2007, 11:43 -->
    <span class="vbquote">(Vadik&reg; @ 18:12:2007, 11:43 )</span><!--QuoteEBegin-->Спасибо за проявленное терпение.
    [snapback]90313" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Вообще-то, на форуме принято благодарить повышением репутации
     
  9. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    Хотя нет, вот ещё кажется последний вопросик для полноты знаний:
    Пусть у меня есть на форме Button1 и WebBrowser1. Я хочу сделать так, чтобы когда приложение полностю запустится, то есть оно будет выглядеть так, как после выполнения
    Код (Text):
    Application.Initialize;
    application.createform(TForm, Form1);
    application.run;
    . То есть окно с приложением можно было сворачивать, перемещать и т.д. Значит, когда приложение запустится, оно подождало 5 секунд и открыло страницу Яндекса(ну или форума codeby, кому как удобно). Так вот. А если человек кликнет по кнопке button1, то надо, что бы обработчик выполнялся после начала открытия яндекса.Если написать такой код:
    Код (Text):
    uses forms, sysutils....
    application.createform(TForm, Form1);
    sleep(5000);
    form1.webbrowser1.navigate('http://www.yandex.ru');
    application.run;
    то в таком случае человек не видит форму.
    Если написать:
    Код (Text):
    uses forms, sysutils....
    application.createform(TForm, Form1);
    form1.show;
    sleep(5000);
    form1.webbrowser1.navigate('http://www.yandex.ru');
    application.run;
    то в таком случае форма видна, зато на месте button1 стоит какая-то белая область(видимо, кнопка ещё не создана).
    Ещё раз повторю, если плохо написал, что должна делать прога.
    1. Запуститься.
    2. Пождать 5 сек.
    3. Открыть яндекс.
    4. Выполнять команды пользователя. Если пользователь кликнул по кнопке в то время, пока приложение ждало 5 секунд, то код всё равно будет выполняться, но только после начала загрузки страницы. То есть всё это должно быть в 1 потоке.
     
  10. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    Код (Text):
    {$R *.dfm}

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    webbrowser1.Navigate('http://www.yandex.ru/');
    end;

    end.
    Так? Я так понял, что загрузка формы - это её создание. Более подходящего события я не нашёл. Если я правильно сделал, то что надо делать дальше?
     
  11. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    OnDocumentComplete, OnNavigateComplete2 эти?
     
  12. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    Наверно, вот наилучший пример объяснить то, чего я хочу.
    Посмотреть вложение hLaPEx.rar
    Суть не в самой программе, которая взламывает линейку. Нет, не в этом. Просто когда запускаешь прогу, то ты можешь свободно кликать по счётчику от майла, даже в то время пока идут секунды на кнопке. Мне нужен код проги, запуская которую у меня на кнопке будет отсчёт в секундах с 9 до 0 и компонент веббраузер с загружаемым яндексом.
    Я пытался сделать что-то вроде
    Код (Text):
    {$R *.dfm}

    procedure TForm1.FormCreate(Sender: TObject);
    var
    i : Integer;
    begin
    for i:=9 DownTo 1 Do
    begin
    button1.Caption:=IntToStr(i);
    sleep(1000)
    end;
    end;

    end.
    , но форма появлялась только после того как на кнопке появится 1. В общем за готовый исходник нужной мне проги +1 обеспечено.
     
  13. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    Ладно, на этом пока остановимся. Я обсуждать эту тему смогу только после изучения TTimer'а. Постараюсь побыстрее.
     
  14. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    Всё, я нашёл ответ и на этот вопрос:
    Код (Text):
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
    button1.Caption:=IntToStr(StrToInt(button1.Caption)-1);
    if button1.Caption='0' then timer1.Enabled:=False;
    end;
    . Единственное, что мне не нравится вообще в делфи (или вообще во всех языках, хотя может я и не прав), что на событие онформкреате операторы процедуры выполняются, но пользователь не может наблюдать за этим. О чём свидетельствует уже не полюбившийся мне sleep. То есть штука
    Код (Text):
    procedure ....form1create
    begin
    button1.caption:='ok';
    sleep(5000);
    end;
    . Пользователь не видит форму пока не выполнится слип на 5 сек. А мне охота добится того, чтобы текст на кнопке изменялся в процессе выполнения приложения, не опираясь ни на какие события. То есть появляеться форма, кнопка с надписью "button1" и тут же на ней надпись меняется на "ok". Согласен, на существующих машинах человек не заметит ту долю секунды, когда это выполняется. Чтобы лучше описать вопрос, сравню это с консольным приложением. Пусть дан код
    Код (Text):
    program project1;
    uses
    SysUtils;

    {$APPTYPE CONSOLE}

    var
    st : string;
    begin
    write('st=');
    readln(st);
    end.
    1. Вот в этом коде появляеться чёрненькое окошко. Это я сравниваю с появлением формы, то есть форма видима пользователем.
    2. Окно поначалу пусто. Сравниваю с "кнопка имеет надпись "button1"".
    3. Печатаеться "st=". Сравниваю с изменением надписи на "ok".
    4. Ждёться считывание строки. Сравниваю с "Приложение работает".
    Но почему то у меня всегда выходит так, что если сравнивать мой код с консольным приложением, то выходит:
    3. печатаеться строка st=
    1. ПОТОМ ПОЯВЛЯЕТСЯ само чёрненькое окно
    4. Потом считывается строка.
    А второго пункта вообще нету. Как-то нелогично.
     
  15. Chernobyl

    Chernobyl Гость

    Код (Text):
    program Project1;

    uses
    Forms,
    Unit1 in 'Unit1.pas' {Form1};

    {$R *.res}

    begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);

    form1.Button1.Caption:='ok';//До запуска и не событие

    Application.Run;
    end.
     
  16. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    Тема с бессмысленным названием до сих пор обсуждаеться! Я уже нарисовал то, что мне надо. Только не могу реализовать. Помогите, кто может сделать.
     

    Вложения:

    • Untitled_2.rar
      Размер файла:
      98,3 КБ
      Просмотров:
      57
  17. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    <!--QuoteBegin-Vadik&reg;+2:01:2008, 12:32 -->
    <span class="vbquote">(Vadik&reg; @ 2:01:2008, 12:32 )</span><!--QuoteEBegin-->Тема с бессмысленным названием до сих пор обсуждаеться!
    [snapback]92028" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Ты ж её так сам и назвал
     
  18. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    Да ладно, одарю. Только сколько?
     
  19. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    Наконец-то! Различными комбинациями я добился своего! :D :D :) :)
    Здесь всё, как я хотел!
    Код (Text):
    program Project1;

    uses
    Forms, SysUtils,
    Unit1 in 'Unit1.pas' {Form1};

    {$R *.res}

    begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Form1.Show;
    Application.ProcessMessages;
    Sleep(5000);
    Form1.Button1.Caption:='ok';
    Application.Run;
    end.
    В принципе, да, это код Чернобыля, просто
    Код (Text):
    Form1.Show;
    Application.ProcessMessages;
    Sleep(5000);
    делает наглядность для пользователя!
    Всё, тему можно закрывать!
     
  20. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    <!--QuoteBegin-Vadik&reg;+3:01:2008, 11:53 -->
    <span class="vbquote">(Vadik&reg; @ 3:01:2008, 11:53 )</span><!--QuoteEBegin-->Всё, тему можно закрывать!
    [snapback]92119" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    да не вопрос

    мои позддравления
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей