showBalloonTip() bei XbpPushButton()

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

showBalloonTip() bei XbpPushButton()

Beitrag von Werner_Bayern »

Servus,

hat jemand sowas schon mal realisiert? Am besten wohl bei :enter()?
es grüßt

Werner

<when the music is over, turn off the lights!>
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: showBalloonTip() bei XbpPushButton()

Beitrag von AUGE_OHR »

Werner_Bayern hat geschrieben:hat jemand sowas schon mal realisiert? Am besten wohl bei :enter()?
jedes XbPart hat eine iVar o:tooltipText welcher jedoch
Die Instanzvariable :toolTipText wird gegenwärtig nicht vom Laufzeitsystem verwendet.
vielmehr benutzt Alaska im Sample c:\ALASKA\XPPW32\Source\samples\solution\TOOLTIP\Tooltip.prg die iVar o:helpLink.
gruss by OHR
Jimmy
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: showBalloonTip() bei XbpPushButton()

Beitrag von Werner_Bayern »

AUGE_OHR hat geschrieben:jedes XbPart hat eine iVar o:tooltipText
Wird vom Laufzeitsystem aber nicht unterstützt.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: showBalloonTip() bei XbpPushButton()

Beitrag von brandelh »

aktuell nicht genutzt ist wohl der bessere Ausdruck.
Wenn man dort aber den gewünschten Text hinterlegt und diesen in eigenem Code nutzt, besteht die Möglichkeit, dass irgendwann einmal Xbase++ automatisch die Tooltips anzeigt.
Gruß
Hubert
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: showBalloonTip() bei XbpPushButton()

Beitrag von Werner_Bayern »

AUGE_OHR hat geschrieben:vielmehr benutzt Alaska im Sample c:\ALASKA\XPPW32\Source\samples\solution\TOOLTIP\Tooltip.prg die iVar o:helpLink.
Hat das schon mal jemand erweitert? Mehrzeilig, schöneres Aussehen? Versch. Fonts im Tooltip?
es grüßt

Werner

<when the music is over, turn off the lights!>
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: showBalloonTip() bei XbpPushButton()

Beitrag von AUGE_OHR »

Werner_Bayern hat geschrieben:
AUGE_OHR hat geschrieben:vielmehr benutzt Alaska im Sample c:\ALASKA\XPPW32\Source\samples\solution\TOOLTIP\Tooltip.prg die iVar o:helpLink.
Hat das schon mal jemand erweitert? Mehrzeilig, schöneres Aussehen? Versch. Fonts im Tooltip?
JA.
es geht dabei ja "nur" um das malen

Code: Alles auswählen

METHOD MagicHelp:PaintTheTip( cText, aPos )
LOCAL aAreaAttr, aStringAttr
LOCAL oPS
LOCAL aPoints
LOCAL aTest
LOCAL nTest     := 0
LOCAL aSize     := { 0, 0 }
// neu dazu
LOCAL aRows     := AtInside( ";", cText )
LOCAL i, iMax
LOCAL nXright
LOCAL nXleft
LOCAL nYtop
LOCAL nYbottom

   iMax := LEN( aRows )

   FOR i := 1 TO iMax
      oPS := ::oTip:lockPS()
      aTest := GraQueryTextBox( oPS, aRows[ i ] )
      ::oTip:unlockPS()
      IF aTest[ 3, 1 ] > nTest
         nTest := aTest[ 3, 1 ]
         aPoints := ACLONE( aTest )
      ENDIF
   NEXT

   nXright := aPoints[ 3, 1 ]
   nXleft  := aPoints[ 1, 1 ]
   aSize[ 1 ] :=   nXright         - nXleft

   nYtop    := aPoints[ 1, 2 ]
   nYbottom := aPoints[ 2, 2 ]
   aSize[ 2 ] :=   nYtop           - nYbottom

   //
   // hier Höhe Festlegen
   //
   IF cText = "(nil)"
      aPos[ 2 ] -= 30
   ELSEIF iMax = 1
      aPos[ 2 ] -= 30
   ELSE
      aPos[ 2 ] -= aSize[ 2 ] * (iMax-1)
   ENDIF

   //
   // jetzt die Box immer mittig unter dem Cursor
   //
   ::oTip:setPosAndSize( { aPos[ 1 ] - ( aSize[ 1 ] / 2 ), aPos[ 2 ] }, { aSize[ 1 ], aSize[ 2 ] * iMax }, .F. )
   oPS := ::oTip:lockPS()

   aAreaAttr := ARRAY( GRA_AA_COUNT )
   aAreaAttr[ GRA_AA_COLOR ] := XBPSYSCLR_INFOBACKGROUND
   GraSetAttrArea( oPS, aAreaAttr )
   GraBox( oPS, { 0, 0 }, { aSize[ 1 ] - 1, ( aSize[ 2 ] * iMax ) - 1 }, GRA_OUTLINEFILL )

   aStringAttr := ARRAY( GRA_AS_COUNT )
   aStringAttr[ GRA_AS_COLOR ] := XBPSYSCLR_INFOTEXT
   GRASETATTRSTRING( oPS, aStringAttr )

   nTest := INT( ( aSize[ 2 ] - 1 ) / iMax )

   //
   // die ganze Schleife
   //
   FOR i := 1 TO iMax
      IF i = imax
         aStringAttr := ARRAY( GRA_AS_COUNT )
         aStringAttr[ GRA_AS_COLOR ] := GRA_CLR_DARKBLUE
         GRASETATTRSTRING( oPS, aStringAttr )
         IF i = 1
            GraStringAt( oPS, { 4, 4 }, aRows[ i ] )
         ELSE
            GraStringAt( oPS, { 4, INT( ( nTest + 4 + 4 + 4 ) * ( i - 1 ) ) + 8 }, aRows[ i ] )
         ENDIF
      ELSE
         GraStringAt( oPS, { 4, INT( ( nTest + 4 + 4 + 4 ) * ( i - 1 ) ) + 4 }, aRows[ i ] )
      ENDIF
   NEXT

   ::oTip:unLockPS( oPS )
RETURN ( SELF )
Magichelp läuft ja als eigener Thread jedoch ohne Sync.
auf langsamen PC können "unkontrollierte" Thread Probleme machen wenn gleichzeitig im Main "umfangreiche" Aktionen ablaufen.
verwendet man nun "in" einem Thread auch noch Magichelp dann kann es kritisch werden.

die Verwendung von einer DBF ( MHELP.DBF ) als Quelle für Magichelp ist auch nicht ideal weil viel zu langsam.
wenn der User von einem Xbpart zum nächsten wechselt funktioniert es mit dem Keyboard bei TAB
aber mit der Maus könnte ich in der Zeit über mehrere XbParts gefahren sein.

IMHO sollte man die DBF in ein Array schaufeln und das als Quelle für Magichelp benutzen.

p.s. das ganze funktioniert nur wenn in
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced
"EnableBalloonTips" auf 1 steht
gruss by OHR
Jimmy
Antworten