Delphi-PRAXiS
Seite 1 von 2  1 2      

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 TDBGrid in DLL-Formular und Mousewheel (https://www.delphipraxis.net/7774-tdbgrid-dll-formular-und-mousewheel.html)

Wite 21. Aug 2003 09:54


TDBGrid in DLL-Formular und Mousewheel
 
Hallo allesamt, :)

ich hab mir eine DLL zusammengebastelt, in der Funktionen enthalten sind, die Formulare öffnen. Auf einem der Formulare hab ich ein TDBGrid, was soweit optimal funktioniert. Leider hat diese Komponente Probleme mit dem Mousewheel - ihr wisst das denk ich alle - die ich
einfach nicht zu beheben weiss. Bei normalen Applikationen kann man das ja mit Application.OnMessage korrigieren, aber in einer DLL? :?:

tHx

-Wite-

Memo 21. Aug 2003 10:45

Re: TDBGrid in DLL-Formular und Mousewheel
 
Eigentlich ist mir das Problem nur von der DBLookupComboBox bekannt.

http://www.delphi32.com/info_facts/faq/faq_925.asp

Aber evt. ist das ein Anhaltspunkt

Wite 21. Aug 2003 11:01

Re: TDBGrid in DLL-Formular und Mousewheel
 
Hi Memo,

danke für deinen Tip aber leider hilft er mir nicht. Das Programm hängt sich nicht auf. Das DBGrid reagiert schon auf das Mousewheel bloss leider nicht so wie man es erwarten würde:
Beim Wheelen markiert er nur die nächste/vorherige Zeile, ohne dass aber der Datenzeiger oder der Scrollbalken weitergeschoben wird. Doofes Teil...

:roll:

-Wite-

Memo 21. Aug 2003 11:13

Re: TDBGrid in DLL-Formular und Mousewheel
 
Gerade mal ebend bei mir versucht, klappt tadellos.
Kann es sein das du in irgendeinem Ereignis der Table,Datasource oder des DBGrid ein Ereignis drinne hast, was das wheelen der Maus verbiegt?
Wenn ich zum Bsp. im onDataChange eine Zeile einbaue wie Table1.Next werde ich beim wheelen immer tüchtig viel Spaß haben.

Wite 21. Aug 2003 11:33

Re: TDBGrid in DLL-Formular und Mousewheel
 
Für die DBLookupComboBox scheint das ja prima zu klappen, aber beim DBGrid siehen die Prozeduren WMVScroll(var Message: TWMVScroll) undTDBLookupComboBox.CloseUp(Accept: Boolean) nicht so aus wie es in dem Workaround für die DBLookupComboBox beschrieben ist (dbgrids.pas), da hab ich ja gleich garkeinen Plan...

Memo 21. Aug 2003 11:47

Re: TDBGrid in DLL-Formular und Mousewheel
 
Hast du meine Frage, einen davor, überhaupt gelesen? ..oder hast du es nur nicht verstanden was ich dich gefragt habe?

Wite 21. Aug 2003 11:51

Re: TDBGrid in DLL-Formular und Mousewheel
 
Oh, sorry, hab's überlesen.
Ich hab keine Ereignisse sonst. Ich gehe über eine TIBQuery, nicht TIBTable.

Memo 21. Aug 2003 11:57

Re: TDBGrid in DLL-Formular und Mousewheel
 
Zitat:

Zitat von Wite
Oh, sorry, hab's überlesen.

Kommt schonmal vor.
Zitat:

Zitat von Wite
Ich hab keine Ereignisse sonst.

Mhh,..dann fällt mir auch nichts mehr ein, außer ein stringgrid zu nehmen. Ist aber bestimmt auch nicht die Lösung.
Zitat:

Zitat von Wite
Ich gehe über eine TIBQuery, nicht TIBTable.

Sollte eigentlich keine Rolle spielen.

Wite 21. Aug 2003 15:33

Re: TDBGrid in DLL-Formular und Mousewheel
 
Liste der Anhänge anzeigen (Anzahl: 1)
:firejump: Durchbruch!!!!!!! :firejump:
Also ich hab's jetzt selber rausgefunden. :dancer:
Ich hatte doch geschrieben, dass es schon was gibt mit dem man das Problem in normalen Applikationen beheben kann. Nachdem ich mir das genauer angesehen hab, hab ich gemerkt, dass da nichts anderes gemacht wird als, dass dem DBGrid vorgegaukelt wird, dass die Cursor-Taste Hoch oder Runter gedrückt wurde.

Mit dieser Info hab ich mir dann eine Klasse geschrieben, die von TDBGrid abgeleitet ist, damit ich die Handler für die OnMouseWheelUp und -Down selber zuweisen kann (geht beim DBGrid nicht einfach so, da normalerweise protected)

Das ganze sieht dann so aus (unten als Download):
Delphi-Quellcode:
unit UTMWDBGrid;

interface

uses
    classes,Windows,DBGrids,Messages,Sysutils;

type
    TMWDBGrid = Class(TDBGrid)
    private
           procedure MouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
           procedure MouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
    public
          procedure  SetMouseWheelHandlers();
    end;

implementation

procedure TMWDBGrid.SetMouseWheelHandlers();
begin
     Self.OnMouseWheelUp  := MouseWheelUp;
     Self.OnMouseWheelDown := MouseWheelDown;
end; // procedure

procedure TMWDBGrid.MouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
     Perform(WM_KeyDown,VK_UP,0);
     Abort();
end; // procedure

procedure TMWDBGrid.MouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
     Perform(WM_KeyDown,VK_DOWN,0);
     Abort();
end; // procedure

end.
Danach geh ich in der Form aus der DLL hin, und mache beim OnCreate des Forms bzw. in dessen Konstruktor folgendes:
Delphi-Quellcode:
{uses .....,UTMWDBGrid;}
TMWDBGrid(aDBGrid).SetMouseWheelHandlers();
Und schon geht's so wie man es erwartet.
Evtl. kann das ja mal jemand gebrauchen.

Aber trotzdem Danke Memo! :hello:

PS: Wie deklariere ich diese "offene Frage" als beantwortet :?:
[EDIT]
Hab's schon gefunden. *G*
[/EDIT]

hanko panko 8. Jul 2004 15:18

Re: TDBGrid in DLL-Formular und Mousewheel
 
Mensch!

WUNDERBAR!


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:31 Uhr.
Seite 1 von 2  1 2      

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