Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi class helper (https://www.delphipraxis.net/172414-class-helper.html)

Helmi 2. Jan 2013 13:25

class helper
 
Hallo,

ich setz zum ersten mal einen class helper ein und hab dazu eine Frage ob das zu Problemen kommen kann oder nicht.

Ich habe eine ListBox auf der Form liegen und möchte nun die Klasse TListBox in der Unit um eine Variable erweitern.

Ich hab nun folgendes stehen:
Delphi-Quellcode:
type
  TListBoxHelper = class helper for TListBox
     class var
       aktive_Datei: String;
     end;

  TMainForm = class(TForm)
  {...}
Es funktioniert - ich habe die Variable nun zur Verfügung bei einer ListBox-Instanz und kann diese auch problemlos nutzen.
Nur kann es so zu Problemen kommen? - oder ist das genau für so was gedacht gewesen?

romankassebaum 2. Jan 2013 13:29

AW: class helper
 
Hallo,

falls Du die Variable für eine Instanz nutzen möchtest, dann solltest Du ein Feld und keine Klassenvariable nutzen.

--
Roman Kassebaum

Helmi 2. Jan 2013 13:37

AW: class helper
 
Zitat:

Zitat von romankassebaum (Beitrag 1197344)
Hallo,

falls Du die Variable für eine Instanz nutzen möchtest, dann solltest Du ein Feld und keine Klassenvariable nutzen.

wie meinst du das?
ohne class var gehts nicht

DeddyH 2. Jan 2013 13:39

AW: class helper
 
Interessanter Artikel dazu: http://stackoverflow.com/questions/2...-class-helpers, besonders der Beitrag von Uwe Raabe.

Helmi 2. Jan 2013 13:53

AW: class helper
 
Zitat:

Zitat von DeddyH (Beitrag 1197346)
Interessanter Artikel dazu: http://stackoverflow.com/questions/2...-class-helpers, besonders der Beitrag von Uwe Raabe.

Danke für den Link - aber irgendwie bringt mich der nicht weiter (oder ich seh es nicht)

Dort sind im class helper "nur" procedures und functions deklariert - aber keine einfache Variable.

Wenn ich die Variable einfach so definiere:
Delphi-Quellcode:
  TListBoxHelper = class helper for TListBox
    private
      aktive_Datei: String;
   end;
gibts diesen Fehler:
Zitat:

[DCC Fehler] MainUnit.pas(40): E2169 Felddefinition nicht erlaubt nach Methoden oder Eigenschaften
bislang gehts nur so:
Delphi-Quellcode:
     class var
        aktive_Datei: String;
      end;
versteh ich grad etwas falsch?
(dummerweise ist die Delphi-Hilfe nicht wirklich eine Hilfe dabei)

Uwe Raabe 2. Jan 2013 13:56

AW: class helper
 
Class Helper können keine zusätzlichen Felder für Instanzen bereitstellen! Es sind lediglich Methoden erlaubt.

Helmi 2. Jan 2013 13:59

AW: class helper
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1197348)
Class Helper können keine zusätzlichen Felder für Instanzen bereitstellen! Es sind lediglich Methoden erlaubt.

also dann ist
Delphi-Quellcode:
class var
die einzige Lösung für mein "Problem"?

stahli 2. Jan 2013 14:01

AW: class helper
 
Allister Christie hatte mal ein nettes Video dazu veröffentlicht: http://www.codegearguru.com/video/029/ClassHelpers.html

Im Grunde kann man damit Dinge wie in normalen Funktionen regeln, nur dass der Compiler so tut, als würde die Funktion zur Klasse gehören.

Statt
Delphi-Quellcode:
X := GetResult(MyClass);
kannst Du
Delphi-Quellcode:
X := MyClass.GetResult;
schreiben.
Die Funktion GetResult kann aber nur auf öffentliche Eigenschaften der Klasse zugreifen. Man kann der Klasse KEINE Variablen hinzufügen.

(Dass class var geht, hätte ich gar nicht gewusst/gedacht.)

DeddyH 2. Jan 2013 14:01

AW: class helper
 
In dem Fall muss man sich mit einer Cracker-Klasse behelfen, da geht das dann wieder.
Delphi-Quellcode:
uses Windows, SysUtils, {...,} StdCtrls;

type
  TListbox = class(StdCtrls.TListbox)
  private
    FAktive_Datei: string;
  public
    property Aktive_Datei: string read FAktive_Datei write FAktive_Datei;
  end;

  TDeinForm = class(TForm)
    DeineListbox: TListbox; //das ist dann die gerade definierte
    ...
  end;

Helmi 2. Jan 2013 14:05

AW: class helper
 
Zitat:

Zitat von DeddyH (Beitrag 1197352)
In dem Fall muss man sich mit einer Cracker-Klasse behelfen, da geht das dann wieder.
Delphi-Quellcode:
uses Windows, SysUtils, {...,} StdCtrls;

type
  TListbox = class(StdCtrls.TListbox)
  private
    FAktive_Datei: string;
  public
    property Aktive_Datei: string read FAktive_Datei write FAktive_Datei;
  end;

  TDeinForm = class(TForm)
    DeineListbox: TListbox; //das ist dann die gerade definierte
    ...
  end;

Daran hab ich auch schon gedacht! - Dann ergibt sich für mich nicht wirklich der sinn von class helper
aber das ist eine andere Diskussion...


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:28 Uhr.
Seite 1 von 3  1 23      

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