![]() |
Button mehrzeilig (TFlatButton)
ACHTUNG -> ich rede nun von den FlatComponente -> TFlatButton
Ok - wie bekomme ich diese Mehrzeilig? Schreibe ich in der Form.Create SetWindowLong(mp3_button.Handle, GWL_STYLE, GetWindowLong(mp3_buttonHandle, GWL_STYLE) or BS_MULTILINE); Und der Text ist 'blablabla#13#10sdf sfsdf sdf' so erhalte ich fette Rechtecke.... Ich habe schon gedacht ok gehe ich die Componente und ändere den DrawText so ab, das es gleich so ist. Aber dann erahlte ich auf dem Button NUR den Teil VOR dem #13#10 der rest ist wech... hat jemand eine Hilfe für mich [edit=SirThornberry]Titel ergänzt - Mfg, SirThornberry[/edit] |
Re: Button mehrzeilig
Wie sieht der Aufruf von DrawText denn aus?
|
Re: Button mehrzeilig
Delphi-Quellcode:
habe schon DT_WORDBREAK dazu gesteckt aber genau dann verschluckt er alles nach #13#10
// DrawText
memoryBitmap.Canvas.Brush.Style := bsClear; if FState = bsDisabled then begin OffsetRect(TextBounds, 1, 1); memoryBitmap.Canvas.Font.Color := clBtnHighlight; DrawText(memoryBitmap.Canvas.Handle, PChar(Caption), Length(Caption), TextBounds,DT_CENTER or DT_VCENTER ); OffsetRect(TextBounds, -1, -1); memoryBitmap.Canvas.Font.Color := clBtnShadow; DrawText(memoryBitmap.Canvas.Handle, PChar(Caption), Length(Caption), TextBounds, DT_CENTER or DT_VCENTER ); end else DrawText(memoryBitmap.Canvas.Handle, PChar(Caption), Length(Caption), TextBounds, DT_CENTER or DT_VCENTER ); // Copy memoryBitmap to screen canvas.CopyRect(ClientRect, memoryBitmap.canvas, ClientRect); |
Re: Button mehrzeilig
Lass mal das DT_VCENTER weg.
|
Re: Button mehrzeilig
dann ist der Text zwar nicht mehr mittiag dann links aber wird immer noch alles nach dem #13#10 wechgelassen
habe auch schon
Delphi-Quellcode:
versucht nüschts
DrawText(memoryBitmap.Canvas.Handle, PChar(Caption), Length(Caption), TextBounds, DT_WORDBREAK );
|
Re: Button mehrzeilig (TFlatButton)
Komisch. Ich habe gerade mal Folgendes ausprobiert:
Delphi-Quellcode:
Geht einwandfrei. Evtl. ist Dein Rect einfach zu klein?
procedure TForm1.FormPaint(Sender: TObject);
const sText = 'Erste Zeile'#13#10'Zweite Zeile'; var R: TRect; begin R := Rect(0, ClientHeight shr 1 - Canvas.TextHeight(sText), Width, ClientHeight shr 1 + Canvas.TextHeight(sText)); DrawText(Canvas.Handle,PChar(sText),-1,R,DT_CENTER); end; |
Re: Button mehrzeilig (TFlatButton)
Du keine Ahnung, ist nicht meine Komponente :-) ich nutzte die nur gerne wird schon seit jahren nicht mehr entwickelt (FlaStyle Komponenten) ... woltle halt nur das der Button MultiLine wird aber scheint wohl nicht so leicht zu sein. und ob Rect zu klein?! keine ahnung - wie mache ich den grösse?!
|
Re: Button mehrzeilig (TFlatButton)
Ich habe es mir mal kurz angeschaut ;-). Dass es nicht geht liegt daran, dass vorher die Textgröße berechnet wird, auch vertikal. Deshalb nutzt es nichts, wenn du später dann sagst, dass mehrere Zeilen gezeichnet werden sollen, wenn der berechnete Zeichenbereich nur für die erste Zeile reicht.
Du musst in der Datei FlatUtilitys.pas Zeile 259 / 260 durch folgenden Code ersetzen:
Delphi-Quellcode:
und außerdem natürlich wie du es auch schon gemacht hast ab Zeile 346 in TFlatButtonUnit.pas DT_SINGLELINE entfernen
TextBounds := Rect(0, 0, Client.Right - Client.Left, Client.Bottom - Client.Top); // auch die maximale Höhe angeben
DrawText(Canvas.Handle, PChar(Caption), Length(Caption), TextBounds, DT_CALCRECT or DT_WORDBREAK); // DT_WORDBREAK hinzu
Delphi-Quellcode:
So funktioniert es bei mir.
// DrawText
memoryBitmap.Canvas.Brush.Style := bsClear; if FState = bsDisabled then begin OffsetRect(TextBounds, 1, 1); memoryBitmap.Canvas.Font.Color := clBtnHighlight; DrawText(memoryBitmap.Canvas.Handle, PChar(Caption), Length(Caption), TextBounds, DT_CENTER or DT_VCENTER); OffsetRect(TextBounds, -1, -1); memoryBitmap.Canvas.Font.Color := clBtnShadow; DrawText(memoryBitmap.Canvas.Handle, PChar(Caption), Length(Caption), TextBounds, DT_CENTER or DT_VCENTER); end else DrawText(memoryBitmap.Canvas.Handle, PChar(Caption), Length(Caption), TextBounds, DT_CENTER or DT_VCENTER); |
Re: Button mehrzeilig (TFlatButton)
ui also da wäre ich nie drauf gekommen, dass dies auch noch in weiteren Files versteckt ist!
Aber es geht super DANKE!!!! :dancer2: :dancer2: :dancer2: :dancer2: |
Re: Button mehrzeilig (TFlatButton)
Hast du eigentlich auch die neuen Compiler in der dfs.inc ergänzt? Nur dann hast du nämlich die neuen Eigenschaften wie Anchors, die erst ab D4 verfügbar sind ;-).
// EDIT: Ich sehe schon, dich betrifft das mit D5 noch nicht, das ist ja schon bekannt. ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 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