Klasse - Formular per hand?
Hi,
wie kann ein Formular ohne die Visuelle Programmierung erstellen, also prakisch ohne vorher die Komponenten auf das Formular zu ziehen sondern diese erst im construktor des noch nicht visuell erstellten Formulars? Wie sieht ein einfaches Beispiel aus? Ist das dann schon NONVCL? Ziel ist es eine Klasse zu programmieren die auf einem Formular basiert und ein Memo auf sich trägt. MFG Thomas |
Wenn du die neue Klasse von TForm ableitest dürfte es eigentlich kein Problem sein im (überschriebenen) Konstruktor beliebige Steuerelemente zu erstellen. Beispiel hab ich aber leider auf die Schnelle keines.
NonVCL-Programmierung ist das allerdings dann noch nicht, da du weiterhin die Objekte (z. B. TForm, TMemo, ...) verwendest, die die WinApi-Funktionen kapseln. Bei der NonVCL-Programmierung werden nur die Grundbefehle von Pascal und direkte Aufrufe von WinAPI-Funktionen (wie CreateWindowEx zum Erzeugen von Fenstern) genutzt. Dies wird übrigens auch in den hervorragenden :D API-Tutorials von Luckie erklärt. |
Re: Klasse - Formular per hand?
Zitat:
Delphi-Quellcode:
Das TMyForm.CreateNew() ist notwendig da bei TMyForm.Create eine Resource TMYFORM gesucht wird, die nicht vorhanden ist und somit zu einer Exception führen würde.
type
TMyForm = class(TForm) private FMemo: TMemo; public constructor CreateNew(AOwner: TComponent; Dummy: Integer = 0); override; property Memo: TMemo read FMemo; end; constructor TMyForm.CreateNew(AOwner: TComponent; Dummy: Integer); override; begin inherited; FMemo := TMemo.Create(Self); FMemo.Parent := Self; end; ... procedure CreateMyForm(Lines: TStrings); var Form: TMyForm; begin Form := TMyForm.CreateNew(Application); try Form.Memo.Lines.Assign(Lines); Form.ShowModal; finally Form.Free; end; end; |
Hi,
irgendwie kapiere ich nicht wo die Methode "CreateNew" herkommt, wurde die von TForm vererbt? Nach dem ich das Formular mit der Deklaration in das Programm eingebunden haben und mit "CreateNew" erstelle kommt auch ein Formular, das ist allerdings leer :-( MFg Thomas |
CreateNew wird von TCustomForm vererbt.
Dass das Memo nicht erscheint dürfte daran liegen, dass es in Create erzeugt wird, aber CreateNew aufgerufen wird. Man müsste also CreateNew überschreiben. |
Stimmt. Anstatt Create muss man CreateNew nutzen.
Ich habe es oben ausgebessert. |
Hi,
was ist dennd er Unterschied zwischen Create und CreateNew? MFG Thomas |
Create läd die Formulardaten aus den .dfm Dateien. CreateNew hingegen überspringt diesen Schritt. Wenn du nun eine Klasse von TForm ableitest und dies nicht mit Hilfe des Formulardesigners (Delphi) machst, so hast du keine .dfm-Datei dafür. Also würde ein Aufruf von Create zu einem Fehler führen. Das kannst du auch ohne weiteres ausprobieren.
|
Damit sind all meine Fragen aus dem Weg geräumt.
Bis zum nächsten mal :-) DANKE an alle :-) :bounce1: MFG Thomas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz