Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.04;
Скачать: CL | DM;

Вниз

Обращение к форме через Handle   Найти похожие ветки 

 
stef ©   (2005-11-05 06:12) [0]

Передо мной стоит задача обратится к форме из процедуры не по имени, а через передаваемый параметр. Например так:

procedure draw;
begin
 form1.iamge1.canvas.lineto(0,0);
end;

...
draw;
...


А мне нужно так (вернее я так предпологал, что именно так и должно быть написано):

procedure draw(Hand:HWHD);
begin
 Hand.Image1.Canvas.Lineto(0,0);
end;

...
draw(form1.handle);
...


Объясните как на самом деле это пишется.


 
gdaujk ©   (2005-11-05 07:02) [1]

Может тебе это поможет:

если
type
   TForm1 = class(TForm)
   ...

procedure Drow(var aForm: TForm1);
begin
   aForm.image1.canvas.lineto(0,0);
end;

...
Drow(Form1);
...


 
sniknik ©   (2005-11-05 10:13) [2]

> procedure Drow(var aForm: TForm1);
var не нужен, изменения идут по указателю, а значение самого указателя не меняется.
(переменная Form1 ведь после процедуры не стала и не должна указывать на Form2)


 
Tonich ©   (2005-11-05 10:26) [3]

нет ну если человек хочет через хендл...
можно так например


procedure Draw(H:HWND);
var
Dc:HDC;
begin
 DC:=GetDC(H);
 Rectangle(Dc,0,0,100,100);
end;


 
sniknik ©   (2005-11-05 10:35) [4]

Tonich ©   (05.11.05 10:26) [3]
+
тогда вызов должен идти через хендл устройства
не
draw(form1.handle);
а
draw(form1.Image1.Canvas.handle);
иначе нарисуеш на форме, а не на имедже как пытвешся в [0]


 
Tonich ©   (2005-11-05 10:41) [5]


> sniknik ©   (05.11.05 10:35) [4]

ну вообщето я вообще не говорил как ее вызывать ))


> draw(form1.Image1.Canvas.handle);
> иначе нарисуеш на форме, а не на имедже как пытвешся в [0]

а это и так понятно )))


 
Tonich ©   (2005-11-05 10:48) [6]

тохда если через Image не надо GetDc
так как Form1.Image1.Canvas.Handle итак уже HDC


 
sniknik ©   (2005-11-05 11:05) [7]

> ну вообщето я вообще не говорил как ее вызывать ))
поэтому я и добавил, и адресовалось это не тебе а автору.


 
sniknik ©   (2005-11-05 11:06) [8]

автору вопроса конечно.


 
Tonich ©   (2005-11-05 11:17) [9]


> sniknik ©   (05.11.05 11:05) [7]

аа ))


 
gdaujk ©   (2005-11-05 11:34) [10]

>sniknik ©   (05.11.05 10:13) [2]

На сколькоя я понимаю, если не написать var, то при входе в процедуру появится ещё одна (наряду с Form1) переменная aForm. Она конечно по выходе из процедуры уничножится, но от это - лишние действия, по-моему. А если автор вопроса будет вызывать эту процедуру, например, в цикле от 0 до 1000... Не легче ли с помощью var просто сослаться на уже существующую переменную типа TForm1, и работать уже с ней?

Tonich ©   (05.11.05 10:48) [6]

Наверное самый корректный вариант...


 
Anton_K ©   (2005-11-05 12:20) [11]


> при входе в процедуру появится ещё одна (наряду с Form1)
> переменная aForm.

И что? Это переменная все равно укзатель и указывает туда же куда и Form1.


 
sniknik ©   (2005-11-05 12:30) [12]

> На сколькоя я понимаю, если не написать var, то при входе в процедуру появится ещё одна (наряду с Form1) ...
да, но(!!!) переменная Form1 это фактически указатель на структуру (класс) а не сам экземпляр класса, и поэтому что ты передаеш указатель на указатель, что просто указатель... ну без разницы.
в случае с var появляется такая же переменная, только указывает на указатель который указывает на структуру... ;) для того чтобы можно было значение самого указателя поменять, а так как ты в примере этого не делаеш то оно лишнее.

> А если автор вопроса будет вызывать эту процедуру, например, в цикле от 0 до 1000...
то прямая адресация в отличии от через двойной указатель должна быть немного быстрее. а на самом деле скорее всего оптимизатор это "разрулит", и скорость будет одинакова.

p.s. если ты думаеш (как мне кажется судя по [10]) что без var создается полностью экземпляр класса TForm, то это не так.


 
Набережных С. ©   (2005-11-05 12:34) [13]


> gdaujk ©   (05.11.05 11:34) [10]

Бред.
Параметр будет существовать в любом случае, только уничтожать нечего, потому как он - просто содержимое регистра. При var в данном случае будет работать чуть-чуть медленнее из-за дополнительного разыменования указателя на указатель.

var здесь совершенно не нужен.


 
gdaujk ©   (2005-11-05 13:26) [14]

Ну если Form1 - всего лишь указатель, то я полность согласен с [12]



Страницы: 1 вся ветка

Текущий архив: 2005.12.04;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.031 c
3-1129797724
КиТаЯц
2005-10-20 12:42
2005.12.04
IB Expert SQL Executive (как правильно написать скрипт?)


14-1131565515
бабба
2005-11-09 22:45
2005.12.04
Помогите с архитектурным решением


8-1120822518
Pavel_Delphin
2005-07-08 15:35
2005.12.04
Обработка видеосигнала.


2-1132075032
Сергей А.
2005-11-15 20:17
2005.12.04
Каким компонентам воспользоваться, чтобы закачать файл на сайт?


2-1132080872
Kirill_
2005-11-15 21:54
2005.12.04
Неравенства