AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Wie zellsensitives Rechnen in StringGrid ?

Ein Thema von EccoBravo · begonnen am 14. Dez 2005 · letzter Beitrag vom 15. Dez 2005
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#11

Re: Wie zellsensitives Rechnen in StringGrid ?

  Alt 14. Dez 2005, 16:54
ich habs

Trick 17 mit Selbstüberlistung.

? Es geht doch wohl nur OnKeyPressed oder OnSetEditText ?

Neiin, es geht ja beides.

siehe meinen Code:

Delphi-Quellcode:
var
  Form1: TForm1;
  Kai : Char;

implementation

{$R *.dfm}
function StrToFloate(wert:String):single;
begin
    if wert ='then result :=0
    else result := StrToFloat(wert);
end;

procedure TForm1.SG1SetEditText(Sender: TObject; ACol, ARow: Integer;
  const Value: String);
var
    update:boolean;
begin
//
if Kai = #13 then
begin
  Case aRow of
  1: begin
        SG1.Cells[ACol,3]:= FloatToStr(StrToFloate(SG1.Cells[ACol,1])+StrToFloate(SG1.Cells[ACol,2]));
     end;

  2: begin
        SG1.Cells[ACol,3]:= FloatToStr(StrToFloate(SG1.Cells[ACol,1])+StrToFloate(SG1.Cells[ACol,2]));
     end;
  3: begin
        SG1.Cells[ACol,1]:= FloatToStr(StrToFloate(SG1.Cells[ACol,2])+StrToFloate(SG1.Cells[ACol,3]));
     end;
  end;
  end;
end;

procedure TForm1.SG1KeyPress(Sender: TObject; var Key: Char);
begin
 Kai := Key;
end;

end.
Das wars, Danke danke

E. B.
  Mit Zitat antworten Zitat
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#12

Re: Wie zellsensitives Rechnen in StringGrid ?

  Alt 15. Dez 2005, 12:07
HiGi

Jetzt doch noch mal eine Frage zu meinem Trick "17"
(Eingabe mit OnKeyPressed und OnSetEditText in StringGrid steuern):

Zellselektives Ereignissteuern im StringGrid mit OnSetEditText
wird erst bei Key=#13 durch OnKeyPressed ausgelöst
- klassisches gewontes Arbeiten mit Tabellen
(siehe meinen Code oben)

setzt doch voraus, daß EreignisProcedure OnKeyPressed immer vor OnSetEditText ausgeführt wird.
Kann ich mich darauf verlassen, daß OnKeyPressed wirklich zuerst abgearbeitet wird?
(Dieses war bisher auch unbewußt der Grund, wieso ich mich an eine solche Ereignisstrukur nicht herangetraut habe)

Danke

E. B.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#13

Re: Wie zellsensitives Rechnen in StringGrid ?

  Alt 15. Dez 2005, 13:00
Hallo Ecco,

ich will dich ja nicht aus dem Konzept bringen, aber ich würde anders vorgehen.

Ich lege mir eine Unit Global an:

Delphi-Quellcode:
unit Global;

interface

uses
  Messages;

const
  CM_RECALC = WM_USER;

type
  TCMRecalc = packed record
    Msg: Cardinal;
    iCol: integer;
    iRow: integer;
    Result: integer;
  end;

implementation

end.
Diese Unit binde ich in die Form-Unit mit dem StringGrid ein. Meine Form erhält dann noch einen private message handler:

Delphi-Quellcode:
private
  procedure CMRecalc(var msg: TCMRecalc); message CM_RECALC;
Und die Berechnung soll natürlich erst durchgeführt werden, wenn ich mit der Eingabe fertig bin:

Delphi-Quellcode:
procedure TCalcForm.SGSetEditText(Sender: TObject; ACol,
  ARow: Integer; const Value: String);
begin
  if not SG.EditorMode then
    PostMessage(Handle, CM_RECALC, ACol, ARow);
end;
Jetzt muss der message handler noch implementiert werden:

Delphi-Quellcode:
procedure TCalcForm.CMRecalc(var msg: TCMRecalc);
begin
  with msg do
  begin
    case iRow of
      1:
      begin
        SG.Cells[iCol, 3] := FloatToStr(StrToFloate(SG.Cells[iCol, 1])
          + StrToFloate(SG.Cells[iCol, 2]));
      end;
    end;
  end;
Den Code zum Berechnen des Zelleninhaltes habe ich von dir geklaut und verkürzt, nur um das Prinzip zu zeigen. Du wirst da noch einiges an safety code dazu geben müssen. Und wenn du wirklich wie in einem Spreadsheet rechnen möchtest, dann wirst du noch einen dependency tree aufbauen müssen nebst loop detection.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#14

Re: Wie zellsensitives Rechnen in StringGrid ?

  Alt 15. Dez 2005, 13:39
Danke danke, ich werd's heute abend proobieren.

E. B.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:27 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