Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 04, 2025 10:11

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 21, 2003 09:50 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Tach ich hab mal einige fragen zu Delphi,
wie funzt das richtig mit dem vererben:

ich will folgendes haben,

ich habe in der Klasse TCGUI eine variable definiert die entweder TCGUIFormMaskTypeStatic oder
TCGUIFormMaskTypeResize als klasse wählen soll.

Wie kann ich delphi nun sagen, er soll mir da keinen Fehler im Compiler bringen :DDD
Wenn mir einer das erklären kann, wie das funzt würde mich das sehr viel weiter bringen.

Am ende wär mir folgendes recht:

FMask := TCGUIFormMaskTypeStatic.Create
oder
FMask := TCGUIFormMaskTypeResize.Create

Ist das überhaupt möglich ??

Ich benutze Delphi 5 Standard, kann aber jederzeit auch auf delphi 7 wechseln.

folgender code:

Code:
  1.  
  2.   TCGUIFormMaskTypeStatic = class(Tobject)
  3.     FormBitmap : TBitmap;
  4.   end;
  5.  
  6.   TCGUIFormMaskTypeResize = class(Tobject)
  7.     BorderBitmaps : array [0..9] of TBitmap;
  8.   end;
  9.  
  10.   TCGUIForm = class(TObject)
  11.   private
  12.     FMask    : TCGUIFormMaskTypeStatic or TCGUIFormMaskTypeResize;
  13.   end;
  14.  
  15.  


und noch ne frage, was sind z.b. Interfaces ???

code von DSPack.pas (DirectShow Unit)
Code:
  1.  
  2.  
  3.   {@exclude}
  4.   IFilter = interface
  5.   ['{887F94DA-29E9-44C6-B48E-1FBF0FB59878}']
  6.     { Return the IBaseFilter Interface (All DirectShow filters expose this interface). }
  7.     function GetFilter: IBaseFilter;
  8.     { Return the filter name (generally the component name). }
  9.     function GetName: string;
  10.     { Called by the @link(TFilterGraph) component, this method receive notifications
  11.       on what the TFilterGraph is doing. if Operation = foGraphEvent then Param is the
  12.       event code received by the FilterGraph.}
  13.     procedure NotifyFilter(operation: TFilterOperation; Param: integer = 0);
  14.   end;
  15.  
  16.   { Manage a Video Renderer or a Video Mixer Renderer (VMR) Filter to display
  17.     a video in your application. }
  18.   TVideoWindow = class(TCustomControl, IFilter, IEvent)
  19.   private
  20.     FMode          : TVideoMode;
  21.     FVMROptions    : TVMROptions;
  22.     FBaseFilter    : IBaseFilter;
  23.     FVideoWindow   : IVideoWindow; // VMR Windowed & Normal
  24.   ...
  25.   end;
  26.  
  27.  


matane,
Finalspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 21, 2003 11:02 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
@Vererbung: Du musst einen gemeinsammen Vater haben:
Code:
  1.  
  2.   TMainObject = class(TObject)
  3.   public
  4.     // Alle Funktionen/Properies/Variablen, welche die nachfahren gemeinsamm haben sollen
  5.     // müssen hier eingetragen werden.
  6.     MyBitmapNr: Integer;
  7.     procedure Draw;
  8.   end;
  9.  
  10.   TObj1 = class(TMainObject)
  11.   public
  12.      DummyObj1: Integer;
  13.   end;
  14.  
  15.   TObj2 = class(TMainObject)
  16.   public
  17.     DummyObj2: Integer;
  18.   end;
  19.  
  20. var
  21.   FObj : TMainObject;
  22. begin
  23.   FObj := TObj1.Create;
  24.     oder
  25.   FObj := TObj2.Create;
  26.  
  27.   if FObj is TObj1 then
  28.     (FObj as TObj1).DummyObj1 := 12
  29.   else
  30.     (FObj as TObj2).DummyObj2 := 12;
  31. end;
  32.  

Du musst in diesem Beispiel FObj als Grund-Objekt definieren. Dannach kannst Du FObj einen Beliebigen Nachfahren von TMainObject zuweisen, allerdings nur auf eben die Prozeduren usw. von TMainObject zugreifen. Möchtest Du auf einen WErt eines nachfahren zugreifen, musst Du diesen durch (FObj as Objekt-Typ) in das entsprechende Objekt "konvertieren" und kannst somit auf dessen Daten zugreifen. Mit Hilfe von IS kannst du überprüfen, ob (in diesem Fall) FObj in Wirklichkeit TObj1 oder TObj2 ist. Näheres dazu in der Delphi-Hilfe.

@Interface: Interfaces sind COM-Objekte von Windows. Über die Weltweit eindeutige GUID (die Komische Nummer mit den Zahlen) kann auf das entsprechende COM-Objekt zugegriffen werden. Auch hierzu siehe Delphi-Hilfe.

Im allgemeinen empfiehlt sich immer mal in's Delphi Handbuch hineinzuschauen, den da ist eigentlich alles beschreiben.

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 21, 2003 13:37 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Arigatou,

jetzt bin ich endlich wieder etwas schlauer :)
Ich hatte in der Delphi Hilfe nichts wirklich gescheites drüber gefunden.
Naja, ist auch schwierig mir raucht grad ziemlich der Kopf... ich programmiere gerade eine richtige Dynamische SkinEngine für Appz bzw Xenorate...
Funzt bis jetzt ganz gut...

Mal schauen, vielleicht kann man später das ding dann einfach auf OpenGL ummodden :)

matane,
Finalspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 21, 2003 15:10 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Kleine frage noch, was macht denn das inherited ???
ich peil das nicht und in der delphi 5 doku steht da nicht viel drin :(

z.b. folgender code:

Code:
  1.  
  2. procedure TfrmMain.WMKeyDown(var Message: TWMKeyDown);
  3. var
  4.   Shift : TShiftState;
  5. begin
  6.   inherited;
  7.   Shift := [];
  8.   if CtrlDown then Shift := [ssCtrl];
  9.   if AltDown then Shift := [ssAlt];
  10.   if ShiftDown then Shift := [ssShift];
  11.   Sys.SetGlobalShortCut(Message.CharCode, Shift);
  12. end;
  13.  


was würde passieren wenn das inherited nicht drin wäre ???

Danke schonmal

matane,
Finalspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 21, 2003 15:22 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
inherited ruft die in der Basisklasse deklarierte Funktion/Prozedur mit selbigem Namen auf.

Wenn du also z.B. ein Objekt ableitest, und dessen Konstruktor noch was hinzufügen willst, dann rufst du in deinem neuen Konstruktor mittels inherited erst den Konstruktor der Grundklasse auf bevor du dann noch was anhängst.

P.S. : Hier die Deklaration aus der D7-Hilfe :
Zitat:
Das reservierte Wort inherited ist für die Polymorphie von großer Bedeutung. Es kann in Methodenimplementierungen (mit oder ohne nachfolgendem Bezeichner) angegeben werden.

Folgt auf inherited der Name eines Elements, entspricht dies einem normalen Methodenaufruf bzw. einer Referenz auf eine Eigenschaft oder ein Feld. Der einzige Unterschied besteht darin, dass die Suche nach dem referenzierten Element bei dem direkten Vorfahren der Klasse beginnt, zu der die Methode gehört. Wenn Sie beispielsweise

inherited Create(...);

in der Definition einer Methode angeben, wird die geerbte Methode Create aufgerufen.

Die Anweisung inherited ohne Bezeichner verweist auf die geerbte Methode mit demselben Namen wie die aufrufende Methode. Handelt es sich bei der aufrufenden Methode um eine Botschaftsbehandlung, verweist diese auf die geerbte Botschaftsbehandlung für dieselbe Botschaft. In diesem Fall übernimmt inherited keine expliziten Parameter, sondern der geerbten Methode werden einfach die Parameter der aufrufenden Methode übergeben. So wird beispielsweise:

inherited;

häufig in der Implementierung von Konstruktoren verwendet. Der geerbte Konstruktor wird also mit den Parametern aufgerufen, die an die abgeleitete Klasse übergeben wurden.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]