Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Scrollbar theme


elundril - Sa 30.10.10 01:58
Titel: Scrollbar theme
Hallo,

ich hab mir eine eigene Komponente gebastelt, abgeleitet von TCustomControl. Jetzt würd ich der gerne Scrollbars hinzufügen. Da bin ich auf folgendes gestoßen:


Delphi-Quelltext
1:
2:
  ShowScrollBar(Handle, SB_HORZ, true);
  ShowScrollBar(Handle, SB_VERT, true);


Doch das liefert mir unter Windows7 + XPMan-Komponente auf dem Formular nur diese hässlichen Scrollbars aus Windows NT und früher. Ich hätt jedoch gerne die schönen mit themes. Gibts da ne möglichkeit das einzuschalten? Denn immerhin werden die Scrollbars ja eigentlich von der Windows-API gezeichnet.

lg elundril


jaenicke - Sa 30.10.10 05:57

Ich denke ich habe hier eine Lösung gefunden:
http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/eb0cf287-32ae-4d0f-a4cd-b8f655c64fba


elundril - Mi 17.11.10 01:41

Ne, das mit EnableScrollbar hat auch nicht wirklich funktioniert. Oder meintest du etwas was ich nicht bemerkt habe in dem Artikel?

lg elundril


jaenicke - Mi 17.11.10 03:45

user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
Ne, das mit EnableScrollbar hat auch nicht wirklich funktioniert. Oder meintest du etwas was ich nicht bemerkt habe in dem Artikel?
Also bei mir funktioniert das so. :nixweiss:
Siehe Anhang, es wird sogar ohne Manifest der Style benutzt (mit gehts natürlich auch).

Hast du in den CreateParams exakt die dort genannten drin oder auch andere?

Quelltext meines kurzen Tests eben:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
type
  TMyControl = class(TCustomControl)
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;

  TForm267 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
  end;

// ...

procedure TForm267.FormCreate(Sender: TObject);
var
  NewControl: TMyControl;
begin
  NewControl := TMyControl.Create(Self);
  NewControl.Parent := Self;
  NewControl.SetBounds(10, 10, 200, 200);
  EnableScrollBar(NewControl.Handle, SB_HORZ, ESB_ENABLE_BOTH);
end;

{ TMyControl }

procedure TMyControl.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.Style := Params.Style or WS_HSCROLL or WS_VSCROLL;
end;


elundril - Do 18.11.10 02:42

Einmal Copy&Paste angewendet und es funktioniert sogar. Wobei das seltsam ist, da ich eigentlich hatte ich komplett das gleiche da stehen hatte. Naja, dank dir vielmals!

lg elundril