ich benötige für mein Programm eine ComboBoxzwecks auswahl der verschiedenen PenStyles. Ich habe mir dazu die Kompos von Pluto heruntergeladen.
Leider hat er das so gelöst das ein entsprechender Text angezeigt wird. Ich benötige es aber mit Grafik, so ein Benutzer gleich sieht wie die "zukünftigen"
Striche aussehen.
Also habe ich mich ans Werk gemacht und folgendes ist dabei herausgekommen:
Code: Alles auswählen
...
var fmbp: array [0..5] of TBitmap;
...
 
procedure TPenStyleComboBox.MouseDown(Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  inherited MouseDown(Button, Shift, X, Y);
end;
 
procedure TPenStyleComboBox.DrawItem(Index: Integer; ARect: TRect;
  State: TOwnerDrawState);
var
  Bitmap: TBitmap;
begin
  Canvas.FillRect(ARect);
  Bitmap := TBitmap(Items.Objects[Index]);
  Canvas.Draw(ARect.Left,ARect.Top, Bitmap);
 
  { *** VARIANTE die auch nicht funktioniert ***
   if Bitmap <> nil then begin
    //copy bitmap to combobox coordinate
    Canvas.CopyRect(Bounds(ARect.Left + 2, ARect.Top + 2, Bitmap.Width,
                    Bitmap.Height), Bitmap.Canvas,
                    Bounds(0, 0, Bitmap.Width, Bitmap.Height));
    Canvas.TextOut(0,20,Items[Index]);
  end;}
end;
 
constructor TPenStyleComboBox.Create(TheOwner: TComponent);
  var i  : integer;
begin
  inherited Create(TheOwner);
 
  ItemHeight := 29;
  Style:=csOwnerDrawVariable;
  for i := 0 to 5 do begin
    fbmp[i] := TBitmap.Create;
    fbmp[i].Width := 60;
    fbmp[i].Height := 24;
    case i of
      0: fbmp[i].Canvas.Pen.Style := psSolid;
      1: fbmp[i].Canvas.Pen.Style := psDash;
      2: fbmp[i].Canvas.Pen.Style := psDot;
      3: fbmp[i].Canvas.Pen.Style := psDashDot;
      4: fbmp[i].Canvas.Pen.Style := psDashDotDot;
      5: fbmp[i].Canvas.Pen.Style := psClear;
    end;
    fbmp[i].Canvas.MoveTo(0,12);
    fbmp[i].Canvas.LineTo(60,12);
    Items.AddObject('Pen_'+IntToStr(i),fbmp[i]);
  end;
  ItemIndex := 0;
end;
 
destructor TPenStyleComboBox.Destroy;
  var i: integer;
begin
  for i := 0 to 5 do fbmp[i].Free;
  inherited Destroy;
end;Alles in allem nicht sehr befriedigend. Da ich "Weltweit" keine Lösung gefunden habe, hoffe ich darauf das ihr mir helfen könnt.
Es grüßt
Halvar