AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Stringgrid Veränderung auf Zelleninhalt prüfen
Thema durchsuchen
Ansicht
Themen-Optionen

Stringgrid Veränderung auf Zelleninhalt prüfen

Ein Thema von fboesel · begonnen am 24. Nov 2004 · letzter Beitrag vom 3. Dez 2004
Antwort Antwort
fboesel

Registriert seit: 20. Nov 2004
17 Beiträge
 
#1

Stringgrid Veränderung auf Zelleninhalt prüfen

  Alt 24. Nov 2004, 16:32
Hallo!

ich habe ein Stringgrid.

Ich möchte gerne beim Verlassen der Zelle prüfen, ob sich der Zelleninhalt geändert hat.
Ich kann zwar feststellen, was in der Zelle (vor der Änderung - OnGridGetEditText) drinnenstand,
aber nicht was jetzt neu ist. (GridselectCell geht nur bedingt, da möglicherweise keine neue Zelle angesprungen wird, sondern ev. ein anderes Steuerelement den Focus erhält)

Ich denke es gibt hierfür wahrscheinlich eine einfache Lösung ....

Wäre nett, wenn ich eine Antwort bekommen würde!

schöne Grüsse

fboesel
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Stringgrid Veränderung auf Zelleninhalt prüfen

  Alt 24. Nov 2004, 17:00
TStringGrid.OnSetEditText ?!
Das Event feuert nach einer Änderung.
Andreas
  Mit Zitat antworten Zitat
fboesel

Registriert seit: 20. Nov 2004
17 Beiträge
 
#3

Re: Stringgrid Veränderung auf Zelleninhalt prüfen

  Alt 24. Nov 2004, 17:25
Hi,

also wenn ich hier den Inhalt abfrage, bekomme ich den Zelleninhalt übermittelt.

procedure Txxx.GridGetEditText(Sender: TObject; ACol, ARow: Integer; var Value: String);
begin
inhalt:=value;
end;

(get - nicht set)

gruss
fboesel
  Mit Zitat antworten Zitat
IngoD7

Registriert seit: 16. Feb 2004
464 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Stringgrid Veränderung auf Zelleninhalt prüfen

  Alt 25. Nov 2004, 10:34
Zitat von fboesel:
Ich kann zwar feststellen, was in der Zelle (vor der Änderung - OnGridGetEditText) drinnenstand,
aber nicht was jetzt neu ist.
Kannst du doch. Die Antwort hattest du schon bekommen: OnSetEditText.
Mit jedem Tastendruck der Eingabe enthält Value hier den aktuellen Inhalt der Zelle.

Dein Problem ist höchstens, zu erkennen, wann die editierte Zelle endgültig verlassen worden ist.
  Mit Zitat antworten Zitat
fboesel

Registriert seit: 20. Nov 2004
17 Beiträge
 
#5

Re: Stringgrid Veränderung auf Zelleninhalt prüfen

  Alt 25. Nov 2004, 13:41
Danke IngoD7,

ist richtig, so weit war ich schon.
Das Problem hast Du auch richtig erkannt - ich müßte schon wissen, wann die Zelle verlassen wird.
Grids sind noch nicht meine Stärke.
  Mit Zitat antworten Zitat
IngoD7

Registriert seit: 16. Feb 2004
464 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Stringgrid Veränderung auf Zelleninhalt prüfen

  Alt 25. Nov 2004, 15:38
OnDrawCell (Neuzeichnen einer Zelle) wird jedesmal bei Betreten und Verlassen einer Zelle aufgerufen.
In ACol und ARow sind darin die Koordinaten der betreffenden Zelle.

Damit müsstest du notfalls was anfangen können.

Aber Achtung:
OnDrawCell wird bei Wechsel von Zelle X zu Y somit zwei mal aufgerufen.
Aber nicht in der Reihenfolge
"alte Zelle"-->"neue Zelle",
sondern
"Zelle mit kleineren Koordinaten"-->"Zelle mit höheren Koordinaten".

Ist X also die Zelle(1,1) und Y die Zelle(2/3) so wird OnDrawCell immer in der Reihenfolge X-->Y aufgerufen, egal ob man von X nach Y oder umgekehrt von Y nach X wechselt!

Verlässt der Fokus das Grid, wird OnDrawCell nur einmal für die letzte Zelle aufgerufen.

Weitere Gefahr: OnDrawCell wird nicht nur beim Ein- oder Austritt einer Zelle aufgerufen, sondern immer, wenn eine Zelle (aus welchen Gründen auch immer) neu gezeichnet werden muss.

Hm ... je länger ich dies schreibe, umso unsicherer werde ich mir, ob es nicht doch irgendwas einfacheres geben müsste.

Aber egal - war interessant, da mal etwas zu forschen.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: Stringgrid Veränderung auf Zelleninhalt prüfen

  Alt 29. Nov 2004, 09:11
Zitat von IngoD7:
Dein Problem ist höchstens, zu erkennen, wann die editierte Zelle endgültig verlassen worden ist.
Entweder wird OnExit gefeuert (anderes Control wurde fokusiert) oder OnClick wird gefeuert (Eine andere Zelle wurde angeklickt oder über Tastatur angewählt).
Andreas
  Mit Zitat antworten Zitat
fboesel

Registriert seit: 20. Nov 2004
17 Beiträge
 
#8

Re: Stringgrid Veränderung auf Zelleninhalt prüfen

  Alt 3. Dez 2004, 15:08
Ich geb mir die Antwort jetzt selbst ... vielleicht interessiert es ja jemanden ...
... nach längeren Prüfen und Recherieren bin ich folgende Lösung gekommen, möglichweise
gehts auch einfacher ... aber was solls ...


a) ich habe hilfsweise 2 editfelder eingerichtet. (kann ich beim Programmieren besser kontrollieren)
voredit.text & nachedit.text

Diese sind standardmäßig mit "checkOk" vorbesetzt.
Delphi-Quellcode:
procedure TFormx.GridSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
begin
  Canselect:=prufeEingabe; // prüfroutine ob Eingabe auch ok ist
  if trim(voredit.text)<>trim(nachedit.text) then
  begin
    if canselect=true then
        Zellespeichern(grid.col,grid.row);
  end;
  grid.EditorMode:=false; // der ist wichtig, weil es einen Unterschied macht,
                              // ob die Zelle verlassen wird bevor <enter> gedrückt wird.
  ....
end;

procedure TFormx.zelleSpeichern(acol,arow:Integer);
begin
   Case acol of
      1: Begin
          ....
         End;
      2: Begin
         ....
         end;
          ....
      end;
   voredit.text:='CheckOk';
   nachedit.text:='CheckOk';
end;

procedure TFormx.GridExit(Sender: TObject);
begin
  if (trim(voredit.text)<>trim(nachedit.text)) then
  begin
    if prufeeingabe=false then
    begin
      grid.SetFocus;
      exit;
    end
    else
      Zellespeichern(grid.col,grid.Row);
  end;
end;

procedure TFormx.GridGetEditText(Sender: TObject; ACol, ARow: Integer; var Value: String);
begin
    if trim(voredit.text)='CheckOk'  then
     voredit.text:=value;
end;
  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 15:16 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