AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi CheckListBox und virtuelle Einträge - wieso kein Checked?
Thema durchsuchen
Ansicht
Themen-Optionen

CheckListBox und virtuelle Einträge - wieso kein Checked?

Offene Frage von "Voyager07"
Ein Thema von Sir Rufo · begonnen am 19. Mai 2010 · letzter Beitrag vom 14. Apr 2017
Antwort Antwort
Voyager07

Registriert seit: 14. Apr 2017
1 Beiträge
 
#1

AW: CheckListBox und virtuelle Einträge - wieso kein Checked?

  Alt 14. Apr 2017, 22:21
Ich stieß ebenfalls auf dieses Problem habe das so gelöst:

1: Ableiten einer eigenen Klasse aus TCustomListBox, als Vorlage dazu nutzte ich TCheckListBox aus der Unit CheckLst.

2: Ergänzt vor der Definition der neuen Klasse:
Delphi-Quellcode:
TYPE
  TCheckListBoxData= RECORD
    Data: longint;
    State: TCheckBoxState;
    Disabled: boolean;
    Header: boolean;
  END;

  TOnGetCheckListBoxData= function(const Index: longint): TCheckListBoxData of object;
  TOnSetCheckListBoxData= procedure(const Index: longint; const Data: TCheckListBoxData) of object;
3: Ergänzt in der neuen Klasse:
Delphi-Quellcode:
public
    OnGetCheckListBoxData: TOnGetCheckListBoxData;
    OnSetCheckListBoxData: TOnSetCheckListBoxData;
4: Die Methode SetState geändert:
Delphi-Quellcode:
procedure TITfMMultiCheckListBox.SetState(Index: Integer; AState: TCheckBoxState);

VAR
  lbData: TCheckListBoxData;

begin
  if AState <> GetState(Index) then
  begin
    IF Style= lbVirtual THEN begin
      IF assigned(OnSetCheckListBoxData) AND assigned(OnGetCheckListBoxData) THEN begin
        lbData:= OnGetCheckListBoxData(Index);

        lbData.State:= AState;

        OnSetCheckListBoxData(Index, lbData);
      end;
    end
    ELSE begin
      TCheckListBoxDataWrapper(GetWrapper(Index)).State := AState;
    end;

    InvalidateCheck(Index);
  end;
end;
5: Die Methode GetState geändert:
Delphi-Quellcode:
function TITfMMultiCheckListBox.GetState(Index: Integer): TCheckBoxState;

begin
  Result := TCheckListBoxDataWrapper.GetDefaultState;

  IF Style= lbVirtual THEN begin
    IF assigned(OnGetCheckListBoxData) THEN begin
      Result:= OnGetCheckListBoxData(Index).State;
    end;
  end
  ELSE begin
    if HaveWrapper(Index) then
      Result := TCheckListBoxDataWrapper(GetWrapper(Index)).State
    else
      Result := TCheckListBoxDataWrapper.GetDefaultState;
  end;

end;
Damit ist jetzt auch State "virtualisiert".

Für den Fall, dass auch die anderen Felder von TCheckListBoxData virtualisiert werden sollen, müssten analog die Methoden wie GetHeader/SetHeader modifiziert werden.
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz