Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Items in ComboBox mit verschiedenen Schriften (https://www.delphipraxis.net/104815-items-combobox-mit-verschiedenen-schriften.html)

Infamous 11. Dez 2007 10:08


Items in ComboBox mit verschiedenen Schriften
 
Hi,

ich habe eine ComboBox, indie mit Schriftarten_Edit.Items := Screen.Fonts Schriften eingelesen werden. Jetzt will ich die ComboBox so bearbeiten, dass jedes Item die Schrift des jeweiligen Namens hat. Also wird zB das Item "Arial" in der Schriftart Arial angezeigt, "Impact" in der Schriftart Impact usw. Hab rumprobiert mit Items, ItemIndex, aber irgendwie fehlt mir dann immer irgendeine Option.
In der Suche (und in Google) hab ich nur Infos über einheitliche Schriften für ComboBoxen gefunden.

Mfg

bitsetter 11. Dez 2007 10:19

Re: Items in ComboBox mit verschiedenen Schriften
 
Hallo,

versuche es mal so:
Delphi-Quellcode:
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
   with Control as TCombobox do
  begin
    if Index< screen.Fonts.Count then
    begin
      Canvas.FillRect(Rect);
      canvas.Font.Name:= screen.Fonts.Strings[Index];
      Canvas.TextOut(rect.Left, rect.Top,screen.Fonts.Strings[Index]);
    end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Combobox1.Items:= screen.Fonts;
  Combobox1.Style:= csOwnerDrawFixed;
end;

himitsu 11. Dez 2007 10:21

Re: Items in ComboBox mit verschiedenen Schriften
 
Delphi-Quellcode:
Schriftarten_Edit.Style := csOwnerDrawFixed; // kann auch im OI eingestellt werden
und dann im OnDrawItem-Event selber zeichnen.


ich glaub dazu gibt's sogar in Delphi's Demoordner oder der OH ein Beispiel.


Alternativ gibt es auh schon fertige Komponenten dafür.
(Eine ist ganz bestimmt in der JCL drin)


[add]
aber so schnell aus'm Ärmel geschüttelt ... etwa so:
Delphi-Quellcode:
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  TComboBox(Control).Canvas.FillRect(Rect);
  TComboBox(Control).Canvas.Font.Name := TComboBox(Control).Items[Index];
  TComboBox(Control).Canvas.TextOut(Rect.Left + 2, Rect.Top,
    TComboBox(Control).Items[Index]);
end;
[add3] ist übrigens auf dem Beispiel in der OH entstanden: [oh]OnDrawItem, (Delphi-Beispiel)[/oh]

[add2]
aha, da is ja schon wer ... warum hast du mir denn keine RedBox geschickt?

Infamous 11. Dez 2007 10:41

Re: Items in ComboBox mit verschiedenen Schriften
 
Ah gut, danke! In dem Beispiel der Hilfe bei OnDrawItem steht, dass FillRect(Rect) das Rechteck löscht. Wieso muss man es denn löschen, um es dann wieder zu füllen?

bitsetter 11. Dez 2007 11:08

Re: Items in ComboBox mit verschiedenen Schriften
 
Du brauchst ja nur mal mit der Maus über die einzelnen Items drüberfahren, so dass diese selektiert werden, dann kannst du selber sehen warum es so gemacht wird.

himitsu 11. Dez 2007 11:26

Re: Items in ComboBox mit verschiedenen Schriften
 
Dieses löscht alles was vorher an der Stelle gezeichnet wurde.
(Die Farbe womit übermal wird, wurde schon vorher von der VCL gesetzt)

laß einfach mal die Zeile weg und schau nach was passiert :zwinker:


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