随笔分类 -  Delphi-VCL控件创建与显示

摘要:在controls.pas单元里只有判断,没有赋值,所以一直不是很明白。于是在stdCtrls.pas里找了几个例子,直观加深一下印象: constructor TCustomLabel.Create(AOwner: TComponent); begin inherited Create(AOwne 阅读全文
posted @ 2016-02-08 17:36 findumars 阅读(521) 评论(0) 推荐(0) 编辑
摘要:情况1:设计期放一个Panel1,然后在Panel1再放一个Panel2,再把Panel1.visible设置为false。那么执行 的过程是怎么样显示这两个Windows窗口的呢?是否有WM_PAINT消息出现呢?(首次显示好像不需要WM_PAINT,只需要有无效区域) 情况2:设计期放一个Pan 阅读全文
posted @ 2016-02-08 17:01 findumars 阅读(213) 评论(0) 推荐(0) 编辑
摘要:在设计期放上一个Panel1和Button1,然后设置Panel1.Visible:=False 这时候执行: procedure TForm1.Button4Click(Sender: TObject); begin ShowMessage(IntToStr(panel1.InstanceSize 阅读全文
posted @ 2016-02-08 16:54 findumars 阅读(388) 评论(0) 推荐(0) 编辑
摘要:在研究TCustomControl的显示过程中,怎么样都找不到刷新FWinControls并重新显示的代码: procedure TWinControl.PaintHandler(var Message: TWMPaint); var I, Clip, SaveIndex: Integer; DC: 阅读全文
posted @ 2016-02-08 16:31 findumars 阅读(517) 评论(0) 推荐(0) 编辑
摘要:首先,在TForm的私有域,也就是private下设置两个变量ProgressBar、ProgressBarRect,其中ProgressBar为 TProgressBar类型,ProgressBarRect为TRect类型,完整的定义如下:typeTForm1 = class(TForm)....... 阅读全文
posted @ 2015-12-01 17:28 findumars 阅读(2272) 评论(0) 推荐(0) 编辑
摘要:在Delphi 7下,如果想在鼠标MouseEnter、MouseLeave的时候改变TLabel自身的颜色,很多人可能会采用 Label.Color := clRed;这样的方式来实现,我当初也是一样,结果无论鼠标怎么移动Tlabel都不会改变自身的颜色,但是通过Object Inspecter... 阅读全文
posted @ 2015-12-01 17:27 findumars 阅读(672) 评论(0) 推荐(0) 编辑
摘要:首先,在创立窗口对象的时候,CreateWindowEx就可以指定窗口的位置。除此之外,还有三种方法可以改变窗口的位置:procedure TWinControl.CreateWindowHandle(const Params: TCreateParams);begin // 根据之前准备的Par... 阅读全文
posted @ 2015-08-31 05:00 findumars 阅读(2366) 评论(0) 推荐(0) 编辑
摘要:单独改变坐标的代码如下,可不断左移:procedure TForm1.Button1Click(Sender: TObject);begin SetWindowPos(panel1.Handle, 0, panel1.Left-10, panel1.Top, panel1.Width, panel... 阅读全文
posted @ 2015-08-30 04:46 findumars 阅读(492) 评论(0) 推荐(0) 编辑
摘要:先看它们的函数内容:procedure TControl.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);begin // 虚函数,TWinControl有覆盖函数 if CheckNewSize(AWidth, AHeight) and //... 阅读全文
posted @ 2015-08-30 03:55 findumars 阅读(638) 评论(0) 推荐(0) 编辑
摘要:一、初始化控件状态 procedure TForm7.FormCreate(Sender: TObject); begin with StringGrid1 do begin ColWidths[0] := 15; Cells[1, 0] := 'Combobox'; ColWidths[1] := 阅读全文
posted @ 2015-08-29 09:46 findumars 阅读(167) 评论(0) 推荐(0) 编辑
摘要:CM_RECREATEWND = CM_BASE + 51; // TWinControl里有对应函数procedure CMRecreateWnd(var Message: TMessage); message CM_RECREATEWND; // important 毁掉后,重新创建,并加上焦点... 阅读全文
posted @ 2015-08-28 17:41 findumars 阅读(656) 评论(0) 推荐(0) 编辑
摘要:稍微用脑子想了一下,图形控件没有句柄,因此先把自己的坐标改一改,然后只要把父控件的某些区域Invalidate一下就可以了,WM_PAINT消息一来,父控件就会重绘所有子图形控件,就达到了相应的效果。怪不得没看到调用SetWindowPos这样的函数。有空详细跟踪一下。举例:procedure TF... 阅读全文
posted @ 2015-08-26 17:36 findumars 阅读(317) 评论(0) 推荐(0) 编辑
摘要:Delphi的重要属性,主要是Enable, Visible, Color, left等等。这里分析left,因为TWinControl里有些覆盖函数的原因,虽然起点都是TControl.SetLeft()函数,但是图形控件和Win控件走的是不一样的路线。这里是测试TWinControl的left代... 阅读全文
posted @ 2015-08-26 17:32 findumars 阅读(690) 评论(0) 推荐(0) 编辑
摘要:没有内容,不代表没有边框。比如设计期一个空的TImage仍是有边框的。if (csOpaque in image1.ControlStyle) then ShowMessage('不透明')else ShowMessage('透明') // image1没有内容的时候,就是透明;有内容的时候,就是不... 阅读全文
posted @ 2015-08-26 17:30 findumars 阅读(1362) 评论(0) 推荐(0) 编辑
摘要:// 9个显示函数 procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); virtual; // 虚函数,important 根据父控件 // 手法:固定不变的模式,或者简单调用,或者简单设置标志位,就不是虚函数。 ... 阅读全文
posted @ 2015-08-25 19:42 findumars 阅读(412) 评论(0) 推荐(0) 编辑
摘要:前提条件:要明白在TWinControl有以下四个函数的存在,注意都是虚函数:procedure Invalidate; override;procedure Update; override;procedure Repaint; override; // 相当于前两句的组合procedure Se... 阅读全文
posted @ 2015-08-25 16:37 findumars 阅读(686) 评论(0) 推荐(0) 编辑
摘要:procedure TForm1.Button3Click(Sender: TObject);begin if (csOpaque in ControlStyle) then ShowMessage('不透明') else ShowMessage('透明') // Form透明end;proc... 阅读全文
posted @ 2015-08-25 04:25 findumars 阅读(3720) 评论(0) 推荐(0) 编辑
摘要:ddd 阅读全文
posted @ 2015-08-22 22:27 findumars 阅读(202) 评论(0) 推荐(0) 编辑
摘要:TBitBtn就是一个例子: 留个爪,值得研究~ 阅读全文
posted @ 2015-08-21 19:09 findumars 阅读(574) 评论(0) 推荐(0) 编辑
摘要:问题1:Owner与Parent不一致:新建一个Form,上面放一个Button1,一个Panel1,然后在Panel1上再放一个Button2,测试结果:procedure TForm1.Button2Click(Sender: TObject);begin ShowMessage(butt... 阅读全文
posted @ 2015-08-18 22:30 findumars 阅读(1618) 评论(0) 推荐(0) 编辑