AGB  ·  Datenschutz  ·  Impressum  







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

TStringGrid und PopUp in Firemonkey

Ein Thema von Photoner · begonnen am 3. Jul 2013 · letzter Beitrag vom 4. Jul 2013
Antwort Antwort
Photoner

Registriert seit: 6. Dez 2012
Ort: Nürnberg
103 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

TStringGrid und PopUp in Firemonkey

  Alt 3. Jul 2013, 14:56
Hallo liebe DPler,

Vielleicht habt ihr einen guten Tip für mich. Ich habe folgendes Problem:

Wenn mit Hilfe des Standard PopUp Fensters (Auschneiden, Kopieren...) eine Zelle in einem TStringGrid bearbeitet wird, dann wird das Ereignis TStringGrid.OnEditingDone nicht aufgerufen und somit ist die Änderung der Zelle nicht fix. Einmal scrollen oder andere Zelle anwählen und die gerade bearbeitete Zelle ist wieder in ihrer ursrpünglichen Form vorhanden, da oberflächlich nur das Edit Feld verändert wird.
Das ist ziemlich ärgerlich...

Was ich suche ist eine Möglichkeit auf die Message WM_EXITMENULOOP zu reagieren und damit OnEditingDone zu triggern. Alternativ würde es mir auch helfen zu wissen, wie ich verhindern kann, dass das Popup Fenster überhaupt erscheint. Kann auch darauf verzichten. Für die VCL findet man auch einige Tips, aber unter Firemonkey leider nicht. Was ich noch erwähnen sollte: Die Anwendung schreibe ich in Delphi XE2 für Windows.

Grüße!
Chris
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TStringGrid und PopUp in Firemonkey

  Alt 3. Jul 2013, 17:14
Als Workaround könntest Du vielleicht auf OnEnter des Grids reagieren. Ich gehe davon aus, dass es den Fokus erhält wenn das Popup geschlossen wird.

Ansonsten vielleicht mal einen QC-Eintrag schreiben (bringt vermutlich nicht viel aber beruhigt das Gewissen ;-()
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#3

AW: TStringGrid und PopUp in Firemonkey

  Alt 3. Jul 2013, 20:42
Hallo,

vielleicht ist dieser Link etwas für Dich.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Photoner

Registriert seit: 6. Dez 2012
Ort: Nürnberg
103 Beiträge
 
Delphi 10.1 Berlin Starter
 
#4

AW: TStringGrid und PopUp in Firemonkey

  Alt 4. Jul 2013, 10:10
Hallo,

vielleicht ist dieser Link etwas für Dich.

Der Link ist hilfreich!

Der springende Punkt ist, das OnChange Ereignis weiterzureichen und ein paar Feinheiten zu beachten. Ich habs wie folgt zum Laufen gebracht:

Diese Zeilen im FormCreate o.ä.:
Delphi-Quellcode:
      for I := 0 to StringGrid1.ColumnCount-1 do begin
        StringGrid1.ColumnByIndex(i).ApplyImmediately := false;
Verhindert das sofortige ändern des Grids wenn Eingaben erfolgen. Hat den Vorteil, dass das OnChange beim verlassen des Edits getriggert wird (wird gebraucht).
Auch noch in FormCreate eine Prozedur:

Delphi-Quellcode:
procedure TTestForm.UpdateStringGrid;
var
CellCtrl : TStyledControl;
Col,Row : Integer;
begin
  for col := 0 to StringGrid1.ColumnCount-1 do begin
    for row := 0 to StringGrid1.RowCount-1 do begin
      CellCtrl := StringGrid1.ColumnByIndex(col).CellControlByRow(row);
      if ( CellCtrl <> nil ) and ( CellCtrl is TTextCell ) then begin
        TTextCell( CellCtrl ).OnApplyStyleLookup := GridCellApplyStyleLookup;
        TTextCell( CellCtrl ).UpdateStyle;
        TTextCell( CellCtrl ).OnChange := CellChange;
      end;
    end;
  end;
end;
Damit kann man (auch zur Laufzeit) den Style der Zellen ändern. Hier ist aber wichtig das OnChange zu fangen.

Delphi-Quellcode:
procedure TTestForm.CellChange(Sender : TObject);
begin
  TColumn(TFMXObject(Sender).Parent).EndUpdate;
end;
Was genau bei EndUpdate von TColumn alles geschieht kann vielleicht jemand mit mehr Programmiererfahrung erzählen. Ich kann bloß sagen, dass auch Änderungen im Edit einer Zelle hiermit übernommen werden.
Kopieren, Ausschneiden, etc. wird damit auch übernommen.

Falls dieser Workaround Schwierigkeiten an anderer Stelle verursacht werde ich das hier erwähnen. Ansonsten gelöst.

Nachtrag:
Der Workaround funktioniert doch nicht. Keine Ahnung warum das einmal geklappt hat und jetzt nicht mehr...

Danke für euer Feedback!
Chris

Geändert von Photoner ( 4. Jul 2013 um 10:44 Uhr) Grund: Funktioniert doch nicht...
  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 23:34 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