Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Listbox - Zeile für Anklicken sperren (https://www.delphipraxis.net/159784-listbox-zeile-fuer-anklicken-sperren.html)

champagner 12. Apr 2011 18:43

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!

Luckie 12. Apr 2011 18:47

AW: Listbox - Zeile für Anklicken sperren
 
Wenn Listenindex <> 0 dann mach was.

champagner 12. Apr 2011 19:00

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!

Luckie 12. Apr 2011 19:04

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.

ASM 12. Apr 2011 23:14

AW: Listbox - Zeile für Anklicken sperren
 
Zitat:

Zitat von champagner (Beitrag 1094713)
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?


Hilft das hier ?
Code:
procedure TForm1.ListBox1Click(Sender: TObject);
begin
  with ListBox1 do
    if ItemIndex = 0 then
    begin
      Selected[0] := false;
      exit;
    end;
end;

Luckie 12. Apr 2011 23:17

AW: Listbox - Zeile für Anklicken sperren
 
Wozu das Exit? Die Prozedur ist doch da sowieso zu ende.

ASM 13. Apr 2011 00:00

AW: Listbox - Zeile für Anklicken sperren
 
Zitat:

Zitat von Luckie (Beitrag 1094752)
Wozu das Exit? Die Prozedur ist doch da sowieso zu ende.

Ich nehme doch an, dass er mit den anderen Items der Listbox im OnClickEvent noch etwas Spezielles anfangen will, nur eben nicht speziell mit dem Item[0].
Natürlich könnte das auch per IF ... ELSE voneinander getrennt werden, dann ohne EXIT, wenn's damit nicht gefällt.

Hansa 13. Apr 2011 01:44

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:

teebee 13. Apr 2011 11:08

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.

DeddyH 13. Apr 2011 12:22

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 diesen Thread gestoßen, ausprobiert habe ich es aber nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:52 Uhr.
Seite 1 von 2  1 2      

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