AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Button mehrzeilig (TFlatButton)

Ein Thema von delphinia · begonnen am 10. Okt 2008 · letzter Beitrag vom 20. Okt 2011
Antwort Antwort
Seite 1 von 2  1 2      
delphinia

Registriert seit: 16. Feb 2006
444 Beiträge
 
Delphi 11 Alexandria
 
#1

Button mehrzeilig (TFlatButton)

  Alt 10. Okt 2008, 19:51
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]
Doreen
Gruss Doreen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

Re: Button mehrzeilig

  Alt 10. Okt 2008, 19:54
Wie sieht der Aufruf von DrawText denn aus?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
delphinia

Registriert seit: 16. Feb 2006
444 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Button mehrzeilig

  Alt 10. Okt 2008, 19:57
Delphi-Quellcode:
    // 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);
habe schon DT_WORDBREAK dazu gesteckt aber genau dann verschluckt er alles nach #13#10
Doreen
Gruss Doreen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

Re: Button mehrzeilig

  Alt 10. Okt 2008, 20:00
Lass mal das DT_VCENTER weg.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
delphinia

Registriert seit: 16. Feb 2006
444 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Button mehrzeilig

  Alt 10. Okt 2008, 20:03
dann ist der Text zwar nicht mehr mittiag dann links aber wird immer noch alles nach dem #13#10 wechgelassen


habe auch schon
DrawText(memoryBitmap.Canvas.Handle, PChar(Caption), Length(Caption), TextBounds, DT_WORDBREAK ); versucht nüschts
Doreen
Gruss Doreen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#6

Re: Button mehrzeilig (TFlatButton)

  Alt 10. Okt 2008, 20:07
Komisch. Ich habe gerade mal Folgendes ausprobiert:
Delphi-Quellcode:
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;
Geht einwandfrei. Evtl. ist Dein Rect einfach zu klein?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
delphinia

Registriert seit: 16. Feb 2006
444 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Button mehrzeilig (TFlatButton)

  Alt 10. Okt 2008, 20:17
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?!
Doreen
Gruss Doreen
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.587 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Button mehrzeilig (TFlatButton)

  Alt 10. Okt 2008, 22:09
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:
      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
und außerdem natürlich wie du es auch schon gemacht hast ab Zeile 346 in TFlatButtonUnit.pas DT_SINGLELINE entfernen
Delphi-Quellcode:
    // 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);
So funktioniert es bei mir.
Sebastian Jänicke
  Mit Zitat antworten Zitat
delphinia

Registriert seit: 16. Feb 2006
444 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Button mehrzeilig (TFlatButton)

  Alt 10. Okt 2008, 22:19
ui also da wäre ich nie drauf gekommen, dass dies auch noch in weiteren Files versteckt ist!

Aber es geht super DANKE!!!!
Doreen
Gruss Doreen
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.587 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Button mehrzeilig (TFlatButton)

  Alt 10. Okt 2008, 22:24
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.
Sebastian Jänicke
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:36 Uhr.
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