AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wie zellsensitives Rechnen in StringGrid ?

Ein Thema von EccoBravo · begonnen am 14. Dez 2005 · letzter Beitrag vom 15. Dez 2005
Antwort Antwort
marabu

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

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
Antwort Antwort


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 06:10 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 by Thomas Breitkreuz