![]() |
Scrollbar umpositionieren
Hi Leute,
ich habe vor in meinemr von TDBGrid abgeleiteten Komponente einen Navigator in die linke untere Ecke zu bringen. Wie kann ich die Scrollbar vom Grid schmaler machen, so dass sie erst rechts vom Navigator anfängt? |
Re: Scrollbar umpositionieren
Das geht so nicht !
Steuerelemente (= Controls) beanspruchen für sich immer ein Rechteck (gesteuert von Left, Top, Width, Height) und füllen dieses mit ihrem Inhalt komplett aus. Die Scrollbars sind fest im TDBGrid integriert. Man müsste den hor. Scrollbar als eigenes Control isolieren, damit man Grid, hor. Scrollbar & Navigator entsprechend anordnen kann. Und da dies in der VCL nicht vorgesehen ist, musst du halt mit einem 08/15 Design auskommen. |
Re: Scrollbar umpositionieren
Wie kann ich das denn sonst machen?
Ich möchte eine Grid, wo unten links der Navigator ist und rechts daneben die Scrollleiste. Muss ich dann diese drei Elemente auf ein Panel packen? Wie bekomme ich denn dann die Scrollleiste aus dem Grid? Wie verbinde ich die neue Scrollbar mit dem Grid? Ok, viele Fragen, aber ich hoffe, jemand hat eine Anregung für mich. |
Re: Scrollbar umpositionieren
Diese einzige Anregung die mir einfällt ist das Studium der VCL-Sourcen.
|
Re: Scrollbar umpositionieren
Liste der Anhänge anzeigen (Anzahl: 1)
Wenn du ein bißchen Ahnung von der Windows API hast.
Leichter: Verstecke die untere Scrollleiste -> WM_NCCALCSIZE Setze eine neue ScrollBar, und leite deren Scrollnachrichten an das DBGrid weiter. Leite alle Scrollnachrichen vom DBGrid zur Scrollbar weiter Schwer: Klemme jegliche Nachricht zum Scrollbar zeichen ab und ersetze sie durch deine eigenen Routinen. Du musst dabei jede Berechnung und Zeichenroutine selbst schreiben. Hast aber völlige Freiheit in der Gestaltung des Non-Client-Bereiches. (Genauso wird es übrigens bei den FlatScrollBars gemacht). Gleich im vorraus! Ich kann kein Bsp Posten, ich habe diesen speziellen Fall noch nicht programmiert und außerdem währe dieser Quelltext viel zu lang und kompliziert. Woher weiß ich das dann, ich habe mal die rechte Scrollbar durch zwei Schalter ersetzt. Einer oben im Control und einer unten (siehe Anhang). Viel Spaß beim tüfteln. |
Re: Scrollbar umpositionieren
Kannst du mir ungefähr sagen, wo ich dann einhaken muss. Ich hab jetzt die VCL durchgewühlt aber nicht wirklich die Routine gefunden, wo die Scrollbar gezeichnet wird, bzw. wo die Zeichenkoordinate gesetzt wird.
|
Re: Scrollbar umpositionieren
Die Scrollbar wird ja auch nicht von der VCL gezeichnet, sondern von Windows.
Deshalb musst du die geeigneten Nachrichten manipulieren. WM_MCCALCSIZE, WM_NCPAINT, WM_VSCROL, WM_HSCROLL, WM_NCLBUTTONDOWN, usw. |
Re: Scrollbar umpositionieren
Ok, ich hab mir mal die dementsprechenden Routinen aus TWinControl angeguckt, und dabei ist mir aufgefallen, dass ja eigentlich nur der Clientbereich berechnet wird und der Rest somit quasi Scrollbar ist, oder? Dann wäre es doch garnicht möglich, auf diesem Weg die Scrollbar weiter rechts anfangen zu lassen, weil sie ja am linken Rand des Clientbereichs anfängt, oder irre ich mich da?
|
Re: Scrollbar umpositionieren
Deswegen muss du ja die von Windows gezeichnete Scrollbar mit deiner eigenen Überzeichnen -> WM_NCPAINT
|
Re: Scrollbar umpositionieren
Das ist mir irgendwie alles zu kompliziert im Moment und ich hab auch nicht die Zeit mich einzuarbeiten (vielleicht demnächst mal), deshalb hab ich jetzt einfach ein Panel genommen und da die Grid und die Navigator draufgepackt. Ok, das Schönheitsproblem mit der Scrollbar, die jetzt über dem Navigator sitzt ist noch da, aber das ganze erfüllt schonmal seinen Zweck. Auf jeden Fall vielen Dank für die Hilfe, wenn ich mich nochmal damit eingehender auseinandersetze, komm ich gerne auf dich zurück.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz