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 ?
Ownerdraw wie ein "~" darstellen ? [erledigt]
Moderator: Moderatoren
- brandelh
- 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 ?
ownerdraw heist doch GraFunktionen oder ?
entweder Fontwechseln gegen einen mit Unterstreichung - sonst alles gleich - oder Länge berechnen und unter Schrift malen.
entweder Fontwechseln gegen einen mit Unterstreichung - sonst alles gleich - oder Länge berechnen und unter Schrift malen.
Gruß
Hubert
Hubert
- AUGE_OHR
- 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 ?
das habe ich mit GraQueryTextBox() versucht ...brandelh hat geschrieben:... - oder Länge berechnen und unter Schrift malen.
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
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
Jimmy
Re: Ownerdraw wie ein "~" darstellen ?
Hallo Jimmy,
hast du mal GraCaptionStr() anstelle von GraStringAt() probiert? Vielleicht funktioniert es damit automatisch.
Gruß
Christian
hast du mal GraCaptionStr() anstelle von GraStringAt() probiert? Vielleicht funktioniert es damit automatisch.
Gruß
Christian
- Tom
- 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 ?
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)Vielleicht funktioniert es damit automatisch.
Herzlich,
Tom
Tom
- AUGE_OHR
- 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 ?
Tatsächlich ! DankeChristian hat geschrieben:hast du mal GraCaptionStr() anstelle von GraStringAt() probiert? Vielleicht funktioniert es damit automatisch.
gruss by OHR
Jimmy
Jimmy