Delphi-PRAXiS
Seite 3 von 3     123   

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/)
-   -   Prüfen ob Scrollbar aktiviert (https://www.delphipraxis.net/161367-pruefen-ob-scrollbar-aktiviert.html)

EWeiss 30. Jun 2011 18:50

AW: Prüfen ob Scrollbar aktiviert
 
Zitat:

Zitat von alfold (Beitrag 1109316)
Ich würde es mir nie wagen, Dich in Deinem Eifer zu Bremsen:-D

Zitat:

Das Projekt soll ermöglichen XBeliebe ScrollBars von Komponenten die über eine ScrollBar verfügen den eigenen bedürfnissen anzupassen.
Währe es nicht besser, Du stellst die Propertis zu verfügung und jeder kann sich sein Hintegrund, Farverlauf, Rahmen, Transparenz selber setzten, die er haben möchte, als das mit img zu machen? Das währe doch Top!:wink:

Wer hat schon Zeit sich dafür evtl erst noch img zu zeichnen/testen usw.

Egal, wie Du schon sagst: "Es wird ja niemand zu seinem Glück gezwungen!":P

Gruss alfold

Nope dann müßte ich das Teil als Komponente auslegen die dann erst noch Installiert/Registriert werden muss.
Das tue ich mir nicht an :)


gruss

Thom 30. Jun 2011 20:43

AW: Prüfen ob Scrollbar aktiviert
 
Entschuldigung, wenn ich noch einmal nerve, aber mir hat die ganze Sache keine Ruhe gelassen und ich habe es noch einmal gestest:
Delphi-Quellcode:
function ScrollBarEnabled(Wnd: HWnd; Vert: Boolean): Boolean;
var
  ScrollBarInfo: TScrollBarInfo;
  IdObject: Integer;
begin
  ScrollBarInfo.cbSize:=Sizeof(TScrollBarInfo);
  if Vert
    then IdObject:=OBJID_VSCROLL
    else IdObject:=OBJID_HSCROLL;
  Result:=GetScrollBarInfo(Wnd,IdObject,ScrollBarInfo) and
          (ScrollBarInfo.rgstate[0] and STATE_SYSTEM_UNAVAILABLE=0);
end;

function ScrollBarVisible(Wnd: HWnd; Vert: Boolean): Boolean;
var
  ScrollBarInfo: TScrollBarInfo;
  IdObject: Integer;
begin
  ScrollBarInfo.cbSize:=Sizeof(TScrollBarInfo);
  if Vert
    then IdObject:=OBJID_VSCROLL
    else IdObject:=OBJID_HSCROLL;
  Result:=GetScrollBarInfo(Wnd,IdObject,ScrollBarInfo) and
          (ScrollBarInfo.rgstate[0] and STATE_SYSTEM_INVISIBLE=0);
end;
Das funktioniert bei mir ohne Probleme mit einem TMemo.

EWeiss 30. Jun 2011 20:51

AW: Prüfen ob Scrollbar aktiviert
 
Zitat:

Entschuldigung, wenn ich noch einmal nerve, aber mir hat die ganze Sache keine Ruhe gelassen und ich habe es noch einmal gestest:
Du nervst nicht! :)

Habe das Projekt funktionstüchtig.. bis auf das hier genannte problem.
Ich habe deine erste Version geprüft und die schlägt immer fehl (ScrollBarEnabled).

Dann habe ich diese mit
Delphi-Quellcode:
ScrollBarInfo.rgstate[3] and STATE_SYSTEM_INVISIBLE=0

geprüft.. schlug auch fehl.

Wenn du interesse an dem Projekt hast schikce ich dir gerne den Quelltext zu.
Dann kannst du vor ort testen.

Ist in D2009 geschrieben sollte also auch in XE ohne probleme laufen.

EDIT:
Du solltest aber das hier
ScrollBarVisible..
Delphi-Quellcode:
ScrollBarInfo.rgstate[0] and STATE_SYSTEM_INVISIBLE=0

den Index 0 mit 3 ersetzen Oder?


gruss

Thom 30. Jun 2011 21:02

AW: Prüfen ob Scrollbar aktiviert
 
Kannst Du mir gern zuschicken! Die Email-Adresse bekommst Du aus meiner VCard.

Index 0 betrifft die komplette Scrollbar, Index 3 nur den verschiebbaren Teil. Siehe MSDN.

In meinem Test prüfe ich zuerst auf Sichtbarkeit und erst danach auf Enabled:
Delphi-Quellcode:
  if ScrollBarVisible(Memo1.Handle,false) then
  begin
    if ScrollBarEnabled(Memo1.Handle,false)
      then Label1.Caption:='enabled'
      else Label1.Caption:='disabled';
  end else Label1.Caption:='not visible';

EWeiss 30. Jun 2011 21:14

AW: Prüfen ob Scrollbar aktiviert
 
Zitat:

Zitat von Thom (Beitrag 1109343)
Kannst Du mir gern zuschicken! Die Email-Adresse bekommst Du aus meiner VCard.

Index 0 betrifft die komplette Scrollbar, Index 3 nur den verschiebbaren Teil. Siehe MSDN.

In meinem Test prüfe ich zuerst auf Sichtbarkeit und erst danach auf Enabled:
Delphi-Quellcode:
  if ScrollBarVisible(Memo1.Handle,false) then
  begin
    if ScrollBarEnabled(Memo1.Handle,false)
      then Label1.Caption:='enabled'
      else Label1.Caption:='disabled';
  end else Label1.Caption:='not visible';

Projekt ist Unterwegs ;)
EDIT:
Nur nochmal zur Info wenn die Horizontale Bar ausgeschaltet ist darf die Maske nicht gezeichnet werden.
Suche einfach im Quelltext nach dem im ersten Thread erstellen Code.

gruss Emil


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:07 Uhr.
Seite 3 von 3     123   

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