TListbox.Canvas.TextWidth ..... fehlerhaft?

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
WeePee
Beiträge: 25
Registriert: So 8. Dez 2013, 13:46

TListbox.Canvas.TextWidth ..... fehlerhaft?

Beitrag von WeePee »

Hallo,

ich versuche für eine TListBox die ScrollWidth zu berechnen.

Code: Alles auswählen

procedure THauptfenster.Set_Scroll_Width(ImpTListBox : TListBox);
var
  Lokal_Scroll_Width : integer;
  i : integer;
begin
  Lokal_Scroll_Width := 0;
  for i := 0 to ImpTlistBox.Items.count - 1 do
  begin
    if Lokal_Scroll_Width < ImpTListBox.Canvas.TextWidth(ImpTListBox.Items[i]) then
      Lokal_Scroll_Width := ImpTListBox.Canvas.TextWidth(ImpTListBox.Items[i]);
  end;
  ImpTListBox.ScrollWidth := Lokal_Scroll_Width;
  Showmessage(IntToStr(Lokal_Scroll_Width) + ' ' + ImpTListBox.Canvas.Font.Name);
end;          
Leider berechnet ImpTListBox.Canvas.TextWidth(ImpTListBox.Items) die Textlänge in Pixel nicht korrekt. Ich habe in der TListBox eine Schriftart <> default gesetzt (schon in der IDE). Schaue ich mir allerdings ImpTListBox.Canvas.Font.Name an, steht dort "default".

Berücksichtigt die Funktion "TextWidth" die aktuelle Schriftart nicht, gibt es hier noch einen Fehler oder mache ich etwas falsch?

Liebe Grüße
Wolfram

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2816
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: TListbox.Canvas.TextWidth ..... fehlerhaft?

Beitrag von m.fuchs »

Also, bei einem TLabel enthält die Font-Eigenschaft vom Canvas die gleichen Schrifteinstellungen wie das Label selber. Bei der TListBox ist es nicht so.
Ich halte das für einen Bug, das Verhalten sollte schon konsistent sein.

Mit einem

Code: Alles auswählen

ListBox1.Canvas.Font := ListBox1.Font;
vor deiner Berechnung, kannst du das Problem ja erst einmal umgehen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Antworten