AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Position von text im Label bestimmen(Auf dem Bildschirm).
Thema durchsuchen
Ansicht
Themen-Optionen

Position von text im Label bestimmen(Auf dem Bildschirm).

Ein Thema von stiftII · begonnen am 14. Okt 2009 · letzter Beitrag vom 14. Okt 2009
Antwort Antwort
stiftII

Registriert seit: 2. Sep 2009
Ort: Cuxhaven
122 Beiträge
 
#1

Position von text im Label bestimmen(Auf dem Bildschirm).

  Alt 14. Okt 2009, 16:42
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
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Position von text im Label bestimmen(Auf dem Bildschirm)

  Alt 14. Okt 2009, 16:51
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.
  Mit Zitat antworten Zitat
marius0702

Registriert seit: 1. Jan 2008
40 Beiträge
 
#3

Re: Position von text im Label bestimmen(Auf dem Bildschirm)

  Alt 14. Okt 2009, 16:59
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) ) );
  Mit Zitat antworten Zitat
stiftII

Registriert seit: 2. Sep 2009
Ort: Cuxhaven
122 Beiträge
 
#4

Re: Position von text im Label bestimmen(Auf dem Bildschirm)

  Alt 14. Okt 2009, 18:00
Zitat von marius0702:
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) ) );
Das funktioniert aber nicht, wenn das Label mehrere Zeilen Lang ist ( Wordwrap ). ;/

Zitat:
Würde allerdings nur mit einzeiligem Text funktionieren.
Das ist das Problem. Ich bräuchte eine Lösung die auch funktioniert wenn das Label mehrere Zeilen lang ist ;/.

~stift
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Position von text im Label bestimmen(Auf dem Bildschirm)

  Alt 14. Okt 2009, 18:15
Die Frage ist doch: Wozu brauchst du das?
Ich habe das Gefühl du zäumst das Pferd von hinten auf.
Andreas
  Mit Zitat antworten Zitat
stiftII

Registriert seit: 2. Sep 2009
Ort: Cuxhaven
122 Beiträge
 
#6

Re: Position von text im Label bestimmen(Auf dem Bildschirm)

  Alt 14. Okt 2009, 18:30
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: Position von text im Label bestimmen(Auf dem Bildschirm)

  Alt 14. Okt 2009, 19:14
Zitat von stiftII:
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.
Ahh - jetzt gibt das mehr Sinn.

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:
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;
Die Text mit Canvas.TextRect() ausgeben.
"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...
Andreas
  Mit Zitat antworten Zitat
stiftII

Registriert seit: 2. Sep 2009
Ort: Cuxhaven
122 Beiträge
 
#8

Re: Position von text im Label bestimmen(Auf dem Bildschirm)

  Alt 14. Okt 2009, 19:34
Zitat:
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... Confused
Schade, das wäre auch klasse.

Hab das System verstanden. Wenns Probleme geben sollte melde ich mich nochmal, danke für die ausführliche Beschreibung!

~stift
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#9

Re: Position von text im Label bestimmen(Auf dem Bildschirm)

  Alt 14. Okt 2009, 19:53
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


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 Hier im Forum suchenShoutBox-Programme und die zugehörigen Threads ansiehst.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz