![]() |
Prüfen ob Scrollbar aktiviert
Wie kann ich beim Memo gegenprüfen ob eine Scrollbar aktiviert wurde?
Grundsätzlich verfügt ein memo ja über beide Scrollbars Horiz/Vert Ich prüfe nun mit meinem Code ob diese zur verfügung stehen. Das problem ist nur Sie werden auch erkannt wenn sie nicht unter Eigenschaften aktiviert wurden (Sichtbar sind). Wie kann ich also gegenprüfen ob sie aktiviert wurden unabhängig vom Eigenschaftsdialog. Zur besseren Verständigung hier noch was Code!
Delphi-Quellcode:
function THookedScrollbar.StoreVertical(WinHandle: HWND): Boolean;
var State: Boolean; begin Result := False; VScrInfo.cbSize := SizeOf(VScrInfo); VScrInfo.fMask := SIF_ALL; // ScrollBar vorhanden? State := GetScrollInfo(WinHandle, Windows.SB_VERT, VScrInfo); // keine ScrollBar vorhanden if not State then exit; // Lese aktuelle Bar Parameter VScrBar.cbSize := Sizeof(VScrBar); GetScrollBarInfo(WinHandle, integer(OBJID_VSCROLL), VScrBar); // kopiere den aktuellen Rect zur späteren bearbeitung CopyRect(VertRect, VScrBar.rcScrollBar); Result := True; end; State liefert immer True zurück egal ob unter Eigenschaften die Bars eingeschaltet wurden oder nicht! gruss |
AW: Prüfen ob Scrollbar aktiviert
![]() Zitat:
Das Problem hatte ich vor x Jahren auch einmal. Ich habe aber keine Möglichkeit im Win-API gefunden, die es ermöglicht, eindeutige festzustellen, ob eine integrierte Scrollbar sichtbar ist oder nicht. Ich hatte mir dann damit beholfen, Client- und Fenstergröße miteinander zu vergleichen. Ist also zum Beispiel die Clientbreite gleich der Fensterbreite minus Scrollbarbreite (evtl. noch den Rahmen berücksichtigen), ist die vertikale Leiste eingeblendet. Diese Lösung ist zwar nicht schön - funktioniert aber in den meisten Fällen. |
AW: Prüfen ob Scrollbar aktiviert
Zitat:
Zitat:
Muss mir das mal näher anschauen. PS: Leider gibt es ja sowas nicht in Delphi ScrollBars eines Fensters den eigenen Bedürfnissen anzupassen ( Kostenlos ohne Komponente) daher baue ich mir eine eigene LIB bzw.. Units die das ermöglichen sollen. Danke! gruss |
AW: Prüfen ob Scrollbar aktiviert
Zitat:
Viele Grüße |
AW: Prüfen ob Scrollbar aktiviert
Da ich ja immer noch daran arbeite:wink: kleiner Tip
Wenn hsi.nMax oder vsi.nMax<=0, wird die jeweilige Scrollbar nicht angeszeigt! Automatisch passt sich, in diesem Beispiel Dein Grid in der Grösse an und die zu zeichnnde Fläsche wird um die jweilige Scroolbar grösser Zitat:
GRuss alfold |
AW: Prüfen ob Scrollbar aktiviert
Zitat:
In wie weit das jetzt mit einem Memo funktioniert muss ich wiederum erst testen. Jo ich mach das auch für meine SK_AERO LIB denke das ist einfacher zu händeln als wenn ich zwei ScrollBars einzeln anfertigen (Programmieren muss). gruss |
AW: Prüfen ob Scrollbar aktiviert
Zitat:
Schau mal unter meinen Projekten. gruss |
AW: Prüfen ob Scrollbar aktiviert
Allerdings, ist ganz wichtig!!!! Vermische nicht Daten mit Graphic:evil:
OT// muss Dein Miditracker, was die GraphicRoutinen betreffen neu machen, leider wenig Zeit//OT Gruss alfold |
AW: Prüfen ob Scrollbar aktiviert
Zitat:
Keine Ahnung was du meinst. Bei mir funktioniert das alles :) PS: Im Memo kann man die Scrollbar nicht auf Max = 0 stellen. Die scheint virtuell erstellt zu werden. gruss |
AW: Prüfen ob Scrollbar aktiviert
Ich weiss ja nicht was Du da machst aber in Deinem Grid funct es
Delphi-Quellcode:
Bei einem VCL Memo gibt es ja noch (ssHorizontal, ssVertical, ssNone, ssBoth)
hsi.cbSize := Sizeof(SCROLLINFO);
hsi.nMin := XSizeMid; hsi.nMax := (rc.Right) - (XSize - XSizeMid); //<--ist hier der wert <= 0 wird keine Scrollbar angezeigt hsi.nPos := StartX + XSizeMid; hsi.fMask := SIF_POS or SIF_RANGE; SetScrollInfo(FHGrid, SB_HORZ, hsi, True); Wenn ssHorizontal nicht aktiv ist passt sich xsize vom Memo auch an. Wie Du das bei Dir umgesetzt hast :gruebel: weiss ich ja nicht. EDIT: wenn also hsi.nMax = 0 dann darf ssHorizontal nicht aktiv sein! Gruss alfold |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 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