AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Vererbung

Ein Thema von xZise · begonnen am 1. Okt 2007 · letzter Beitrag vom 3. Okt 2007
Antwort Antwort
Seite 2 von 2     12   
Muetze1
(Gast)

n/a Beiträge
 
#11

Re: Problem mit Vererbung

  Alt 2. Okt 2007, 16:41
Zitat von r2c2:
Meine Glaskugel meint, es könnten n paar override; fehlen...
Wenn dem so ist, dann sollte xZise aber arglistig Compilerhinweise verschwiegen haben.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#12

Re: Problem mit Vererbung

  Alt 2. Okt 2007, 18:45
Zitat von Muetze1:
Zitat von xZise:
Das Hauptproblem ist selbst ohne abstrakten Methoden funktioniert das nicht Oder müssen die nun abstrakt sein, damit er auch die richtige Methode aufruft?
Was bedeutet dabei nun "funktioniert nicht"? Wenn ich wieder auf die alte Aussage schliesse (abstrakter Fehler), dann kann dies in dem Falle nicht mehr sein.
Es wird nicht das korrekte Objekt übergeben.
Der abstrakte Fehler erscheint dann, wenn ich das alles als abstrakt deklariere nicht

Zitat von Muetze1:
Zitat von xZise:
Laut Debugger ist in der AddFunktion "FSheets" und ehm "FTabs" nil
Dann wird nicht der richtige Constructor aufgerufen. Somit ist die Frage von inherited etc. gegeben. Schonmal den Konstruktoraufruf im Add() debuggt? Wenn du in die Zeile mit F7 hineinstoperst, dann solltest du durch den entsprechenden Konstruktor (nach dem die Ermittlung der Parameter abgehandelt wurde) kommen, welcher dann nach deinem Quellcode und Aussagen doch eigentlich FSheets und FTabs initialisiert. Wenn dem nicht so ist, dann ist das nicht der Constructor. (wobei ich die Konstruktoren von den beiden abgeleiteten Klassen nicht kenne)
Also ich habe das einfach nochmal komplett durchgebuggt:

Zitat von Muetze1:
Zitat von xZise:
So ! Ich habe jetzt TTab komplett "deabstrahiert" xD und die Add Methode überladen (mit TMemoTab und TExplorerTab)
So funktionierts, aber das war nicht der Zweck des Vererben
Das ist auch nicht das gewollte und dein vorgestelltes Konzept klappt auch 100%ig so wie du es vorhast. Es ist ein anderes Problem. Diese Lösung musst du nicht weiter verfolgen/benutzen.


Hier ist der Konstruktor von TExplorerTab (ich spare mir mal TMemoTab): (Aufgrund von inherited auch von TTab)
Delphi-Quellcode:
constructor TExplorerTab.Create(const APageControl: TPageControl; const APath : string);
begin
  inherited Create(APageControl);
  FSheet := TSheet.Create(APageControl);
  FSheet.Caption := GetLastFolder(APath);
  FPath := APath;

  // Icons einlesen
  FImages := TImageList.Create(APageControl);
  FImages.Width := 32;
  FImages.Height := 32;
  ConvertTo32BitImageList(FImages);
  FExt := TStringList.Create;
  FExt.Add('folder');
  FImages.AddIcon(GetIconFromFile('%SystemRoot%\system32\SHELL32.dll', 3));

  FSheet.lvListView.LargeImages := FImages;
  FSheet.lvListView.OnDblClick := DblClick;
  FSheet.lvListView.OnMouseUp := MouseUp;
  GenerateView;
end;

constructor TTab.Create(const APageControl: TPageControl);
begin
  inherited Create;
end;
Zitat von Muetze1:
Zitat von r2c2:
Meine Glaskugel meint, es könnten n paar override; fehlen...
Wenn dem so ist, dann sollte xZise aber arglistig Compilerhinweise verschwiegen haben.
Dem ist nicht so
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#13

Re: Problem mit Vererbung

  Alt 2. Okt 2007, 19:10
Wozu bekommt der Konstruktor von TTab ein TPageControl übergeben, wenn er nichts damit macht? Auch TExplorerTab macht nichts damit als es nur weiter zu reichen.

Zitat von xZise:
Also ich habe das einfach nochmal komplett durchgebuggt:
Und was ist dabei rausgekommen? Ist er in den Konstruktor von TExplorerTab reingesprungen? Hat er alles wie gewünscht durchlaufen?
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#14

Re: Problem mit Vererbung

  Alt 2. Okt 2007, 19:13
Hi,
Zitat von Muetze1:
Wozu bekommt der Konstruktor von TTab ein TPageControl übergeben, wenn er nichts damit macht? Auch TExplorerTab macht nichts damit als es nur weiter zu reichen.
Naja eigentlich sollten die ja alle abstrakt sein Und das mit APageControl ist die einzige gemeinsamkeit Ich weiß der Code is nicht gerade gut, aber solange dass mit Add nicht vernünfig läuft xD

[edit]so Ich habe jetzt von TTab die Konstruktor Methode entfernt, und es ändert sich NICHTS Vielleicht ist es wichtig, dass es mit Überladen funktioniert?[/edit]

Zitat von Muetze1:
Zitat von xZise:
Also ich habe das einfach nochmal komplett durchgebuggt:
Und was ist dabei rausgekommen? Ist er in den Konstruktor von TExplorerTab reingesprungen? Hat er alles wie gewünscht durchlaufen?
Ehm ja Alles so wie es sein sollte Er ist in den Konstruktor gekommen und dann in die Add Methode. Dort war dann aber alles wieder nil ?!

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#15

Re: Problem mit Vererbung

  Alt 2. Okt 2007, 21:40
Ich kann das einfach nicht glauben. Das sind grundlegende OOP Dinge und das kann sich nicht so beschissen verhalten. Würde etwas dagegen sprechen, wenn man selber mal den Quelltext als ganzen beschauen kann? Ich komm nicht damit klar, dass das nicht gehen sollte...
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#16

Re: Problem mit Vererbung

  Alt 2. Okt 2007, 22:08
Okay hier mal der Code Ich habe unwichtiges soweit ein bisschen entfernt.
Der aufruf (s.o.) erfolg weiterhin mit:
<TTabs>.Add(<TExplorer/TMemoTab>.Create(<PageControl>, <Pfad/Dateiname>)) Hier ist die Unit! Aber mit TntControls.
TSheets ist ein Nachfahre von TabSheet mit ein paar Komponenten drauf.
Ich hoffe mal das reicht
Delphi-Quellcode:
unit uCode;

interface

uses
  Windows, ComCtrls, SysUtils, Classes, Contnrs, uTabSheet, ShellAPI, Graphics,
  Controls, TntIniFiles, TntStdCtrls, StdCtrls, TntComCtrls;

type
  TData = (dFile, dDirectory);

  TTabs = class;

  TTab = class(TObject)
  private
    FSheet: TTabSheet;
    FTabs : TTabs;

    procedure SetSheet(const Value: TTabSheet);// virtual; abstract;
  published
    property Sheet : TTabSheet read FSheet write SetSheet;
    property Tabs : TTabs read FTabs;
  public
    //constructor Create(const APageControl : TPageControl);// virtual; abstract;
    destructor Destroy; override;// virtual; abstract;
  end;

  TMemoTab = class(TTab)
  private
    FFileName : string;
    FMemo : TTntMemo;
    procedure SetMemo(const Value: TTntMemo);

// procedure DblClick(Sender : TObject);
// procedure MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

  published
    property FileName : string read FFileName;
    property Memo : TTntMemo read FMemo write SetMemo;
  public
    constructor Create(const APageControl : TPageControl; const AFileName : string); reintroduce;
    destructor Destroy; override;
  end;

  TExplorerTab = class(TTab)
  private
    FImages : TImageList;
    FExt : TStringList;
    FSheet: TSheet;
    FTabs : TTabs;
    FPath : string;
    FData : array of TData;

    procedure DblClick(Sender : TObject);
    procedure MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    
    procedure SetSheet(const Value: TSheet);
    procedure GenerateView(const AFilter : string = '*.*');
  published
    property Path : string read FPath;
    property Sheet : TSheet read FSheet write SetSheet;
    property Tabs : TTabs read FTabs;
  public
    procedure GoUp;

    constructor Create(const APageControl : TPageControl; const APath : string); reintroduce;
    destructor Destroy; override;
  end;

  TTabs = class(TObject)
  private
    FTabs : TObjectList;
    FIcons : TIconList;
    FFileToolBar: TToolBar;
    FDirectoryToolBar: TToolBar;

    function GetTab(idx: Integer): TTab;
    procedure SetTab(idx: Integer; const Value: TTab);
  public
    property Tab[idx : Integer] : TTab read GetTab write SetTab;
    property FileToolBar : TToolBar read FFileToolBar write FFileToolBar;
    property DirectoryToolBar : TToolBar read FDirectoryToolBar write FDirectoryToolBar;

    procedure Add(ATab : TTab); overload;
    procedure Delete(const AIndex : Integer);

    constructor Create;
    destructor Destroy; override;
  end;

implementation

uses ImgList, Consts, CommCtrl;

Procedure ConvertTo32BitImageList(Const ImageList: TImageList);
Const
  Mask: Array[Boolean] Of Longint = (0, ILC_MASK);
Var
  TemporyImageList: TImageList;
Begin
  If Assigned(ImageList) Then
  Begin
    TemporyImageList := TImageList.Create(Nil);
    Try
      TemporyImageList.Assign(ImageList);
      With ImageList Do
      Begin
        ImageList.Handle := ImageList_Create(Width, Height, ILC_COLOR32 Or Mask[Masked], 0, AllocBy);
        If Not ImageList.HandleAllocated Then
        Begin
          Raise EInvalidOperation.Create(SInvalidImageList);
        End;
      End;
      ImageList.AddImages(TemporyImageList);
    Finally
      TemporyImageList.Free;
    End;
  End;
End;

function GetFileIcon(const FileName: string; const Icon: TIcon; const FileMustExist: Boolean): Boolean;
var
  FI: TSHFileInfo;
  Attributes: DWORD;
  Flags: Word;
begin
  if FileMustExist then
  begin
    Attributes := 0;
    Flags := SHGFI_ICON or SHGFI_LARGEICON;
  end
  else
  begin
    Attributes := FILE_ATTRIBUTE_NORMAL;
    Flags := SHGFI_USEFILEATTRIBUTES or SHGFI_ICON or SHGFI_LARGEICON;
  end;

  if SHGetFileInfo(PChar(FileName), Attributes, FI, SizeOf(FI), Flags) <> 0 then
  begin
    Icon.ReleaseHandle;
    Icon.Handle := FI.hIcon;
    Result := True;
  end
  else
    Result := False;
end;

function GetIconFromFile(FileName: string; Index: Integer): Ticon;
begin
  Result := TIcon.Create;
  Result.Handle := ExtractIcon(HInstance, PCHAR(FileName), Index);
end;

function GetIconFromFile2(const Path: String): TIcon;
var
  KommaPos, Len, IconNumber: Integer;
begin
  Len := Length(Path);
  KommaPos := LastDelimiter(',', Path);
  IconNumber := StrToInt(copy(Path,KommaPos + 1, Len));
  Result := GetIconFromFile(Copy(Path, 1, KommaPos - 1), IconNumber);
end;

function GetLastFolder(const APath : string) : string;
var
  i, start: Integer;
begin
  if APath[Length(APath)] = '\then
    start := 1
  else
    start := 0;
  for i := Length(APath) - start downto 1 do
  begin
    if APath[i] <> '\then
      Result := APath[i] + Result
    else
      break;
  end;
end;

{ TExplorerTab }

constructor TExplorerTab.Create(const APageControl: TPageControl; const APath : string);
begin
  inherited Create;
  FSheet := TSheet.Create(APageControl);
  FSheet.Caption := GetLastFolder(APath);
  FPath := APath;

  // Icons einlesen
  FImages := TImageList.Create(APageControl);
  FImages.Width := 32;
  FImages.Height := 32;
  ConvertTo32BitImageList(FImages);
  FExt := TStringList.Create;
  FExt.Add('folder');
  FImages.AddIcon(GetIconFromFile('%SystemRoot%\system32\SHELL32.dll', 3));

  FSheet.lvListView.LargeImages := FImages;
  FSheet.lvListView.OnDblClick := DblClick;
  FSheet.lvListView.OnMouseUp := MouseUp;
  GenerateView;
end;

procedure TExplorerTab.DblClick(Sender: TObject);
begin
// Beep;
  if FData[FSheet.lvListView.ItemIndex] = dDirectory then
  begin
    FPath := FPath + FSheet.lvListView.Selected.Caption + '\';
    FSheet.Caption := GetLastFolder(FPath);
    GenerateView;
  end;
end;

destructor TExplorerTab.Destroy;
begin
  FreeAndNil(FImages);
  FreeAndNil(FExt);
  inherited;
end;

procedure TExplorerTab.GenerateView(const AFilter : string);
begin
  {...}
end;

procedure TExplorerTab.GoUp;
begin
  {...}
end;

procedure TExplorerTab.MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  {...}
end;

procedure TExplorerTab.SetSheet(const Value: TSheet);
begin
  FSheet := Value;
end;

{ TTabs }

procedure TTabs.Add(ATab: TTab);
begin
  FTabs.Add(ATab);
  ATab.FTabs := self;
end;

constructor TTabs.Create;
begin
  inherited;
  FTabs := TObjectList.Create;
  FIcons := TIconList.Create;
end;

procedure TTabs.Delete(const AIndex: Integer);
begin
  if AIndex >= 0 then
    FTabs.Delete(AIndex);
end;

destructor TTabs.Destroy;
begin
  FreeAndNil(FTabs);
  inherited;
end;

function TTabs.GetTab(idx: Integer): TTab;
begin
  if idx >= 0 then
    Result := TTab(FTabs[idx])
  else
    Result := nil;
end;

procedure TTabs.SetTab(idx: Integer; const Value: TTab);
begin
  FTabs[idx] := Value;
end;

{ TMemoTab }

constructor TMemoTab.Create(const APageControl: TPageControl;
  const AFileName: string);
begin
  inherited Create;
  FSheet := TTabSheet.Create(APageControl.Owner);
  FSheet.PageControl := APageControl;
  FSheet.Caption := ExtractFileName(AFileName);

  FMemo := TTntMemo.Create(APageControl.Owner);
  FMemo.Parent := FSheet;
  FMemo.Align := alClient;
  FMemo.ScrollBars := ssBoth;
  FMemo.WordWrap := false;
  FMemo.Lines.LoadFromFile(AFileName);
end;

destructor TMemoTab.Destroy;
begin
  FreeAndNil(FMemo);
  inherited;
end;

procedure TMemoTab.SetMemo(const Value: TTntMemo);
begin
  FMemo := Value;
end;

{ TTab }

destructor TTab.Destroy;
begin
  FreeAndNil(FSheet);
  inherited;
end;

procedure TTab.SetSheet(const Value: TTabSheet);
begin
  FSheet := Value;
end;

end.
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#17

Re: Problem mit Vererbung

  Alt 2. Okt 2007, 23:10
Moin!

Grundlegend ist zZ vieles recht komisch. Ein abstrakt virtueller Constructor ist nun schon wirklich recht speziell (ok, wird zZ nicht genutzt), aber auch ein Overload bei der Add() Methode ist noch übrig, aber das tut auch nichts zur Sache. ABER: Du hast zwei unterschiedliche Definitionen von Sheet. Einmal in der Basis und einmal in einer Ableitung. Das recht komische dabei ist dabei, dass du unterschiedliche Klassen verwendest. Dazu kommt noch, dass du die Instanz in der Ableitung erstellst aber in der Basis freigibst.

Und zu deinem NIL Problem: Du greifst auf fSheet zu, wobei du eine Variable vom Typ TTab nutzt. Dadurch greifst du auf den Typ von Sheet von TTab zu. Da du aber in der Ableitung einen neuen Typ definierst (und eine neue Variable) aber die Basisklasse nutzt zum Zugriff, bekommst du fSheet von der Basis TTab - und die ist natürlich nil (schliesslich initialisierst du es nicht in TTab). Wenn du nun den Typ nicht neu definieren würdest in der Ableitung, dann hättest du Sheet vererbt und dann wäre beim Zugriff über TTab auch die Instanz von TExplorerTab zu finden - es gibt schliesslich nur noch ein Tab.

Aber das du die alte Eigenschaft verdeckst und eine neue deklarierst, hättest du aber wirklich mal sagen können. Schliesslich hat das ganze Problem nachweislich nichts virtual & | abstract zu tun. Also: dein Weg ist wie beschrieben begehbar - ABER: einige dich auf einen Typ...

Live long and prosper, Locutus!
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#18

Re: Problem mit Vererbung

  Alt 3. Okt 2007, 09:17
Zitat von Muetze1:
Ein abstrakt virtueller Constructor ist nun schon wirklich recht speziell (ok, wird zZ nicht genutzt)
Naja, weil ich da leider nichts machen könnte

Zitat von Muetze1:
aber auch ein Overload bei der Add() Methode ist noch übrig, aber das tut auch nichts zur Sache.
Naja Funktionierte ja auch nicht vorher ohne ^^ Es lag daran, dass ich die Funktion ja mal überladen hatte

Zitat von Muetze1:
ABER: Du hast zwei unterschiedliche Definitionen von Sheet. Einmal in der Basis und einmal in einer Ableitung.
Naja Jeder Tab hat eine Instanz von TTabSheet...

Zitat von Muetze1:
Das recht komische dabei ist dabei, dass du unterschiedliche Klassen verwendest.
... wobei ja TSheet ein Nachfahre von TTabSheet ist! Deshalb habe ich angenommen, der schluckt das.

Zitat von Muetze1:
Dazu kommt noch, dass du die Instanz in der Ableitung erstellst aber in der Basis freigibst.
Naja Wenn ich den Tab freigebe, dann gebe ich auch das TabSheet dazu frei. Aber wenn ich das erstelle weiß ich nicht ob der Tab vom Typ "TTabSheet" oder vom Typ "TSheet" ist.

Zitat von Muetze1:
Und zu deinem NIL Problem: Du greifst auf fSheet zu, wobei du eine Variable vom Typ TTab nutzt. Dadurch greifst du auf den Typ von Sheet von TTab zu. Da du aber in der Ableitung einen neuen Typ definierst (und eine neue Variable) aber die Basisklasse nutzt zum Zugriff, bekommst du fSheet von der Basis TTab - und die ist natürlich nil (schliesslich initialisierst du es nicht in TTab).
Und warum kann man nicht einfach FSheet override;n ? Ist doch müll xD
Also werde ich wohl einer der einzigen Gemeinsamkeit entfernen
OBWOHL müsste es nicht gehen, wenn ich einfach den FSheet : TSheet entferne (und die Prozedur/Property) müsste es doch laufen Gleich mal ausprobieren xD

Zitat von Muetze1:
Wenn du nun den Typ nicht neu definieren würdest in der Ableitung, dann hättest du Sheet vererbt und dann wäre beim Zugriff über TTab auch die Instanz von TExplorerTab zu finden - es gibt schliesslich nur noch ein Tab.
Hört sich gut an ^^

Zitat von Muetze1:
Aber das du die alte Eigenschaft verdeckst und eine neue deklarierst, hättest du aber wirklich mal sagen können.
^^ Naja die IDE hat sich nicht beschwert xD

Zitat von Muetze1:
Schliesslich hat das ganze Problem nachweislich nichts virtual & | abstract zu tun.
Naja. Ich hatte auch im ersten Post geschrieben, dass es mir nicht nur um abstract &|| (solle das nicht eher so sein ^^) virtual geht.
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#19

Re: Problem mit Vererbung

  Alt 3. Okt 2007, 11:26
Zitat von xZise:
Zitat von Muetze1:
Das recht komische dabei ist dabei, dass du unterschiedliche Klassen verwendest.
... wobei ja TSheet ein Nachfahre von TTabSheet ist! Deshalb habe ich angenommen, der schluckt das.
Ja klar, wenn du es nicht neu definiert hättest. Du kannst doch die Eigenschaft mit dem Typ der Basisklasse (TTabSheet) doch einfach mit vererben und auch mit einer Instanz einer abgeleiteten Form befüllen. Ist doch kein Problem!

Zitat von xZise:
Zitat von Muetze1:
Dazu kommt noch, dass du die Instanz in der Ableitung erstellst aber in der Basis freigibst.
Naja Wenn ich den Tab freigebe, dann gebe ich auch das TabSheet dazu frei. Aber wenn ich das erstelle weiß ich nicht ob der Tab vom Typ "TTabSheet" oder vom Typ "TSheet" ist.
Das ist egal - der Destruktor ist virtuell und wird überschrieben. Dadurch kannst du auch TObject(fSheet).Free; aufrufen und es wird der Destruktor von TSheet bzw. TTabSheet aufgerufen.

Zitat von xZise:
Und warum kann man nicht einfach FSheet override;n ?
Das ist eine Property und keine Methode. Was du hier suchst ist eine virtuelle Property die du überschreiben kannst. Wenn du eine Methode nicht mit virtuell kennzeichnest und in der Ableitung nochmal eine gleichnamige Methode mit einer anderen Signatur einfügst, dann wird die originale auch verdeckt. Gleiches hier bei den Properties, nur das du bei Methoden virtual angeben könntest und bei Properties nicht.

Zitat von xZise:
Ist doch müll xD Also werde ich wohl einer der einzigen Gemeinsamkeit entfernen
OBWOHL müsste es nicht gehen, wenn ich einfach den FSheet : TSheet entferne (und die Prozedur/Property) müsste es doch laufen Gleich mal ausprobieren xD
Ja, sollte: wie oben beschrieben: In der Basisklasse TTab die Eigenschaft auf Basis der TTabSheet (also der Basisklasse) und in der Ableitung kannst du dort dann genauso die Instanz deiner abgeleiteten Klasse TSheet ablegen. Das einzige ist dann halt: Du müsstest für den Zugriff auf die erweiterten Eigenschaften von TSheet einen Typecast vollziehen - also IS / AS Operationen. IS ist ja auch wichtig, weil du ja erstmal in Erfahrung bringen musst, ob du nun ein TTabSheet oder ein TSheet in der Eigenschaft hast (oder nil, dann sagt IS zu beiden nein).

Zitat von xZise:
Zitat von Muetze1:
Aber das du die alte Eigenschaft verdeckst und eine neue deklarierst, hättest du aber wirklich mal sagen können.
^^ Naja die IDE hat sich nicht beschwert xD
Nein, ist auch ein normales sprachliches Mittel der Delphi Language...

Zitat von xZise:
Zitat von Muetze1:
Schliesslich hat das ganze Problem nachweislich nichts virtual & | abstract zu tun.
Naja. Ich hatte auch im ersten Post geschrieben, dass es mir nicht nur um abstract &|| (solle das nicht eher so sein ^^) virtual geht.
Naja, deshalb ja das | ...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:54 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