Delphi 设置时间间隔';父母
我有一节课Delphi 设置时间间隔';父母,delphi,delphi-xe2,Delphi,Delphi Xe2,我有一节课 THexMap = Class(TScrollingWinControl) private FCanvas :timage; // the canvas to draw on. 在构造过程中,我像这样创建了TImage Constructor THexMap.Create(AOwner: Tcomponent); begin inherited Create(AOwner); FCanvas := timage.Crea
THexMap = Class(TScrollingWinControl)
private
FCanvas :timage; // the canvas to draw on.
在构造过程中,我像这样创建了TImage
Constructor THexMap.Create(AOwner: Tcomponent);
begin
inherited Create(AOwner);
FCanvas := timage.Create(self);
FCanvas.Visible := true;
{ Set intial property values for component }
MakeSolidMap;
end;
如果我试着这样设置父对象
FCanvas.parent := THexMap;
我得到了不兼容的类型:TWinControl和xmap类
如何使此图像显示在THexMap中
一些可能有帮助的更多信息。。。
如果我这样设置“创建”
FCanvas:=TImage.Create(AOOwner)代码>
论坛上有TImage
,但没有图像显示。如果单击对象检查器中的组件,然后单击属性图片,则图片编辑器中将显示正确的图像
重画
procedure THexMap.WndProc(var Message: TMessage);
const
DISCARD_CURRENT_ORIGIN = nil;
var
R : TRect;
PS : PAINTSTRUCT;
begin
if Message.Msg = WM_PAINT then
begin
if GetUpdateRect( Handle, nil, false ) then
begin
BeginPaint( Handle, PS );
try
R := PS.rcPaint;
bitblt(fCanvas.Canvas.Handle, R.Left, R.Top, R.Width, R.Height, TempMap.Canvas.Handle, R.Left+FOffset.X, R.Top+FOffset.Y, SRCCOPY);
finally
EndPaint( Handle, PS );
end;
end
else
inherited;
end
else
inherited;
end;
父对象是TWinConrol的实例,而不是类类型
(例如,这个男孩的父母是约翰·多伊,不是人类)
所以你必须写:
FCanvas := timage.Create(self);
FCanvas.Parent := Self;
Visible=true在这里不需要太好了,我不敢相信我没有试过这个。。。它确实解决了我的家长问题,尽管图像仍然没有显示出来。。。除非我正在拖动组件,否则图像将显示,直到我停止拖动组件,但听起来像是另一个问题。。。。。但至少TIMage现在在组件内。@GlenMorse设置控件父项不应是try/error,而应阅读如何/如何设置的文档。顺便问一下,您是在什么时候设置该图像控件的大小的?WinControl在“重新绘制”(TWinControl.PaintHandler)下自动启动子控件重新绘制。“拖动”后是否重新绘制TSCROLINGWINCONTROL?您可以尝试确保。@SirRufo我在FCanvas.parent:=self之后设置了FCanvas宽度/高度
在makeSolidMap
中,它确实执行无效竖立(Self.Handle,r,False)代码>在最后刷新,也为了重画,我还使用了一个THexMap.WndPRoc()
我补充说这对于TImage来说是一个奇怪的问题。Tcombobox和其他Windows控件都可以使用,在CreateWnd中指定父控件会有帮助。