AGB  ·  Datenschutz  ·  Impressum  







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

Slicing for Delphi™

Ein Thema von Meflin · begonnen am 24. Mär 2009 · letzter Beitrag vom 22. Apr 2009
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#21

Re: Slicing for Delphi™

  Alt 22. Apr 2009, 21:20
einfach eine StringList mit 'nem Interface versehen
und dann nur noch dem Interface die nötigen Funktionen mitgeben...

hier fehlen jetzt nur noch einige Funktionen im Interface, also welche man noch unbedingt aus den Public-Abschnitten benötigt.
Delphi-Quellcode:
Type
  IInterfacedStringList = Interface
    ['{E7FD1CCD-B023-491F-BEBA-3CEC190370D6}']
    //Private
      Function Get(Index: Integer): String;
      Function GetCount: Integer;
    //Public
      Function Add (Const S: String): Integer;
      Function IndexOf(Const S: String): Integer;
      Property Count: Integer Read GetCount;
      Property Strings[Index: Integer]: String Read Get; Default;
      Function Find (Const S: String; Var Index: Integer): Boolean;
      //...
    End;

  TInterfacedStringList = Class (TStringList, IInterfacedStringList)
    Protected
      FRefCount: Integer;
      Function QueryInterface(Const IID: TGUID; Out Obj): HResult; StdCall;
      Function _AddRef: Integer; StdCall;
      Function _Release: Integer; StdCall;
    Public
      Procedure AfterConstruction; Override;
      Procedure BeforeDestruction; Override;
      Class Function NewInstance: TObject; Override;
      Property RefCount: Integer Read FRefCount;
    End;

  Function TInterfacedStringList.QueryInterface(Const IID: TGUID; Out Obj): HResult;
    Begin
      If GetInterface(IID, Obj) Then Result := 0
      Else Result := E_NOINTERFACE;
    End;

  Function TInterfacedStringList._AddRef: Integer;
    Begin
      Result := InterlockedIncrement(FRefCount);
    End;

  Function TInterfacedStringList._Release: Integer;
    Begin
      Result := InterlockedDecrement(FRefCount);
      If Result = 0 Then Destroy;
    End;

  Procedure TInterfacedStringList.AfterConstruction;
    Begin
      Inherited;
      InterlockedDecrement(FRefCount);
    End;

  Procedure TInterfacedStringList.BeforeDestruction;
    Begin
      If RefCount <> 0 Then System.Error(reInvalidPtr);
      Inherited;
    End;

  Class Function TInterfacedStringList.NewInstance: TObject;
    Begin
      Result := Inherited NewInstance;
      TInterfacedStringList(Result).FRefCount := 1;
    End;
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#22

Re: Slicing for Delphi™

  Alt 22. Apr 2009, 21:27
OK, aber das bedeutet doch dann, dass der Benutzer wenn er Slicing verwenden will immer TInterFacedStringList verwenden muss (wenn er eigentlich mit TStringList arbeiten will) - das würde ich eigentlich gerne vermeiden
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#23

Re: Slicing for Delphi™

  Alt 22. Apr 2009, 21:37
Du brauchst es doch nur da einzusetzen, wo du 'ne StringList als Result zurückgibst?

also
Function GetStrings(Index: Integer): IInterfacedStringList; Das Ganze würde ich auch nicht für die Basisklasse umsetzen.


Witzig wäre es, wenn du deine Slicing-Erweiterung als Class-Helper für TStrings erstellst,
dann hätte man diese Funktion gleich automatisch in allen TStrings-Nachfahren (wie TStringList) drin,
und das sogar auch noch bei allen Instanzen, die man nichtmal selber erstellt hat (wie z.B. .Lines von TMemo).
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#24

Re: Slicing for Delphi™

  Alt 22. Apr 2009, 21:54
Zitat von himitsu:
Witzig wäre es, wenn du deine Slicing-Erweiterung als Class-Helper für TStrings erstellst
Im Moment ist es einer für TStringList, aber haste Recht, kann mna ja gleich für TStrings machen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#25

Re: Slicing for Delphi™

  Alt 22. Apr 2009, 23:23
Angehängte Dateien
Dateityp: 7z slices_101.7z (2,2 KB, 9x aufgerufen)
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 00:24 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