Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Aktuelles Datum Einfärben (https://www.delphipraxis.net/145284-aktuelles-datum-einfaerben.html)

Fussel9 28. Dez 2009 15:44


Aktuelles Datum Einfärben
 
Hi hab das schon in nem anderen Thread angesprochen, aber scheinbar lohnt es sich doch nen neuen Thread aufzumachen:

Frage und co siehe hier:Frage und Co. am Ende des Thread

fkerber 28. Dez 2009 15:45

Re: Aktuelles Datum Einfärben
 
Zitat:

Zitat von Fussel9
Hi hab das schon in nem anderen Thread angesprochen, aber scheinbar lohnt es sich doch nen neuen Thread aufzumachen:

Frage und co siehe hier:

:?:


Edit: Ah, jetzt ja.

Fussel9 28. Dez 2009 16:37

Re: Aktuelles Datum Einfärben
 
Ok, da immernoch keiner ne idee hat hier mal die kompletten zwei prozeduren, und ja ich weiß das ich da manches umständlicher hab als vielleicht nötig...

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var lauf: Integer;
    count,Zaehler: Integer;
    row: Integer;
    year: Word;
    month: Word;
    firstMonday: Word;
    day: Word;
begin
Zaehler:=0;
row:=1;
count:=0;
Tage:=DaysInMonth(date);
DecodeDate(date,year,month,firstMonday);
DecodeDate(LastDayOfWeekOfMonth(year,month,1),year,month,firstMonday);
while firstMonday > 7 do
  begin
    firstMonday:=firstMonday-7;
  end;
if not firstMonday > 7 then
  begin
    With Kalender do
      begin
        dec(firstMonday);
        Cells[firstMonday,0]:='Montag';
        inc(firstMonday);
      if not (firstMonday >= 7) then
        begin
        Cells[firstMonday,0]:='Dienstag';
        inc(firstMonday);
        end
      else
        begin
        ShowMessage('ELSE-HANDLER GREIFT BEI FALL: '+IntToStr(firstMonday)+'!');
        firstMonday:=0;
        Cells[firstMonday,0]:='Dienstag';
        inc(firstMonday);
        end;
      if not (firstMonday >= 7) then
        begin
        Cells[firstMonday,0]:='Mittwoch';
        inc(firstMonday);
        end
      else
        begin
        ShowMessage('ELSE-HANDLER GREIFT BEI FALL: '+IntToStr(firstMonday)+'!');
        firstMonday:=0;
        Cells[firstMonday,0]:='Mittwoch';
        inc(firstMonday);
        end;
      if not (firstMonday >= 7) then
        begin
        Cells[firstMonday,0]:='Donnerstag';
        inc(firstMonday);
        end
      else
        begin
        ShowMessage('ELSE-HANDLER GREIFT BEI FALL: '+IntToStr(firstMonday)+'!');
        firstMonday:=0;
        Cells[firstMonday,0]:='Donnerstag';
        inc(firstMonday);
        end;
      if not (firstMonday >= 7) then
        begin
        Cells[firstMonday,0]:='Freitag';
        inc(firstMonday);
        end
      else
        begin
        ShowMessage('ELSE-HANDLER GREIFT BEI FALL: '+IntToStr(firstMonday)+'!');
        firstMonday:=0;
        Cells[firstMonday,0]:='Freitag';
        inc(firstMonday);
        end;
      if not (firstMonday >= 7) then
        begin
        Cells[firstMonday,0]:='Samstag';
        inc(firstMonday);
        end
      else
        begin
        ShowMessage('ELSE-HANDLER GREIFT BEI FALL: '+IntToStr(firstMonday)+'!');
        firstMonday:=0;
        Cells[firstMonday,0]:='Samstag';
        inc(firstMonday);
        end;
      if not (firstMonday >= 7) then
        begin
        Cells[firstMonday,0]:='Sonntag';
        end
      else
        begin
        ShowMessage('ELSE-HANDLER GREIFT BEI FALL: '+IntToStr(firstMonday)+'!');
        firstMonday:=0;
        Cells[firstMonday,0]:='Sonntag';
        end;
      end;
  end;
DecodeDate(date,year,month,day);
for lauf := 1 to Tage do
begin
Inc(Zaehler);
  if count = 7 then
    begin
      count:=0;
      inc(row);
      Kalender.Cells[count,row]:=IntToStr(lauf);
      inc(count);
    end
  else
    begin
      Kalender.Cells[count,row]:=IntToStr(lauf);
      inc(count);
    end;
if EncodeDate(year,month,zaehler)=date then
  begin
    Kalender.objects[count,row]:=TObject(1); //<-Das Tuts nicht
  end;
end;
//DecodeDate(date,year,month,day);          //<-Das war meine erste Idee funzt auch nicht
//Kalender.objects[day mod 7,day div 7]:=TObject(1); // da wird immer (gestern und heute) der 22te eingefärbt
end;

Delphi-Quellcode:
procedure TForm1.KalenderDrawCell(Sender: TObject; Col, Row: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  (sender as TStringgrid).canvas.Brush.color:=(sender as TStringgrid).color;
  if integer(Kalender.objects[col,row])=1 then
  begin
    (sender as TStringgrid).canvas.Brush.color:=clInfoBk;
    (sender as TStringgrid).canvas.FillRect(rect);
    (sender as TStringgrid).canvas.TextOut(rect.left+2,rect.top+2,(sender as TStringgrid).Cells[col,row]);
  end;
end;
Vielleicht hilft das ja irgendwie....
Edit--> Hi, hab mal nen begin und end zur letzten prozedur hinzugefürt und bin einige male mit dem Debugger drüber Ergebnis: --> if integer(Kalender.objects[col,row]=1 then .... ist nicht erfüllt

torud 28. Dez 2009 17:17

Re: Aktuelles Datum Einfärben
 
Du hättest lieber mal im ersten Posting Deine Frage notiert. Dann hättest Du auch eine Chance auf Antworten. Es wird sich sicher keiner die Mühe machen erst einen anderen Thread zu öffnen, um Deine Frage oder Dein Problem zu ermitteln.

Das nur als Tipp für die Zukunft.

Fussel9 29. Dez 2009 15:57

Re: Aktuelles Datum Einfärben
 
Nun, warum auch immer ist es nur erlaubt 24h lang seine beiträge zu bearbeiten... für alle dies interessiert: mein Problem ist das bei dem oben angegebenen Code wie ja da auch schon erwähnt

Zitat:

Hi, hab mal nen begin und end zur letzten prozedur hinzugefürt und bin einige male mit dem Debugger drüber Ergebnis: --> if integer(Kalender.objects[col,row]=1 then .... ist nicht erfüllt
Die if then anfrage nicht erfüllt wird daher wird das Feld des aktuellen Datums nicht eingefärbt was nun mal mein plan war ;)

Hoffe das mir irgendjemand helfen kann die untere prozedur(Draw) hab ich nur aus nem anderen Beitrag da hieß es ihrgendwas mit flag setzen und so damit kenn ich mich selber leider gar nicht aus schien mir aber das einfachste zu sein...

PLZ help :)

hoika 29. Dez 2009 20:25

Re: Aktuelles Datum Einfärben
 
Hallo,

Delphi-Quellcode:
Kalender.objects[count,row]:=TObject(1); //<-Das Tuts nicht
AHA !!!!!

Wer hätte das gedacht ... ;)


Delphi-Quellcode:
Kalender.objects[count,row]:= Kalender;
Im OnDrawCell dann einfach Prüfen auf

Delphi-Quellcode:
if Kalender.objects[X,Y]<>NIL

Man solltenat. auch noch eine Prozedur schreiben,
die vor dem Füllen eines Grids alle objects auf NIL setzt.


Heiko

Fussel9 29. Dez 2009 20:53

Re: Aktuelles Datum Einfärben
 
kann ich auch auf

Delphi-Quellcode:
if Kalender.objects[X,Y]=Kalender
prüfen?

dann bräuchte ich besagte prozedur nicht... :)

[EDIT]-->Habs mal aus probiert hier also nochmal der komplette Quellcode für alle dies mal brauchen werden:

alles wie oben(hat mit dem einfärben ja nichts zu tun ;) ) ...

Delphi-Quellcode:
DecodeDate(date,year,month,day);
for lauf := 1 to Tage do
begin
Inc(Zaehler);
  if count = 7 then
    begin
      count:=0;
      inc(row);
      Kalender.Cells[count,row]:=IntToStr(lauf);
      inc(count);
    end
  else
    begin
      Kalender.Cells[count,row]:=IntToStr(lauf);
      inc(count);
    end;
if EncodeDate(year,month,zaehler)=date then
  begin
    Kalender.objects[count-1,row]:=Kalender;
  end;
end;
end;
und dann die DrawCell

Delphi-Quellcode:
procedure TForm1.KalenderDrawCell(Sender: TObject; x, Y: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  (sender as TStringgrid).canvas.Brush.color:=(sender as TStringgrid).color;
  if Kalender.objects[X,Y]=Kalender then
  begin
    (sender as TStringgrid).canvas.Brush.color:=clInfoBk;
    (sender as TStringgrid).canvas.FillRect(rect);
    (sender as TStringgrid).canvas.TextOut(rect.left+2,rect.top+2,(sender as TStringgrid).Cells[X,Y]);
  end;
end;

Ein ganz großes THX an alle die mir geholfen haben :dp: ;)


end. ;)

hoika 30. Dez 2009 07:28

Re: Aktuelles Datum Einfärben
 
Hallo,

na siehsde ;)

und trotzdem beisst mich der doppelte Code ;)

Delphi-Quellcode:
Kalender.Cells[count,row]:=IntToStr(lauf);
inc(count);

Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:07 Uhr.

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