Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi function für Zeilenumbruch im Label!? (https://www.delphipraxis.net/59126-function-fuer-zeilenumbruch-im-label.html)

fabiO 17. Dez 2005 19:25


function für Zeilenumbruch im Label!?
 
Hallo,

Ich arbeite gerade an einem Projekt, dass dem "Wahl-O-Mat" der bpb entsprechen soll.
Ein wenig Kopfzerbrechen bereitet mir noch ein kleines visuelles Problem.

Da die Thesen in einem Kasten angezeigt werden, möchte ich gerne, dass diese, wenn sie die Grenze des Kastens überschreiten würden, stattdessen einen Zeilenumbruch erhalten.

Das kann man sich so vorstellen:

Code:
|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|
|Dieser Satz wäre zu groß für den Kasten!|
|                                   |
|___________________________________|
Also sucht sich die procedure das letzte leerzeichen vor der überschreitung der Grenze und fügt dort einen Zeilenumbruch ein.

Code:
|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|
|Dieser Satz wäre zu groß für den  |
|Kasten!                            |
|___________________________________|
Soweit so gut... meine procedur habe ich geschrieben, und sie funktioniert auch so weit, nur mit 2 fehlern:
1. Es wird jeweils der Buchstabe vor dem Leerzeichen nicht angezeigt!
2. Es wird jeweils der erste Buchstabe der neuen Zeile nicht angezeigt!

Das sieht dann so aus:

Code:
|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|
|Dieser Satz wäre zu groß für de   |
|asten!                             |
|___________________________________|
Ich habe keine ahnung wieso :( Kann mir da bitte einer auf die Sprünge helfen ?

Hier meine procedur:

Delphi-Quellcode:
procedure umbruch(aLabel : TLabel);
var sCaption : String;
    i,j,maxwidth : Integer;
Begin
  sCaption := aLabel.caption;
  maxwidth := 55;

  if (sCaption[maxwidth]) = ' ' then
      begin
        setlength(sCaption, length(sCaption)+1);
        for i := length(sCaption)-1 to maxwidth do
          sCaption[i] := sCaption[i-1];

        sCaption[maxwidth] := #13;
        sCaption[maxwidth+1] := #10;
      end;

  if (sCaption[maxwidth]) <> ' ' then
  begin
    j := maxwidth;
    while sCaption[j] <> ' ' do
      dec(j);

    setlength(sCaption, length(sCaption)+1);

    for i := length(sCaption) to j do
          sCaption[i] := sCaption[i-1];

        sCaption[j] := #13;
        sCaption[j+1] := #10;
   end;
  aLabel.caption := sCaption;
End;
Im Programm wird sie so eingegliedert:

Delphi-Quellcode:
if (Label1.GetTextLen) > 55 then umbruch(Label1); // 55 ist die Grenze, da mehr als 55 Chars sie überschreitung würden
Danke schonmal für die Hilfe, is sicher ein banaler Fehler :)

gruß fabiO

tomsel 17. Dez 2005 19:28

Re: function für Zeilenumbruch im Label!?
 
setze Autosize auf FALSE und WordWrap auf TRUE, dann macht das Label alles ganz automatisch

fabiO 17. Dez 2005 19:33

Re: function für Zeilenumbruch im Label!?
 
Ja, aber mein Label hat vorher keine size, da es erst im laufe des Programm mit verschiedenen Inhalten gefüllt wird, funktioniert es dann auch ?

zecke 17. Dez 2005 19:35

Re: function für Zeilenumbruch im Label!?
 
Mm sobald es existiert müsste man diese Werte doch einstellen können oder irre ich mich? Label.Autosize (o.ä. kA wie des ausschaut) sollte es ja dann geben. Die Eigenschaften kann man ja auch während der Laufzeit einstellen.

Bin mir unsicher, aber ein Versuch ist es Wert :mrgreen:

tomsel 17. Dez 2005 19:38

Re: function für Zeilenumbruch im Label!?
 
deshalb ja: AutoSize = false und die gewünschte Größe einstellen. Dann Ändert es seine Größe nicht mehr, wenn eine Caption zugewiesen wird.

Stanlay Hanks 17. Dez 2005 19:38

Re: function für Zeilenumbruch im Label!?
 
Zitat:

Zitat von fabiO
Ja, aber mein Label hat vorher keine size, da es erst im laufe des Programm mit verschiedenen Inhalten gefüllt wird, funktioniert es dann auch ?

Ja.

fabiO 17. Dez 2005 19:41

Re: function für Zeilenumbruch im Label!?
 
Ich hab grad es mal probiert...
beim ersten versehen des Labels mit einem Inhalt

Delphi-Quellcode:
 
  Label1.Width := 475; // würde der Grenze des Fensters entsprechen
  Label1.AutoSize := false;
  Label1.WordWrap := true;
  Label1.Caption := A[x]; // der erste Wert
So aba nun schreibt er es so:

Code:
|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|
|Dieser Satz wäre zu groß für den  |
|                                   |
|___________________________________|
d.h. er füllt den String bis zur Grenze und verschluckt den Rest!
mache ich was falsch oder so ?

tomsel 17. Dez 2005 19:45

Re: function für Zeilenumbruch im Label!?
 
wie groß ist label1.Height?

fabiO 17. Dez 2005 19:48

Re: function für Zeilenumbruch im Label!?
 
yo, daran lags ;))

Danke für die Hilfe...

Aber nur fürs Verständniss, warum funktioniert es nicht mit meiner procedur ?

tomsel 17. Dez 2005 19:54

Re: function für Zeilenumbruch im Label!?
 
habs nur überflogen, aber ich glaube du schaffst nur Platz für ein Zeichen, fügst aber 2 Zeichen (#13#10) ein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:18 Uhr.
Seite 1 von 2  1 2      

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