Autor Beitrag
MD
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 29.02.04 20:14 
Hallo
Ich habe folgendes Probleme: Ich habe mit
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
    with Tbutton.create(self) do
    begin
      Parent := Self;
      height:=25;
      width:=30;
      name:=knopf;
    end;

einen Button erstellt. Ich weiß aber nicht, wie ich an das Ereignis onclick rankommen.

Der Button soll erstmal nur zum testen der Funktion create sein. Für mein Chatprogramm plane ich einen privaten Chat. Wenn man auf privatchat klickt, soll sich ein neues Formular mit nen Memo,Edit und Button drauf öffnen. Man kann natürlich mehrere private Chats haben, weshalb ich die Form dynamisch erstellen will. Ich hab auch schon folgendes geschafft:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
inc(privatchats);
with TForm.Create(self) do
  begin
    Visible:=true;
    height:=350;
    width:=300;
    name:='privatchatform' + inttostr(privatchats);
 end;

Doch auch hier weiß ich weder, wie ich an die Ereigniss zB onClose rankomme, oder wie ich auf diesem erstellten Formular zb einen Button platziere (bei dem ich dann auch wieder zb onclick definieren muss)
--

Michael Düpjohann

Moderiert von user profile iconMotzi: Code- durch Delphi-Tags ersetzt.
Moderiert von user profile iconTino: Links entfernt.
StefanH
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1144

Win XP
D5 Standard, D7 Pers, D2005 Pers
BeitragVerfasst: So 29.02.04 20:42 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
with Tbutton.create(self) do 
    begin 
      Parent := Self; 
      height:=25; 
      width:=30; 
      name:=knopf;
      onClick:= BtnClick;
    end;


wobei BtnClick so aussieht:
ausblenden Delphi-Quelltext
1:
procedure BtnClick(Sender: TObject);					


bei der Form entsprechend..

:roll: k.A obs geht, sollte aber.. :)

_________________
"Als es noch keine Computer gab, war das Programmieren noch relativ einfach."(Edsger W. Dijkstra)
"Ich bin nicht von Sinnen, sondern ich rede wahre und vernünftige Worte." (Paulus)
MD Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 29.02.04 23:16 
Nein, funktioniert leider nicht, bekomme folgende Fehlermeldung:
inkompatible Typen: Methodenzeiger und reguläre Prozedur
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 29.02.04 23:38 
Du musst die Prozedur als Member der Form deklarieren. Also z.B. so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
type
  TForm1 = class(TForm)
    procedure btnClick(Sender : TObject);
  private
  public
  end;

{...}
implementation
{...}
procedure TForm1.btnClick(Sender : TObject);
begin
{...}
end;

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mo 01.03.04 21:20 
Oder so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure fOnClick(self: TObject; Sender: TObject);
begin
 // Dein OnClick
end;

// Beim erstellen:

var
 mtd: TMethod;

...
 mtd.Code := @fOnClick;
 mtd.Data := Self;
 OnClick := TNotifyEvent(mtd);
...


Sollte dein Delphi TMethod nicht kennen, es ist ein Record mit zwei Pointer-Feldern (Code und Data, in dieser Reihenfolge)
MD Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 02.03.04 23:21 
Erstmal vielen Dank für den Tipp, hat wunderbar funktiniert.
Wie ich aber oben schon beschrieben hatte, will ich nicht nur ein Ereignis einer dynamisch erstellten Sache aufrufen, sondern auf einem dynamisch erstellten Formular einen Button erzeugen. Ich hab folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
with TForm.Create(self) do
  begin
    Visible:=true;
    height:=350;
    width:=300;
    name:='privatchatform' + inttostr(privatchats);
    mtdbtn.Code := @dOnClick;
    mtdbtn.Data := Self;
    OnClick := TNotifyEvent(mtdbtn);
  end;

und
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure dOnClick(self: TObject; Sender: TObject);
begin
with Tbutton.create(clientform) do
    begin
      Parent := clientform;
      height:=25;
      width:=80;
      name:='button' + inttostr(privatchats);
    end;
end;

Ich habe damit versucht bei einem klick einen Button auf dem Formular zu erzeugen, aber ich weiß nicht wie ich das createte Formular später noch ansprechen kann.

Ich denke dass ich es dann ja nur bei Parent eintragen muss, oder?

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.
cwille
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39

xp,win2003-server,linux
D7 Enterprise
BeitragVerfasst: Mi 11.05.05 10:44 
Hallo Michael, ist zwar schon ein bischen Zeit vergangen, trotzdem hierzu noch ein posting wie ich so ein ähnliches Porblem programmiert habe.

MAINFORM MDI-FORM
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
//Neue Form mit Edit drauf dynamisch erstellen und anzeigen
procedure TMainForm.Daten1Click(Sender: TObject);
Begin
With DataModule2 DO CreateMask(Self);
TBtn_Exit.Enabled:=True;
end;

MDI CHILD FORM dynamisch ertsellt

type
  TDataModule2 = class(TDataModule)
 private
      { Private-Deklarationen }
 public
   procedure CreateMask(Sender: TObject);
     { Public-Deklarationen }
 end;

var
  DataModule2: TDataModule2;
  MyEdit : TEdit;
  MyTv   : TTreeView;
  MyLv   : TListView;

implementation
{$R *.dfm}
USES uXMLEditor1,MAIN,DataModul;


Procedure TDataModule2.CreateMask(Sender : TObject);
VAR i    : Integer;

begin
 with TForm.Create(Application) do
  begin
   name := 'NeueForm';
   visible := true;
   FormStyle:=fsMDIChild;
   Anchors:=[akLeft,akTop];
   Align:=alTop;
   AutoSize:=False;
  end;

 Masken_bilden:=True;

 with TFrmXMLEditor.Create(self) DO Begin
  // bestimmen aktuelles Anwendungsverzeichnis
  mDatei.Lines.LoadFromFile(ExtractFilePath(ParamStr(0))+'lk-definitionen.xml');
  ParseXML(Self);
  Destroy;  // erzeugte Maske wieder schließen (beenden)
 End; // With
 
 // EditFelder erstellen
 for i:=0 to High(EdtFelder) DO
 With TEdit.Create(Application.FindComponent('NeueForm')) do Begin
  MyEdit:=TEdit.Create(Self);
  MyEdit.Parent:= TForm(Application.FindComponent('NeueForm')); // Auf dieser Form sollen die Edit plaziert werden
  MyEdit.Name:=EdtFelder[i].EdtFld;
  MyEdit.Top:=EdtFelder[i].EdtTop;
  MyEdit.Left:=EdtFelder[i].EdtLeft;
  MyEdit.Width:=EdtFelder[i].EdtWith;
  MyEdit.Height:=25;
  MyEdit.BorderStyle:=bsSingle;
  MyEdit.Ctl3D:=true;
  MyEdit.Enabled:=true;
  MyEdit.AutoSelect:=True;
  MyEdit.AutoSize:=True;
  MyEdit.Show;
 End;


Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt.
Harry M.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754

Win 2000, XP
D2005
BeitragVerfasst: Mi 11.05.05 11:21 
So wird's auf jeden Fall was :wink: Sorgar mit Positionsangabe:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure NewButtonClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation


{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var NewButton: TButton;

begin
  NewButton := TButton.create(application);
  with NewButton do begin
    parent  := Form1;
    caption := 'Hallo';
    OnClick := NewButtonClick;
    left    := (parent.ClientWidth - width) div 2;
    top     := (parent.ClientHeight - height) div 2;
    show;
  end;
end;

procedure TForm1.NewButtonClick(Sender: TObject);
begin
  showmessage('Hallo');
end;


end.

_________________
Gruß Harry
Et spes me per dies sine te ducat et amor me ferat, si dolor spem tollit.