Zeilenumbruch geht nicht...
Zeilenumbruch geht nicht...
Hallo Jungs,
wieso funktioniert bei Lazarus kein Zeilenumbruch bzw. WordWrap, z.B. mit Label oder DBLabel? AutoSize steht auf True, wie es sein muss, aber es funktioniert trotzdem nicht. Mit Delphi bei gleichen Einstellungen klappt alles wunderbar, mit Lazarus aber nicht.
Die Lösung, dass man AutoSize auf False setzt und die Breite/Höhe angibt hilft mir leider nicht, da ich nie weiß wie lang der Text wird. Mal 10 Zeichen lang, mal 400.
Hat jemand eine Idee? Danke!
wieso funktioniert bei Lazarus kein Zeilenumbruch bzw. WordWrap, z.B. mit Label oder DBLabel? AutoSize steht auf True, wie es sein muss, aber es funktioniert trotzdem nicht. Mit Delphi bei gleichen Einstellungen klappt alles wunderbar, mit Lazarus aber nicht.
Die Lösung, dass man AutoSize auf False setzt und die Breite/Höhe angibt hilft mir leider nicht, da ich nie weiß wie lang der Text wird. Mal 10 Zeichen lang, mal 400.
Hat jemand eine Idee? Danke!
Re: Zeilenumbruch geht nicht...
Wenn man WordWrap auf true und AutoSize auf false setzt, funktioniert der Zeilenumbruch, sofern die Labelbreite kleiner ist als die Textlänge. Der Unterschied zu Delphi ist, dass Lazarus mit AutoSize = true immer auf den Ein-Zeilenmodus zurückschaltet, und nicht wie Delphi den mehrzeiligen Text beibehält und damit die Labelgröße bestimmt. Wär' m.E. einen Feature-Request im BugTracker wert.
Re: Zeilenumbruch geht nicht...
Hm... und was mache ich jetzt? Wie setzte ich die Höhe des Labels der Länge des Textes entsprechend?wp_xyz hat geschrieben:Wenn man WordWrap auf true und AutoSize auf false setzt, funktioniert der Zeilenumbruch, sofern die Labelbreite kleiner ist als die Textlänge. Der Unterschied zu Delphi ist, dass Lazarus mit AutoSize = true immer auf den Ein-Zeilenmodus zurückschaltet, und nicht wie Delphi den mehrzeiligen Text beibehält und damit die Labelgröße bestimmt. Wär' m.E. einen Feature-Request im BugTracker wert.
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: Zeilenumbruch geht nicht...
Autosize gibts doch bei Delphi gar nicht, das ne lazarus erfindung soweit ich weiss um mit unterschiedlichen Widgetsets umzugehn. In Windows only hat man das Problem nicht.
Du macht das jetzt einfach so das du autosize auslässt und mit Anchors oder Align die breite deines Labels bestimmst. Dann ist alles gut.
Du macht das jetzt einfach so das du autosize auslässt und mit Anchors oder Align die breite deines Labels bestimmst. Dann ist alles gut.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Re: Zeilenumbruch geht nicht...
Delphi 7 hatte es schon, ältere Versionen habe ich nicht mehr verfügbar.Christian hat geschrieben:Autosize gibts doch bei Delphi gar nicht
Ansonsten kannst du mit DrawText und dem Flag DT_CALCRECT die Größe des umgebrochenen Textes berechnen und anschließend die Größe des Labels entsprechend setzen.
Das Verfahren klingt nach Windows, aber nachdem die Routinen in der Unit LCLIntf stehen, sollte es plattformunabhängig implementiert sein.
Code: Alles auswählen
uses
LCLType, LCLIntf;
procedure TForm1.FormCreate(Sender: TObject);
var
txtRect: TRect;
flags: DWord;
txt: String;
begin
Label1.Left := 8;
Label1.Top := 8;
Label1.Width := 128;
label1.Height := 128;
Label1.AutoSize := false;
Label1.Wordwrap := true;
Label1.Caption := 'Das ist ein sehr langer, langer, langer Text';
flags := DT_WORDBREAK and not DT_SINGLELINE or DT_CALCRECT;
txt :=Label1.Caption;
txtRect := Rect(0, 0, Label1.Width, Label1.Height);
LCLIntf.DrawText(Label1.Canvas.Handle, PChar(txt), Length(txt), txtRect, flags);
Label1.Width := txtRect.Right - txtRect.Left;
label1.Height := txtRect.Bottom - txtRect.Top;
label1.Color := clWhite; // damit man die Größe sieht
end;
Re: Zeilenumbruch geht nicht...
Kann ich damit den Labels auch irgendwelche Schriftarten oder Farben zuweisen? Ich habe irgendwo gelesen, dass nicht. Stimmt das?
Re: Zeilenumbruch geht nicht...
z.B.
funktioniert bei mir.
Code: Alles auswählen
Label1.Font.Color:=clRed;
Label1.Font.Name:='Arial Black';
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Zeilenumbruch geht nicht...
Falls mein Code weiter oben mit Michls Code zusammen nicht funktioniert, müsstest du vor dem LCLInft.DrawText dem Canvas des Labels noch dessen Font zuweisen: Label1.Canvas.Font.Assign(Label1.Font)
Re: Zeilenumbruch geht nicht...
Wie bestimme ich die Labelhöhe wenn ich nicht weiß wie lang der Text wird? Mit Anchors und Align geht es nicht.Christian hat geschrieben: Du macht das jetzt einfach so das du autosize auslässt und mit Anchors oder Align die breite deines Labels bestimmst. Dann ist alles gut.
Re: Zeilenumbruch geht nicht...
Das musst du auch nicht. Aber du musst wissen, wieviel Platz du dem Text zur Verfügung stellen willst/kannst, bevor ein Zeilenumbruch durchgeführt werden soll. Damit kannst du dann die Methode mit DrawText(..., DT_CALCRECT...) - siehe Code weiter oben - anwenden.wenn ich nicht weiß wie lang der Text wird
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: Zeilenumbruch geht nicht...
Doch das gelingt mit Anchors du musst im Anchoreditor als oberes Control dein Label einstellen und das andere Control darauf beziehen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 6917
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Zeilenumbruch geht nicht...
Bei mir bricht er die Zeile um, oder verstehe ich etwas falsch ?
Code: Alles auswählen
Label2.Caption:='Hello World'#13#10'Hello World';
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot