Autor Beitrag
j-a-n@gmx.de
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 84


Delphi 7
BeitragVerfasst: Do 09.12.04 12:49 
Ich komme eigendlich aus der Java-Ecke; meine Grössten Probleme habe ich mit der Objektorientiertung und der GUI.
Heute wieder eine GUI Frage.

In Java bin ich es gewohnt (gewesen), eigene Panels zu erstellen; also eine eigene Klasse von JPanel (TFrame) abzuleiten, im Konstruktor meine Steuerelemente zu plazieren und dieses Panel dann an mehreren Stellen verwenden. Das Gleiche möchte ich jetzt auch mit Delphi.

Ich habe geschafft:
Ich habe eine Klasse von TFrame abgeleitet und per Designer meine Komponenten plaziert. Auch habe ich eigene Methoden erstellt, mit dem ich die Inhalte des Frames schreibe und auslese.

Ich brauche noch:
Nun möchte ich mit dem Frame 2 Dinge tun. Erstmal möchte ein Form anzeigen, dass den Frame sowie einen OK und Abbrechen Button enthält. Frage: Wie kriege ich meinen Frame auf das Form? Ich möchte auch nicht unbedingt eine komplette Klasse dafür, sondern das ganze vielleicht dynamisch erstellen (?).

In einem anderen Frame habe ich schon viele andere Komponenten wie Tables, Toolbars, RichEdit, usw. Ich möchte nun, dass bei einer Aktion (Button klick o.ä.) das RichText verschwindet (schaffe ich über visible:=true;) und stattdessen mein Frame angezeigt wird.

BTW: Gibt es ein, in dem genau diese Themen angesprochen werden? Der Buchhändler meines Vertrauens hatte genau 2 Delphi-Bücher da und bei Amazon kann man ja so gut ins Inhaltsverzeichnis gucken.
st-matze
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 138

Win 3.11, Win 95, Win 98, Win XP
D7 Ent, D6 Pers, (D5 Pers)
BeitragVerfasst: Do 09.12.04 13:01 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
  MyFrame: TMyFrameClass;
  Form1: TForm;
{...}
imlpementation
procedure TForm1.Button1Click(Sender: TObject);
begin
  MyFrame := TMayFrameClass.Create({...});
  MyFrame.Parent:=Form1; //oder ... := self;  //funzt beides
end;


dann nicht vergessen die alignment oder größen parameter des Frames zu setzten, oder was du noch machen willst.
j-a-n@gmx.de Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 84


Delphi 7
BeitragVerfasst: Do 09.12.04 13:30 
Super, danke dir; klappt.

Zur Plazierung müsste ich doch jetzt Top, Left, Width und Height verwenden, also so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
    form.Height:=500;
    form.Width:=500;

    frame.Top := 0;
    frame.left := 0;
    frame.width := form.width -20;
    frame.height := form.Height -20;


Nur irgendwie zeigt der trotzdem scrollbars an; das heisst, das Frame ist zu gross. Aber ich kann abziehen was ich will, das wird einfach nicht kleiner.

2. Wenn ich die Form vergrössere, wird das Frame nicht mit grösser. Im Designer hab ich das mit Anchors gelöst. Nur wie mache ich das jetzt im Code?


BTW: Kann es sein, dass die Hilfe nicht unbedingt ergiebig ist?
st-matze
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 138

Win 3.11, Win 95, Win 98, Win XP
D7 Ent, D6 Pers, (D5 Pers)
BeitragVerfasst: Do 09.12.04 17:26 
das mit den Scrollbars muss nicht an dem Frame liegen. Hast du eventuell noch andere elemente auf deiner Form die hinter dem frame liegen, die die scrollbars verursachen?

mit dan ankern kannst du ja auch so machen
ausblenden Delphi-Quelltext
1:
2:
3:
    frame.Anchors:=[akLeft,akTop,akRight,akBottom];
//oder doch gleich
    frame.align:=alClient;
Johannes Klos
Hält's aus hier
Beiträge: 3


D7 Arch; D2005 Arch
BeitragVerfasst: Fr 10.12.04 22:24 
Den Frame kannst du zur Laufzeit vergrößern indem du folgenden Code

ausblenden Quelltext
1:
2:
3:
4:
    frame.Top := 0;  
    frame.left := 0;  
    frame.width := form.width -20;  
    frame.height := form.Height -20;


in der Funktion OnResize des Formulares aufrufst. Diese Funktion wird jedesmal aufgerufen wenn sich die Form-größe ändern.

Gruß
Johannes Klos