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