Delphi编程俱乐部
答:在本unit中,自定义TMyCustomDBGrid=class(TCustomDBGrid),再如下引用:TMyCustomDBGrid(DBGrid1).MouseDown(...)或(DBGrid1 as TMyCustomDBGrid).MouseDown(...)即可。
问:在Delphi设计中,如何在一个没有caption的form中用一个panel来拖动form?
答:只须在mousedown时向form发出move消息即可。如:
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X,Y: Integer);
begin
if Button <> mbRight then
begin
ReleaseCapture;
Form1.Perform(WM_SysCommand,Sf017,0);
end;
end;
这个方法可以支持拖动所有的twincontrol,所以也可以拖动button等,如:
Form1.Perform(WM_SysCommand,Sf017,0);
Form1是指所要拖动的对象,可以随意修改。所以也可以实现按在一个按钮上拖动一个窗体等效果了。
问:我如何使用文本型数据库,在database desktop的drive types中没有txt选项,如何给它设置别名?如何生成它的表格?
答:text用的是MS 的 ODBC Drive,你在控制面板里的ODBC数据源建立一个新的用户DSN,在BDE里建立一个新的Alias,指向刚刚的DSN。再到desktop里建立表格类型(Microsoft text driver)save as select alias其他ODBC数据源都是可以这样被Delphi访问的,对于text型,你可以自己试试看。
问:Delphi中如何把程序的运行结果重定向,如ping运行后的信息?
答:最简单的办法是:
WinExec(′COMMAND.COM /C ping 10.65.88.186 > result′,SW_HIDE);
//10.65.88.186 is a local IP address
如果不满意,用CreateProcess可以更精细地控制,如果还不满意,直接用控件Ping,ICS控件包中就有现成的。
问:我用DBGRID显示TABLE中的内容,现在我要从头到尾读一遍TABLE里的数据,用Table1.First,Next来做会使DBGRID里面的指针也跟着跑,怎么才能使这时候DBGRID里面的指针不动呢?
答:使用如下代码即可:
with DataSet do
try
DisableControls;
Do_something;
finally
EnableControls;
end;
问:我使用的数据库类型为Paradox 7,我想用TQuery控件把文件MyFile.txt存到数据库中,请问该怎么做?
答:你可以试试下面的代码:
procedure TForm1.loadfile1Click(Sender: TObject);
begin
if opendialog1.Execute then
dbmemo1.Lines.LoadFromFile(opendialog1.FileName);
end;
procedure TForm1.todatabase1Click(Sender: TObject);
begin
query2.Close;
query2.Params.CreateParam(ftmemo,′memodata′,ptinput);
query2.SQL.Text:=′insert into custoly(remarks) values(:memodata)′;
query2.ParamByName(′memodata′).AsMemo:=dbmemo1.Lines.Text;
query2.ExecSQL;
end;
问:如何取得系统当前日期和时间并将其放在数据库相应的字段中?
答:取得当前的时间:
table.FieldByName(′字段名′).asDateTime:=Time;
取得当前的日期:
table.FieldByName(′字段名′).asDateTime:=Date;
须要注意的是如果你不用asDatetime:=Time or Date or Now,而是用asString:=则需要用DateTimeToStr(Now),DateToStr(Now),TimeToStr(Time)。
问:如何取得一个窗体内所有构件的名称?
答:代码如下:
For i:=0 to form1.Componentcount-1 do
begin
memo1.lines.add(form1.components[i].classname);
memo2.lines.add(form1.components[i].name);
end;