Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Wie zellsensitives Rechnen in StringGrid ? (https://www.delphipraxis.net/58891-wie-zellsensitives-rechnen-stringgrid.html)

EccoBravo 14. Dez 2005 10:53


Wie zellsensitives Rechnen in StringGrid ?
 
Hallo, da wär ich wieder, lange keine Frage mehr gestellt,

ich habe ein StringGrid und will in ihm rechnen wie in Excel.
Das StringGrid hat die Zellen a..z, wenn ich die Zellen a und b ändere soll die Zelle c berechnet werden, und wenn ich die Zelle c ändere sollen die Zellen a und b berechnet werden.
Nun meine Frage:
Wie teile ich dem StringGrid mit, daß es gerade die Zelle c war, die geändert wurde und die eine Neuberechnung auslösen soll (und nicht die Zellen a und b)?
Und wie bekommt die Zelle c mit, daß die Eingabe in sie fertig ist?

Danke

E. B.

Sharky 14. Dez 2005 11:07

Re: Wie zellsensitives Rechnen in StringGrid ?
 
Hai EccoBravo,

Du könntest im Delphi-Referenz durchsuchenOnGetEditText auswerten welche Zelle geändert wird und dann entsprechende deine Berechnungen machen.

EccoBravo 14. Dez 2005 11:54

Re: Wie zellsensitives Rechnen in StringGrid ?
 
Nun aber neues Problem

Soweit so gut,
aber unter OnGetEditText wird im StringGrid erst nach zweimaligem Drücken der EnterTaste das richtige ergebnis ausgerechnet.
Nach einmaligem Enter kommt keinErg oder sinnloses Erg.

Zur Illustration hier mein Code
Delphi-Quellcode:
function StrToFloate(wert:String):single;
begin
    if wert ='' then result :=0
    else result := StrToFloat(wert);
end;

procedure TForm1.SG1GetEditText(Sender: TObject; ACol,
  ARow: Integer; var Value: String);
begin
  if (aRow=1) then
  begin
      SG1.Cells[ACol,3]:= FloatToStr(StrToFloate(SG1.Cells[ACol,1])+StrToFloate(SG1.Cells[ACol,2]));
  end;
  if aRow=2 then
  begin
      SG1.Cells[ACol,3]:= FloatToStr(StrToFloate(SG1.Cells[ACol,1])+StrToFloate(SG1.Cells[ACol,2]));
  end;
  if aRow=3 then
  begin
      SG1.Cells[ACol,1]:= FloatToStr(StrToFloate(SG1.Cells[ACol,2])+StrToFloate(SG1.Cells[ACol,3]));
  end;
Danke

E. B.

ibp 14. Dez 2005 12:03

Re: Wie zellsensitives Rechnen in StringGrid ?
 
...sorry war ein denkfehler!

versuch es mal mit dem event onsettext!

EccoBravo 14. Dez 2005 14:04

Re: Wie zellsensitives Rechnen in StringGrid ?
 
Danke danke

AAbbeerrr

zu Ereignis OnGetEditText

man muß immer 2x Enter drücken bevor das richtige Ergebnis erscheint.
Die StringGridAnzeige hängt immer einen Schritt hinterher.
Gut ist, daß immer erst dann etwas passiert, wenn man die Entertaste drückt.

zu Ereignis OnSetEditText

gut daran ist, daß die StringGridAnzeige nicht mehr hinterher hängt.
Aber während des Editierens reagiert die StringGridAnzeige bei Drücken jedes einzelnen Zeichens.
Die Anzeige kann nicht warten, bis die Eingabe abgeschlossen ist.

Wie kommt man aus diesem Dilemma?

Danke

E. B.

Angel4585 14. Dez 2005 14:10

Re: Wie zellsensitives Rechnen in StringGrid ?
 
löse die Procedure doch manuell im OnKeyDown aus
(wenn Key = vk_Return)

MfG :angel:

EccoBravo 14. Dez 2005 15:04

Re: Wie zellsensitives Rechnen in StringGrid ?
 
Danke,

aber wie bringe ich dem Ereignis OnSetEditText das Ereignis vk_Return bei ?

Danke

E. B.

ibp 14. Dez 2005 15:10

Re: Wie zellsensitives Rechnen in StringGrid ?
 
Zitat:

Zitat von EccoBravo
...zu Ereignis OnSetEditText

gut daran ist, daß die StringGridAnzeige nicht mehr hinterher hängt.
Aber während des Editierens reagiert die StringGridAnzeige bei Drücken jedes einzelnen Zeichens.
Die Anzeige kann nicht warten, bis die Eingabe abgeschlossen ist.

ist denn das so schlimm?

ibp 14. Dez 2005 15:26

Re: Wie zellsensitives Rechnen in StringGrid ?
 
Zitat:

Zitat von EccoBravo
Danke,

aber wie bringe ich dem Ereignis OnSetEditText das Ereignis vk_Return bei ?

Danke

E. B.


da nicht aber in den onkey...ereignissen!

EccoBravo 14. Dez 2005 15:35

Re: Wie zellsensitives Rechnen in StringGrid ?
 
...und das da auch zellselektiv ?


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