Wheel von XbpBrowse() überladen?

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
DelUser01

Wheel von XbpBrowse() überladen?

Beitrag von DelUser01 »

Hallo

Die Methode Wheel soll überladen werden um im XbpBrowse die Anzahl der zu scrollenden Zeilen gesteuert werden kann. Ich habe einiges probiert aber keine Reaktion - der Scroll-Faktor bleibt gleich.
Ungefähr so:

Code: Alles auswählen

Class BrowseXYZ From XbpBrowse
Exported:
   Method Wheel
EndClass

Method BrowseXYZ:Wheel( aPos , aWheel )
// wenn ich hier nichts reinschreibe scrollt der Browser trotzdem!
Return( Self )
MfG
Roland
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Wheel von XbpBrowse() überladen?

Beitrag von georg »

Hallo, Roland -


soweit ich die Dokumentation verstehe, erlaubt die Methode :wheel() lediglich, abzufragen, was während einer Scroll-Operation mit dem Mausrad passiert. Da sie self zurückgibt und nicht z.B. die Anzahl Zeilen, die zu scrollen sind, hast Du hier kein Glück. Aus meiner Sicht dient die Methode nur dazu, auf bestimmte Maus-Aktionen zu reagieren. Die Steuerung erfolgt (wahrscheinlich) direkt von Windows.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Wheel von XbpBrowse() überladen?

Beitrag von Manfred »

Moin

die Menge der Sätze wird in Mauseinstellungen unter Windows eingestellt. Ich meine Standardwert ist 3
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
DelUser01

Re: Wheel von XbpBrowse() überladen?

Beitrag von DelUser01 »

Hallo

Das ist so mit den 3 Zeilen als Grundeinstellung.
In der XBase++-Doku steht aber überall bei :wheel dass die Methode überlagert werden kann und man dann die Scroll-Distanz selbst einstellen kann.

Ich habe in XbpCrt und verschiedenen GUI-Funktionen (z.B. Listbox) seit langem die Maus integriert. Aber eben nur mit einer Zeile und nicht mit drei Zeilen pro Rad-Bewegung. Damit der Benutzer in der entsprechenden List mit dem Rad exakt auf den gewünschten Eintrag positionieren kann. Dieses Verhalten möchte ich nun auch beim XbpBrowse haben.
Die Benutzer meiner Applikation haben noch lange Zeit beides. Und das ist eben doof wenn im alten Fenster so und im anderen Fenster so gescrollt werden muss.
Sonst könnte ich damit leben.

Gruß
Roland
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Wheel von XbpBrowse() überladen?

Beitrag von georg »

Hallo, Roland -


wo steht in der Dokumentation, dass die Scroll-Distanz selbst eingestellt werden kann?

:wheel() kommt von XbpWindow(), und in der englischen Dokumentation heisst es:
If the :wheel() method is overloaded, the number of rows to scroll can be calculated from the number of rows displayed by the Xbase Part and the second element of <aWheel>
Hier lese ich nur "kann errechnet/ermittelt" werden, und nicht, dass der Wert verändert werden kann. Hast Du mal ein Beispiel, wo Du den Scroll-Wert anpassen kannst?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Wheel von XbpBrowse() überladen?

Beitrag von Tom »

Man kann den Wheel-Slot z.B. benutzen, wenn man eigene Controls (die man z.B. mit Ownerdrawing erzeugt hat) zum Scrollen bringen kann. Das Verhalten von Browses kann man m.E. nur über die API-Funktion SystemParametersInfoA ändern, aber das ändert systemweit das Scrollverhalten. Man könnte noch versuchen, das Event in der Loop abzufangen, aber über den Wheel-Slot geht es an dieser Stelle nicht.
Herzlich,
Tom
DelUser01

Re: Wheel von XbpBrowse() überladen?

Beitrag von DelUser01 »

Hallo Tom

nach weiteren Versuchen sehe ich das auch so dass es nicht veränderbar ist.

Kann man Wheel in XbpBrowse auch nicht abschalten?
Dann könnte ich ja was eigenes bauen.

Gruß
Roland
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Wheel von XbpBrowse() überladen?

Beitrag von AUGE_OHR »

Roland Gentner hat geschrieben:Kann man Wheel in XbpBrowse auch nicht abschalten?
Dann könnte ich ja was eigenes bauen.
es gibt keinen :Wheel Slot im Source von XbpBrowse/XbpQuickbrowse.

Es gibt die Method o:HandleEvent ( nEvent, Mp1, Mp2 )

Code: Alles auswählen

      CASE nEvent == xbeM_Wheel
         // Mouse wheel, the wheel uses degree values which tell
         // how many degrees the wheel needs to be turned. Therefore
         // we have to calculate the 360/degrees to determine
         // how many lines we have to skip.
         i := Int( ::RowCount / ( 360 / Abs( Mp2[2] ) ) )
         IF Mp2[2] > 0
            i := i * (-1)
         ENDIF
         PostAppEvent ( xbeBRW_Navigate, XBPBRW_Navigate_Skip, i, self )
oder

Code: Alles auswählen

    CASE nEvent == xbeM_Wheel
       FOR i := 1 TO Int( ::RowCount / ( 360 / Abs( Mp2[2] ) ) )
          IF mp2[2] < 0
             ::Down(FALSE)
          ELSE
             ::Up(FALSE)
          ENDIF
       NEXT
es wird also der Event xbeM_Wheel ausgewertet.

p.s. wenn ein Event "verarbeitet" wurde wird er aus der Event Queue "gelöscht" und kommt nicht mehr in einer "anderen" Event-Loop an.
gruss by OHR
Jimmy
DelUser01

Re: Wheel von XbpBrowse() überladen?

Beitrag von DelUser01 »

Hallo Auge_Ohr

danke für den Hinweis - auf das Naheliegende bin ich nicht gekommen.
Ich brauche ja nur den Event abfangen...

Gruß
Roland
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Wheel von XbpBrowse() überladen?

Beitrag von Tom »

Schrieb ich ja auch (weiter oben):
Man könnte noch versuchen, das Event in der Loop abzufangen
Nur über den Slot geht es eben nicht.

Ansonsten steht noch die API-Funktion "SystemParametersA()" zur Verfügung, über die man einstellen oder abfragen kann, wie viele Moves das Wheel erzeugt.
Herzlich,
Tom
DelUser01

Re: Wheel von XbpBrowse() überladen?

Beitrag von DelUser01 »

Hallo Tom

das habe ich schon verstanden mit den Systemparametern.
Da will ich aber nicht dran drehen - dann geht das Rad bestimmt an einer anderen Stelle nicht mehr wie vorher.

Gruß
Roland
Antworten