Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - ListBox mit Spalten oder Farbänderung


patrick dee - Di 17.12.02 16:37
Titel: ListBox mit Spalten oder Farbänderung
hi leute

ich hänge immer noch an einem ListBox Problem.
Ich wähle mit der enter Taste einen entrag aus und zeige diesen
in einer Edit an. Das geht alles pefekt. Nun der Knackpunkt :
Wenn ich Enter gedrückt habe soll am Ende der Zeile die aktuelle Uhrzit erscheinen und wenn es geht in rot und Fett.

Ich kriege es einfach nicht hin. Oder gibt es einen Weg der ListBox zu sagn das wenn Enter gedrückt wurde, das nach 80 Zeichen die Zeit
timetostr(now); eigefügt werden soll. So hätte ich die Zeiten immer untereinander egal wie lang die Zeile in der ListBox ist.

Wäre schön wenn mir jemand bei der Lösung Helfen könnte. Habe auch mal was mit ListBox zeichnen gesehen komme aber damit nicht ganz klar.

Oder gibt es im Internet ein gutes Tutorial was man alles mit einer ListBox anstellen kann.


gruß

patrick

Titel angepasst von Klabautermann.


Keldorn - Di 17.12.02 18:05

Hallo,

dir wurden doch schon haufen tips gegeben. Mit einer Suche hättest du auf alle Fälle was passendes gefunden, wie man ein Item selber zeichnet.
Oder ein Listview verwenden.



Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
Var s1,s2:string;
    i:integer;
begin
  //nicht vergessen, Style der listbox auf ownerdrawfixed stellen
  with (Control as Tlistbox) do
    begin
      //den string "splitten"
      i:=pos(' - ',Items[Index]);
      if i=0 then s1:=Items[Index]    //kein trennzeichen gefunden, s1=item
             else s1:=copy(Items[Index],1,i);
      s2:=copy(Items[Index],i+3,20);

      //Zellhintergrund, wenn markiert, andere Farbe
      if odselected in State then Canvas.brush.color:=clblue
                             else Canvas.brush.color:=clwhite;
      Canvas.Fillrect(rect);

      //ersten string ausgeben
      Canvas.Font.color:=clblack;
      Canvas.textout(Rect.Left+ 2, Rect.Top, s1);

      if i>0 then
        begin
          //zweiten string rot ausgeben rechtsbündig ausgeben
          Canvas.Font.color:=clred;
          Canvas.textout(Rect.right- 50, Rect.Top, s2);
        end;

    end;
end;


...nur so auf die Schnell geklimpert und die Sache mnit dem Splitten baut auf den damaligen post von mir auf .

Mfg Frank


foxy - Di 17.12.02 23:14

jo geb ich keldron recht nur eins ...

Quelltext
1:
2:
3:
//Zellhintergrund, wenn markiert, andere Farbe 
      if odselected in State then Canvas.brush.color:=clblue 
                             else Canvas.brush.color:=clwhite


wenn du das so machst wird nicht nur deine Zeit blau sonder die ganze zeile ... das iss nich sinn oder willst du das so??

wenn nich dann versuch ma mit copy bis zum 81 zeichen weg zu schneiden das dann einfärben müsste gehn ... aber keine garantie


Klabautermann - Mi 18.12.02 00:41

Hallo,

bei anspruchsvolleren Listenaufgaben würde ich dir zu tListView raten. Das kann wesentlich mehr als eine ListBox. Spalten sind dort kein Problem, auch das Unfärben (auch einzelner Spalten) ist verhältnismäßig leicht.

Gruß
Klabautermann


Keldorn - Mi 18.12.02 09:22

Hallo

foxy hat folgendes geschrieben:

wenn du das so machst wird nicht nur deine Zeit blau sonder die ganze zeile ... das iss nich sinn oder willst du das so??

natürlich will ich das so: die aktuell ausgewählte Zeile soll einen kompletten blauen Hintergrund haben, sonst einen weißen. Das hat nix mit der roten Schrift der Zeit zu tun. besser wäre natürlich hier color:=clHighlight zu setzen, bin mir aber nicht sicher, welches die richtige Fabre ist.

patrick dee hat folgendes geschrieben:

Wenn ich Enter gedrückt habe soll am Ende der Zeile die aktuelle Uhrzit erscheinen und wenn es geht in rot und Fett.

er will ja nur die Zeit rot und fett (ups, habsch vergessen -> Canvas.font.Style setzen)

Klabautermann hat folgendes geschrieben:

bei anspruchsvolleren Listenaufgaben würde ich dir zu tListView raten. Das kann wesentlich mehr als eine ListBox. Spalten sind dort kein Problem, auch das Unfärben (auch einzelner Spalten) ist verhältnismäßig leicht.


Eben, wurde ihm schon mehrmals geraten. Aber das hat andere Gründe (letzte Posts) warum er Listview nicht verwendet (denke ich). Aber wenn er bei der Listbox mit Umfärben nicht klarkommt schafft er das mit dem Listview auch nich.

Mfg Frank