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 markieren (https://www.delphipraxis.net/64118-listbox-markieren.html)

CorsaGsi16v 27. Feb 2006 19:46


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

marabu 27. Feb 2006 20:37

Re: Listbox markieren
 
Herzlich willkommen in der Delphi-PRAXiS, Christian.

Wenn du der ListBox den Style lbOwnerDrawFixed gibst, dann funktioniert das hier:

Delphi-Quellcode:
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;
Grüße vom marabu

CorsaGsi16v 27. Feb 2006 20:46

Re: Listbox markieren
 
Hallo,
danke für die schnelle antwort ich habe ein Problem mit folgendem Satz:
Zitat:

fs: TFormatSettings;
Hier Zeigt es mir an Undefinierter Bezeichner TFormatSettings!

MfG
Christian

CorsaGsi16v 27. Feb 2006 20:48

Re: Listbox markieren
 
...ich nochmal;

Zitat:

GetLocaleFormatSettings(GetUserDefaultLCID, fs);
und hier auch der Gleiche Fehler mit GetLocaleFormatSettings!!!

MfG
Christian

marabu 27. Feb 2006 20:52

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

CorsaGsi16v 27. Feb 2006 20:55

Re: Listbox markieren
 
Ich benutze noch Delphi 5

marabu 27. Feb 2006 21:24

Re: Listbox markieren
 
Dann benutze GetFormatSettings() anstatt GetLocaleFormatSettings().

Gute Nacht.

marabu

CorsaGsi16v 28. Feb 2006 15:50

Re: Listbox markieren
 
Sorry aber das funktioniert nicht! Zeigt immernoch fehler an

marabu 28. Feb 2006 16:08

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:
function TryStrToDate(const s: String; var dt: TDateTime): Boolean;
begin
  try
    dt := StrToDate(s);
    Result := true;
  except
    Result := false;
  end;
end;
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:

Delphi-Quellcode:
DateSeparator := '.';
ShortDateFormat := 'dd.mm.yy';
Du kannst die von dir benutzte Delphi-Version übrigens in dein DP USer-Profil eintragen.

Freundliche Grüße vom marabu

CorsaGsi16v 1. Mär 2006 17:32

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:14 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