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

  • Автор темы Vadik(R)
  • Дата начала
Статус
Закрыто для дальнейших ответов.
V

Vadik(R)

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

Вложения

  • 2.rar
    3,3 КБ · Просмотры: 180
E

European

Для: Vadik®
Ознакомьтесь с п.2.6 правил. Последнее устное предупреждение
 
V

Vadik(R)

согласен, что-то с названием темы я перемудрил :( . Но может всё-таки кто-нибудь скажет почёму не идёт код из вложения в #1.
 
V

Vadik(R)

Unit - суть модуль
.
Похоже до меня начинает доходить. Код модулей выполняется реньше ж чем код самой проги? Тогда выходит я пытаюсь изменить надпись на кнопке, которой ещё не существует, правильно я понял? И нужный мне код надо вставлять после application.createform, так как после application.run мой код уже почему-то не выполняеться.

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

Vadik(R)

Насчёт Self я знаю только что это переводиться как "сам". И ещё в самоучителе видел код, который написал выше. Более конкретно про self я не знаю.
 
V

Vadik(R)

Для: sax_ol.
Спасибо за проявленное терпение. Теперь у меня заработала прога. :) :D :( :D :)
 
E

European

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

Vadik(R)

Хотя нет, вот ещё кажется последний вопросик для полноты знаний:
Пусть у меня есть на форме Button1 и WebBrowser1. Я хочу сделать так, чтобы когда приложение полностю запустится, то есть оно будет выглядеть так, как после выполнения
Код:
Application.Initialize;
application.createform(TForm, Form1);
application.run;
. То есть окно с приложением можно было сворачивать, перемещать и т.д. Значит, когда приложение запустится, оно подождало 5 секунд и открыло страницу Яндекса(ну или форума codeby, кому как удобно). Так вот. А если человек кликнет по кнопке button1, то надо, что бы обработчик выполнялся после начала открытия яндекса.Если написать такой код:
Код:
uses forms, sysutils....
application.createform(TForm, Form1);
sleep(5000);
form1.webbrowser1.navigate('http://www.yandex.ru');
application.run;
то в таком случае человек не видит форму.
Если написать:
Код:
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 потоке.
 
V

Vadik(R)

Код:
{$R *.dfm}

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

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

Vadik(R)

Наверно, вот наилучший пример объяснить то, чего я хочу.
Посмотреть вложение hLaPEx.rar
Суть не в самой программе, которая взламывает линейку. Нет, не в этом. Просто когда запускаешь прогу, то ты можешь свободно кликать по счётчику от майла, даже в то время пока идут секунды на кнопке. Мне нужен код проги, запуская которую у меня на кнопке будет отсчёт в секундах с 9 до 0 и компонент веббраузер с загружаемым яндексом.
Я пытался сделать что-то вроде
Код:
{$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 обеспечено.
 
V

Vadik(R)

Ладно, на этом пока остановимся. Я обсуждать эту тему смогу только после изучения TTimer'а. Постараюсь побыстрее.
 
V

Vadik(R)

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

Chernobyl

Код:
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.
 
V

Vadik(R)

Тема с бессмысленным названием до сих пор обсуждаеться! Я уже нарисовал то, что мне надо. Только не могу реализовать. Помогите, кто может сделать.
 

Вложения

  • Untitled_2.rar
    98,3 КБ · Просмотры: 189
E

European

<!--QuoteBegin-Vadik®+2:01:2008, 12:32 -->
<span class="vbquote">(Vadik® @ 2:01:2008, 12:32 )</span><!--QuoteEBegin-->Тема с бессмысленным названием до сих пор обсуждаеться!
[snapback]92028" rel="nofollow" target="_blank[/snapback]​
[/quote]
Ты ж её так сам и назвал
 
V

Vadik(R)

Наконец-то! Различными комбинациями я добился своего! :D :D :) :)
Здесь всё, как я хотел!
Код:
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.
В принципе, да, это код Чернобыля, просто
Код:
Form1.Show;
Application.ProcessMessages;
Sleep(5000);
делает наглядность для пользователя!
Всё, тему можно закрывать!
 
M

morpheus

<!--QuoteBegin-Vadik®+3:01:2008, 11:53 -->
<span class="vbquote">(Vadik® @ 3:01:2008, 11:53 )</span><!--QuoteEBegin-->Всё, тему можно закрывать!
[snapback]92119" rel="nofollow" target="_blank[/snapback]​
[/quote]
да не вопрос

мои позддравления
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!