Delphi-PRAXiS

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 ;)

Wolfgang Mix 27. Dez 2009 18:25

Re: Problem mit StringGrid-Schleife
 
@patti

Wenn die TE kompletten Code bekommen, lernen sie IMHO absolut nichts.

Gruß

Wolfgang

Fussel9 27. Dez 2009 18:28

Re: Problem mit StringGrid-Schleife
 
1. TE???

und

2. Dadurch das er mir gesagt hat wie's muss ist mir aufgefallen worans lag: Nämlich das bei der bedingung if count = 7 das feld 1,7 schon beschrieben ist...

patti 27. Dez 2009 18:29

Re: Problem mit StringGrid-Schleife
 
Bitteschön. Aber wie ich weiter oben schon geschrieben habe: Mit div und mod wäre das ganze etwas einfacher und übersichtlicher. Wolfgang Mix hat ja bereits eine kleine Erklärung dazu geschrieben:

Zitat:

Zitat von Wolfgang Mix
Div teilt ganze Zahlen, das Ergebnis ist wieder ganz.
Mod ist der ganzzahlige Rest einer Division. Steht aber auch in der OH

Für die Zahl 8 gilt beispielsweise folgendes:

Code:
8 div 7 = 1 // ganzzahliges Teilen, die 7 geht in die 8 nur einmal rein
8 mod 7 = 1 // Rest des ganzzahligen Teilens (= 8 - (8 div 7)*7)
Wenn du das einmal verstanden hast, kannst du einige Schleifen vereinfachen und einige Dinge abkürzen. Das nur so als kleiner Tipp ;-)

mfg

Edit:

1. TE = Thread-Ersteller, also der, der den Thread eröffnet hat
2. Er hat in seinem ersten Post geschrieben, dass er schon lange nach dem Fehler sucht, also hat er sich ja selbst schon Gedanken gemacht. Das finde ich absolut ok und dann darf IMHO auch mit einem kompletten Code-Schnipsel geholfen werden. Immerhin scheint er es ja jetzt verstanden zu haben ;-)

Wolfgang Mix 27. Dez 2009 18:35

Re: Problem mit StringGrid-Schleife
 
TE .. Thread-Einsteller und ...

er hat Dir nicht gesagt, wo Dein Fehler liegt,
sondern fertigen Code geliefert. Das ist ein
himmelweiter Unterschied. Sorry, ich habe Dich
noch in Erinnerung als den Mann, der versucht,
möglichst alles ohne Mathematik zu lösen.

Gruß

Wolfgang

patti 27. Dez 2009 18:44

Re: Problem mit StringGrid-Schleife
 
Naja, bei einem so "kleinem" Problem sehe ich kaum eine andere Möglichkeit, als den Fehler zu beheben und die richtige Lösung in Form von Quelltext zu liefern, der ja noch dazu leicht kommentiert war. Gut, ich habe nicht unbedingt geschrieben, woran es genau lag, dass es nicht funktioniert hat, aber anscheinend hat meine kleine Erklärung ja ausgereicht, um den "Knoten zu lösen". Was hätte ich denn sonst machen sollen?

Das hat aber jetzt nichts mehr mit dem ursprünglichen Thema zu tun...

Wolfgang Mix 27. Dez 2009 21:09

Re: Problem mit StringGrid-Schleife
 
Tipps geben, mit denen er selber weiter kommt

[Edit] ... sonst glaubt der TE am Ende, er hätte etwas selbst "programmiert" ... [/Edit]

Fussel9 27. Dez 2009 22:09

Re: Problem mit StringGrid-Schleife
 
Manchmal hat man nunmal ein Brett vor dem Kopf und da ist es gut wenn einem jemand weiterhelfen kann dann komm ich her... und da meine Ideen über das was ich in der Schule lerne hinausgehen stelle ich wohl oft Fragen die für andere selbstverständlich zu sein scheinen...
Ein anderer Punkt ist das die meisten Leute hier ein anderes Delphi lernen als ich, womit ich nur meine das die anderen andere Grundlagen kennen als ich...


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