Ownerdraw 2 x GraCaptionStr()

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 2 x GraCaptionStr()

Beitrag von AUGE_OHR »

hi,

zunächst zeichne ich mit GraCaptionStr() den vollen String
dann übermale ich es mit dem gefundenen Such-Begriff.

Code: Alles auswählen

   // String zeichnen 
   GraCaptionStr( oPS,{ aInfo[ XBP_DRAWINFO_RECT, 1 ],;
                        aInfo[ XBP_DRAWINFO_RECT, 2 ] },;
                      { aInfo[ XBP_DRAWINFO_RECT, 3 ],;
                        aInfo[ XBP_DRAWINFO_RECT, 4 ] }, xData )

   // jetzt Hilite Color
   aSAttrs[GRA_AS_COLOR] := GRA_CLR_RED
   GraSetAttrString( oPS, aSAttrs )
   IF nPos = 1
      // ab 1st Position
      GraCaptionStr( oPS,{ aInfo[ XBP_DRAWINFO_RECT, 1 ],;
                           aInfo[ XBP_DRAWINFO_RECT, 2 ] },;
                         { aInfo[ XBP_DRAWINFO_RECT, 3 ],;
                           aInfo[ XBP_DRAWINFO_RECT, 4 ] }, ::cHighlight )
   ELSE
      // Position irgendwo im String 
      aRect := GraQueryTextBox( oPS, LEFT( xData, nPos - 1 ) )
      GraCaptionStr( oPS, { aInfo[ XBP_DRAWINFO_RECT, 1 ] + aRect[ 3, 1 ],;
                            aInfo[ XBP_DRAWINFO_RECT, 2 ] },;
                          { aInfo[ XBP_DRAWINFO_RECT, 3 ]  ,;
                            aInfo[ XBP_DRAWINFO_RECT, 4 ] }, ::cHighlight )
   ENDIF
   RETURN .F.
Problem : es wirkt als wenn es um 1 Pixel verschoben ist :angry4:
GraCaptionStr.jpg
GraCaptionStr.jpg (56.5 KiB) 3878 mal betrachtet
GraCaptionStr_Zoom.jpg
GraCaptionStr_Zoom.jpg (39.99 KiB) 3877 mal betrachtet
da sich die Positionen nicht verändert haben dürfte das nicht sein ... aber was ist es dann :?:
gruss by OHR
Jimmy
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 2 x GraCaptionStr()

Beitrag von Tom »

Du verrechnest Dich da irgendwo um ein, zwei Pixel. Aber das ist zum Blödwerden - ich hab das auch mal versucht, und bin dann zu dem Schluss gekommen, dass es anders eleganter geht. Und ich habe vom "formatted label" eine Klasse abgeleitet, die das Zeichnen von Tabellenzellen übernimmt, um Hervorhebungen abzubilden. Das ist ein wenig komplexer geworden, weil ich noch Farbcodes eingebaut habe, erlaubt aber die Mischung von allen möglichen Attributen, so dass auch innerhalb einer Tabellenzelle ohne großen Zusatzaufwand Kursivschrift, Unterstreichungen usw. dargestellt werden können, einfach nur durch ein Attribut (im Cargo) und die Verwendung der Textformatierungen mit /b, /i usw.

Leider ist der Code nicht besonders portabel geraten.
hilite.png
hilite.png (12.49 KiB) 3852 mal betrachtet
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 2 x GraCaptionStr()

Beitrag von AUGE_OHR »

Danke für deine Antwort
Tom hat geschrieben: Mi, 22. Mai 2019 9:35 Du verrechnest Dich da irgendwo um ein, zwei Pixel.
wenn das erste Such Zeichen gleich stimmt rechne ich gar nicht sondern nehme die selben aInfo Koordinaten für den Sub-String. deshalb bin ich ja verwundert das die Position nicht übereinstimmt ...

---

ich habe auch mit den Farben weiter probiert und irgendwann vergessen die 2nd Farbe zu setzten.
das Ergebnis war dann "Fett" und es war heller als der Rest :shock: .

wenn man nun eine 2nd Farbe wählt die ähnlich der 1st Farbe ist fällt es weniger auf.
Problem : bei mir sind die Farben frei wählbar ... :roll:

p.s. hab auch einen 2nd Font mit ".Fett" ausprobiert aber das Ergebnis ist, je nach Font, dann "breiter" [-X

---

habe mir mal XbpFormattedLabel angesehen was auf XbpStatic basiert und o:Draw benutzt

Code: Alles auswählen

METHOD XbpFormattedLabel:Draw( oPS, aInfo )
da wird mit GraPathBegin() / GraPathEnd() gearbeitet ... hm ... :-k

ich hab die GraPath* Methoden in XbpBrowseHighlight:customDrawCell() auprobiert aber dann sehe ich nichts was in dem "GraPath" gezeichnet wurde :(

Frage : wie bekommt man die GraPath* Methoden in o:customDrawCell() angewandt :?:
gruss by OHR
Jimmy
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 2 x GraCaptionStr()

Beitrag von Tom »

GraPath* sind keine Methoden, sondern Funktionen. Du leitest mit GraPathBegin( oPS) ein, alles folgende an Gra* ist dann Pfad. Du malst beispielsweise eine Box, einen Kreis, was weiß ich. Dann folgt GraPathEnd( oPS). Der Pfad liegt dann fest. Anschließend kannst Du z.B. mit GraPathClip() entscheiden, ob dieser Pfad ausgespart (keine der folgenden Zeichnungen, die im Pfad landet, wird sichtbar) oder eingeschlossen (egal, wohin Du zeichnest, es wird nur dort sichtbar) werden soll. Wenn der PS zugeht, ist der Pfad weg.
Herzlich,
Tom
Antworten