![]() |
Position von text im Label bestimmen(Auf dem Bildschirm).
Hallo.
Gibt es eine Möglichkeit die Stelle in einem Label an dem ein bestimmter Text steht zu bestimmen ? Beispiel: Label-Caption: "Dies ist ein relativ kurzer Text"; Jetz möchte ich die x,y Koordinaten von "kurzer" auf dem Bildschirm haben. Ich möchte die Koordinaten auf dem Bildschirm, oder relativ zur Haupt-Form haben. Ist sowas möglich ? ~stift |
Re: Position von text im Label bestimmen(Auf dem Bildschirm)
Ich würde etwas mogeln, indem ich temporär die Schriftart irgendeines Canvas (das ich ggf. vorher erzeuge) auf die Schriftart des Labels setze, und dann mit GetTextExtent die Ausmaße des zurechtgestutzten Strings ermittle. (Oder kurzzeitig die Caption zurechtstutzen und Autosize aktivieren, das wäre aber sehr unsauber). Würde allerdings nur mit einzeiligem Text funktionieren.
|
Re: Position von text im Label bestimmen(Auf dem Bildschirm)
fensterposition: form1.top/form1.left
labelposition: label1.top/label1.left textbreite :label1.Canvas.TextWidth(label1.Caption); texthöhe: label1.Canvas.TextHeight(label1.Caption); und wenn du nur bis zu einem bestimmten wort die breite vom text haben willst dann müsste das glaub ich so gehen. label1.Canvas.TextWidth( copy( label1.Caption,0,pos('kurzer',label1.Caption) ) ); |
Re: Position von text im Label bestimmen(Auf dem Bildschirm)
Zitat:
Zitat:
~stift |
Re: Position von text im Label bestimmen(Auf dem Bildschirm)
Die Frage ist doch: Wozu brauchst du das?
Ich habe das Gefühl du zäumst das Pferd von hinten auf. |
Re: Position von text im Label bestimmen(Auf dem Bildschirm)
Hi shmia.
Ich habe einen Text, dieser beinhaltet Smilies. Diese möchte ich im Text umwandeln(in Grafiken). Somit muss ich erkennen an welcher Stelle die Smilies im Text sind und wo sie auf dem Bildschirm sind, um sie beim onpaint meiner hauptform über den text zeichnen zu können. Ich gestehen. Das hört sich alles andere als optimal an. Aber es wäre eine Lösung. ~stift |
Re: Position von text im Label bestimmen(Auf dem Bildschirm)
Zitat:
Input ist eine StringListe mit ein oder mehr Zeilen. In den Zeilen sind bestimmte Smilie in Textdarstellung. Output ist ein Canvas. Zusätzlich braucht man noch eine Imagelist für die Smilies. Dann wäre die Vorgehensweise so: Es gibt einen Startpunkt im Canvas, der mit der Text mitgeführt wird. Das ist der "Cursor". Zuerst die aktuelle Zeile (in Stringliste) untersuchen und den Text bis zum 1. Smilie ausschneiden. Länge des Textes in Pixel bestimmen, z.B. so
Delphi-Quellcode:
Die Text mit Canvas.TextRect() ausgeben.
function TrueFontWidth(fnt: TFont; const text:string): Integer;
var dc: hdc; tsize : Windows.TSize; begin dc := GetDC(0); SelectObject(DC, fnt.Handle); GetTextExtentPoint32(dc, PChar(text), Length(text), tsize); ReleaseDC(0, DC); Result := tsize.cx; end; "Cursor" entsprechend nach rechts verschieben. Smilietext aus Zeile ausschneiden, Bitmap dazu besorgen, auf Canvas ausgeben. "Cursor" über Breite des Bitmaps (+ etwas Zwischenraum) nach rechts schieben. Solange wiederholen, bis ganze Zeile aufgebraucht. Wenn es noch mehr Zeilen gibt, den "Cursor" an den linken Rand setzen und um Texthöhe nach unten verschieben. Ich kann mich dunkel erinnern, dass es hier in der DP einen Betrag gab, der zeigt wie man Bitmaps in ein TRichEdit einbaut. Es ging sogar um Smilies, aber ich finde den Beitrag nicht mehr... :? |
Re: Position von text im Label bestimmen(Auf dem Bildschirm)
Zitat:
Hab das System verstanden. Wenns Probleme geben sollte melde ich mich nochmal, danke für die ausführliche Beschreibung! :) ~stift |
Re: Position von text im Label bestimmen(Auf dem Bildschirm)
man könnte auch seinen Text in den TWebBrowser oder eine andere Komponente reinladen, welche mit HTML umgehn kann.
ansonsten kannst du auch den gesamten Text selber auf das Canvas ausgeben, dann solltest du auch die aktuelle Position kennen, da du ja den Text selber zeichnest :roll: Und wegen dem RichEdit und den Smilies ... vor einer ganzen Weile gab es mal einen ShoutBox-Programmierwettbewerb hier im Forum ... da haben einige Programme diese Variante genutzt und ich glaub der entsprechende (vorhin erwähnte) Artikel wurde auch daraufhin geschrieben ... vielleicht dindest du ja etwas, wenn du dir mal die ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:19 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