Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Methode 'DoCreate' nicht in Basisklassis gefunden (https://www.delphipraxis.net/195769-methode-docreate-nicht-basisklassis-gefunden.html)

Delbor 23. Mär 2018 19:12

Delphi-Version: 10.2 Tokyo

Methode 'DoCreate' nicht in Basisklassis gefunden
 
Hi zusammen

Zur Zeit arbeite ich daran, meinem Programm das Scannen 'beizubringen'. Dazu verwende ich delphitwain-kluug-1-5--2014-06-25.
Sehr ungewöhnlich für mich ist die Initialisierung der Mainform des Beispielprogrammes:
Delphi-Quellcode:
procedure TForm1.DoCreate;
begin
  inherited;
  Twain := TDelphiTwain.Create;
  Twain.OnTwainAcquire := TwainTwainAcquire;
  if Twain.LoadLibrary then
  begin  
    Twain.SourceManagerLoaded := TRUE; //Load source manager
    ReloadSources;
  end else begin
    ShowMessage('Twain is not installed.');
  end;
end;
Dabei will ich die Funktonen dieser Mainform auf einen Frame auslagern. Dieser, bzw. sein Vorfahre, kennt aber keine 'DoCreate-Methode.
Grundsätzlich denke ich, das ist kein wirkliches Problem: Ich verpasse dem Frame einfach wie gewohnt einen Constructor - Frame.OnCreate gibt es nicht.

Andrerseits aber: Methoden, die wie hier mit einem 'Do' beginnen, sind normalerweise per Konvention Eventhandler zu eigens definiertem Ereignissen. So gesehen wäre obige Methode also ein Eventhandler...

Aber sehe ich das wirklich richtig? Oder andersherum: was gibt es für enen Grund, die obige Methode nicht einfach "TDelphiTwain.Create zu nennen?

Gruss
Delbor

DeddyH 23. Mär 2018 19:30

AW: Methode 'DoCreate' nicht in Basisklassis gefunden
 
Es ist eigentlich vollkommen unerheblich, wie die Methode heißt, sie sollte nur ratsamerweise aufgerufen werden, bevor Du auf die Variable/Property Twain zugreifst.

Delbor 23. Mär 2018 20:03

AW: Methode 'DoCreate' nicht in Basisklassis gefunden
 
Hi DeddyH

Grundsätzlich ist das so, aber ich meinte, da gäbe es doch noch einige Spezialitäten in Bezug auf TForm, bzw, ihrem Vorfahren. ich hab sowas bei Embarcadero mal gelesen (Constructor von TCustomForm?) aber wohl nicht ganz verstanden.
Andrerseits heissen alle meine Initialiesierungsmethoden Txx.Create, ob nun FormCreate oder Frameconstructor. Und das gab nur Probleme, wenn die Dinger vergessen gingen...

Gruss
Delbor

jaenicke 23. Mär 2018 20:16

AW: Methode 'DoCreate' nicht in Basisklassis gefunden
 
Der Konstruktor, den du überschreiben kannst, bekommt eben noch den Owner als Parameter. Das ist bei einem Frame der übliche Weg.

DeddyH 23. Mär 2018 20:43

AW: Methode 'DoCreate' nicht in Basisklassis gefunden
 
Man muss ja nicht einmal den Konstruktor überschreiben, Lazy Initialization wäre z.B. auch ein gangbarer Weg. Und der Konstruktor ist ja die „Initialisierungsmethode“ und heißt Create, da das ja bereits in der „Mutter aller Klassen“ TObject so festgelegt ist, da sollte man den Namen auch so belassen, gerade wenn es um virtuelle Konstruktoren geht, die überschrieben werden können.

freimatz 26. Mär 2018 15:26

AW: Methode 'DoCreate' nicht in Basisklassis gefunden
 
Ich schmeiß hier noch ein AfterConstruction rein, das es auch bei TFrame gibt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:17 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