Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Dbgrid + DoubleClick bzw. RowClick (https://www.delphipraxis.net/88510-dbgrid-doubleclick-bzw-rowclick.html)

bwolf 16. Mär 2007 14:17


Dbgrid + DoubleClick bzw. RowClick
 
Hi all,

in meinem DBGrid kann man per Doppelklick einen Datensatz auswählen, der daraufhin zum bearbeiten in einer neuen Maske angezeigt wird.
Soweit so gut, nun mein Problem:
Wenn im DBGrid ein Datensatz makiert ist, und man macht einen Doppelklick irgendwo ins Grid rein, wird die Maske ebenfalls angezeigt. Auch wenn man auf einen Title zu schnell 2x hintereinader klickt, wird die Bearbeiten-Maske angezeigt.

Ich würde es gern so haben, das nur, wenn man auf eine Row nen Doppelklick macht, die Maske angezeigt wird - leider hab ich keine Idee wie das zu lösen wäre.

Danke für eure Hilfe,
gruß ben

marabu 16. Mär 2007 15:01

Re: Dbgrid + DoubleClick bzw. RowClick
 
Hallo Ben,

probiere es mal so:

Delphi-Quellcode:
procedure TDemoForm.StringGridDblClick(Sender: TObject);
var
  iCol, iRow: Integer;
  pt: TPoint;
begin
  with Sender as TStringGrid do
  begin
    pt := ScreenToClient(Mouse.CursorPos);
    MouseToCell(pt.X, pt.Y, iCol, iRow);
    if (iCol in [FixedCols .. Pred(ColCount)])
    and (iRow in [FixedRows .. Pred(RowCount)])
      then ShowMessage('bulls eye')
      else ShowMessage('off shore');
  end;
end;
Freundliche Grüße

bwolf 16. Mär 2007 15:35

Re: Dbgrid + DoubleClick bzw. RowClick
 
Hi Marabu,

thx a lot für die Antwort :cyclops:

Ich habs ein bischen umgebaut, denke mal das es so passt.

Delphi-Quellcode:
procedure Tfrm_sachbearbeiter.dbgrid_uebersichtDblClick(Sender: TObject);
var
  iCol, iRow: Integer;
  pt: TPoint;
begin
  with Sender as TJvDBGrid do
  begin
    pt := ScreenToClient(Mouse.CursorPos);
    MouseToCell(pt.X, pt.Y, iCol, iRow);
    showmessage(inttostr(iCol)+' '+inttostr(iRow));
    if iRow > 0 then DataModule1.ActionList1.Actions[5].Execute;
  end;
end;
Mich würde jetzt noch interessieren, warum es so nicht klappt:
Delphi-Quellcode:
  pt := ScreenToClient(Mouse.CursorPos);
  TJVDbGrid(Sender).MouseToCell(pt.X, pt.Y, iCol, iRow);
  showmessage(inttostr(iCol)+' '+inttostr(iRow));
Danke nochmal, jetzt kann ich bald beruhigt ins Wochenende gehn ;)

marabu 16. Mär 2007 16:04

Re: Dbgrid + DoubleClick bzw. RowClick
 
Vielleicht rufst du in dem fraglichen Code die Methode ScreenToClient() von der falschen Komponente (Form) auf?

Dabei ergeben sich natürlich auch falsche Koordinatenwerte für MouseToCell()...


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