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 StringGrid mit ScrollBar verknüpfen (https://www.delphipraxis.net/30541-stringgrid-mit-scrollbar-verknuepfen.html)

Wheelie 26. Sep 2004 12:21


StringGrid mit ScrollBar verknüpfen
 
Habe vier StringGrids auf meiner Form und möchte mit einer ScrollBar alle Grids gemeinsam scrollen. Wie kann ich das am besten realisieren?

omata 26. Sep 2004 15:49

Re: StringGrid mit ScrollBar verknüpfen
 
Moin,

das kannst du über das Ereignis OnTopLeftChanged erreichen.


Im ersten Grids sieht die Methode folgendermaßen aus...
Delphi-Quellcode:
procedure TForm.StringGrid1TopLeftChanged(Sender: TObject);
begin
  StringGrid2.LeftCol:=StringGrid1.LeftCol;
  StringGrid3.LeftCol:=StringGrid1.LeftCol;
  StringGrid4.LeftCol:=StringGrid1.LeftCol;
  StringGrid2.TopRow:=StringGrid1.TopRow;
  StringGrid3.TopRow:=StringGrid1.TopRow;
  StringGrid4.TopRow:=StringGrid1.TopRow;
end;

und so weiter...


MfG
Thorsten

Wheelie 26. Sep 2004 19:46

Re: StringGrid mit ScrollBar verknüpfen
 
danke erstmal für die antwort, aber ich meinte gleichzeitig scrollen im zusammenhang mit ner scrollbar :? geht es vielleicht irgendwie (evtl. mit messages), wenn ich bei einer der vier scrollbars die scrollmöglichkeit aktiviere und ich mit dieser scrollbar die anderen steuere?

nailor 26. Sep 2004 19:49

Re: StringGrid mit ScrollBar verknüpfen
 
ich glaube nicht, dass man das "verknüpfen" kann, und dann automatisch gescrollt wird. Du musst di Ereignisse der Scrollbar abfangen und entsprechend dein Stringgrid anpassen. Das könnte man z.b. so machen, wie von omata vorgeschlagen.

Wheelie 26. Sep 2004 21:00

Re: StringGrid mit ScrollBar verknüpfen
 
Doch - hab's gerade eben hinbekommen :-D

Die Lösung steht in diesem Thread:
http://www.delphipraxis.net/internal...t=oldgridproc1

Delphi-Quellcode:
 private
   OldGridProc1, OldGridProc2: TWndMethod;
   procedure Grid1WindowProc(var Message: TMessage);
   procedure Grid2WindowProc(var Message: TMessage);
public

{...} 

procedure TForm1.Grid1WindowProc(var Message: TMessage);
begin
  OldGridProc1(Message);
  if ((Message.Msg = WM_VSCROLL) or (Message.Msg = WM_HSCROLL) or
      (Message.msg = WM_Mousewheel)) then
  begin
    OldGridProc2(Message);
  end;
end;

procedure TForm1.Grid2WindowProc(var Message: TMessage);
begin
  OldGridProc2(Message);
  if ((Message.Msg = WM_VSCROLL) or (Message.Msg = WM_HSCROLL) or
     (Message.msg = WM_Mousewheel)) then
  begin
    OldGridProc1(Message);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  OldGridProc1 := ListBox1.WindowProc;
  OldGridProc2 := ListBox2.WindowProc;
  ListBox1.WindowProc := Grid1WindowProc;
  ListBox2.WindowProc := Grid2WindowProc;
end;
Habe nur beim letzten Grid die Anzeige einer horizontalen ScrollBar aktiviert und den obigen Source ein kleines bisschen verändert.


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