![]() |
Eigene Scrollbar bei Treeview / List usw. verwenden...
Hallo Zusammen!
Anlass für diesen ganzen Leidweg war, das ich die Farben der Scrollbars verändern wollte. Bis auf IE und globale Farbeinstellungen kann das wohl keiner, weil ich schon ziemlich lange suche. Also: Eigene Scrollbar programmiert! Jetzt möchte ich die Kommunikation zwischen einer Control und meinem Scrollbar aufbauen. Über Messages. Den Control eigenen Scrollbar, der standardmässig auftaucht, zu unterdrücken, habe ich mit Hilfe von DP hingekriegt. Wie kann ich aber die Nachrichten, (SBM_SET_SCROLLINFO / SBM_SETRANGE / SBM_SETPOS usw...) in meiner Scrollbar wirken lassen ? Am Beispiel von einem TreeView (ohne Scrollbars) bin ich soweit:
Delphi-Quellcode:
Sagen wir, ich hätte SB : TMyScrollbar auf Form1...
TNoScrollTreeView = class( TTreeView )
private : procedure SBMSetRange ( var msg: TMessage ); message SBM_SETRANGE; procedure SBMSetRangeRedraw ( var msg: TMessage ); message SBM_SETRANGEREDRAW; procedure SBMSetScrollInfo ( var msg: TMessage ); message SBM_SETSCROLLINFO; : usw... end;
Delphi-Quellcode:
Das geht aber nix. Ich habe gedacht, der TreeView, wirft mit SBM_..messages um sich. Scheinbar ist die Richtung aber ne andere...
procedure TNoScrollTreeView.SBMSetScrollInfo ( var msg: TMessage);
var si : PSCROLLINFO; rf : Boolean; begin rf := (msg.wParam > 0); si := PSCROLLINFO(msg.lParam); if (si.fMask = SIF_PAGE) then Form1.SB.Page := si.nPage; if (si.fMask = SIF_POS ) then Form1.SB.Position := si.nPos; if (si.fMask = SIF_RANGE) then begin Form1.SB.Min := si.nMin; Form1.SB.Min := si.nMax; end; inherited; end; Kann jemand helfen ? Danke & Schönen Tag |
Re: Eigene Scrollbar bei Treeview / List usw. verwenden...
Der IExplorer kann die Farbe der ScrollBar verändern da er FlatScrollBar installiert.
via FlatSB_EnableScrollBar(hwnd, true); schau mal unter diesen Stichwort. Frabe ändert man via FlatSB_SetScrollProp |
Re: Eigene Scrollbar bei Treeview / List usw. verwenden...
Danke. das ist nicht schlecht, aber ich bekomme das Message Handling noch nicht richtig hin.
Man muss alle Calls an die FlatSB_... Calls weiterleiten. Ein Memofeld mit neuem Scrollbar sollte so aussehen:
Delphi-Quellcode:
In New Method wird auf Messages wie WM_HSCROLL, SBM_ENABLE_ARROWS, SBM_GETSCROLLINFO usw.. reagiert, um nach FlatSB_... weiterzuleiten. Das ist doch richtig, oder ?
ScrollWnd := Memo1.Handle
if (InitializeFlatSB(ScrollWnd)) then begin FlatSB_SetScrollProp(ScrollWnd, WSB_PROP_HBKGCOLOR,$00FF0000,false); oldproc := Memo1.WindowProc; Memo1.WindowProc := NewMethod; end; Der Effekt ist, das die Scrollbars zwar flat sind (der untere ist auch blau), aber irgendwie funktionieren sie nicht, und werden von std.-sb's überdeckt.. Hast Du vielleicht ein Beispiel zur Hand ? Gruss, bErnd |
Re: Eigene Scrollbar bei Treeview / List usw. verwenden...
Hast du InitializeFlatSB gerufen?
Eigentlich müssen keine Nachrichten weitergeleitet werden, so steht es in der MSDN? Ach noch ein Tip: Im ListView (bzw. alle CommCtrl's) unter Win2k (andere OS weiß ich es noch nicht) gibt es einen Fehler. Ist leider schlecht zu erklären. aber da tauchen auf einmal die standard Thumb's wieder auf. |
Re: Eigene Scrollbar bei Treeview / List usw. verwenden...
ja, hab ich (siehe Source). Ach, wenns unter W2k mal ein bischen hapert ist das nicht schlimm. Besser, als die Standard Scrollleisten zu haben.
Ich werde es einfach noch weiterversuchen... Danke trotzdem! |
Re: Eigene Scrollbar bei Treeview / List usw. verwenden...
Hi.
Ich habe jetzt eine Weile versucht mit FlatSB's umzugehen. So richtig funktionierts ja noch nicht. Ich hatte aber folgende Idee: Die Komponente TScrollBox ermöglicht, FlatScrollbars auszuwählen. Darin ist dann ein (grössere) Memo oder Treeview oder so enthalten. Wenn ich aber dann schon FlatScrollbars habe, sollte ich doch auch die Funktionen (FLatSB_...) auf die Scrollbox anwenden können, oder ? Mein Ur-Problem, ist immer noch die Farben zu ändern. Weiss jemand, wie die WSB_PROP_PALETTE Funktion in Delphi benutzt wird ? Also so, dass ich auch weiss, welche Teile der SB welche Farbe bekommen ?? Gruss, Bernd |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:20 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-2025 by Thomas Breitkreuz