AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Prüfen ob Scrollbar aktiviert

Ein Thema von EWeiss · begonnen am 30. Jun 2011 · letzter Beitrag vom 30. Jun 2011
Antwort Antwort
Seite 1 von 3  1 23      
EWeiss
(Gast)

n/a Beiträge
 
#1

Prüfen ob Scrollbar aktiviert

  Alt 30. Jun 2011, 11:34
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

Geändert von EWeiss (30. Jun 2011 um 19:25 Uhr)
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#2

AW: Prüfen ob Scrollbar aktiviert

  Alt 30. Jun 2011, 12:54
GetScrollInfo:
Zitat:
Return Value
Type: BOOL
If the function retrieved any values, the return value is nonzero.
Dadurch erhälst Du immer True, sobald eine Scrollbar zum Fenster gehört - unabhängig davon, ob sie eingeblendet ist oder nicht.

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.
Thomas Nitzschke
Google Maps mit Delphi
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Prüfen ob Scrollbar aktiviert

  Alt 30. Jun 2011, 13:12
Zitat:
Dadurch erhälst Du immer True, sobald eine Scrollbar zum Fenster gehört - unabhängig davon, ob sie eingeblendet ist oder nicht.
Das ist hart weil mir dann ein Teil im unteren bereich fehlt bzw. als Scrollbar gezeichnet wird obwohl nicht vorhanden.

Zitat:
Ich hatte mir dann damit beholfen, Client- und Fenstergröße miteinander zu vergleichen.
Wäre eine alternative.

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

Geändert von EWeiss (30. Jun 2011 um 13:18 Uhr)
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#4

AW: Prüfen ob Scrollbar aktiviert

  Alt 30. Jun 2011, 13:29
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.
Ja, das ist leider wahr (zumindest kenne ich keine derartige Lösung)... Da wünsche ich Dir viel Erfolg!

Viele Grüße
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom (30. Jun 2011 um 13:34 Uhr)
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: Prüfen ob Scrollbar aktiviert

  Alt 30. Jun 2011, 13:31
Da ich ja immer noch daran arbeite 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:
Das ist hart weil mir dann ein Teil im unteren bereich fehlt bzw. als Scrollbar gezeichnet wird obwohl nicht vorhanden
stimmt also so nicht
GRuss alfold

Geändert von alfold (30. Jun 2011 um 13:44 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Prüfen ob Scrollbar aktiviert

  Alt 30. Jun 2011, 13:56
Da ich ja immer noch daran arbeite 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:
Das ist hart weil mir dann ein Teil im unteren bereich fehlt bzw. als Scrollbar gezeichnet wird obwohl nicht vorhanden
stimmt also so nicht
GRuss alfold
Ahhh das muss ich mal testen..
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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Prüfen ob Scrollbar aktiviert

  Alt 30. Jun 2011, 13:57
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.
Ja, das ist leider wahr (zumindest kenne ich keine derartige Lösung)... Da wünsche ich Dir viel Erfolg!

Viele Grüße
Funktioniert ja soweit schon abgesehen vom zeichnen der Bitmaps
Schau mal unter meinen Projekten.

gruss
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: Prüfen ob Scrollbar aktiviert

  Alt 30. Jun 2011, 14:07
Allerdings, ist ganz wichtig!!!! Vermische nicht Daten mit Graphic
OT// muss Dein Miditracker, was die GraphicRoutinen betreffen neu machen, leider wenig Zeit//OT

Gruss alfold
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: Prüfen ob Scrollbar aktiviert

  Alt 30. Jun 2011, 14:14
Allerdings, ist ganz wichtig!!!! Vermische nicht Daten mit Graphic
OT// muss Dein Miditracker, was die GraphicRoutinen betreffen neu machen, leider wenig Zeit//OT

Gruss alfold
Hää ?
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

Geändert von EWeiss (30. Jun 2011 um 14:18 Uhr)
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#10

AW: Prüfen ob Scrollbar aktiviert

  Alt 30. Jun 2011, 15:00
Ich weiss ja nicht was Du da machst aber in Deinem Grid funct es
Delphi-Quellcode:
        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);
Bei einem VCL Memo gibt es ja noch (ssHorizontal, ssVertical, ssNone, ssBoth)
Wenn ssHorizontal nicht aktiv ist passt sich xsize vom Memo auch an.

Wie Du das bei Dir umgesetzt hast weiss ich ja nicht.
EDIT:
wenn also hsi.nMax = 0 dann darf ssHorizontal nicht aktiv sein!

Gruss alfold

Geändert von alfold (30. Jun 2011 um 15:06 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:47 Uhr.
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