Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   TMS String Grid mit Button in einer Spalte (https://www.delphipraxis.net/193985-tms-string-grid-mit-button-einer-spalte.html)

DerDan 2. Okt 2017 11:33

Delphi-Version: 10 Berlin

TMS String Grid mit Button in einer Spalte
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich schaffe es nicht die TMS String Grid Komponente so zu verwenden, dass
1) in einer Spalte Buttons erscheinen, das kann man mit AdvStringGrid1.AddButton zwar erreichen aber:
2) die Buttons dann auch gleich den Fokus haben, wenn man die Zelle mit den Cursor Tasten selektiert.

Es wird immer zunächst die Zelle "hinter" dem Button selektiert. Ein Drücken der Leertaste betätigt den Taster nicht. Dies geht wohl nur mit der Maus

:gruebel:

hoika 2. Okt 2017 12:19

AW: TMS String Grid mit Button in einer Spalte
 
Hallo,
kann ich nicht nachvollziehen.

Delphi-Quellcode:
type
  TForm115 = class(TForm)
    SG: TAdvStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure SGButtonClick(Sender: TObject; ACol, ARow: Integer);
    procedure SGCanEditCell(Sender: TObject; ARow, ACol: Integer;
      var CanEdit: Boolean);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form115: TForm115;

procedure TForm115.FormCreate(Sender: TObject);
begin
  SG.AddButton(1,1,40,20,'1,1',haCenter,vaCenter);
end;

procedure TForm115.SGButtonClick(Sender: TObject; ACol, ARow: Integer);
begin
  MessageBox(0,'','',0);
end;

procedure TForm115.SGCanEditCell(Sender: TObject; ARow, ACol: Integer;
  var CanEdit: Boolean);
begin
  CanEdit := True;
end;
Wenn ich in die Zelle mit der Tastatur gehe, wird per Leertaste SGButtonClick aufgerufen.
Setz doch mal einen Breakpoint auf CanEditCell und gehe in die TMS-Quellen rein.

Die ButtonClick-Methode wird in WMKeyDown aufgerufen (unit AdvGrid)

DerDan 2. Okt 2017 13:06

AW: TMS String Grid mit Button in einer Spalte
 
Okay,

stimmt, der Event Handler wird aufgerufen. Alledings fehlt das optische Feedback das der Taster quasi mechanisch hineingedrückt wird, wie das bei anderen Button der Fall ist.
Drücke ich mit der Maus, dann geht das ..

hoika 2. Okt 2017 13:41

AW: TMS String Grid mit Button in einer Spalte
 
Hallo,
hast du nicht die Quellen?

Delphi-Quellcode:
procedure TForm115.SGButtonClick(Sender: TObject; ACol, ARow: Integer);
begin
  SG.PushButton(ACol,ARow,True);

  MessageBox(0,'','',0);

  SG.PushButton(ACol,ARow,False);
end;

DerDan 2. Okt 2017 18:45

AW: TMS String Grid mit Button in einer Spalte
 
Das ist besser als gar nichts.

Nachteile sind.
A) Die Reaktion (in deinem Beispiel die Anzeige der MessageBox) erfolgt schon beim drücken der Space Taste, bei jedem anderen Button erst beim loslasen.
B) Bei Betätigung der Maus wird die Animation zwei mal ausgelößt.

vielen Dank für deine Hinweise

hoika 2. Okt 2017 19:25

AW: TMS String Grid mit Button in einer Spalte
 
Hallo,

dann dreh es doch rum

Delphi-Quellcode:
SG.PushButton(ACol,ARow,True);
Sleep(x)
SG.PushButton(ACol,ARow,False);
MessageBox(0,'','',0);
Beim Mausklick musst du improvisieren ;)


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