Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Label Font soll sich an dem Text ausrichten (https://www.delphipraxis.net/159354-label-font-soll-sich-dem-text-ausrichten.html)

eugene222 24. Mär 2011 14:11

Delphi-Version: 5

Label Font soll sich an dem Text ausrichten
 
Hallo, ich schreibe gerade ein kleines Programm. Jedoch hab ich grad ein kleines Problem.
Ich habe 1 Editfeld. Und ein Label. Jetz hab ich das so gemacht, dass wenn man was ins Editfeld schreibt, dies auch im Label angezeigt wird. Das Problem ist nur, dass das Label immer länger wird bis es abgeschnitten wird.

Ich wollte das so lösen, dass sich die Font.Size an eine festgelegte Breite des Labes anpasst und so immer kleiner wird, wenn man mehr schreibt und wieder größer wenn man weniger schreibt. Nur weiß ich leider nicht wie ich das anstellen soll, da ich grade erst in der Anfangsphase bin. Ich hoffe, dass mir jemand helfen kann.

rollstuhlfahrer 24. Mär 2011 14:27

AW: Label Font soll sich an dem Text ausrichten
 
Das Label passt sich mit seiner Größe automatisch dem Inhalt an. Wenn du dann den Text zuweist, ändern sich die Maße des Labels. Dann kannst du die Breite auswerten und solange bei .Font.Size die Schriftgröße kleiner stellen, bis .Width kleiner als dein Grenzwert ist. Ums einfach zu machen, würde ich immer mit einem festen Startwert anfangen. Du kannst natürlich auch zuerst die Schriftgröße größer werden lassen.

Bernhard

eugene222 24. Mär 2011 14:33

AW: Label Font soll sich an dem Text ausrichten
 
*edit*
Also ich will nicht, dass das Label sich dem Text anpasst, sondern dass der Text sich dem Label anpasst.

*edit*
Ich hab verstanden worauf du hinauswolltest xD. Ich machs mal mit einer Schleife. Hättest du vielleicht einen Vorschlag um wie viel ich die Size immer veringern soll?

rollstuhlfahrer 24. Mär 2011 14:46

AW: Label Font soll sich an dem Text ausrichten
 
Den kleinstmöglichen Wert: 1 (Size ist ja ein Integer).

Wenn du was anderes ausprobieren willst (-> Size mit Nachkommastellen wie z.B. aus Word bekannt) dann addiere doch +1 zu .Font.Height dazu.

Bernhard

ADD: Ich glaub, ich bring mich gerade selbst durcheinander (diese bescheuerte Emba-Online-Hilfe). Also Size ist bei dir hoffentlich positiv und Height dementsprechend negativ. Dann gibt Size die Größe in Punkten an und meine Hilfe stimmt.

eugene222 24. Mär 2011 14:56

AW: Label Font soll sich an dem Text ausrichten
 
Ja das ist das Problem. Size ist ein Int Wert. Ich würd die Size gerne nur um 0.1 veringern.
Also könnte ich das jetzt so machen, dass ich Size um 1 veringer und dafür bei Heigth um 1 erhöhe?

rollstuhlfahrer 24. Mär 2011 15:03

AW: Label Font soll sich an dem Text ausrichten
 
Size und Height hängen zusammen (Hilfe konsultieren). Size kannst du nur um 1 verringern. Wenn du Height veränderst hast du (auf Grund der Formel) eine wesentlich höhere Genauigkeit. Was dann am Ende für eine Textgröße rauskommt, musst du dir selbst errechnen.

Bernhard

eugene222 24. Mär 2011 15:33

AW: Label Font soll sich an dem Text ausrichten
 
Also, ich schaffs nicht. Ist zu hoch für mich. Ich hatte das leider viel leichter in Erinnerung mit Ruby. Aber bei mir klappt einfach nix. Ich möchte eig. nur dass das Labelfenster konstante Werte hat, und die Schrift die da drin ist, sich dem Fenster anpasst. Aber tdem Danke für deine Hilfe

rollstuhlfahrer 24. Mär 2011 15:37

AW: Label Font soll sich an dem Text ausrichten
 
zeig mal, was du hast

Bernhard

rollstuhlfahrer 24. Mär 2011 16:22

AW: Label Font soll sich an dem Text ausrichten
 
Das ist fies. Und außerdem a) nicht hilfreich UND b) völlig abweichend vom Thema. Wenn du trollen willst, dann nehm wenigstens den anderen Thread um das nicht eskalieren zu lassen.

Bernhard

p80286 24. Mär 2011 17:24

AW: Label Font soll sich an dem Text ausrichten
 
Zunächst einmal sollte Label.Autosize auf false gesetzt werden.
dann wird der auszugebene Text mit Label.Canvas.Textwidth() und Label.Width geprüft und ggf. der Font vergrößert oder Verkleinert.

Gruß
K-H

P.S.
Ich bin Autofahrer, interessiert sich jemand für meinen Führerschein?

eugene222 24. Mär 2011 17:50

AW: Label Font soll sich an dem Text ausrichten
 
@vergessen
Ich hätte nicht gedacht, dass hier so Kiddys unterwegs sind.

@Topic
Ich hab das vorhin alles verworfen, weil es voller Fehler war.
Ich setze mich jetz nochmal dran. Vielleicht wird es diesmal etwas besser klappen.
Wenn ich Fortschritte gemacht habe, werde ich diese hier reinposten.

*edit*
Ja genauso hab ich es ja auch gemacht. Das Problem ist nur, dass man den Font nur in 1 Schritten verkleinern kann. Gib es irgentwelche Möglichkeiten den Font im Kleinen Maß zu verkleinern/vergrößern?

*edit2*
Ich hab das jetz so

einmal das On_Change Event des EditFeldes:
Code:
procedure Tabc.ed_a_Change(Sender: TObject);
 BEGIN
  TRY
   f_a := StrToFloat(ed_a.text);
   s_a := ed_a.text;
  EXCEPT
   ed_a.text := '';
   f_a := 0;
   s_a := 'a';
  END;
  la_formel.caption := s_a+'x²+'+s_b+'x+'+s_c+' = 0';
  formel;
 END;
Und die Formel Prozedur:
Code:
PROCEDURE Tabc.formel;
 BEGIN
  IF la_formel.Canvas.TextWidth(la_formel.caption) > la_formel.Width
  THEN BEGIN
        While la_formel.Canvas.TextWidth(la_formel.caption) > la_formel.Width DO
        BEGIN
         la_formel.Font.Size:= la_formel.Font.size -1;
        END;
       END
  ELSE BEGIN
        While la_formel.Canvas.TextWidth(la_formel.caption) < la_formel.Width DO
        BEGIN
         la_formel.Font.Size:= la_formel.Font.size +1;
        END;
       END;
 END;
Irgentwas ist da falsch. Aber ich weiß nicht was. Ich bin noch Anfäger in solchen Sachen

p80286 24. Mär 2011 20:10

AW: Label Font soll sich an dem Text ausrichten
 
Zitat:

Zitat von eugene222 (Beitrag 1090761)
Irgentwas ist da falsch. Aber ich weiß nicht was. Ich bin noch Anfäger in solchen Sachen

Was ist den Falsch?
Wächst die Fontgröße ins unendliche?
Wird überhaupt nichts mehr ausgegeben?

Eine nähere Beschreibung wäre schon nicht schlecht.

Gruß
K-H

eugene222 25. Mär 2011 12:58

AW: Label Font soll sich an dem Text ausrichten
 
Wenn ich ins Edit Feld 1 Ziffer eingebe, wird die Zahl normal im Label angezeigt. Nachdem ich jedoch die Zahl erhöhe, also 2 Ziffern da stehen habe, bleibt das Programm in einer Endlosschleife stehen.

DeddyH 25. Mär 2011 13:01

AW: Label Font soll sich an dem Text ausrichten
 
Hast Du einmal einen Haltepunkt gesetzt und die Werte verfolgt?

p80286 25. Mär 2011 14:40

AW: Label Font soll sich an dem Text ausrichten
 
Das funktioniert:
Delphi-Quellcode:
procedure FontAnpass(var lab:tlabel;const width:integer;const text:string);
begin
  if lab.Canvas.TextWidth(text) > Width THEN BEGIN
    While lab.Canvas.TextWidth(text) > Width DO
      lab.canvas.Font.Size:= lab.canvas.Font.size -1;
  END
  ELSE BEGIN
    While lab.Canvas.TextWidth(text) < Width DO
      lab.canvas.Font.Size:= lab.canvas.Font.size +1;
  END;
  lab.Font.Size:=lab.Canvas.Font.Size;
end;{------------------------------------------------------------------}
Es ist allerdings noch finetuning von Nöten.

Gruß
K-H

DeddyH 25. Mär 2011 14:50

AW: Label Font soll sich an dem Text ausrichten
 
Wieso ist das Label als Var-Parameter deklariert?

p80286 25. Mär 2011 14:54

AW: Label Font soll sich an dem Text ausrichten
 
Ich wollte vermeiden, daß nur ein Wert herüber kommt.

Gruß
K-H

DeddyH 25. Mär 2011 15:00

AW: Label Font soll sich an dem Text ausrichten
 
Verstehe ich gerade nicht. Also was ich meinte, ist, dass man Objektinstanzen nicht als Var-Parameter übergibt, sondern allenfalls als const. Man will ja innerhalb der Routine nicht die Instanz an sich ändern, sondern nur deren Werte.

p80286 25. Mär 2011 15:29

AW: Label Font soll sich an dem Text ausrichten
 
Wenn das so klappt, warum nicht?
Meine Kenntnisse über die Objektinterna sind wohl eher marginal.

Gruß
K-H

DeddyH 25. Mär 2011 15:36

AW: Label Font soll sich an dem Text ausrichten
 
Dann lass das "var" einmal weg, es wird immer noch klappen ;)

p80286 25. Mär 2011 16:46

AW: Label Font soll sich an dem Text ausrichten
 
OK, wer lesen kann ist klar im Vorteil:
Zitat:

Konstantenparameter
Ein Konstantenparameter (const) entspricht einer lokalen bzw. schreibgeschützten Variablen.....
Übergeben Sie eine Objektreferenz als Konstantenparameter, können Sie weiterhin auf die Objekteigenschaften zugreifen und diese ändern.
Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:21 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