Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
ВнизЖизнь в Run-Time Найти похожие ветки
← →
Dot (2004-11-23 21:19) [0]Мастера, посмотрите код, а потом как раз мой вопрос.
procedure ShowMyForm;
var
form: Tform;
Btn: TButton;
begin
Application.CreateForm(TForm, Form);
form.Caption:="DinamoForm";
form.Position:=poScreenCenter;
form.BorderIcons:=[biSystemMenu];
form.BorderStyle:=bsSingle;
form.Height:=300;
form.Width:=300;
Btn:=TButton.Create(Form);
Btn.Left:=50;
Btn.Top:=150;
Btn.Width:=100;
Btn.Height:=25;
Btn.Caption:="ClickMe";
Btn.Parent:=Form;
begin
ShowMyForm;
Application.Run;
end.
********************
Так вот господа это листинг файла проекта, поскольку в модуль я не смог занести это. Следовательно вопрос. Как мне сделать обработчик события нажатия на кнопку??? Или может есть другой способ
← →
begin...end © (2004-11-23 21:26) [1]
> Dot (23.11.04 21:19)
http://www.delphikingdom.com/helloworld/runtime_comp.htm
http://delphimaster.net/view/1-1101212600/
← →
Dot (2004-11-23 21:42) [2]Спасибо там я уже был. Мне надо несколько другое.
Во всех примерах есть готовая ГЛАВНАЯ форма и уже на ней динамически можно все создавать и вызыватьдругие формы. Это не вызывает НИКАКИХ проблем. Проблема возникает именно когда я создаю главную форму. Почему то процедуру которую я привел выше приходится размещать только в файле проекта а не модуля, и получается процедуры прорисовок кнопок итд тоже надо делать там же.
Беда в том что в юниту то можно все сделать а вот в проекте я не знаю как. Поскольку на Btn.Onclick:=btnOnClick дельфя ругаецца и примеры предложенные тут (http://www.delphikingdom.com/helloworld/runtime_comp.htm)
Не помогают.. вот в чем дело...
кстати щас подумал .. вот в моем коде я е указывал Имя формы при создании .. это может повлиять?
И как мне само создание отловить то?
← →
begin...end © (2004-11-23 21:50) [3]
> [2] Dot (23.11.04 21:42)
А зачем так создавать главную форму? Можно ведь оставить её создание (Application.CreateForm) в файле проекта. А необходимые компоненты на ней создавать в обработчике TForm.OnCreate.
← →
Dot (2004-11-23 21:56) [4]В том то и вся фишка!
Я сам не знаю возможно ли это вот и хочу узнать, должно быть возможно. На Апи писать не хочется да и нежелательно.
Просто таким образом я могу создать полнойценную форму со всеми компонентами, только без обработчиков событий =( (пока что)
И самое главное, декомпилирование такого проекта ничего не даст!!! Вообще ничего. декомпилятор покажет пустые поля. это проверенно. А если я оставлю ее создание то декомпилер выдаст мне все процедуры этой формы =(( что нежелательно.
Да и к тому же это чертовски интересно.
← →
ЮЮ © (2004-11-24 03:07) [5]>Поскольку на Btn.Onclick:=btnOnClick дельфя ругаецца
Потому что Onclick должен быть методом, а не просио процедурой.
Т.е. в модуле проекта надо описать некий класс, например, TMyMetods с методом btnOnClick
Btn.Onclick := TMyMetods.btnOnClick;
З.Ы. Возможно потреюуется создать экземпляр этого класса(точно не уверен, а проверять неохота :)
myMetods := TMyMetods.Create;
...
Btn.Onclick := myMetods.btnOnClick;
← →
KSergey © (2004-11-24 10:33) [6]> [4] Dot (23.11.04 21:56)
> И самое главное, декомпилирование такого проекта ничего
> не даст!!!
> Да и к тому же это чертовски интересно.
Фигней маятесь.
VCL построена так, что генерит код определенным образом. Ломать это - неблагодарное занятие. Декомпилятор ничего полезного не даст. обсуждалось.
← →
TUser © (2004-11-24 10:52) [7]Почему надо создавать главную форму таким хитрым образом - я не понимаю. И надо еще Application.Initialize писать.
> Потому что Onclick должен быть методом, а не просио процедурой.
Компилятор можно обмануть примерно так
var ne:TNotifyEvent;
begin
@ne:=@YourProc; // YourProc - просто процедура, а не метод
Button1.OnClick:=ne;
end;
← →
KSergey © (2004-11-24 11:14) [8]> [6] KSergey © (24.11.04 10:33)
> > Да и к тому же это чертовски интересно.
К стати. А вы в курсе, что VCL всегда создает невидимое окно, которое, на самом деле. и есть основное окно прилжения с точки зрения Windows? ;) Вас это не смущает? ;) Не возникает желания "что-то с этим сделать"? ;)
← →
TUser © (2004-11-24 11:16) [9]
> А вы в курсе, что VCL всегда создает невидимое окно, которое,
> на самом деле. и есть основное окно прилжения с точки зрения
> Windows?
К слову пришлось - т.о. все Delphi-приложения есть "Dialog-based" в понимании VC. Так?
← →
KSergey © (2004-11-24 11:19) [10]> [9] TUser © (24.11.04 11:16)
> К слову пришлось - т.о. все Delphi-приложения есть "Dialog-based"
> в понимании VC.
Если такую аналогию и можно провести - то слишком условно. Я бы не стал так говорить.
← →
Dot (2004-11-24 21:43) [11]2KSergey
> Фигней маятесь.
> VCL построена так, что генерит код определенным образом. Ломать > это - неблагодарное занятие. Декомпилятор ничего полезного не
> даст. обсуждалось.
Я вообще то сосвем про противоположные вещи говорил.
вот думаю все сказно хотя и непонятно
Как создать главную форму + создать обработчик события OnClick для нее и все!
← →
Юрий Зотов © (2004-11-24 22:07) [12]> Dot (24.11.04 21:43) [11]
> Как создать главную форму + создать обработчик события OnClick
> для нее
procedure MainFormClick(Self: TForm; Sender: TObject);
begin
ShowMessage(Self.Caption + ": OnClick handler")
end;
procedure CreateMainForm;
var
F: TForm;
M: TMethod;
begin
Application.CreateForm(TForm, F);
M.Code := @MainFormClick;
M.Data := Pointer(F);
F.OnClick := TNotifyEvent(M)
end;
begin
Application.Initialize;
CreateMainForm;
Application.Run
end.
Только изврат это...
:о)
← →
Dot (2004-11-26 21:53) [13]Это конечно более чем отлично, однако теперь я столкнулся с другой проблемой.
Я не могу взаимодействовать с компонентами.
То есть если брать за основу код Юрия Зотова (тот что выше)
Я не могу сделать соответственно так
procedure MainFormClick(Self: TForm; Sender: TObject);
begin
Edit1.Text:="blablabla";
end;
поскольку Edit1 я получается не создал, хотя на момент вызова я уже создаю его, одлнако в коде он не определен, не создавать же заново.. да и как если свойство Parent опять не задашь (в смысле форму.. ее ведь нет =()
Вот короче и вопрос как мне теперь можно с компонентави общаться?
← →
ЮЮ © (2004-11-29 07:12) [14]>Edit1.Text:="blablabla";
>поскольку Edit1 я получается не создал, хотя ...
не потоиу, что не создал, а потоиу что Edit1 в контексте этой процедуры - неизвестный идентификатор. Edit1 - это publish поле какого-то объекта - наследника TForm, пусть например Form1, вот и указывай
Form1.Edit1.Text
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.037 c