Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Prism Zahlen hochzählen (https://www.delphipraxis.net/87301-zahlen-hochzaehlen.html)

Overclocker 26. Feb 2007 18:04


Zahlen hochzählen
 
Hallo,
versuch schon vergeblich, folgenden quellcode perfekt zu machen:

Delphi-Quellcode:
procedure TForm1.Timer3Timer(Sender: TObject);
var Wert:string;
i:integer;
x:integer;
begin
Wert := FloattoStr (4);
i:=3;
x:=i+1;
if stringgrid1.cells[x,3]=Wert then
if stringgrid1.cells[x,3]=Wert
then stringgrid1.cells[3,3]:='0';
end;

Der Code soll folgendes machen: Er soll in Zelle 4,3 anfangen und dann die anweisung ausführen,also wenn 4,3=Wert(also 4)ist, dann soll er schauen ob 5,3 auch gleich Wert(also 4)ist und dann soll in der zelle 3,3 der Wert 0 reingeschrieben werden.

aber irgendwie find ich nichts wie ich das automatisch weiterzählen lassen kann, dachte mit i+1 geht das, aber bin noch delpehi einsteiger :roll:

thx für die hilfe

Klaus01 26. Feb 2007 18:09

Re: Zahlen hochzählen
 
Hallo,

hat es eine bestimmten Sinn oder Zweck, warum Du das mit einem Timer
realisierst? Eine Schleife While/Repeat wäre hier wohl schneller.

Grüße
Klaus

Overclocker 26. Feb 2007 18:12

Re: Zahlen hochzählen
 
ich will/wollte das mit einem timer lösen, da ich damit schon einmal gearbeitet habe und ich mir dachte dass dies einfacher wäre :roll:

hättest denn vllt schnell nen code für die schleife??

3_of_8 26. Feb 2007 18:21

Re: Zahlen hochzählen
 
Ein Timer ist für Dinge gedacht, die sich periodisch wiederholen sollen. Der ist absolut fehl am Platz in deinem Fall.

Für eine Schleife, schau doch einfach mal in die Delphi Hilfe unter Delphi-Referenz durchsuchenfor, Delphi-Referenz durchsuchenwhile, Delphi-Referenz durchsuchenrepeat und schau dir das Anfänger-Tutorial auf http://dsdt.info an.

Klaus01 26. Feb 2007 18:25

Re: Zahlen hochzählen
 
Delphi-Quellcode:
for i:=4 to StringGrid1.RowCount -1 do
  begin
    if (i+1) <= StringGrid1.RowCount -1 then
      if StringGrid1[i,3] = StringGrid1[i+1,3] then
        StringGrid1[i-1,3] :='0';
  end;
So wird die ganze Tabelle durchsucht , in der Zeile i wird die Spalte 3 mit der aus Zeile i+1 verglichen.
Sind die Werte gleich wird i-1 mit 0 besetzt.

Wenn Du jedoch nur die Zeile 4 mit der Zeile 5 vergleichen willst, kannst Du dir die Schleife sparen.
So ganz habe ich es noch nicht erfasst was Du vorhast.

Grüße
Klaus

Overclocker 26. Feb 2007 18:29

Re: Zahlen hochzählen
 
in zeile 3 steht ein wert

sagen wir mal in der zelle D3 steht der wert 4 und in der zelle E3 steht auch der wert 4, erst dann soll das programm in zelle C3 den wert rauslöschen,also einfach eine 0 reinschreiben.

das soll das programm machen.also immer wenn 2x4er aufeinander folgen, soll der wert vor dem 1. 4er gelöscht werden

uwewo 26. Feb 2007 18:50

Re: Zahlen hochzählen
 
Hi overclocker,

hier mal ein Bsp: wie man es machen könnte

Delphi-Quellcode:
procedure StringGridDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
      if ((StringGrid1.Cells[3,ARow] = '4')
      and (StringGrid1.Cells[4,ARow] = '4'))
      then StringGrid1.Cells[2,ARow] := '0';
end;
Uwe

wurst_hunter 26. Feb 2007 18:53

Re: Zahlen hochzählen
 
Probier das mal:

Delphi-Quellcode:
if stringgrid1.cells[x-1,3]=Wert then //für x-1 könntest du auch theoretisch auch i schreiben!!!
if stringgrid1.cells[x,3]=Wert
then stringgrid1.cells[3,3]:='0';
Ich hoffe das half!

Klaus01 26. Feb 2007 18:58

Re: Zahlen hochzählen
 
Das sollte der Code so ungefähr machen.

Delphi-Quellcode:
i:=4;
// wer setzen
While (i <= StringGrid1.RowCount -1) do // Start bei Zeile 4 gehe bis zum Ende der Zeilen
  begin
    if (i+1) <= StringGrid1.RowCount -1 then    // i+1 kleiner als max Zeilen
      if (StringGrid1.cells[i,3] = Wert) and (StringGrid1.cells[i+1,3] = Wert) then
        begin
          i:=i+2;
          StringGrid1.cells[i-1,3] :='0';
        end
      else
       i:=i+1;
  end;
[edit] code korrigiert

Overclocker 26. Feb 2007 19:15

Re: Zahlen hochzählen
 
hi,
also bis jetzt hat noch keine von den vorgeschlagenen codes funktioniert :(

bei klaus01 kommt:
Fehler] K8055.pas(501): Klasse besitzt keine Standardeigenschaft
[Warnung] K8055.pas(501): Vorzeichenbehaftete und -lose Typen werden verglichen - beide Operanden werden erweitert


wurst_hunters codes zeigt zwar keinen fehler an, löscht aber nicht den gegebenen wert :/


bei uwewo:
[Fehler] K8055.pas(515): Undefinierter Bezeichner: 'StringGrid1'
[Fehler] K8055.pas(515): ')' erwartet, aber Bezeichner 'Cells' gefunden
[Fehler] K8055.pas(521): Anweisung erwartet, aber Dateiende gefunden


ka wieso es bei ihm undef. bezeichner anzeigt, vllt liegts an den klammern?

uwewo 26. Feb 2007 19:22

Re: Zahlen hochzählen
 
Hi overclocker,

mein Code funktioniert ganz sicher.
Hier brauchst Du keinen Timer oder ähnliches :wink:
Markiere dein StringGrid mit der Maus, wähle im OI die Registerkarte Ereignisse, dort findest du das Ereignis OnDrawCell. Mache einen Doppelklick darauf und kopiere diesen Code hinein.

Delphi-Quellcode:
      if ((StringGrid1.Cells[3,ARow] = '4')
      and (StringGrid1.Cells[4,ARow] = '4'))
      then StringGrid1.Cells[2,ARow] := '0';
Um die Werte variable zu halten, musst Du natürlich noch etwas Eigeninitiative entwickeln.

Uwe

Overclocker 26. Feb 2007 19:41

Re: Zahlen hochzählen
 
Um die Werte variable zu halten, musst Du natürlich noch etwas Eigeninitiative entwickeln.


aha :shock:,wenn ich jetzt erstmal dein code dann wird der wert nur 1 mal gelöscht, die werte in der zeile weiter hinten bleiben drinnen,meinst du das damit?

TonyR 26. Feb 2007 19:53

Re: Zahlen hochzählen
 
Zitat:

Zitat von Overclocker
...weiter hinten bleiben drinnen,meinst du das damit?

Ja, das meint er!
Ich glaub aber nicht, dass er jetzt die Lust drauf hat, dir den ganzen code zu posten, wie gesagt: Eigeninitiative!!!
Lies dir am besten den ganzen Thread nochmal durch (vor allem die Code-Beispiele mit den Schleifen)... dann solltest du mithilfe eines Anfänger-Tuts (wie oben vorgeschlagen) und ein bisschen logisch nachdenken von selber drauf kommen :wink:

Overclocker 26. Feb 2007 19:58

Re: Zahlen hochzählen
 
super ähnlich hatte ich den code auch schon,nur bei mir hats rumgezickt wegen den klammern

ich brauch nur das, dass er immer 1 weiterzählt mehr nich (irgendwie mit count geht das,aber ka wie)

TonyR 26. Feb 2007 20:10

Re: Zahlen hochzählen
 
Wenn du hier in der DP ordentliche Antworten bokommen möchtest, dann lege ich dir ans Herz, Aussagen von DP'lern nicht zu missachten! Ich habe dir grad gesagt, dass du dir den ganzen Thread nochmal durchlesen solltest, da die Lösung (was auch immer das bei dir werden soll) schon mindestens 2mal komplett hingeschrieben wurde!!!
Delphi-Quellcode:
for i:=1 to Stringrid1.rowcount-1 do
begin
  if ((StringGrid1.Cells[i,ARow] = '4')
      and (StringGrid1.Cells[i+1,ARow] = '4'))
      then StringGrid1.Cells[i-1,ARow] := '0';
end;
Ich hoffe du verstehst das jetzt hier... und noch einmal: Lesen ist besser als nicht darüber nachzudenken und noch einmal zu fragen :wink:
[Welch kluger Spruch {... naja...so klug nun auch wieder nicht, halkt nur eine Tatsache} aus meinem Mund... :lol: ]

uwewo 26. Feb 2007 20:39

Re: Zahlen hochzählen
 
Hi overclocker,

mein Code löscht in JEDER ZEILE die Spalte "C" wenn in Spalte "D" und "E" eine 4 drin steht.

Eigeninitiative heisst wenn Du nicht nur auf den Wert 4 reagieren willst.

Was Du mit
Zitat:

Zitat von Overclocker
die werte in der zeile weiter hinten bleiben drinnen,meinst du das damit?

meinst, ist mir allerding nicht klar.

Uwe

Overclocker 26. Feb 2007 20:45

Re: Zahlen hochzählen
 
ich will dass in der 3. zeile folgendes geschieht:

wenn z.b. in der zelle D3 und E3 jeweils eine 4 drinnen steht,dann soll der wert in Zelle C3 gelöscht werden indem eine 0 eingetragen wird.

wenn z.b. in der zelle E3 und F3 jeweils eine 4 drinnen steht,dann soll der wert in Zelle D3 gelöscht werden indem eine 0 eingetragen wird.

wenn z.b. in der zelle F3 und G3 jeweils eine 4 drinnen steht, dann soll der wert in zelle E3 gelöscht werden indem eine 0 eingetragen wird.


usw...........


das ist mein ziel

uwewo 26. Feb 2007 20:56

Re: Zahlen hochzählen
 
Ok, habe heute einen guten Tag.

Delphi-Quellcode:
procedure StringGridDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if ACol >= 3 then //Prüfe hier erst ab 3. Spalte
   if ((StringGrid1.Cells[ACol,ARow] = '4') //wenn in akt. Spalte eine 4 steht
      and (StringGrid1.Cells[ACol+1,ARow] = '4')) //und in akt. Spalte + 1 auch
      then StringGrid1.Cells[AXCol-1,ARow] := '0'; //dann setze eine 0 in akt. Spalte - 1
end;
Uwe

Overclocker 27. Feb 2007 21:10

Re: Zahlen hochzählen
 
danke für die bemühungen (besonders an uwe).hab mich jetzt mal länger hingehockt und den code bisschen umgeschrieben und noch eine bedingung hinzu, jetzt funktioniert alles
thx


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