// Getestet mit D4 unter XP
// Mittels der
Prozedur "Frame3D" kann man einen 3D-Rahmen zeichnen lassen.
// Allerdings kann man die Prozedur nicht in "FormPaint" einsetzen, um
auf
// das Formular zeichnen zu können.
Beispiel:
//uses extctrls;
procedure TForm1.FormCreate(Sender: TObject);
var
rtc: TRect;
rand: integer;
bm: TBitmap;
begin
rand := 5;
Image1.autosize := false;
bm := TBitmap.create;
bm.loadfromfile('c:\bilder\det.bmp');
Image1.width := bm.width + 2 * rand;
Image1.height := bm.height + rand * 2;
Image1.canvas.draw(rand, rand, bm);
bm.free;
rtc := rect(0, 0, Image1.width, Image1.height);
Frame3D(Image1.Canvas, rtc, clWhite, $404060, rand);
end;
// Wenn Sie das
Ganze doch in "FormPaint" benötigen, müssen Sie es
// "zu Fuß" programmieren:
procedure Frame3D_p(Canvas: TCanvas; Rect: TRect;
TopColor, BottomColor: TColor; Width: Integer);
var
x, y, z, m: integer;
pc: TColor;
begin
with canvas do begin
m := pen.width;
pen.width := 1;
pc := pen.color;
pen.color := TopColor;
for x := 0 to pred(width) do begin
z := Rect.Top + x;
y := Rect.Left + x;
moveto(y, pred(Rect.Bottom - x));
lineto(y, z);
lineto(Rect.Right - x, z);
end;
pen.color := BottomColor;
for x := 0 to pred(width) do begin
z := pred(Rect.Right - x);
y := pred(Rect.Bottom - x);
moveto(z, Rect.Top + x);
lineto(z, y);
lineto(pred(Rect.Left + x), y);
end;
pen.color := pc;
pen.width := m;
end;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
Frame3D_p(Canvas, rect(200, 10, 300, 110), clWhite, $404060, 5);
end;
|