Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Eigene Scrollbar bei Treeview / List usw. verwenden... (https://www.delphipraxis.net/8135-eigene-scrollbar-bei-treeview-list-usw-verwenden.html)

Bernd Höhner 29. Aug 2003 11:33


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:
  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;
Sagen wir, ich hätte SB : TMyScrollbar auf Form1...

Delphi-Quellcode:
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;
Das geht aber nix. Ich habe gedacht, der TreeView, wirft mit SBM_..messages um sich. Scheinbar ist die Richtung aber ne andere...

Kann jemand helfen ?

Danke & Schönen Tag

neolithos 29. Aug 2003 12:34

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

Bernd Höhner 29. Aug 2003 14:27

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:
ScrollWnd := Memo1.Handle
if (InitializeFlatSB(ScrollWnd)) then
  begin
    FlatSB_SetScrollProp(ScrollWnd, WSB_PROP_HBKGCOLOR,$00FF0000,false);
    oldproc := Memo1.WindowProc;
    Memo1.WindowProc := NewMethod;
  end;
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 ?

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

neolithos 29. Aug 2003 14:42

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.

Bernd Höhner 29. Aug 2003 14:56

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!

Bernd Höhner 1. Sep 2003 11:35

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