C++Builder 程序员博客
7 Sep
请问用 CB实现对数据库实现同时向两个 数据库写数据,不是 两张表,是两 个 数据库名
例如:its
itses
我用oracle数据库比较多。希望能给点指引,有代码更好,
我不知道该向什么方向出发,是数据库的问题吗?用触发器还是BC代码线程处理。
本人刚学编程,对面向对象的过程和写程序的结构不是很清除。希望指点。
用2个ADOConnection连接2个数据库,分别操作,不就得了
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做个监控软件,资料网上有的
5 Sep
一个程序A在运行,在定时器中设置定时,每隔5分钟提示一个信息,如何让这个提示信息窗口显示在最前面?
用了一下方法都不行,有什么办法?
BringWindowToTop(Application->Handle);
或
SetWindowPos(Application->Handle,Application->Handle,1,1,800,600,0);
或
LPDWORD lpdwProcessId;
DWORD ll = GetWindowThreadProcessId(GetForegroundWindow,NULL);
AttachThreadInput(ll,GetCurrentThreadId(),True);
SetForegroundWindow(tmp->Handle);
SetFocus();
ll = GetWindowThreadProcessId(GetForegroundWindow(),NULL);
AttachThreadInput(ll,GetCurrentThreadId(),False);
SetWindowPos(Application->Handle,HWND_TOP,1,1,800,600,SWP_SHOWWINDOW);
不行呀,执行之后只会在底下的任务栏中中闪烁,无法弹出窗口
WIN API 函数 SetForegroundWindow 把窗口拿到最前面
BOOL SetForegroundWindow
(
HWND hWnd // handle of window to bring to foreground
);
我的环境是xp,用SetForegroundWindow也不行呀
那直接用BringToFront();
ShowWindow可以试一下
ShowMessage("提示在最前面");
Form1->FormStyle=fsStayOnTop;
把你要弹出的窗体ShowModel不行嘛
SetParent试试
很简单嘛
如下:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Form2->Show();
Form2->BringToFront();
}
如果想显示后再隐藏,可以在Form2->BringToFront(); 后再隐藏。
该回复于2008-07-19 16:09:45被版主删除
2 Sep
学了点VC++的东西,就把C++的给忘掉了。惭愧。
我写了一个求解线性方程组的程序,由于方程组的维数不确定,于是想到用参数传递。
void LinearFunction(double **param,double *result, int length);
但是问题是当我用了一个数组传递给param时,编译器显示不能完成从a[6][7]到p的转换?这是为什么?
应该怎么办呀?如果将**param改成数组形式,那维数就固定了,不能变了。
请教大家有什么好办法?谢谢!
顶
double **p;
double a[6][7];
p与a都是双层指针
应该可以互通才对
p = a;
在另外一个帖子里给你回复了。
1 Sep
如题,想用C++Builder的chart控件画出Y=AX+B这样的函数直线,A,B已知.
请指点。
上面少了
x=10; //终点
y=A*x+B;
如果你要显示X座标:
const A=10,B=20;
int x,y;
for(x=1;x <10;x++) //起点/终点/步长可自己定,可用double
{
y=A*x+B;
Series1->Add(x,y,clRed);
}
学习!
呵呵,谢谢各位。
26 Aug
如果派生OpenDialog无法达到这个效果,需要自己从头实现的话,我想请问左侧列表和上面的directory combobox是怎么实现。
而且我看他这个左侧列表和系统默认的opendialog的左侧列表还不一样。
请各位赐教。
但是它的左侧栏和directory combobox都和系统的opendialog一模一样,我想知道是怎么实现的
左边也是仿照,一样的。
明显是仿照的,但是我想知道怎么获取这五个按钮指向的路径和其图标还有名字
这些东西应该是系统内置的,程序只是用一个api将其取出而已.
自己贴几个BUTTON,这些都是系统路径而已
自己看了看自带的shellctrls源码,大致明白了,求人不如求己啊
要知道这种系统路径的指向看看对CSIDL的介绍就行了
还是散分吧……….
25 Aug
初学Borland C++,想编程实现拖曳一个Main窗口时,让另一个message窗口跟随其移动,两个窗口在拖曳过程中保持左右并排。两个窗口都是Form,且二者没有父子关系。我一开始打算在Main窗口的OnMouseDown中调整message窗的top和left,但是运行之后,发现无论鼠标如何点击,都无法进入OnMouseDown函数中。请问各位大虾,这是怎么回事呢?应该如何实现拖曳跟随呢?先行谢过各位了~~
protected:
virtual void __fastcall WndProc(Messages::TMessage &Message);
void __fastcall TForm1::WndProc(Messages::TMessage &Message)
{
TForm::WndProc(Message);
if(Message.Msg == WM_MOVING)
{
Form2->Top = Top;
Form2->Left = Left + Width;
Form2->Show();
}
}
谢谢二位的指点。现在我想加上如下的效果:拖曳Main窗口,Message 窗口跟随(已经能够很好的实现了);让Message窗口在离Main窗口足够近的地方时自动靠拢对齐。
不过按照闲云野鹤兄的方法做呢,在拖动Message窗口靠近Main窗时,容易发生Message窗闪烁的现象。我想,如果能够在标题栏上对MouseUp进行响应就好了。不知道有没有这样的方法呢?谢谢!
响应 WM_NCLBUTTONDOWN
呃 ,该是 WM_NCLBUTTONUP
8 Aug
rt
QuickRep
标题栏重复
==========
每页一次还是每页多次?
1次和多次的解决都要
晕,楼主就不能一次把问题说明白,这样回答问题感觉有点累!
貌似默认就是每页一次,要想每页多次看楼主的要求,要是每条记录都显示一个标题栏,那就将标题栏一起放到detail栏里。
3 Aug
我现在已经实现了将选中的彩色jpg图片在TImage中显示,请问如何将选中的彩色jpg图片转换成灰阶图片并在TImage中显示?急盼各位高手的回复!先谢了!
以上是Bitmap格式,你可先将JPG转成Bitmap再调用函数
//————————————————————————— #include <vcl.h> #pragma hdrstop #include "Unit1.h" #include <jpeg.hpp> //————————————————————————— #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //————————————————————————— __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Graphics::TBitmap *bmp = new Graphics::TBitmap(); TJPEGImage *jpg = new TJPEGImage(); try { jpg->LoadFromFile("D:\\VclLib\\GdiplusDemo\\Media\\100_0349.jpg"); bmp->Assign(jpg); bmp->PixelFormat = pf24bit; BYTE *p = (BYTE*)bmp->ScanLine[bmp->Height - 1]; int off = (((24 * bmp->Width + 31) & 0xffffffe0) >> 3) - bmp->Width * 3; for (int y = 0; y < bmp->Height; y ++, p += off) { for (int x = 0; x < bmp->Width; x ++) { int v = (117 * p[0] + 601 * p[1] + 306 * p[2] + 512) >> 10; *p ++ = v; *p ++ = v; *p ++ = v; } } // bmp->SaveToFile("d:\\tmp.bmp"); Image1->Picture->Assign(bmp); } __finally { delete jpg; delete bmp; } } //—————————————————————————
private: // User declarations void __fastcall GrayIt(Graphics::TBitmap *bmp); //————————————————————————— void __fastcall TForm1::GrayIt(Graphics::TBitmap * bmp) { BYTE * ptr; int Gray; bmp->PixelFormat=pf24bit; for(int y = 0; y<bmp->Height;y++) { ptr=(BYTE*)bmp->ScanLine[y]; for(int x=0;x<bmp->Width*3;x+=3) { Gray=299*ptr[x+2]+587*ptr[x+1]+114*ptr[x]; ptr[x]=Gray/1000; ptr[x+1]=Gray/1000; ptr[x+2]=Gray/1000; } } } //————————————————————————— void __fastcall TForm1::Button1Click(TObject *Sender) { Graphics::TBitmap *bmp=new Graphics::TBitmap; bmp->Assign(Image1->Picture->Graphic); GrayIt(bmp); Image1->Picture->Assign(bmp); delete bmp; } //—————————————————————————
//—————————————————————————
#include <vcl.h>//试例原码
#pragma hdrstop
#include "Unit1.h"
#include "math.h"
#include <printers.hpp>
//—————————————————————————
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//—————————————————————————
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//—————————————————————————
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Scale->ItemIndex = 0;
PixelFormat->ItemIndex = 0;
ColorSpace->ItemIndex = 0;
Performance->ItemIndex = 0;
OpenDialog1->Filter = GraphicFilter(__classid(TGraphic));
FileListBox1->Mask = GraphicFileMask(__classid(TGraphic));
}
//—————————————————————————
void __fastcall TForm1::FileListBox1Click(TObject *Sender)
{
Image1->Picture->LoadFromFile(FileListBox1->FileName);
SetJPEGOptions(this);
}
//—————————————————————————
void __fastcall TForm1::Exit1Click(TObject *Sender)
{
Close();
}
//—————————————————————————
void __fastcall TForm1::Open1Click(TObject *Sender)
{
if (OpenDialog1->Execute()){
Image1->Picture->LoadFromFile(OpenDialog1->FileName);
SetJPEGOptions(this);
}
}
//—————————————————————————
void __fastcall TForm1::SetJPEGOptions(TObject *Sender)
{
bool isJpg;
isJpg = (Image1->Picture->Graphic->ClassNameIs("TJPEGImage"));
TJPEGImage *Jpeg;
if (isJpg){
Jpeg=(TJPEGImage *)Image1->Picture->Graphic;
Jpeg->PixelFormat = TJPEGPixelFormat(PixelFormat->ItemIndex);//位
Jpeg->Scale = TJPEGScale(Scale->ItemIndex); //比例
Jpeg->Grayscale = bool(ColorSpace->ItemIndex); //色彩
Jpeg->Performance = TJPEGPerformance(Performance->ItemIndex); //速度
}
Scale->Enabled = isJpg;
PixelFormat->Enabled = isJpg;
ColorSpace->Enabled = isJpg;
Performance->Enabled = isJpg;
}
.h文件
//—————————————————————————
#ifndef Unit1H
#define Unit1H
//—————————————————————————
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <FileCtrl.hpp>
#include <Dialogs.hpp>
#include <Menus.hpp>
#include <jpeg.hpp>
//—————————————————————————
class TForm1 : public TForm
{
__published: // IDE-managed Components
TPanel *Panel3;
TDriveComboBox *DriveComboBox1;
TComboBox *Scale;
TComboBox *PixelFormat;
TComboBox *ColorSpace;
TComboBox *Performance;
TPanel *Panel1;
TDirectoryListBox *DirectoryListBox1;
TFileListBox *FileListBox1;
TScrollBox *ScrollBox1;
TImage *Image1;
TMainMenu *MainMenu1;
TMenuItem *File1;
TMenuItem *Open1;
TMenuItem *N2;
TMenuItem *Exit1;
TOpenDialog *OpenDialog1;
void __fastcall FormCreate(TObject *Sender);
void __fastcall FileListBox1Click(TObject *Sender);
void __fastcall Exit1Click(TObject *Sender);
void __fastcall Open1Click(TObject *Sender);
void __fastcall SetJPEGOptions(TObject *Sender);
private:
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//—————————————————————————
extern PACKAGE TForm1 *Form1;
//—————————————————————————
#endif
我是个新手,第一次发帖子,没想到一天时间就有这么多热心的人提供帮助,我真是太感动了!
这些Code我先回去试试,稍后再告诉大家问题是否得到了解决。谢谢了!
其实,你也可以直接算出灰度,用三元色相加再除三,就是灰度值
下面是核心语句
void __fastcall TMainForm::BitBtn1Click(TObject *Sender)
{
Image->Picture->Bitmap->PixelFormat = pf4bit;
}
我用maozefa的算法实现了图片转成灰阶,但是算法我还是看不懂,能否可以请maozefa帮忙解释一下?谢谢!
RGB颜色转灰度的经典公式是:
nGray=0.299*R+0.587*G+0.114*B
因为同样的单色G=255和B=255其亮度其实并不一样,所以(R+G+B)/3的方法不太准确.
maozefa的算法效率比较高,公式是一样的.
正如楼上说的,我的算法0.299*R+0.587*G+0.114*B,不过扩大了1024倍,转换为整数处理,最后右移10也就是除以1024还原。
获益不浅,非常感谢!