![]() |
Listbox - Zeile für Anklicken sperren
Hallo,
ich habe eine Listbox mit drei Einträgen. Die erste Zeile ist in roter Schrift, alle anderen normal schwarz. Ich mächte die erste Zeile (rot) für das Anklicken sperren; also: wenn auf diese Zeile geklickt wird, passiert nichts. Hat jemand eine Idee? Danke! |
AW: Listbox - Zeile für Anklicken sperren
Wenn Listenindex <> 0 dann mach was.
|
AW: Listbox - Zeile für Anklicken sperren
O.K., aber in welches Ereignis?
Denn kaum, dass die erste Zeile angeklickt wird, wird sie blau markiert. Danke! |
AW: Listbox - Zeile für Anklicken sperren
Im Klick Ereignis der Listbox? Davon, dass sie nicht markiert werden können soll hast du nichts gesagt. da wirst du wohl die Einträge selber zeichnen müssen.
|
AW: Listbox - Zeile für Anklicken sperren
Zitat:
Hilft das hier ?
Code:
procedure TForm1.ListBox1Click(Sender: TObject);
begin with ListBox1 do if ItemIndex = 0 then begin Selected[0] := false; exit; end; end; |
AW: Listbox - Zeile für Anklicken sperren
Wozu das Exit? Die Prozedur ist doch da sowieso zu ende.
|
AW: Listbox - Zeile für Anklicken sperren
Zitat:
Natürlich könnte das auch per IF ... ELSE voneinander getrennt werden, dann ohne EXIT, wenn's damit nicht gefällt. |
AW: Listbox - Zeile für Anklicken sperren
Zu überlegen wäre allerdings auch, die Objects auszuwerten. Also mit AddObject jeder Zeile (also den Items) eine Eigenschaft zu verpassen. -> F1 Flexibler gehts kaum, weil in das Object alles reingepackt werden kann, was man braucht. Ich habe das sogar 2-dimensional mit Stringgrid gemacht. Ich färbe Dir da jede Zelle einzeln, wenn es sein muss. Da kann hier irgendein C-Heini jammern, wie er will. Mit Delphi geht alles. :mrgreen:
|
AW: Listbox - Zeile für Anklicken sperren
Ich habe in einer ListBox-Ableitung die relevanten Windows-Nachrichten abgefangen (ich hoffe alle?). Mir ist kein Weg bekannt, das Selektieren selbst abzufangen, was eigentlich das sauberste wäre, daher der umständliche Weg über Maus und Tastatur.
Binde die folgende Unit im entsprechenden Formular nach StdCtrls ein. Dann verhält sich Deine Listbox so wie Du es beschrieben hast. Man könnte noch ein Property einbauen, welches dieses Verhalten ein- bzw. ausschaltet, dann kann man auch normale Listboxen verwenden.
Delphi-Quellcode:
unit lb_new;
interface Uses StdCtrls, Windows, Messages, Types; Type TListBox=class(StdCtrls.TListBox) Procedure WndProc(var Message: TMessage); override; end; implementation { TListBox } Procedure TListBox.WndProc(var Message: TMessage); Var ClickedItem: Integer; NumVisibleItems: Integer; Begin Case Message.Msg Of WM_KEYDOWN: Begin Case TWMKEYDOWN(Message).CharCode Of VK_UP: Begin If ItemIndex=1 Then TopIndex := 0 Else Inherited; End; VK_HOME: Begin TopIndex := 0; ItemIndex := 1; End; VK_PRIOR: Begin NumVisibleItems := ClientHeight Div ItemHeight; If ItemIndex-NumVisibleItems+1<=0 Then Begin TopIndex := 0; ItemIndex := 1; End Else Inherited; End; Else Inherited; End; End; WM_LBUTTONDOWN: Begin ClickedItem := ItemAtPos(Point(TWMLBUTTONDOWN(Message).xPos,TWMLBUTTONDOWN(Message).yPos),True); If ClickedItem>0 Then Inherited; End; Else Inherited; End; End; end. |
AW: Listbox - Zeile für Anklicken sperren
Ich glaube, ich hatte da mal was auf delphi.about.com gelesen, finde es aber nicht mehr wieder. Stattdessen bin ich auf
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 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 by Thomas Breitkreuz