Announcement

Collapse
No announcement yet.

schriften in combobox

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • schriften in combobox

    hi,

    so kann ich auf einfach weise eine combobox mit schriften füllen:

    ComboBox1.Items := Screen.Fonts;

    aber wie kann ich diese schriften in der combox in ihrer eigenen schriftart darstellen so wie zum beispiel bei word?

    gruß

    markus
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

  • #2
    Hi, Markus,<br><br>
    Eine einfache Möglichkeit wäre, den <b>Style</b> der ComboBox auf "csOwnerDrawFixed" zu setzen, und dann im "<b>OnDraw</b>"-Ereignis folgendes zu schreiben:

    <pre><b>procedure</b> TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
    Rect: TRect; State: TOwnerDrawState);
    <b>begin</b>
    <b>with</b> ComboBox1,Canvas <b>do</b>
    <b>begin</b>
    <font color=#000080><i>// Farben</i></font>
    <b>if</b>(odSelected <b>in</b> State) <b>then</b> Font.Color := clHighlightText
    <b>else</b> <b>if</b>(odGrayed <b>in</b> State) <b>or</b> (odDisabled <b>in</b> State) <b>then</b> Font.Color := clGrayText
    <b>else</b> Font.Color := clWindowText;
    <b>if</b>(odSelected <b>in</b> State) <b>then</b> Brush.Color := clHighlight
    <b>else</b> Brush.Color := clWindow;<br><br>
    <font color=#000080><i>// Rechteck f&uuml;llen</i></font>
    FillRect(Rect);<br><br>
    <font color=#000080><i>// Fontname setzen</i></font>
    Font.Name := Items[Index];
    Font.Size := 10;<br><br>
    <font color=#000080><i>// und anzeigen</i></font>
    Textout(Rect.Left + 4,Rect.Top + 2,Items[Index]);
    <b>end</b>;
    <b>end</b>;</pre>

    (Weil ich die Schriftgröße 10 benutzt habe, habe ich die <b>ItemHeight</b> der ComboBox auf 20 gesetzt.)<br><br>
    Diese Methode hat allerdings den Nachteil, dass du von Schriftarten wie "WingDings" usw. nicht mehr den Namen lesen kannst. ) Da ist Word schlauer und zeigt in solchen Fällen den Namen vorher im Klartext an.<br><br>
    Aber vielleicht hilft dir das ja schon weiter.<br><br>
    Gruß,<br>Mathias

    Comment


    • #3
      hi matthias,

      mein versuch aus der ownerdraw demo tut auch, wenn man weiß das man
      style auf csOwnerDrawFixed oder csOwnerDrawVariable setzen muss!
      dies war mein fehler!
      aber das mit der höhe ist noch ein problem!

      procedure TForm1.cbxschriftartDrawItem(Control: TWinControl;
      Index: Integer; Rect: TRect; State: TOwnerDrawState);
      begin
      with cbxschriftart.Canvas do
      begin
      FillRect(Rect);
      Font.Name := cbxschriftart.Items[Index];
      Font.Size := 14; // use font's preferred size
      TextOut(Rect.Left+1, Rect.Top+1, cbxschriftart.Items[Index]);
      end;
      end;

      gruß

      marku
      Herzliche Grüße

      Markus Lemcke
      barrierefreies Webdesign

      Comment

      Working...
      X