Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Bitmap/Icon im Textfluß einer Stringgrid-Zelle (https://www.delphipraxis.net/176935-bitmap-icon-im-textfluss-einer-stringgrid-zelle.html)

panch 5. Okt 2013 12:46

Bitmap/Icon im Textfluß einer Stringgrid-Zelle
 
Guten Tag allerseits,

zu folgendem Thema hab ich leider nichts gefunden und hoffe daher auf Hilfe aus dem Forum:

Ich würde gerne in einen String in einer Stringgrid-Zelle ein oder mehrere Bitmaps bzw. Icons einfügen und diese Bitmaps im weiteren Verlauf, d.h. auch im InplaceEditor wie normale Textzeichen behandeln - allerdings ohne Formatierung.

Wozu? Es geht mir darum, XML-Tags, die in einem String vorkommen können nicht als bearbeitbare Zeichenfolgen, sondern als Einzelzeichen mit passender Darstellung behandeln zu können. Auf diese Weise ist gewährleistet, daß die Zeichenfolge eines Tags nicht beschädigt werden kann und daß man einen solchen Tag ganz einfach markieren, ausschneiden und wieder einfügen kann.

Die Lösung muß nicht unbedingt mit Bitmaps realisiert werden, wenn es eine andere, einfachere oder bessere Lösung gibt. Eventuell ist es einfacher eine Schrift zu erstellen, deren Zeichen als Tags angezeigt werden. Oder vielleicht kann man das auch total anders machen.

Toll wäre noch, könnte man die eigentliche Tag-Zeichenfolge als Hint anzeigen. Das wäre allerdings mehr ein Zuckerl, als eine absolute Notwendigkeit.

Vielen Dank schon mal vorab für die Hilfe.

Schönes Wochenende
Franz

P.S. Ich verwende Delphi 2010

Volker Z. 6. Okt 2013 22:47

AW: Bitmap/Icon im Textfluß einer Stringgrid-Zelle
 
Hallo,

Zitat:

Ich würde gerne in einen String in einer Stringgrid-Zelle ein oder mehrere Bitmaps bzw. Icons einfügen
Das Zeichnen von Text - Bitmap - Text - Bitmap würde man sicherlich hinbekommen.

Zitat:

[...] und diese Bitmaps im weiteren Verlauf, d.h. auch im InplaceEditor wie normale Textzeichen behandeln - allerdings ohne Formatierung.
Da denke ich wird es schon spannend. Wie willst Du das dem InplaceEditor denn beibringen?

Zitat:

Wozu? Es geht mir darum, XML-Tags, die in einem String vorkommen können nicht als bearbeitbare Zeichenfolgen [...] Auf diese Weise ist gewährleistet, daß die Zeichenfolge eines Tags nicht beschädigt werden kann
Wenn es darum geht, eine TRichEdit Komponente leistet das (Stichwort:
Delphi-Quellcode:
TRichEdit.SelAttributes.Protected
).

Zitat:

Die Lösung muß nicht unbedingt mit Bitmaps realisiert werden [...]
Ob es einfacher oder besser ist weiß ich jetzt nicht (ich kenne Deine konkrete Problemstellung nicht), ich würde dazu tendieren den InplaceEditor in diesen Fällen nicht zu nehmen. Stattdessen über die entsprechenden Zelle ein RichEdit zu stülpen und die Eingaben des Users vom RichEdit verarbeiten lassen.

Ganz so trivial ist das aber nicht(!). Du musst:
  • vor dem Anzeigen des RichEdit die XML-Tags schützen
  • daran denken, dass Benutzereingaben getrennte Schutzblöcke (ich nenn das jetzt mal so) zu einem Schutzblock zusammenführen (z. B. Löschen von Text zwischen Anfangs- und Endtag) und dann keine Eingaben mehr möglich sind; sollte aber über ein
    Delphi-Quellcode:
    TRichEdit.OnProtectChange
    realisierbar sein
  • daran denken, dass der Benutzer über Schutzblöcke hinweg kopieren, ausschneiden oder löschen möchte (was dann nicht funktioniert); sollte aber über eine TActionList, entsprechenden TAction Handler und einem eigenen Kontextmenü machbar sein
  • daran denken, dass der User selbst XML-Knoten einfügt (via Tastatur oder Zwischenablage); dann musst Du die entsprechenden Tags wieder schützen
  • daran denken, dass der User fehlerhaftes XML einfügt (via Tastatur oder Zwischenablage); Zwischenablage ist kein Problem aber Benutzereingaben musst Du prüfen
  • und wahrscheinlich musst Du noch einiges mehr berücksichtigen - was mir jetzt im Moment nur nicht einfällt

Aba, Vielleicht haben die Kollegen einen einfacheren / besseren Ansatz

Gruß

Furtbichler 7. Okt 2013 07:30

AW: Bitmap/Icon im Textfluß einer Stringgrid-Zelle
 
Was Volker sagt, ist schon vollkommen richtig und wird auch so gut funktionieren. Ich habe schon ettliche 'Tag-Editoren' gesehen. Über Knotengrenzen hinweg wird man zwar selten agieren, aber so ein gepimptes Richedit bietet einem die Möglichkeit dazu.

Mögliche Fehler lassen sich durch einen Syntaxchecker sehr leicht erkennen. Wenn die zu editierende Struktur nicht gerade mehrere MB umfasst, kann das fast bei jedem Tastendruck erfolgen.

Du musst 'nur' einen Renderer bauen, der deine XML-Struktur in ein TRichedit überführt und wieder zurück. Wenn das jedoch zu langsam wird, dann benötigst Du für alle Änderungsaktionen und Positionsänderungen eine Abbildung zwischen Richedit und Struktur.

Machbar. Planung ist hier alles.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz