C++Builder 程序员博客
我想在我刚刚实现的数据库存储图片程序的基础上拖动图片的大小!
是在按下鼠标后出现拖动的标志,然后在图片的右下角拖动图片将其放大.实现对图片的放大或缩小.
http://topic.csdn.net/t/20030106/17/1332155.html
5 楼jishiping(JSP 季世平)回复于 2003-01-06 18:30:16 得分 100其实很简单,不需要写什么程序:
1. 设定Image的属性DragKind=dkDock; DragMode=dmAutomatic; 设定Form
的属性DockSite=true。
2. 在Image的事件OnEndDock里写一行代码就可以了:
void __fastcall TForm1::Image1EndDock(TObject *Sender, TObject *Target,
int X, int Y)
{
Image1->HostDockSite = (TWinControl*)0xFFFFFFFF;
}
不好意思 回答错了,这个是拖动位置的
简单写了一个:
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if(X>Image1->Width-10 && Y>Image1->Height-10) { Image1->Cursor=crSizeNWSE; if(Shift.Contains(ssLeft)) { Image1->Width=X; Image1->Height=Y; } } else Image1->Cursor=crDefault; } //—————————————————————————
if(Shift.Contains(ssLeft))
这一句是什么意思?
1. 设定Image的属性DragKind=dkDock; DragMode=dmAutomatic; 设定Form
的属性DockSite=true。
这个方法我尝试过了,但是不我想要的效果,这个相当于又出来了一个FORM。
感谢你们的回答。
我想补充下当鼠标移动到图片的角落的时候出现可以拖动的标识,例如Image1->Cursor=crSizeA然后可以拖动他。
当鼠标按下不放时可以把他移动。这部分功能我基本实现了,但是我不知道如何响应的鼠标压下台起等动作,
还有将图片扩大或缩小的程序原理不是很清楚,
我说的可能比较罗嗦,真诚求教。
如果能用滚轮滚动得到放大和缩小也可以。
我油箱是liu3039345@126.com
希望能有源码。
//使用窗体的滑轮滚动事件,判断鼠标位置,如果在图片上滚动时就放大缩小图片
void __fastcall TForm1::FormMouseWheel(TObject *Sender, TShiftState Shift, int WheelDelta, TPoint &MousePos, bool &Handled) { POINT P; GetCursorPos(&P); ::ScreenToClient(Handle,&P); if(P.x > Image1->Left && P.x < Image1->Left+Image1->Width && P.y > Image1->Top && P.y < Image1->Top+Image1->Height) { if(WheelDelta<0) {//下滚放大 Image1->Width=Image1->Width+1; Image1->Height=Image1->Height+1; } else {//上滚缩小 Image1->Width=Image1->Width-1; Image1->Height=Image1->Height-1; } } } //—————————————————————————
谈谈数字图像的缩放算法
http://rockcarry.home.sunbo.net/show_hdr.php?xname=AHAETV0&dname=IGB7831&xpos=2
up
谢谢,我会尝试,继续求教.
放到paintbox里好点吧。
友情Up!
7 Sep
请问用 CB实现对数据库实现同时向两个 数据库写数据,不是 两张表,是两 个 数据库名
例如:its
itses
我用oracle数据库比较多。希望能给点指引,有代码更好,
我不知道该向什么方向出发,是数据库的问题吗?用触发器还是BC代码线程处理。
本人刚学编程,对面向对象的过程和写程序的结构不是很清除。希望指点。
该回复于2008-07-21 09:10:08被版主删除
用两个SQL语句就可以了
insert into its.表名 values()
insert into itses.表名 values()
可以用两个线程分别对不同的数据库操作
两个SQL语句
需要放两个连接组件,如果是一个的话需要写完一个,切换数据库连接再写另一个。
5 Sep
编写一个计费程序,在进程被中断的时候,电脑必须能自动关机.
设计思路:
编写一个钩子程序A,在winlogon启动的时候随着启动,A监控计费程序B是否在执行,如果B 没有运行,则自动启动B,如果运行B失败,则关机.
如何编写A程序,使得a进程不会被其他程序(类似360等程序)终止进程?
可以参考某些流氓软件的做法,使用守护进程,不过貌似不太正规。
像这样的程序应该运行在专门的服务器上,时刻在线,保护不受其他程序的影响。
做一个服务程序吧,普通的应用程序很容易被kill的,双进程守护的有些浪费系统资源。
后台驱动程序+前台应用程序,
只是这样应用又是为了什么,这么重要的程序用专用的服务器不可以吗?
我是想写一个dll,在启动winlogon的时候自动加载,普通杀进程的方法不能杀掉这个进程,可行吗
如果直接在windows任务管理器里直接关闭进程的话, 不会触发close事件,请问如何才能使其触发呢?
使用CreateProcess做个监控软件,资料网上有的
3 Sep
程序已经运行一段时间了,因为特殊原因,服务器的IP地址发生了改变,但服务器名称没有改变,客户端程序运行不了,在哪里修改?网络配置工具,ODBC配置我查过了,用的是服务器名称,并不是ip地址。
有的人编程考虑不周,改一点就不行了
不修改程序,怎样解决问题?实际上并没有用到ip地址
除了IP不同,别的都没什么变化吗? 比如说工作组什么的?
ip段不一样,与我处在同一段的也可以使用,处在不同段的就不可以,在ODBC中就不能连接,怎么解决?
终于搞好了,原因是属于不同的工作组,步骤如下:
1.打开安装目录下面的cliconfg.exe。
2.点击别名,编辑,将连接参数中服务器名称修改为 服务器IP 服务器名称。
在同一个工作组中就不用设置服务器IP。
3 Sep
我想在BCB程序中浏览wap.baidu.com!
哪儿有可以浏览WAP的类似cppwebrowser控件么?
做wap浏览器应该是把wml文件下载下来,转换成html再用cppwebrowser打开。但是现在很多网站都做了检测,如果你是不是用手机上的他会自动给你转到WEB页面。上面那个网址解决了这个问题,不知道是怎么弄的
汗,你的方法不可行,我要上在 线的,因为可能有在先操作
我的目的是在一个程序中输入wap.baidu.com ,然后显示出此wap站点的内容!
wap.baidu.com只是举个例子,我总不能把所有的wml都下载下来吧,而且wml会更新的.
最重要的是,wap网页可能需要交互信息.
用cppwebrowser打开http://3gbrowser.cn/gt.aspx?url=http://wap.baidu.com,这个是可以交互信息的。要上其他网站把红色部分替换掉就行了。
一定要自己写代码的话,还是等其他高手来解答吧
不好意思,http://3gbrowser.cn/cn/可以,http://3gbrowser.cn/gt.aspx?url=http://wap.baidu.com不行。
呵呵,当然不是自己写代码!! :)!
我试试啊!
成了马上给分!! ^o^
只能打开第一层,为什么会这样?
打开第一层后,在网页左下角有个黄色感叹号"网页上有错误",是不是我的IE设置有问题?
先感谢一次,等会加分!
27 Aug
如题,我用CB编了读写二进制的程序,其中,用的C语言fopen和fclose语句.。
由于程序要读不同的文件,比如,读完A后,关闭A,然后再读B,然后再关闭B,用的是C语言fopen和fclose语句,可是每次关闭前一个文件后,再读下一个,为什么WINDOWS提示我的前一个还被我的程序占用着?
比如,我fopen A后,fclose A 然后再fopen B,为什么程序还占用着A?
本人是菜鸟,请大家一定指教啊~~~
这里是原代码:
void __fastcall TMainForm::FileOpen(TObject *Sender)
{
if (OpenDialog->Execute())
{
//打开对话框里选中的文件名,读文件..
//在前面定义 AnsiString Ax1;
Ax1=OpenDialog->FileName;
fp=fopen(Ax1.c_str(),"rb");
//读文件内容..
…………………..
…………………….
//关闭文件,
fclose(fp);
//—————————
}
}
Ax1作为整体变量,还要在别的函数里使用…
就这样,诸位可以试一下,试着打开一些文件,再关闭,可是WINDOWS提示,那些关闭的文件,还被这个程序占用着,奇怪~~~
flush
我已经搞定了这个问题,是我在中间加了一个OPEN语句,没有CLOSE,如果仅仅用上面的代码,没问题的.
不管怎么样,我还是要感谢回帖的二位,我想给你们每人加10分,不知道怎么操作~~
^_^
用线程,等待结束后Close
up
fopen后再fclose是没有问题的.当然必须配对使用.
一个三角也可以发超过100分帖子?
呵呵 用处就在这里
现在的csdn只要你登录每天都给分用…的,所以不要当心没有分。。。
呵呵.已经解决啦
晚了点,
接分快乐!
24 Aug
__fastcall getcurdir();
{
AnsiString curdir ;
{
getdir(0,curdir);
datadelete->Table2->DatabaseName=curdir;
datadelete->Table2->TableName="测量.db";
datadelete->Table2->Active=true;
datadelete->Table1->DatabaseName=curdir;
datadelete->Table1->TableName="jiegou.db";
datadelete->Table1->Active=true;
datadelete->Q1->DatabaseName=curdir;
datadelete->DataSource2->DataSet=datadelete->Q1;
}
}
朋友们你们看看错在哪?
__fastcall getcurdir();
{
AnsiString curdir ;
{
getdir(0,curdir);
datadelete->Table2->Active=false;
datadelete->Table2->DatabaseName=curdir;
datadelete->Table2->TableName="测量.db";
datadelete->Table2->Active=true;
datadelete->Table1->Active=false;
datadelete->Table1->DatabaseName=curdir;
datadelete->Table1->TableName="jiegou.db";
datadelete->Table1->Active=true;
datadelete->Q1->Active=false;
datadelete->Q1->DatabaseName=curdir;
datadelete->Q1->Active=true;
datadelete->DataSource2->DataSet=datadelete->Q1;
}
}
还是出现同样的错误
[C++ Error] delete.cpp(13): E2040 Declaration terminated incorrectly
朋友们来帮帮忙啊
在线等待啊
__fastcall getcurdir();
这个函数名称后面怎么还跟着一个分号?
__fastcall getcurdir() { AnsiString curdir; getdir(0,curdir); datadelete->Table2->Active=false; datadelete->Table2->DatabaseName=curdir; datadelete->Table2->TableName="测量.db"; datadelete->Table2->Active=true; datadelete->Table1->Active=false; datadelete->Table1->DatabaseName=curdir; datadelete->Table1->TableName="jiegou.db"; datadelete->Table1->Active=true; datadelete->Q1->Active=false; datadelete->Q1->DatabaseName=curdir; datadelete->Q1->Active=true; datadelete->DataSource2->DataSet=datadelete->Q1; }
23 Aug
请问我的Active Form做的程序,服务端的程序在编译时应该如何设置?服务端的环境应该如何配置?怎样才能在客户端上正常运行?
我的测试环境:
1、服务器:winxp professional sp2
IP:10.186.10.10
IIS 5.1
客户端:winxp professional sp2
IP:10.186.10.11
服务器和客户端是在一个局域网内,并不能上互联网
2、我的程序在服务器上做的,并且编译后在服务端能正常运行
程序是一个登录窗口后进入一个简单的数据查询界面,
控件用的是ADO,用SQLSERVER2000
通过在IE上运行 http://10.186.10.10/aaaProj1.htm正常
3、客户端的IE安全设置为在默认级别的基础上,将下载未签名的ActiveX控件
设置为提示。
客户端IE上运行 http://10.186.10.10/aaaProj1.htm
提示完安装.inf文件和.cab文件后却不能正常运行。
把你的Active Form全编译一下。
编译Release,设置运行Active的权限
加入信任站点
我想先问下我上述的那个测试环境有没有什么问题?
如果能测试通过,是否在外网就可以这样用了?
当然不可以用了,外网没法下载你内网里的Active 除非把路由80设到10.186.10.10 上
该回复于2008-07-10 02:51:34被版主删除
该回复于2008-07-19 16:13:14被版主删除
该回复于2008-07-10 02:44:24被版主删除
20 Aug
一周时间到了,检查我的程序,本来挺简单的报表打印,我到最后也没弄成功,唉.
只有1分(我的分不多啦),你们说我能过吗?
谁答对给谁
何以见得?
不可能过。
除非你搞定了。
原来打错邮箱名了,第一次没发过去,等我加个报表功能后,下班前又发了
20 Aug
我写了一个服务程序,这个服务很简单,就是开一个线程监听,代码如下:
//—————————————————————————
void __fastcall TService1::ServiceExecute(TService *Sender)
{
UINT m_Port=33333;
m_ListenThread=new TListenThread(m_Port,FALSE,NULL );
while(!Terminated)
{
Sleep(100);
ServiceThread->ProcessRequests(false);
}
}
只有execute里面有代码。
这个服务我使用/install能安装到机器上,并能够很好的运行。
但是我另外写了一个程序,是把这个exe文件安装到机器上的,并不是用/install参数,而是使用函数:
hSCM=OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
hService = ::CreateService( hSCM,
szServiceName,
szServiceName,
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START,
SERVICE_ERROR_NORMAL,
dest.c_str(), NULL, NULL,
"",
NULL,
NULL);
::CloseServiceHandle(hService);
::CloseServiceHandle(hSCM);
这个函数可以把服务安装上去,但是无法启动运行,在控制面板的服务里也没有办法启动,每次点启动的时候,进度条要等很长时间,然后报一个错误。
请问该如何解决呢?
你用/install安装后,会在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services多出一个项,照着那个项写注册表就行了
ok,我找到问题所在了,hService = ::CreateService( hSCM,
szServiceName,
szServiceName, 这里的2个参数一定要按照服务里的属性名称来写,不能自己瞎写,呵呵。