Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ListBox Canvas.TextWidth änderung reagieren??? (https://www.delphipraxis.net/75573-listbox-canvas-textwidth-aenderung-reagieren.html)

FritzAT 21. Aug 2006 19:43


ListBox Canvas.TextWidth änderung reagieren???
 
Hallo!

Habe eine ListBox und will bei Änderungen der Font.Size - größe die
Horizontalle Scrollbar anpassen.

Funktioniert beim einlesen soweit alles.
Sobald aber Font.Size geändert wird(derzeit über einen Button) ist's
mit der Scrollbar-breite vorbei!!!
Beim Debugen kommt mir vor alls würde die ListBox von der Fontänderung
nichts mitbekommen....

Wie stelle ich es nun an, damit die ListBox die änderung bemerkt...
Die Scrollbarbreite passe ich folgendermassen an:

Delphi-Quellcode:
for ic:= 0 to ComponentCount-1 do
    begin
      if (Components[ic] is TListBox )and
         (TListBox(Components[ic]).Items.Count > 0)then
      begin
        w2:=0;
        for i:= 0 to TListBox(Components[ic]).Items.Count-1 do
        with TListBox(Components[ic])do
        begin
          w1:= Canvas.TextWidth(Items[i]);
          if w2 < w1 then w2:= w1;
        end;
        SendMessage(TListBox(Components[ic]).Handle,
            LB_SetHorizontalExtent, w2 + GetSystemMetrics(SM_CxFrame), 0);
      end;
    end;
[edit=SirThornberry]Delphi-Tag geschlossen. Mfg, SirThornberry[/edit]

SirThornberry 21. Aug 2006 22:02

Re: ListBox Canvas.TextWidth änderung reagieren???
 
TFont hat ein OnChange. Dementsprechend kannst du das OnChange von TFont umleiten und dementsprechend deine Aktuallisierungsroutine darin ausführen.

FritzAT 21. Aug 2006 23:11

Re: ListBox Canvas.TextWidth änderung reagieren???
 
Danke für die Antwort, hab aber schon eine möglichkeit gefunden...

[delphi]
procedure TForm1.Button5Click(Sender: TObject);
var i, ic, w2: Integer;
DC: HDC;
Size: TSize;
begin
// Passt alle Horizontalen ListBoxenScroller der breite an
for ic:= 0 to ComponentCount-1 do
begin
if (Components[ic] is TListBox )and
(TListBox(Components[ic]).Items.Count > 0)then
begin
w2:=0;
for i:= 0 to TListBox(Components[ic]).Items.Count-1 do
begin
dc:= GetDC(0);
SelectObject(dc,TListBox(Components[ic]).Font.Handle);
if GetTextExtentPoint32(DC,
PChar(TListBox(Components[ic]).Items[i]),
StrLen(PChar(TListBox(Components[ic]).Items[i])),
Size)
then
begin
if w2 < size.cx then w2:= size.cx;
releasedc(0,dc);
end;
end;
TListBox(Components[ic]).ScrollWidth:= w2+10;
end;
end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:36 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