主页
Top.Mail.Ru Yandeks.Metrika
论坛:“主要”;
当前存档:2002.01.08;
下载:[xml.tar.bz2];

向下

组件未绘制,就是这样...... 找到类似的分支


Aleksandr   (2001-12-18 13:03) [0]

亲爱的同事们!
它花了我创建一个组件。 由TGraphicControl产卵创建。 我把它放在表格上 - 一切都井然有序,它是可见的,但它没有画出来,就是这样......代码是

类型
TWayTree = class(TGraphicControl)
私立
...
保护
程序油漆;覆盖;
公开
构造函数Create(AOwner:TComponent);
出版
...
属性颜色默认clWhite;
属性可见默认为true;
结束;

程序登记;

履行

程序TWayTree.Paint;
VAR
ARect:TRect;
开始
继承;
Canvas.Brush.Color:= Color;
ARect.Left:=左;
ARect.Top:=Top;
ARect.Bottom:=顶部+高度;
ARect.Right:=左+宽;
Canvas.FillRect(ARect)
结束;

构造函数TWayTree.Create;
开始
继承创建(AOwner);
...
结束;

程序登记;
开始
RegisterComponents(“WayTrees”,[TWayTree])
结束;

结束。

此外,当我还在尝试添加FPen和FBrush属性时(在设计时单独访问):

TWayTree = class(TGraphicControl)
私立
FPen:TPen;
FBrush:TBrush;
程序RePaintRequest(发件人:TObject);
程序SetBrush(值:TBrush);
程序SetPen(值:TPen);
保护
程序油漆;覆盖;
公开
构造函数Create(AOwner:TComponent);
析构者摧毁;
出版
属性颜色默认clWhite;
财产可见;
属性刷:TBrush读取FBrush写入SetBrush;
属性笔:TPen读FPen写SetPen;
结束;

程序登记;

履行

程序TWayTree.Paint;
VAR
ARect:TRect;
开始
继承;
Canvas.Pen:= FPen;
Canvas.Brush:= FBrush;
Canvas.Brush.Color:= Color;
ARect.Left:=左;
ARect.Top:=Top;
ARect.Bottom:=顶部+高度;
ARect.Right:=左+宽;
Canvas.FillRect(ARect);
Canvas.TextOut(ARect.Left,ARect.Top,“AAA”);
结束;

析构函数TWayTree.Destroy;
开始
FPen.Free;
FBrush.Free;
继承了毁灭
结束;

构造函数TWayTree.Create;
开始
继承创建(AOwner);
FPen:= TPen.Create;
FBrush:= TBrush.Create;
FPen.OnChange:= RepaintRequest;
FBrush.OnChange:= RepaintRequest
结束;

程序TWayTree.SetBrush;
开始
如果Value = nil则
退出;
FBrush.Assign(价值);
废止
结束;

程序TWayTree.SetPen;
开始
如果Value = nil则
退出;
FPen.Assign(Value);
废止
结束;

程序TWayTree.RePaintRequest;
开始
废止
结束;

程序登记;
开始
RegisterComponents(“WayTrees”,[TWayTree]);
结束;

结束。
当插入到无法将Pen设置为nil的形式时,组件会发誓。 检查器中的笔和画笔出现,但是当我点击+时,nifiga不会掉出来,当我调整组件大小时,同样的错误......我在这里做错了什么?



csf   (2001-12-18 13:09) [1]

他们说,重启Delphi会有所帮助。
Про 存储 你仍然可以阅读......



Aleksandr   (2001-12-18 13:11) [2]

对不起,我必须转到转储...我想我忘了用构造函数覆盖与析构函数绘制...我想知道如何将垂直ScrollBar连接到此组件...



csf   (2001-12-18 13:19) [3]

...用Paint FPen和FBrush检查是否真的很好...



Юрий Зотов   (2001-12-18 14:30) [4]

> csf

1。 >他们说,重启德尔福有所帮助。
有价值的建议。

2。 >你仍然可以阅读存储的...
你可以。 只有sabzh它无关。

3。 > ...用Paint FPen&FBrush检查是否真的很好...
为什么呢? 它们是在组件构造函数中创建的。 没有,不能在那里。

总计:你写了3短语和所有3,对不起,胡说八道。 值得写吗? 是否值得回答你的话题,温和地说,不是很熟悉的问题?


>亚历山大

你已经处理了覆盖自己,但这不是全部 - 你有一个双重绘:

程序TWayTree.SetBrush;
开始
如果Value = nil则//这是不必要的甚至是有害的 - 它掩盖了用户的错误
退出;
FBrush.Assign(价值); //生成FBrush.OnChange并调用RePaintRequest
无效//这是多余的 - 有重复的重绘。
结束;

在SetPen中也一样。 另外,Paint中的ARect变量是完全没必要的 - 使用ClientRect或Canvas.ClipRect。

最后,主要的事情 - 他们的FBrush和FPen绝对没用 - 只有额外的资源被摧毁。 使用内置Canvas:

出版
属性笔:TPen读取GetPen写入SetPen;
...

功能... GetPen:TPen;
开始
结果:= Canvas.Pen
结束;

程序... SetPen(const值:TPen);
开始
Canvas.Pen.Assign(Value)
结束;

结论 - 即使是最简单的组件也需要更仔细,更仔细地考虑。



Aleksandr   (2001-12-18 15:50) [5]

2 Yuri Zotov
谢谢你的信息。 但是,直接引用画布的属性将导致默认情况下不会是“标准”的东西 - 它将始终继续绘制最后使用的颜色。 因此,OnChange上不会有任何东西 - 一个基本的循环会出现 - 设置画布颜色会导致OnChange,它会导致重绘,而在重绘时,Canvas颜色会再次变化。
议程上只有一个问题:如何打包TScrollBar组件? 我不能做双重继承的东西 - 来自TGraphicControl和来自TScrollBar ......



DieHard   (2001-12-18 16:01) [6]

双重继承不起作用。
尝试从TScrollBox继承。



MBo   (2001-12-18 16:02) [7]

没有双重继承。
也许继承自TWinControl?



Polevi   (2001-12-18 16:19) [8]

TCustomControl



Aleksandr   (2001-12-18 16:19) [9]

嗯...好吧,让我们暂时离开这里......这是如何避免在调整表单大小时不断闪烁的组件?



panov   (2001-12-18 16:31) [10]

> Aleksandr©(18.12.01 16:19)
在调整大小之前尝试设置Enabled:= False



Юрий Зотов   (2001-12-18 17:25) [11]

> Aleksandr©(18.12.01 15:50)

>它将始终继续绘制最后使用的颜色。

需要什么。


>因此,OnChange无法种植任何东西

不要。 您的Paint方法将自动调用,不需要任何其他方法。

>将有一个基本循环 - 设置画布的颜色
>导致OnChange,它会导致重绘,并重新绘制
>画布颜色变化。

首先,您自己确认更改画布的属性会自动调用您的Paint方法。 这意味着你必须同意前一点 - 你不需要任何OnChange处理程序(OnChange处理程序只能进行额外的重绘 - 因此额外的闪烁)。

其次,在重绘时不需要更改画布的属性。 为什么呢? 毕竟,如果将组件的属性绑定到画布的属性上,那么当您调用Paint方法时,画布的这些属性将根据需要进行设置。 用它们画画而不做任何改变。 然后就没有循环了。

一般来说,我建议你尝试 - 亲自看看。 我认为闪烁会大大减少。

接下来,关于闪烁和ScrollBar - 听听Polevi的建议。 TCustomControl是一个窗口。 只需在CreateParams中设置WS_HSCROLL / WS_VSCROLL样式即可在其中插入ScrollBars,您可以通过设置DoubleBuffered属性来减少闪烁。



Страницы: 1 整个分支

论坛:“主要”;
当前存档:2002.01.08;
下载:[xml.tar.bz2];

楼上









内存:0.87 MB
时间:0.047 c
4-22510
伊利亚
2001-10-14 18:06
2002.01.08
更改打印机属性


14-22366
Vlados
2001-11-05 10:41
2002.01.08
绘制


4-22501
艺术
2001-11-02 08:30
2002.01.08
А можно ли запретить использование определенных Api другим приложениям?


4-22508
Gluka
2001-11-06 00:18
2002.01.08
是否可以将光标更改为其他人的窗口?


14-22342

2001-11-05 18:52
2002.01.08
比拼! 游戏壁纸(网站)海战!





南非荷兰语 阿尔巴尼亚人 阿拉伯语 亚美尼亚 阿塞拜疆 巴斯克 白俄罗斯 保加利亚语 加泰罗尼亚 简体中文 中国(繁体) 克罗地亚 捷克 丹麦语 荷兰人 英语 爱沙尼亚语 菲律宾人 芬兰 法文
加利亚西语 格鲁吉亚语 德语 希腊语 海地克里奥尔语 希伯来语 印地语 匈牙利 北日耳曼语 印度尼西亚人 爱尔兰语 意大利语 日语 韩语 拉脱维亚 立陶宛 马其顿 马来语 马耳他语 挪威语
波斯语 波兰语 葡萄牙语 罗马尼亚 俄语 塞尔维亚 斯洛伐克 斯洛文尼亚 西班牙语 斯瓦希里 瑞典语 泰国人 土耳其 乌克兰 乌尔都语 越南人 威尔士语 意第绪语 孟加拉 波斯尼亚
宿务 世界语 古吉拉特语 豪萨语 苗族 伊博 爪哇 卡纳达语 高棉 老挝 拉丁语 毛利 马拉 蒙古人 尼泊尔 旁遮普 索马里 泰米尔人 泰卢固语 约鲁巴语
祖鲁
英文 Французский Немецкий Итальянский Португальский 俄文 Испанский