Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.48 MB
Время: 0.036 c
14-1099531403
ИМХО
2004-11-04 04:23
2004.12.12
Королевство ночи...


1-1101252517
Bobby Digital
2004-11-24 02:28
2004.12.12
Icon


3-1100425443
Алексей Петухов
2004-11-14 12:44
2004.12.12
DBase и русский язык


1-1101295236
ssk
2004-11-24 14:20
2004.12.12
MDI Child в роли досовой консоли


8-1094629162
dedMazDie
2004-09-08 11:39
2004.12.12
Загрузка части картинки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский