Delphi 如何在完整的位图图像中绘制阴影效果?
我想知道是否有可能在已经存在的完整位图图像中绘制阴影效果,以及之后是否有类似于以下示例的效果,其中模式表单后面的所有区域都是已经具有阴影效果的新位图图像?=>Delphi 如何在完整的位图图像中绘制阴影效果?,delphi,Delphi,我想知道是否有可能在已经存在的完整位图图像中绘制阴影效果,以及之后是否有类似于以下示例的效果,其中模式表单后面的所有区域都是已经具有阴影效果的新位图图像?=> 这很容易。首先,我们需要一个淡入给定位图的例程: procedure FadeBitmap(ABitmap: TBitmap); type PRGBTripleArray = ^TRGBTripleArray; TRGBTripleArray = array[word] of TRGBTriple; var SL: PRGBT
这很容易。首先,我们需要一个淡入给定位图的例程:
procedure FadeBitmap(ABitmap: TBitmap);
type
PRGBTripleArray = ^TRGBTripleArray;
TRGBTripleArray = array[word] of TRGBTriple;
var
SL: PRGBTripleArray;
y: Integer;
x: Integer;
begin
ABitmap.PixelFormat := pf24bit;
for y := 0 to ABitmap.Height - 1 do
begin
SL := ABitmap.ScanLine[y];
for x := 0 to ABitmap.Width - 1 do
with SL[x] do
begin
rgbtRed := rgbtRed div 2;
rgbtGreen := rgbtGreen div 2;
rgbtBlue := rgbtBlue div 2;
end;
end;
end;
然后,当我们想要显示模式消息时,我们为当前表单创建一个位图“屏幕截图”,将其淡入淡出状态,并将其放置在表单所有控件的顶部:
procedure TForm1.ButtonClick(Sender: TObject);
var
bm: TBitmap;
pn: TPanel;
img: TImage;
begin
bm := GetFormImage;
try
FadeBitmap(bm);
pn := TPanel.Create(nil);
try
img := TImage.Create(nil);
try
img.Parent := pn;
pn.BoundsRect := ClientRect;
pn.BevelOuter := bvNone;
img.Align := alClient;
img.Picture.Bitmap.Assign(bm);
pn.Parent := Self;
ShowMessage('Hello, Faded Background!');
finally
img.Free;
end;
finally
pn.Free;
end;
finally
bm.Free;
end;
end;
提示:如果您的应用程序中要显示多个模式对话框,您可能需要重构它。为此,请看一下
TApplicationEvent
的OnModalBegin
和OnModalEnd
事件。这非常简单。首先,我们需要一个淡入给定位图的例程:
procedure FadeBitmap(ABitmap: TBitmap);
type
PRGBTripleArray = ^TRGBTripleArray;
TRGBTripleArray = array[word] of TRGBTriple;
var
SL: PRGBTripleArray;
y: Integer;
x: Integer;
begin
ABitmap.PixelFormat := pf24bit;
for y := 0 to ABitmap.Height - 1 do
begin
SL := ABitmap.ScanLine[y];
for x := 0 to ABitmap.Width - 1 do
with SL[x] do
begin
rgbtRed := rgbtRed div 2;
rgbtGreen := rgbtGreen div 2;
rgbtBlue := rgbtBlue div 2;
end;
end;
end;
然后,当我们想要显示模式消息时,我们为当前表单创建一个位图“屏幕截图”,将其淡入淡出状态,并将其放置在表单所有控件的顶部:
procedure TForm1.ButtonClick(Sender: TObject);
var
bm: TBitmap;
pn: TPanel;
img: TImage;
begin
bm := GetFormImage;
try
FadeBitmap(bm);
pn := TPanel.Create(nil);
try
img := TImage.Create(nil);
try
img.Parent := pn;
pn.BoundsRect := ClientRect;
pn.BevelOuter := bvNone;
img.Align := alClient;
img.Picture.Bitmap.Assign(bm);
pn.Parent := Self;
ShowMessage('Hello, Faded Background!');
finally
img.Free;
end;
finally
pn.Free;
end;
finally
bm.Free;
end;
end;
提示:如果您的应用程序中要显示多个模式对话框,您可能需要重构它。为此,请查看
TApplicationEvent
的OnModalBegin
和OnModalEnd
事件。我已经在表单上有了TImage
组件(未创建运行时)并且没有使用TPanel
,那么,如何仅将此阴影应用于TImage
上方,而不是ShowMessage
显示Form2
?要显示Form2而不是消息框,请替换ShowMessage('Hello,褪色的背景!')代码>使用使用TForm2。创建(自我)尝试ShowModal;终于自由了;结束代码>。但这是Delphi基础知识,所以您可以在任何Delphi教程中阅读所有关于它的内容。不必showmodel
,只需Show
(正常)。我测试显示正常,阴影效果不起作用。而且我不需要TPanel
。只有TImage
+Form2。显示Form2
@KKK后面的阴影效果:在你的问题中,你特别写了“模态”。当然,它不仅仅适用于Show
,因为Show
会立即返回,所以阴影移除代码会直接执行。如果要使用非模式弹出窗体,则需要将阴影移除代码移动到关闭弹出窗体的时间。此外,由于TImage
是一个图形控件,因此它不能位于窗口控件之上。因此面板。我已经在表单上有一个TImage
组件(不是运行时创建的)并且没有使用TPanel
,那么如何仅将此阴影应用于TImage
上方,而不是ShowMessage
显示Form2
?要显示Form2而不是消息框,请替换ShowMessage('Hello,ladded Background!';
withwith TForm2.Create(Self)do try showmodel;finally Free;end;
。但这是Delphi基础知识,所以您可以在任何Delphi教程中阅读所有内容。不必showmodel
,只需Show
(正常).我测试显示正常,阴影效果不起作用。而且我不需要TPanel
。只需要TImage
+Form2.显示+Form2后面的阴影效果
@KKK:在你的问题中,你特别写了“模态”。当然,它不仅仅适用于Show
,因为Show
会立即返回,因此阴影移除代码会直接执行。如果要使用非模式弹出窗体,则需要将阴影移除代码移动到关闭弹出窗体的时间。此外,由于TImage
是一个图形控件,因此无法打开窗口控件的顶部。因此是面板。