![]() |
AW: ListBox
Wenn ein Eintrag gezeichnet werden muss (z.B. weil gescrollt wurde), wird das OnDrawItem (wieso heißt das wohl so?) ausgeführt.
|
AW: ListBox
Nehmen wir mal den Code zur Hand und ändern den ein wenig :
Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem
(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState) ; var myColor: TColor; myBrush: TBrush; begin myBrush := TBrush.Create; with (Control as TListBox).Canvas do begin (* das machen wir raus if not Odd(Index) then myColor := clSilver else myColor := clYellow; *) // und das machen wir stattdessen rein If InDB(Index) then // die Funktion InDB musst dann noch schreiben, diese schaut in der DB nach und gibt True zurück wenn der Item in der DB gefunden wurde myColor := clYellow else myColor := clWhite; myBrush.Style := bsSolid; myBrush.Color := myColor; Windows.FillRect(handle, Rect, myBrush.Handle) ; Brush.Style := bsClear; TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]) ; MyBrush.Free; end; end; |
AW: ListBox
Das heisst ich müsste eigentlich meinen Programm Aufbau ändern. Aktuell lasse ich die Liste zuerst anlegen und prüfe dann erst
die Datenbank. So müsste ich praktisch bei jedem "Add Item" gleich prüfen habe ich das jetzt richtig verstanden? |
AW: ListBox
IMO müsste es genügen, ein Neuzeichnen der ListBox zu erzwingen.
|
AW: ListBox
@baumina
Mit dieser Funktion müsste ich den Programmaufbau komplett ändern, das wäre zuviel Aufwand :/ @DeddyH Da ich leider kein UI Spezi bin: Wie würde ich eine Listbox neu zeichnen? |
AW: ListBox
ich gebs auf ...
|
AW: ListBox
Wenn ListBox.Repaint nichts bringt, kann man es unsauber versuchen, indem man Visible auf false und wieder auf true setzt. Das ist aber sehr Quick & Dirty.
|
AW: ListBox
@baumina
Sorry ich verstehs echt nicht... Aber wenn ich mir deinen Code ansehe:
Delphi-Quellcode:
Dann müsste ich mir eine Funktion schreiben die zb Folgendes tut: (ganz grob)
procedure TForm1.ListBox1DrawItem
(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState) ; var myColor: TColor; myBrush: TBrush; begin myBrush := TBrush.Create; with (Control as TListBox).Canvas do begin (* das machen wir raus if not Odd(Index) then myColor := clSilver else myColor := clYellow; *) // und das machen wir stattdessen rein If InDB(Index) then // die Funktion InDB musst dann noch schreiben, diese schaut in der DB nach und gibt True zurück wenn der Item in der DB gefunden wurde myColor := clYellow else myColor := clWhite; myBrush.Style := bsSolid; myBrush.Color := myColor; Windows.FillRect(handle, Rect, myBrush.Handle) ; Brush.Style := bsClear; TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]) ; MyBrush.Free; end; end; - Datenbank connect - überprüfen ob user vorhanden (true od. false returnen) - Disconnect Das Problem ist aber, das der User zuerst die Liste anlegen muss. Dann gibt es eine Art "Execute" Button und in dieser Prozedur werden dann etliche Datenbankspezifische Dinge durchgeführt (abfragen, updates, inserts etc.). Wenn es hier ein Problem gibt zB. User nicht vorhanden, Färbe das Item yellow, bei SQL Update Fehler red und bei success green. Dh. ich bräuchte die Möglichkeit in meiner "SQL-Funktion", sprich wenn ich die Liste abarbeite das Item[x] nachträglich zu ändern. Sorry falls ich mich blöd stelle. Habe mich vorhin mit OnDrawItem gespielt und der einzige Erfolg war, das ich beim !Hinzufügen! die Farbe ändern kann, jedoch nicht bei einem bestehenden. oder wie gesagt ich bin zu blöd ^^ LG |
AW: ListBox
![]() Zitat:
|
AW: ListBox
OK, Vorschlag. Führe beim Füllen deiner ListBox eine Liste mit Farben, oder schreibe die Farben in die Objects der der ListboxItems. Am Anfang alle clWhite. Beim Execute-Knopf änderst du dann die Farben anhand des Items auf Rot/Grün/Gelb. Im OnItemDraw nimmst du dann die Farbe aus der Liste oder aus den Objects, wie immer du dich entschieden hast diese mitzuführen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:52 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