Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Class Helper Problem für TListItem (https://www.delphipraxis.net/127142-class-helper-problem-fuer-tlistitem.html)

Roaster 8. Jan 2009 11:53


Class Helper Problem für TListItem
 
Hi,

ich habe eine neue Klasse abgeleitet von TCustomListView erzeugt:
Delphi-Quellcode:
TMyListView = class(TCustomListView)
Die Listitems dort sollten eine Checkbox oder Radiobutton erhalten, dies klappte bisher auch ganz gut, ist aber auch nicht das Problem hier.
Ich habe die Klasse TListItem mit Hilfe einer Helper Klasse erweitert um dort ein Property Checked einzufügen. Mein Problem ist jetzt, wie kann ich diese Property, oder besser die dazugehörige Variable FChecked auf einen initialen Wert setzen.

Delphi-Quellcode:
  TListItemHelper = class helper for TListItem
  class var
    FChecked: Boolean;
    procedure SetChecked(Value : Boolean);
    function GetChecked : Boolean;
  published
    property Checked : Boolean read GetChecked write SetChecked;
  end;
Ein Coding aus der Hauptklasse TMyListView, wie beispielsweise
Delphi-Quellcode:
procedure TMyListView.ToggleSelectedCheck;
var
    ListItem : TListItem;
begin
[..]
    ListItem := GetNextItem(nil, sdAll, [isSelected]);
           ListItem.Checked := not ListItem.Checked;
funktioniert sehr gut, nur wie kann ich beim Hinzufügen eines neuen Listitems die Variable FChecked auf False setzen?

Uwe Raabe 8. Jan 2009 12:11

Re: Class Helper Problem für TListItem
 
Was soll denn der Class-Helper bewirken? TListItem hat doch bereits ein Checked property (zumindest bei D2007).

Weiterhin bezweifle ich das Funktionieren, da FChecked als Class-Var angelegt ist und somit sein Wert für alle ListItems im Scope des Class-Helpers gilt.

Roaster 8. Jan 2009 13:27

Re: Class Helper Problem für TListItem
 
Zitat:

Zitat von Uwe Raabe
Was soll denn der Class-Helper bewirken? TListItem hat doch bereits ein Checked property (zumindest bei D2007).

Hallo Uwe, ja ,du hast natürlich recht, auch in Turbo Delphi Pro gibt es bereits dieses Property im TListView, nur ich hatte das Problem, dass wenn ich TListView bzw. TMyListView.Checkboxes auf True gesetzt habe, ich dann Problem in meiner abgeleiteten Klasse beim Zeichnen der Radiobuttons oder den eigenen Checkboxen hatte.
Hintergrund: Meine Klasse sollte in der Lage sein, entweder Checkboxen (alle Items können ggf. abgehakt werden) oder Radiobuttons (nur eines der Items soll abgehakt sein) darstellen zu können.

Zitat:

Zitat von Uwe Raabe
Weiterhin bezweifle ich das Funktionieren, da FChecked als Class-Var angelegt ist und somit sein Wert für alle ListItems im Scope des Class-Helpers gilt.

Da hast du wiederum recht, dies ist mein zweites Problem hier, dass ich aber erst habe, seitdem ich jetzt auf die class helpers umstellen wollte. Zuvor habe ich einen etwas unschönen Hack benutzt, der eine abgeleitet TMyListItem Klasse verwendete und ich dann das Check property nur mehr mit sowas wie:
Delphi-Quellcode:
TMyListItem(Item).Checked
ansprechen konnte. Dies funktionierte wunderbar, war aber etwas umständlich und unschön. Jetzt wollte ich wie bereits bekannt auf die class helper ausweichen.

Da ich in den class helpers aber keine lokalen (private) Vars verwenden kann, suche ich somit noch immer nach einer Lösung, dass Checked property der Listitems für meine Zwecke zu missbrauchen.

himitsu 29. Jan 2009 19:36

Re: Class Helper Problem für TListItem
 
Zitat:

Zitat von Roaster
Hintergrund: Meine Klasse sollte in der Lage sein, entweder Checkboxen (alle Items können ggf. abgehakt werden) oder Radiobuttons (nur eines der Items soll abgehakt sein) darstellen zu können.

wie meinst du das jetzt genau?

meinst du sowas wie:
graues Häkchen > mindestens ein und nicht alle untergeordneten Elemente/Checkboxen sind abgehakt
schwarzes Häkchen > alle untergeordneten Elemente/Checkboxen sind abgehakt
kein Häcken > kein untergeordnetes Element/Checkbox ist abgehakt


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