社区
Delphi
帖子详情
关于画线消失的问题
christina1206
2007-05-23 09:48:45
在窗体上自由画线后,每次只要一最小化窗口或者别的窗口挡着时在回到窗体上,画的线就都没了,各位帮忙指教一下这是怎么回事?该怎么解决呢?
...全文
513
30
打赏
收藏
关于画线消失的问题
在窗体上自由画线后,每次只要一最小化窗口或者别的窗口挡着时在回到窗体上,画的线就都没了,各位帮忙指教一下这是怎么回事?该怎么解决呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
30 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
christina1206
2007-05-28
打赏
举报
回复
我刚学没几天,我也思考了还是没想明白可能比较笨吧!所以才不耻下问的!请求大家帮助!
池龙
2007-05-28
打赏
举报
回复
搂主,这么多人理论也给你了,代码也给你了,你不能自己思考看看?难道干脆要直接帮你把代码写完了才行?
christina1206
2007-05-28
打赏
举报
回复
保证要canvas到 onpaint里就不会消失了~!!什么意思?能说详细点吗?谢谢!
christina1206
2007-05-28
打赏
举报
回复
阿菠萝我想了好几天还是不知道怎么把我那个存在TList中!我只需要画直线要画多条不是就一条,就是把你给我那个短的画线的代码的基础上画多条就可以了而且不消失!谢谢!拜托帮帮我!
dakuku
2007-05-28
打赏
举报
回复
保证要canvas到 onpaint里就不会消失了~!!
cnzzlp
2007-05-28
打赏
举报
回复
那个res里面包含了,一些鼠标光标,一些图片资源.
christina1206
2007-05-28
打赏
举报
回复
{$R dres.res}这个是什么意思呢?我按照阿波罗那段长的代码演示说这个错误大家帮分析一下“cannot assign a nil to a TBrush"还有”List index out of bounds(0)"这些都是什么问题呢?谢谢!
cnzzlp
2007-05-25
打赏
举报
回复
要记住N条线的两点坐标才行,用一个对象保存..
你先搞清楚paint具体做什么用的...
christina1206
2007-05-25
打赏
举报
回复
成功是成功了不过只能画一条线啊!能在这基础上可以随意画多条吗怎么解决呢?谢谢
cnzzlp
2007-05-25
打赏
举报
回复
OnPaint事件产生的代码!
christina1206
2007-05-25
打赏
举报
回复
我试了一下为什么说FormPaint没定义呢?怎么解决?Form在event里没找到FormPaint事件啊!
池龙
2007-05-25
打赏
举报
回复
楼上的朋友,用TImage绝对不是最好的方案。不仅容易闪烁,而且如果不对Resize作处理,很容易会出现某些区域无法显示的问题。
何鲁青
2007-05-25
打赏
举报
回复
告诉你我的一个心得:
那就是画线的时候最好是画在TImage控件上,画在image上的线是不会因为重画而消失的。
你可以将一个image覆盖在form上面,也不会影响到程序的整体外观。
OK,给分吧。
池龙
2007-05-25
打赏
举报
回复
呵呵,这是矢量绘图的操作,不是三两句话能解决的问题,我把大概的思路写给你,你可以自己考虑看看,呵呵。
元素的定义和管理:
每种元素定义一个结构或者是类,用于保存它的基本属性(比如线宽、线型、颜色等)。
用TList或TObjectList保存所有的元素。
刷新:
将刷新作一个独立的过程。
每次刷新都从底层重画到顶层。
使用双缓冲的技术可以确保不会闪烁。
在Form(或其他容器)的OnPaint事件中调用刷新的过程。
选取:
鼠标点击时,根据元素的区域判断选中的元素,之后可以对其操作。
简单的例子,在内存中维护了一个元素的列表,里面有三条直线的记录。创建一个TBitmap,作为双缓冲中用于绘制的画布。
绘制的时候,首先在TBitmap的Canvas上画背景,然后以一个循环画三条直线,最后将整个Canvas的内容复制到用于显示的Canvas上。
鼠标点击的时候,首先取得鼠标的指针位置,然后以一个循环依次判断此点是否在三条直线的区域内,如果是,则设置选中的标记,再刷新画布。
移动,无非就是处理鼠标位置,并刷新而已,没什么特别的东西。
christina1206
2007-05-25
打赏
举报
回复
要使我那个原来的代码基础上有解决的办法吗?
christina1206
2007-05-25
打赏
举报
回复
呵呵不太懂啊!能给个画多条线的具体代码看看吗?谢谢!
cnzzlp
2007-05-24
打赏
举报
回复
你要想记住多条线,,就得保存对象的点做标了.我上面写的大串是用list保存的...
cnzzlp
2007-05-24
打赏
举报
回复
paint事件发生在,Form里的对象被遮住,隐藏后又展示时\触发...,resize,refresh等也包含里.
cnzzlp
2007-05-24
打赏
举报
回复
这个是把画线,画矩形,的点都记录在一个list中...,然后根据对象进行重绘...
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
ptStart,ptEnd: TPoint;
bDown: Boolean;
end;
var
Form1: TForm1;
// DrawList1: TList;
implementation
{$R *.dfm}
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ptStart.X := x;
ptStart.Y := y;
bDown := True;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if bDown then
begin
ptEnd.X := x;
ptEnd.Y := y;
Refresh;
end;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.MoveTo(ptStart.X,ptStart.Y);
canvas.LineTo(ptEnd.X,ptEnd.Y);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
bDown := False;
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
bDown := False;
end;
end.
christina1206
2007-05-24
打赏
举报
回复
阿波罗好热心哦!不过怎么这么复杂阿我都看不太懂?呵呵!我就画直线!能简化一下给我一下吗?谢了!这样就能保证直线在窗口化的时候不消失了吗?
加载更多回复(10)
关于c#在picturebox
画线
闪一下
消失
的
问题
背景是想在picturebox上画一个中心十字架,尝试了很多种方法,发现画出来的线会闪一下,说明线画上去了,但是不知什么原因被刷新掉了。代码里做了一个显示十字架的按钮,按一下显示,再按一下
消失
private void ...
Unity
画线
的方式总结
1.签名,改变不了GL
画线
的颜色 (shader改成 particle/additive) using UnityEngine; using System.Collections; public class joint{ public Vector3 org; public Vector3 end; } public class example ...
QT:鼠标
画线
(双画布)
【代码】QT:鼠标
画线
。
OpenLayer叠加示例,画点、圆、多边形,画完
消失
的
问题
因为显示是图层,存在上下关系,
消失
是因为被上面的地图层挡住了,解决办法是,在声明地图对象那里的Layer[ ],里面存在的东西,越在后面的,其图层位置越靠上。只需将 raster,vector 往后放放就解决了 ...
利用
画线
插件如何删除线
使用NGUI 来创建界面,用来显示线的范围,关闭面板后,
画线
消失
。但是
画线
不是在NGUI界面上生成的,不能和它同时
消失
,这时候就要关闭
画线
时产生的相机。我没有找到该函数,但是通过设置该相机的深度,一样可以达到...
Delphi
5,386
社区成员
262,729
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章