Форум: "Начинающим";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
ВнизПрисвоение процедуры Найти похожие ветки
← →
Adios © (2006-07-24 00:06) [0]function link(name:string):string;
begin
x:=x+1;
New:=Tlabel.Create(form1.ScrollBox);
New.Top:= 0;
New.Left:=0;
new.Align:=alTop;
new.Alignment:=taCenter;
new.Font.Size:=12;
new.Font.Name:="Uk_Arbat";
new.WordWrap:=true;
new.AutoSize:=true;
new.Transparent:=true;
new.Cursor:=crHandPoint;
New.Name:="label"+inttostr(x);
new.Caption:=SearchRec.name;
new.OnClick:=ClickLabel;
New.Parent:=form1.ScrollBox;
end;
Procedure tform1.ClickLabel( Sender : TObject );
begin
showmessage(TControl(Sender).name);
end;
вопрос:
почему созданые лабелы не реагируют на событие ClickLabel?
а если написать form1.onclick:=ClickLabel;
то реакция при нажатии на форму есть?
← →
KilkennyCat © (2006-07-24 00:16) [1]Родитель строгий, наверное...
← →
Adios © (2006-07-24 00:20) [2]так ведь реакция на событие онклик у Тлабела есть, может я сам чтото накосячил?
← →
Джо © (2006-07-24 00:21) [3]Ошибка, возможно, где-то в другом месте кода или в неверном использовании приведенного. Кстати, именно приведенный код даже не скомпилируется. И он довольно небрежен. Из-за этого тоже может возникнуть ошибочная ситуация. Например, использование ссылки на глоб. переменную form1. Но, пока нет РЕАЛЬНОГО кода судить не о чем, ИМХО.
← →
Footballer © (2006-07-24 00:31) [4]Да, действительно, код не компилится, приведи код по-подробнее...
Примечание вместо x:=x+1 правильнее писать inc(x) (Увеличивает переменную на 1)
← →
Zeqfreed © (2006-07-24 00:42) [5]> Примечание вместо x:=x+1 правильнее писать inc(x)
Что значит правильнее?
← →
Adios © (2006-07-24 00:47) [6]
unit main;
interface
uses
Windows, ShellApi, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls, jpeg, TeeProcs, TeEngine,
Chart, DBCtrls, AxCtrls, OleCtrls, VCF1, FileCtrl, Grids, DBGrids,
dblookup, Tabs, Menus, Buttons;
type
TForm1 = class(TForm)
Panel1: TPanel;
ScrollBox: TScrollBox;
Panel2: TPanel;
Panel3: TPanel;
Procedure ClickLabel( Sender : TObject );
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
SearchRec:TSearchRec;
dir:string;
z:hwnd;
path:string;
foo: TPoint;
New : Tlabel;
x:integer;
ClickLabel:TNotifyEvent;
implementation
{$R *.dfm}
function gamelink(name:string):string;
begin
x:=x+1;
New:=Tlabel.Create(form1.ScrollBox);
New.Top:= 0;
New.Left:=0;
new.Align:=alTop;
new.Alignment:=taCenter;
new.Font.Size:=12;
new.Font.Name:="Uk_Arbat";
new.WordWrap:=true;
new.AutoSize:=true;
new.Transparent:=true;
new.Cursor:=crHandPoint;
New.Name:="label"+inttostr(x);
new.Caption:=SearchRec.name;
new.OnClick:=ClickLabel;
New.Parent:=form1.ScrollBox;
end;
Procedure tform1.ClickLabel( Sender : TObject );
begin
showmessage(TControl(Sender).name);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
form1.OnClick:=ClickLabel;
AddFontResource(PChar("Uk_Arbat.ttf"));
SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);
Dir:="install";
x:=0;
if Dir<>"" then if Dir[length(Dir)]<>"\" then Dir:=Dir+"\";
if FindFirst(Dir+"*.*", faAnyFile, SearchRec)=0 then
repeat
if (SearchRec.name=".") or (SearchRec.name="..") then continue;
if ((SearchRec.Attr and faDirectory)<>0) or (extractfileext(SearchRec.name)=".exe") then
gamelink("gfh")
until FindNext(SearchRec)<>0;
FindClose(SearchRec);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
RemoveFontResource(PChar("Uk_Arbat.ttf"));
SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);
end;
end.
← →
GrayFace © (2006-07-24 00:49) [7]Удобнее при длинном имени переменной и к указателям применим.
← →
Footballer © (2006-07-24 00:49) [8]Ну не просто же так создана процедура inc :)
← →
Footballer © (2006-07-24 00:51) [9]
> Footballer © (24.07.06 00:49) [8]
Это я к [5]
← →
Adios © (2006-07-24 01:01) [10]_
← →
Adios © (2006-07-24 01:10) [11]да, если создать лабел в редакторе и написать
label1.OnClick:=ClickLabel;
то реакция происходит, а на созданные програмно метки нет никакой реакции, хотя сами метки корректно создаются с заданными параметрами
← →
Footballer © (2006-07-24 01:20) [12]Пробовал так:
new.OnClick:=Form1.FormCreate;
Реакция была...
Вывод: созданные програмно объекты не реагирают на созданные програмно процедуры, не знаю почему :( (Может ошибаюсь, но вывод напрашивается такой)
← →
Adios © (2006-07-24 01:27) [13]Ответ на мой вопрос выглядит так:
new.OnClick:=form1.ClickLabel;
← →
Германн © (2006-07-24 01:31) [14]
> var
...
ClickLabel:TNotifyEvent;
А это за каким тут появилось?
И ессно функция gamelink, не привязанная к форме, на строкеnew.OnClick:=ClickLabel;
берёт именно содержимое этой переменной, а оно хрен знает какое, но уж точно не имеет никакого отношения кProcedure tform1.ClickLabel( Sender : TObject );
← →
Джо © (2006-07-24 01:31) [15]> [13] Adios © (24.07.06 01:27)
> Ответ на мой вопрос выглядит так:
> new.OnClick:=form1.ClickLabel;
Совет обратить внимание на использование глоб. переменной form1 был дан еще в посте [3]. И Ваше, так называемое "решение" является, образно говоря, добровольным выкапыванием себе ямы.
← →
Footballer © (2006-07-24 01:36) [16]
> Ответ на мой вопрос выглядит так:
Я чё-то не догоняю, это вы ответили на свой же вопрос???
← →
Германн © (2006-07-24 01:41) [17]Насчёт "выкапывания себе ям" и я ещё добавлю. А на кой надо было gamelink делать функцией юнита? Чем не устроило сделать её методом формы? Ведь в ней создаются новые компоненты для этой формы!
← →
Adios © (2006-07-24 01:48) [18]
> Footballer
да это ответ на мой вопрос.
> Германн
я в душе даже не представляю что такое метод формы
> Джо
можно спросить скока вы делфя изучаете?
← →
Германн © (2006-07-24 01:59) [19]
> я в душе даже не представляю что такое метод формы
Ну тогда прочитай сначала ну хоть какую нибудь книжку по Делфи. Пусть даже это будет Архангельский! Пусть даже не всю целиком, а хотя бы треть или четверть.
← →
GrayFace © (2006-07-28 00:58) [20]Adios © (24.07.06 1:48) [18]
я в душе даже не представляю что такое метод формы
Если представляешь, что такое указатель, могу объяснить.
← →
ЮЮ © (2006-07-28 02:52) [21]
> Adios © (24.07.06 1:48) [18]
> я в душе даже не представляю что такое метод формы
Но ведь используешь!Procedure tform1.ClickLabel( Sender : TObject );
- метод ClickLabel фомы класса TForm1.
Аналогично поступай и с link:TForm1 = class(TForm)
...
private
{ Private declarations }
function gamelink(name:string):string;
public
{ Public declarations }
end;
...
function tform1.gamelink(name:string):string;
var
New : Tlabel;
begin
x:=x+1;
New:=Tlabel.Create(ScrollBox);
New.Top:= 0;
New.Left:=0;
new.Align:=alTop;
new.Alignment:=taCenter;
new.Font.Size:=12;
new.Font.Name:="Uk_Arbat";
new.WordWrap:=true;
new.AutoSize:=true;
new.Transparent:=true;
new.Cursor:=crHandPoint;
New.Name:="label"+inttostr(x);
new.Caption:=SearchRec.name;
new.OnClick:=ClickLabel;
New.Parent:=ScrollBox;
end;
и от глобальных переменных
var
SearchRec:TSearchRec;
dir:string;
z:hwnd;
path:string;
foo: TPoint;
New : Tlabel;
x:integer;
ClickLabel:TNotifyEvent;
избавься раз и навсегда. Или локальные для методов или поля формы - туда же где function gamelink
← →
GrayFace © (2006-07-28 07:17) [22]ЮЮ © (28.07.06 2:52) [21]
и от глобальных переменных избавься раз и навсегда. Или локальные для методов или поля формы - туда же где function gamelink
У полей форм есть один недостаток - им нельзя задать начальное значение. По этому не надо избавляться - так удобнее.
← →
ЮЮ © (2006-07-28 07:28) [23]
> У полей форм есть один недостаток - им нельзя задать начальное
> значение.
Для этих целей есть конструктор. Для внешнего доступа делаются соответствующие свойства. А вот при использовании хотя бы двух экземпляров формы, использующих одни и теже глобальные переменные, жди "удобств" в полной мере
← →
GrayFace © (2006-07-29 01:52) [24]ЮЮ © (28.07.06 7:28) [23]
Для этих целей есть конструктор.
Вот я и говорю - неудобно. По-моему, нет в этом смысла, если не предвидится
хотя бы двух экземпляров формы.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.044 c