Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Klasse - Formular per hand? (https://www.delphipraxis.net/5962-klasse-formular-per-hand.html)

thomasdrewermann 24. Jun 2003 18:20


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

Niko 24. Jun 2003 18:37

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.

jbg 24. Jun 2003 18:40

Re: Klasse - Formular per hand?
 
Zitat:

Zitat von thomasdrewermann
Ist das dann schon NONVCL?

Nur wenn du auf die VCL verzichtest, dewegen auch "No VCL".


Delphi-Quellcode:
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;
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.

thomasdrewermann 24. Jun 2003 18:56

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

Niko 24. Jun 2003 19:20

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.

jbg 24. Jun 2003 19:41

Stimmt. Anstatt Create muss man CreateNew nutzen.

Ich habe es oben ausgebessert.

thomasdrewermann 24. Jun 2003 19:47

Hi,
was ist dennd er Unterschied zwischen Create und CreateNew?

MFG
Thomas

jbg 24. Jun 2003 21:17

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.

thomasdrewermann 24. Jun 2003 21:22

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