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