Вопрос: как можно создать объект в выбранном месте формы? Я пробовал так:
var panel:TSPanel;
begin
panel:=tsPanel.create(self);
panel.Top:=100;
panel.Left:=30;
panel.Height:=50;
panel.width:=50;
panel.show;
end;
И ничего не появляется..
var panel:TSPanel;
begin
panel:=tsPanel.create(self);
panel.Top:=100;
panel.Left:=30;
panel.Height:=50;
panel.width:=50;
panel.show;
end;
Panel.Parent := self;
procedure TForm1.sSpeedButton3Click(Sender: TObject);
begin
if panel1=nil then begin
panel1:=tPanel.create(self);
panel1.Top:=209;
panel1.Left:=135;
panel1.Height:=200;
panel1.width:=400;
panel1.color:=clwhite;
panel1.parent:=self;
panel1.show;
end
else panel1.Free;
end;
if panel1=nil then begin
// ...
end
else FreeAndNil(panel1); // если ты проверяешь на nil в начале - то вот так надо
procedure TForm1.SpeedButton1Click(Sender: TObject);Если SpeedButton то можно проверить ее положение
begin
if SpeedButton1.Down then begin
panel1:=tPanel.create(self);
panel1.Top:=209;
panel1.Left:=135;
panel1.parent:=self;
end
else panel1.Free;
end;
ShowMessage((Sender as TComponent).Name);, и получить имя контрола, вызвавшего событие...
(Sender as TButton).Caption := 'test';Но если теперь повесить это же событие на TEdit.OnClick (этого никто не запрещает делать, сигнатура у метода подходящая для OnClick любого компонента), то будет ошибка, так как TEdit нельзя провести к TButton, это разные классы, если повесить на TMemo.OnClick - то же самое, будет ошибка... И даже TLabel, несмотря на то, что там есть Caption, ты обработать не сможешь. У тебя вся функциональность этого события будет ограничена обработкой кнопок...
var buts:array[1..sm] of tsSpeedButton;
panel1:tsPanel;
...
procedure TForm1.sSpeedButton3Click(Sender: TObject);
var i,i2:byte;
x:TPoint;
begin
if (panel1=nil) {and (clientsocket1.active)} then
begin
x.x:=2;
x.Y:=2;
sc:=0;
panel1:=tsPanel.create(self);
panel1.Top:=209;
panel1.Left:=47;
panel1.Height:=200;
panel1.width:=300;
panel1.borderstyle:=bsSingle;
panel1.parent:=self;
panel1.show;
for i:=1 to 6 do
begin
for i2:=1 to 9 do
begin
buts[sc]:=TsSpeedbutton.Create(self);
buts[sc].parent:=panel1; //<===
buts[sc].Left:=x.x;
buts[sc].Top:=x.y;
buts[sc].show;
buts[sc].Width:=30;
buts[sc].Height:=30;
buts[sc].Images:=imagelist2;
buts[sc].ImageIndex:=sc;
buts[sc].onclick:=form1.butsf;
buts[sc].Hint:=smiles[sc]; //добавил это
buts[sc].ShowHint:=true; //и это
inc(sc);
inc(x.x,32);
if sc=48 then break;
end;
inc(x.y,32);
x.x:=2;
end;
end
else freeandnil(panel1);
end;