![]() |
Listbox markieren
Hallo,
ich möchte in einer Listbox in der z.B. folgende Einträge(nach immer gleichem Muster)sind markieren ob das eingetragene Datum bereits Vergangenheit ist oder nicht: Listbox: ABCDEF_ASSSAA_02.02.03 BBB_BBDB_03.03.06 CCCDDD_CCDDDC_04.04.07 also es sind immer zwei Unterstriche bis zum Datum die Buchstaben vorher haben aber nicht immer die gleiche Länge wie kann ich das machen das das abgelaufene Datum mit dem heutigen verglichen wird und wenn es vorbei ist rot markieren und evtl meldung geben!? Datum ist in Labe1 vorhanden! Vielen Dank im vorraus MfG Christian |
Re: Listbox markieren
Herzlich willkommen in der Delphi-PRAXiS, Christian.
Wenn du der ListBox den Style lbOwnerDrawFixed gibst, dann funktioniert das hier:
Delphi-Quellcode:
Grüße vom marabu
type
TDemoForm = class(TForm) ListBox: TListBox; Memo: TMemo; InitButton: TButton; procedure ListBoxDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); procedure InitButtonClick(Sender: TObject); procedure FormCreate(Sender: TObject); private fs: TFormatSettings; end; // ... procedure TDemoForm.ListBoxDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var s: String; dt: TDateTime; begin with Control as TListbox do begin Canvas.FillRect(Rect); s := Copy(Items[Index], Length(Items[Index]) - 7, 8); if TryStrToDate(s, dt, fs) and (dt < Trunc(Date)) then begin Canvas.Brush.Color := clRed; Canvas.Font.Color := clWhite; end else begin Canvas.Brush.Color := clWhite; Canvas.Font.Color := clBlack; end; Canvas.TextOut(Rect.Left, Rect.Top, Items[Index]); end; end; procedure TDemoForm.FormCreate(Sender: TObject); begin GetLocaleFormatSettings(GetUserDefaultLCID, fs); fs.DateSeparator := '.'; fs.ShortDateFormat := 'dd.mm.yy'; end; |
Re: Listbox markieren
Hallo,
danke für die schnelle antwort ich habe ein Problem mit folgendem Satz: Zitat:
MfG Christian |
Re: Listbox markieren
...ich nochmal;
Zitat:
MfG Christian |
Re: Listbox markieren
Vergleiche mal unsere Delphi-Versionen - deine hast du ja nicht angegeben. Bei mir genügt das Einbinden der Units SysUtils und Windows.
marabu |
Re: Listbox markieren
Ich benutze noch Delphi 5
|
Re: Listbox markieren
Dann benutze GetFormatSettings() anstatt GetLocaleFormatSettings().
Gute Nacht. marabu |
Re: Listbox markieren
Sorry aber das funktioniert nicht! Zeigt immernoch fehler an
|
Re: Listbox markieren
Dann Schluss mit blinde Kuh - wo ist dein Code?
PS: Habe deinen Code untersucht und festgestellt, dass da noch einige Unterschiede zwischen D5 und D7 sind. Hier hast du einen Ersatz für das fehlende TryStrToDate():
Delphi-Quellcode:
Die TFormatSettings gibt es noch nicht, es wird noch mit globalen Einstellungen gearbeitet. Den Aufruf von GetFormatSettings kannst du dir dann sparen. Das hier ist aber noch nötig - sicher ist sicher:
function TryStrToDate(const s: String; var dt: TDateTime): Boolean;
begin try dt := StrToDate(s); Result := true; except Result := false; end; end;
Delphi-Quellcode:
Du kannst die von dir benutzte Delphi-Version übrigens in dein DP USer-Profil eintragen.
DateSeparator := '.';
ShortDateFormat := 'dd.mm.yy'; Freundliche Grüße vom marabu |
Re: Listbox markieren
Hi,
bin jetzt erst zum probieren gekommen! Das funktioniert immer noch nicht ganz! Kann man den kompletten Text nicht einfach per Button auf das Datum durchsuchen und jedes Item das den Text des Labels1 enthält rot markieren??? Label1.Caption = heutiges Datum MfG Christian |
Re: Listbox markieren
Hallo marabu,
ich finde es zum .... wenn hier immer wieder Code in das Forum gestellt wird der unvollständig (auf das Thema bezogen) und auch nie gelaufen ist (so jedenfalls nicht). Wie soll denn jemand, der keine Ahnung hat (wie meine Jungs hier) checken was wie wo gemacht wird. Entweder du kommentierst das Ganze durch oder legst den Code vollständig ab. Eine Erklärung wäre auch nicht schlecht. Was machst du mit dem memo oder dem nicht existierenden Button? Rainer |
Re: Listbox markieren
Hallo Rainer,
das Memo enthielt bei meinem Test-Code die folgenden Zeilen aus Beitrag #1:
Code:
Der OnClick-Handler von InitButton überträgt diese Zeilen in die ListBox:
ABCDEF_ASSSAA_02.02.03
BBB_BBDB_03.03.06 CCCDDD_CCDDDC_04.04.07
Delphi-Quellcode:
Der Code zeigt nur die Vorgehensweise und wurde von mir unter D7 kurz getestet. Feinheiten bei der Farbgebung in Verbindung mit der Selektion müssen sicher noch nachgebessert werden. Es tut mir sehr leid, wenn ich nicht alle Erwartungen an mich erfüllen kann. Ich fürchte aber, dass dies so bleiben wird, da meine Tagesform variiert und ich bisweilen Opfer von speziellen Interessenkonflikten bin.
procedure TDemoForm.InitButtonClick(Sender: TObject);
begin ListBox.Items.Assign(Memo.Lines); end; Freundliche Grüße marabu |
Re: Listbox markieren
Hi Marabu,
kann ich verstehen! Habe das Ganze meinen Auszubildenden weitergegeben und musste zum Schluss alle Fehler (zum Teil auch deren Fehler) rausmachen. Hat mir dann saumässig gestunken. Daher mein etwas unwirscher Beitrag. Ich habe in einem anderen thread, gleiches Thema Mustercode abgelegt. Sorry (aber so bin ich halt) Rainer |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:44 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