![]() |
Re: ListView CheckBoxen disablen
erstell dir doch n eigenes panel oder ähnliches das eine dynamische liste von checkboxen verwaltet, das geht halbwegs schnell und sollte auch nich das problem darstellen...
|
Re: ListView CheckBoxen disablen
Zitat:
mfG mirage228 |
Re: ListView CheckBoxen disablen
und wie macht mann das mirage228??
|
Re: ListView CheckBoxen disablen
Zitat:
Wenn Du erstmal das Handle hast, kannst du mit Entsprechenden API Funktion den Stil WS_ENABLED von der Checkbox "wegnehmen". mfG mirage228 |
Re: ListView CheckBoxen disablen
Ich glaube es gibt hier keinen Grund sich den Code mit hässlichen API Befehlen oder FindWindow zu versaubeuteln. ;)
Ich habe gerade keine Delphi zur Hand, ich denke aber mal, dass es auch in Delphi einen Event á la TListView.ItemCheck gibt. ;) Dort könntest du einfach ein Verändern des Wertes verhindern. Da ich jetzt nicht weiß wie es in Delphi aussieht, habe ich's mal in C# geschrieben:
Code:
void lvTestItemCheck(object sender, System.Windows.Forms.ItemCheckEventArgs e)
{ // Irgendeine Liste, in der die Indizes der Items stehen, // deren CheckBoxes nicht geändert werden dürfen ArrayList Indices2BeDisabled = new ArrayList(); Indices2BeDisabled.AddRange(new int[3] { 1, 3, 5 }); if (Indices2BeDisabled.Contains(e.Index) ) e.NewValue = e.CurrentValue; } |
Re: ListView CheckBoxen disablen
C kann ich ned entziffern :-(
|
Re: ListView CheckBoxen disablen
Zitat:
Nachdem ich mich vor ein D7 geschwungen hatte, musst ich feststellen: :shock: Da gibt's ja keinerlei Implementierung zum Abfangen eines Klicks auf die Checkboxes! :evil: Auch ein Blick in die Soßen der VCL brachte da nichts "hübsches" hervor" Zum Bleistift gibt es noch nicht mal einen HitTest für die CheckBoxes! Zitat:
Delphi-Quellcode:
Damit könntest du festlegen bei welchen Items der User die CheckBox nicht setzen darf.
type
TForm1 = class(TForm) ... private Indices2BeDisabled: set of 0..255; ... end; ... procedure TfrmDoSomething; begin ... Indices2BeDisabled := [1, 3, 5]; ... end; procedure TfrmTest.lvTestChanging(Sender: TObject; Item: TListItem; Change: TItemChange; var AllowChange: Boolean); begin AllowChange := not (TListView(Item.ListView).Checkboxes and (ctState = Change ) and // StateIcon == CheckBox *g* (Item.Index in Indices2BeDisabled)); end; Nachtrag: Da der Typ SET nur 255 Elemente enthalten darf, würden damit auch nur 255 disabled Items möglich sein. |
Re: ListView CheckBoxen disablen
hallo Robert,
danke für deinen Code des muss ich mir mal zu Gemüte führen... aber wegen deines "Problems" mit dem Klick auf die CheckBox... ich hab da was bei unseren Schweizer Freunden gesehen ![]() mfg Helmi |
Re: ListView CheckBoxen disablen
Zitat:
Delphi-Quellcode:
So ersparst du dem Programm die unötigen Aufrufe von GetItemAt & GetHitTest. ;)
AllowChange := not (TListView(Item.ListView).Checkboxes and (ctState = Change ));
Willst du aber, wie ich annnahm, nur bestimmte CheckBoxes deaktivieren willst kommst du mit meinem vorherigen Post besser weg. Für Items.Count > 255 müsstest du ein array of boolean statt dem set nehmen. |
Re: ListView CheckBoxen disablen
:love: ne ne -
entweder alle oder gar keine :-) kannst du mir da vielleicht mal kurz ein kleines beispiel-Projekt machen? (*megaliebguck*) :love: mfg Helmi |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:29 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