Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit StringGrid-Schleife (https://www.delphipraxis.net/145246-problem-mit-stringgrid-schleife.html)

Fussel9 27. Dez 2009 17:38


Problem mit StringGrid-Schleife
 
Hi hab lange nachgedacht.. sehs aber einfach nicht:

Delphi-Quellcode:
for i := 1 to DaysInMonth(date) do
begin
  if count = 7 then
    begin
      Kalender.Cells[count,row]:=IntToStr(i);
      inc(row);
      count:=0;
    end
  else
    begin
      Kalender.Cells[count,row]:=IntToStr(i);
      inc(count);
    end;
end;
Will mit dieser Schleife ein String Grid befüllen allerding sieht das resultat wie folgt aus:
1 2 3 4 5 6 7
9 10 11 12 13 14 15
17 18 19 20 21 22 23
25 26 27 28 29 30 31

Er überspringt also die 8, 16 und 24

sieht jemand wieso?

Wolfgang Mix 27. Dez 2009 17:42

Re: Problem mit StringGrid-Schleife
 
Die erste Zelle oben links hat die Koordinaten [0,0]

patti 27. Dez 2009 17:47

Re: Problem mit StringGrid-Schleife
 
Einfacher geht es so:

Delphi-Quellcode:
for i := 0 to DaysInMonth(Now) - 1 do
  StringGrid1.Cells[i mod 7, i div 7] := IntToStr(i+1);
mfg
Patti

Wolfgang Mix 27. Dez 2009 18:00

Re: Problem mit StringGrid-Schleife
 
Falls das ein Kalender werden soll, fehlt Die jetzt noch FirstDayOfMonth aus den
DateUtils2

Grüß

Wolfgang

Fussel9 27. Dez 2009 18:08

Re: Problem mit StringGrid-Schleife
 
Wen ichs jetz mal so mache wie ichs hab, da ich von mod und div noch nie was gehört habe...
sollte ich vielleicht mal die komplette prozedur einfügen:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
    count: Integer;
    row: Integer;
begin
row:=1;
count:=0;
Tage:=DaysInMonth(date);
MessageDlg('Willkommen heute ist der '+DateToStr(date)+' dieser Monat hat '+IntToStr(DaysInMonth(date))+' Tage!',mtInformation,[mbOk],0);
for i := 1 to DaysInMonth(date) do
begin
  if count = 7 then
    begin
      Kalender.Cells[count,row]:=IntToStr(i);
      inc(row);
      count:=0;
    end
  else
    begin
      Kalender.Cells[count,row]:=IntToStr(i);
      inc(count);
    end;
end;

@Wolfgang: Ich fange absichtlich in der zweiten reihe an damit oben Montag...Dienstag ect. stehen kann

Wolfgang Mix 27. Dez 2009 18:10

Re: Problem mit StringGrid-Schleife
 
Okay, aber der 1, des Monats sollte an der richtigen X_Position stehen

[Edit] Div teilt ganze Zahlen, das Ergebnis ist wieder ganz.
Mod ist der ganzzahlige Rest einer Division. Steht aber auch in der OH [/Edit]

Gruß

Wolfgang

Fussel9 27. Dez 2009 18:13

Re: Problem mit StringGrid-Schleife
 
Womit mein problem noch immer nicht gelößt ist... siehe ganz oben...

ps:Ich habe vor die beschriftung Montag dienstag ect. passend zu verschieben...

Wolfgang Mix 27. Dez 2009 18:19

Re: Problem mit StringGrid-Schleife
 
Montag ist in jedem Kalender immer oben links. Wo ist das Problem?

patti 27. Dez 2009 18:19

Re: Problem mit StringGrid-Schleife
 
Wenn du auf div und mod verzichten und die Schleife so wie oben aufbauen willst, dann musst du folgendes machen:

Delphi-Quellcode:
row  := 1;
count := 0;
//
for i := 1 to DaysInMonth(date) do
begin
   if count = 7 then
   begin
     count := 0; // <-- erst Koordinaten setzen
     inc(row);
     Kalender.Cells[count,row] := IntToStr(i); //<-- dann schreiben
     inc(count); //<-- und count noch erhöhen
   end
   else
   begin
     Kalender.Cells[count,row] := IntToStr(i);
     inc(count);
   end;
end;
mfg

Fussel9 27. Dez 2009 18:23

Re: Problem mit StringGrid-Schleife
 
Dankeschön ;)


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