Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ListView CheckBoxen disablen (https://www.delphipraxis.net/28959-listview-checkboxen-disablen.html)

Helmi 1. Sep 2004 20:23


ListView CheckBoxen disablen
 
Hallo,

wie kann man in einem ListView CheckBoxen disablen?
(also grau)

mfg
Helmi

Helmi 2. Sep 2004 11:20

Re: ListView CheckBoxen disablen
 
***Update***

hat da jemand ne Idee wie das oben geht und obs überhaupt geht?

Nothine 2. Sep 2004 11:24

Re: ListView CheckBoxen disablen
 
könntest du mal n bißchen genauer beschreiben was du meinst? meines wissen kann man in ner listbox nämlich gar keine checkboxen darstellen :gruebel:

alcaeus 2. Sep 2004 11:25

Re: ListView CheckBoxen disablen
 
Hi Helmi!

Checkboxen in Listviews? Erklär mal wie die da reinkommen...

Greetz
alcaeus

Helmi 2. Sep 2004 11:28

Re: ListView CheckBoxen disablen
 
hallo

CheckBoxen in ListView ist doch ganz einfach

ListView nehmen, viewstyle := vsReport, Checkboxes := true

und schon ist in der ersten Spalte in den Zeilen eine CheckBox zu sehen :-)

Was ich will: ich will die CheckBoxen in der ListView disablen (Enabled := false)
so wie bei einer normalen CheckBox (CheckBox.Enabled := false)

mfg
Helmi

Snakeye 2. Sep 2004 11:29

Re: ListView CheckBoxen disablen
 
Ich denke, er meint eine CheckListBox

Die Checkboxen kann man folgender Maßen disablen:

Delphi-Quellcode:
ChecklistBox1.ItemEnabled[n] := false;
Wobei n dann logischer Weise der Index-Wert deines Listeneintrages ist, den du disablen möchtest.


EDIT: Mist, zu spät ;) Wohl doch keine CheckListBox :(

Helmi 2. Sep 2004 11:32

Re: ListView CheckBoxen disablen
 
ne ne ne

ich meine schon ne ListView!!!

Helmi 2. Sep 2004 11:40

Re: ListView CheckBoxen disablen
 
Liste der Anhänge anzeigen (Anzahl: 1)
hier mal ein Beispiel welche CheckBoxen ich meine

Nothine 2. Sep 2004 11:56

Re: ListView CheckBoxen disablen
 
hab mich grad durch die delphi-hilfe aller beteidigten komponenten gewälzt und so wie's aussieht ist nicht vorgesehen gewesen die checkboxen zu disablen...

sprich wenn einer ne möglichkeit weiß nur über umwege würd ich ma sagen...

Helmi 2. Sep 2004 11:58

Re: ListView CheckBoxen disablen
 
mmmh
shit

muss ich mir was anderes einfallen lassen

Nothine 2. Sep 2004 12:07

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...

mirage228 2. Sep 2004 12:08

Re: ListView CheckBoxen disablen
 
Zitat:

Zitat von Helmi
mmmh
shit

muss ich mir was anderes einfallen lassen

Du könntest versuchen mit FindWindowEx oder EnumChildWindows versuchen, die CheckBox zu finden und dann per API diese zu disablen.

mfG
mirage228

Helmi 2. Sep 2004 12:09

Re: ListView CheckBoxen disablen
 
und wie macht mann das mirage228??

mirage228 2. Sep 2004 12:18

Re: ListView CheckBoxen disablen
 
Zitat:

Zitat von Helmi
und wie macht mann das mirage228??

Hier im Forum findest du unmengen an Codes, wie man Kindfenster (in dem Fall die Checkboxes) eines Fensters (hier der ListView) findest.
Wenn Du erstmal das Handle hast, kannst du mit Entsprechenden API Funktion den Stil WS_ENABLED von der Checkbox "wegnehmen".

mfG
mirage228

Robert_G 2. Sep 2004 15:07

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;
     }

Helmi 2. Sep 2004 15:13

Re: ListView CheckBoxen disablen
 
C kann ich ned entziffern :-(

Robert_G 2. Sep 2004 18:33

Re: ListView CheckBoxen disablen
 
Zitat:

Zitat von Helmi
C kann ich ned entziffern :-(

Na komm schon, das war doch noch sehr simpel... ;)


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:

Zitat von VCL
Delphi-Quellcode:
  THitTest = (htAbove, htBelow, htNowhere, htOnItem, htOnButton, htOnIcon,
    htOnIndent, htOnLabel, htOnRight, htOnStateIcon, htToLeft, htToRight);

Da aber die CheckBoxes wie ein StateIcon funktionieren, können wir das verwenden.
Delphi-Quellcode:
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;
Damit könntest du festlegen bei welchen Items der User die CheckBox nicht setzen darf.

Nachtrag: Da der Typ SET nur 255 Elemente enthalten darf, würden damit auch nur 255 disabled Items möglich sein.

Helmi 2. Sep 2004 20:54

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

Schweizer ListView

mfg
Helmi

Robert_G 2. Sep 2004 21:04

Re: ListView CheckBoxen disablen
 
Zitat:

Zitat von Helmi
aber wegen deines "Problems" mit dem Klick auf die CheckBox...
ich hab da was bei unseren Schweizer Freunden gesehen.

Wenn du alle CheckBoxes deaktivieren willst würde doch das hier im OnChange reichen das reichen.
Delphi-Quellcode:
  AllowChange := not (TListView(Item.ListView).Checkboxes and (ctState = Change ));
So ersparst du dem Programm die unötigen Aufrufe von GetItemAt & GetHitTest. ;)


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.

Helmi 2. Sep 2004 21:09

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

Robert_G 2. Sep 2004 21:13

Re: ListView CheckBoxen disablen
 
Zitat:

Zitat von Helmi
kannst du mir da vielleicht mal kurz ein kleines beispiel-Projekt machen?

:wiejetzt:
Du musst nur den Code in den OnChange-Event des ListViews packen. Was ist denn daran so schwer?

Helmi 2. Sep 2004 21:15

Re: ListView CheckBoxen disablen
 
ja - verzeihung

habs gesehen und schon getestet :-)

:-)


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