![]() |
Delphi-Version: 2009
Wie speche ich OnResize bzw. OnClick einer dynamisch erstellten Form an ?
Hallo,
mit
Delphi-Quellcode:
erzeuge ich Form2 und Button.
procedure erzeugeForm2;
begin Form2:=TForm.create(Form1); Form2.Top:=screen.Width div 2; Form2.Left:=Screen.Height div 2; Form2.Width:=500; Form2.Height:=400; Button:=TButton.create(Form2); Button.parent:=Form2; Button.Top:=Form2.Height-30; Button.Left:=10; Button.Anchors:=[akLeft,akBottom]; Button.Width:=90; Button.caption:='&Zwischenablage'; . . . end; Wie kann ich jetzt das Form2-ReSize-Ereignis bzw. das Button-OnClick-Ereignis des Buttons ansprechen? Vielen Dank! Gruß, Linkat |
AW: Wie speche ich OnResize bzw. OnClick einer dynamisch erstellten Form an ?
In dem Du die Routine zuweist.
Delphi-Quellcode:
Gruss alfold
Button .onClick:= 'deine clickroutine oder schon eine vorhandene';
From2.onResize:= 'deine routine oder schon eine vorhandene'; |
AW: Wie speche ich OnResize bzw. OnClick einer dynamisch erstellten Form an ?
In einer einfachen Prozedur/Funktion: gar nicht!
Du brauchst schon eine Klasse bei der du mittels
Delphi-Quellcode:
type MyClass
procedure MeineKlassenMethodeMitPassenderSignatur(Sender: TObject); ... Button.OnClick = MeineKlassenMethodeMitPassenderSignatur; ... |
AW: Wie speche ich OnResize bzw. OnClick einer dynamisch erstellten Form an ?
Hallo,
Vielen Dank alfold und Bernhard. Habe jetzt mal ein Beispielprogramm, in dem ich eine dynam. Form mit Button und BitBtn erzeuge, erstellt (ich habe versucht eure Hinweise einzuarbeiten, aber leider habe ich kaum Ahnung mit der OOP). Mit dem BtErzeugeform erzeuge ich die Form mit den beiden Buttons. Durch Klicken auf den "Start Farbe"-Button, soll sich die Farbe von Form2 ändern, und der Integer-Wert der Farbe wird in der Leiste angezeigt. Im Quelltext habe ich die 3 Tests mit den entsprechenden Fehlermeldungen angegeben.
Delphi-Quellcode:
Wie weise ich dem OnClick-Ereignis die procedure SetzeColor zu?
unit DynFormU;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons; type TForm2 = class(TForm) BitBtn1: TBitBtn; btErzeugeForm: TButton; procedure btErzeugeFormClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form2: TForm; implementation {$R *.dfm} type TMyClass=class(TForm) procedure SetzeColor(Sender:TObject); end; var Form :TForm; Button :TButton; BitBtn :TBitBtn; procedure SetzeColor; begin Form2.Color:=Form2.Color+1000; Form.Caption:=IntToStr(Form2.Color); end; procedure TForm2.btErzeugeFormClick(Sender: TObject); begin Form:=TForm.Create(Form2); Form.Top:=100; Form.Left:=100; Form.Width:=400; Form.Height:=300; Form.Visible:=true; Form.Caption:='Dyn. Form'; Button:=TButton.create(Form); Button.parent:=Form; Button.Top:=Form.Height-70; Button.Left:=10; Button.Anchors:=[akLeft,akBottom]; Button.Width:=90; Button.Height:=25; Button.caption:='S&tart Farbe'; Button.Visible:=true; {Test1} // Button.OnClick:=SetzeColor(Sender:TObject); {Fehlermeldung: zu viele Parameter} {Test2} // Button.OnClick:=SetzeColor; {Fehlermeldung: Inkompatible Typen Methodenzeiger und reguläre Prozedur} {Test3} // Button.OnClick:=SetzeColor(Sender); {Fehlermeldung: zu viele Parameter} BitBtn:=TBitBtn.Create(Form); BitBtn.parent:=Form; BitBtn.Top:=Form.Height-70; BitBtn.Left:=Form.Width-100; BitBtn.Anchors:=[akRight,akBottom]; BitBtn.Kind:=bkClose; BitBtn.Caption:='&Schließen'; BitBtn.Visible:=true; end; end. Was mache ich falsch? Wer hat einen Tipp? Gruß, Linkat |
AW: Wie speche ich OnResize bzw. OnClick einer dynamisch erstellten Form an ?
Delphi-Quellcode:
type
TForm2 = class(TForm) BitBtn1: TBitBtn; btErzeugeForm: TButton; procedure btErzeugeFormClick(Sender: TObject); procedure SetzeColor(Sender:TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; // snipp... procedure TForm2.SetzeColor(Sender:TObject); begin //..... end; procedure TForm2.btErzeugeFormClick(Sender: TObject); begin //....SNIPP Button.OnClick:=SetzeColor; //.....SNIPP end; end. |
AW: Wie speche ich OnResize bzw. OnClick einer dynamisch erstellten Form an ?
Hallo Thomas,
vielen Dank für die schnelle und richtige Antwort. Es funktioniert tatsächlich. Leider war mein Beispiel nicht ganz richtig. Auch ist die Bezeichnung meiner Forms unglücklich (#1 dyn. Form ist Form2, #4 dyn. Form ist Form). Ich muss das OnClick-Ereignis ja auf meine dynamische Form Form und nicht auf die statische Form Form2 anwenden. Wo muss ich die procdure SetzeColor deklarieren, damit sie auf die dyn. Form wirkt? Gruß, Linkat |
AW: Wie speche ich OnResize bzw. OnClick einer dynamisch erstellten Form an ?
Wie wäre es denn mit
Delphi-Quellcode:
Form.OnClick := SetzeColor;
|
AW: Wie speche ich OnResize bzw. OnClick einer dynamisch erstellten Form an ?
Ich möchte ja, dass das Ereignis bei Klicken auf den dyn. erzeugten Button wirkt. Irgendwie muß ja im Deklarationsteil die procedure für das Object Form bekanntgegeben werden.
Wahrscheinlich hat Bernhard (siehe #3) mit seinem Vorschlag: Zitat:
Gruß, Linkat |
AW: Wie speche ich OnResize bzw. OnClick einer dynamisch erstellten Form an ?
Du kannst alles auf einer Routine in Deinem Mainform umbiegen und dort den Sender, bzw den Owner des Senders ermitteln, ungeprüft und ohne Sicherheitsabfragen nur ein Beispiel....
Delphi-Quellcode:
Procedure Mainform.SetColor(Sender:TObject);
begin TForm(TComponent(Sender).Parent).Color := TComponent(Sender).Tag; end; |
[gelöst] Wie spreche ich OnResize bzw. OnClick einer dynamisch erstellten Form an ?
So nun habe ich doch die Lösung gefunden:
Hier ist der Link: ![]() entscheidend ist:
Delphi-Quellcode:
@Button.OnClick:=@SetzeColor;
Hier noch einmal mein Testprogramm:
Delphi-Quellcode:
Vielen Dank für eure Bemühungen.
var
Form :TForm; Button :TButton; BitBtn :TBitBtn; procedure SetzeColor; begin Form.color:=Form.color+1; end; procedure ErmittleDynWidthHeight; begin Form.Caption:=IntToStr(Form.Width)+' '+IntToStr(Form.Height) end; procedure TForm2.btErzeugeFormClick(Sender: TObject); begin Form:=TForm.Create(Form2); Form.Top:=100; Form.Left:=100; Form.Width:=400; Form.Height:=300; Form.Visible:=true; Form.Caption:='Dyn. Form'; @Form.OnResize:=@ErmittleDynWidthHeight; //<------------- Button:=TButton.create(Form2); Button.parent:=Form; Button.Top:=Form.Height-70; Button.Left:=10; Button.Anchors:=[akLeft,akBottom]; Button.Width:=90; Button.Height:=25; Button.caption:='S&tart Farbe'; Button.Visible:=true; @Button.OnClick:=@SetzeColor; //<------------- BitBtn:=TBitBtn.Create(Form); BitBtn.parent:=Form; BitBtn.Top:=Form.Height-70; BitBtn.Left:=Form.Width-100; BitBtn.Anchors:=[akRight,akBottom]; BitBtn.Kind:=bkClose; BitBtn.Caption:='&Schließen'; BitBtn.Visible:=true; end; Gruß, Linkat |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz