Autor Beitrag
patrick dee
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 311

Win 98SE, WinXP
D3,D6
BeitragVerfasst: Di 17.12.02 16:37 
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.

_________________
Glauben heißt nichts wissen ...
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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.


ausblenden volle Höhe 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

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
foxy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: Di 17.12.02 23:14 
jo geb ich keldron recht nur eins ...
ausblenden 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

_________________
"Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it." (Linus Torvalds)
OperatingSystem Laptop (Ubuntu Hardy)
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)