Einzelnen Beitrag anzeigen

fabiO

Registriert seit: 5. Dez 2004
Ort: Jena
41 Beiträge
 
Delphi 6 Personal
 
#1

function für Zeilenumbruch im Label!?

  Alt 17. Dez 2005, 19:25
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:

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
  Mit Zitat antworten Zitat