Ownerdraw wie ein "~" darstellen ? [erledigt]

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
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

Ownerdraw wie ein "~" darstellen ? [erledigt]

Beitrag von AUGE_OHR »

hi,

Xbase++ verwendet ja "~" um einen Buchstaben zu unterstreichen. dies ist bei Windows mit dem "&" Zeichen und vom OS() vorgesehen.

wenn ich nun Ownerdraw verwende bekomme ich "~" bzw. "&" im String ...
mit AT() kann ich die Position ermitteln und mit STRTRAN() Zeichen austauschen ... aber damit habe ich noch kein "underline".

wie geht man da vor ?
Zuletzt geändert von AUGE_OHR am Mo, 10. Aug 2015 22:58, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Ownerdraw wie ein "~" darstellen ?

Beitrag von brandelh »

ownerdraw heist doch GraFunktionen oder ?
entweder Fontwechseln gegen einen mit Unterstreichung - sonst alles gleich - oder Länge berechnen und unter Schrift malen.
Gruß
Hubert
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: Ownerdraw wie ein "~" darstellen ?

Beitrag von AUGE_OHR »

brandelh hat geschrieben:... - oder Länge berechnen und unter Schrift malen.
das habe ich mit GraQueryTextBox() versucht ...

Code: Alles auswählen

#include "Gra.ch"
PROCEDURE Main
LOCAL cString, oFont1, oFont2
LOCAL nPosi,aPoints,nNext,nRest,cSign
LOCAL nX := 10
LOCAL nY := 10
LOCAL aAttr := ARRAY( GRA_AS_COUNT )

   SetColor( "N/W" )
   CLS
   oFont1 := XbpFont():new():create( "12.Courier" )
// hm ... wie setzte ich underscore richtig ? 
   oFont2 := XbpFont():new()
   oFont2:underscore := .T.
   oFont2:create( "12.Courier" )
   oFont2:underscore := .T.
* oFont2:configure( "12.Courier" )

   aAttr [ GRA_AS_COLOR ]     := GRA_CLR_BLACK
   aAttr [ GRA_AS_BACKCOLOR ] := GRA_CLR_WHITE
   GraSetAttrString( , aAttr )

   GraSetFont( NIL, oFont1 )
   cString := "Xbase++: ~Graphical text output for Hotkey"
   GraStringAt( NIL, {10,10}, cString )

   nY += 40
   nPosi := AT("~",cString)
   IF nPosi > 0
      GraSetFont ( NIL, oFont2 )
      GraStringAt( NIL, { nX, nY }, SUBSTR(cString,1,nPosi-1))
      aPoints := GraQueryTextBox(NIL,SUBSTR(cString,1,nPosi-1))
      nNext := aPoints[4][1] - aPoints[1][1]

// Farbe nur als Hilfe 
      aAttr [ GRA_AS_COLOR ]     := GRA_CLR_RED
      aAttr [ GRA_AS_BACKCOLOR ] := GRA_CLR_WHITE
      GraSetAttrString( , aAttr )

      cSign := SUBSTR(cString,nPosi+1,1)
ALTD()
// Font Underline "wirkt" nicht ???
      GraSetFont(  NIL, oFont2 )
      GraStringAt( NIL,{ nX +nNext, nY }, cSign )
      aPoints := GraQueryTextBox(NIL,cSign)
      nRest := aPoints[4][1] - aPoints[1][1]

      aAttr [ GRA_AS_COLOR ]     := GRA_CLR_BLACK
      aAttr [ GRA_AS_BACKCOLOR ] := GRA_CLR_WHITE
      GraSetAttrString( , aAttr )

      // Rest zeichnen
      GraSetFont( NIL, oFont1 )
      GraStringAt( NIL,{ nX +nNext+nRest, nY }, SUBSTR(cString,nPosi+2,LEN(cString)-(nPosi+1) ))
   ELSE
      GraStringAt( NIL, { nX, nY }, cString)
   ENDIF

   Inkey(0)

 RETURN
viel Code ... aber das Ergebnis (KEIN underscore ?) ist nicht berauschend :(

nun beruhen alle GRA* Function auf der Windows API und die können "automatisch" ein "&" ( Ampersand ) zum unterstreichen verwenden ( wenn nicht DT_NOPREFIX gesetzt wurde )
gruss by OHR
Jimmy
Christian
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 44
Registriert: Mi, 18. Jul 2007 15:05

Re: Ownerdraw wie ein "~" darstellen ?

Beitrag von Christian »

Hallo Jimmy,

hast du mal GraCaptionStr() anstelle von GraStringAt() probiert? Vielleicht funktioniert es damit automatisch.

Gruß
Christian
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: Ownerdraw wie ein "~" darstellen ?

Beitrag von Tom »

Vielleicht funktioniert es damit automatisch.
Ja, das tut es. "GraCaptionStr() unterstützt weiterhin die Ausgabe von Tastaturkürzeln. Diese sind durch ein vorangestelltes "~"-Zeichen (Tilde) gekennzeichnet. Ist ein solches Zeichen in der Zeichenkette enthalten, wird es unterstrichen angezeigt." (Doku)
Herzlich,
Tom
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: Ownerdraw wie ein "~" darstellen ?

Beitrag von AUGE_OHR »

Christian hat geschrieben:hast du mal GraCaptionStr() anstelle von GraStringAt() probiert? Vielleicht funktioniert es damit automatisch.
Tatsächlich ! Danke :blob8:
gruss by OHR
Jimmy
Antworten