------------------------------------------------
刪除dbgrid中選定數(shù)據(jù)的方法:
begin
adotable1.Delete;
adotable1.first;
若要追加和修改信息:adotable1.Append;adotable1.post;
------------------------------------------------
將數(shù)據(jù)寫(xiě)入庫(kù):
procedure Tclassmanageform.SaveToTable;
begin
ClassmanageForm.adotable1.edit;
ClassmanageForm.adotable1.FieldByName('班級(jí)名').asstring:=edit1.text;
ClassmanageForm.adotable1.FieldByName('入學(xué)時(shí)間').asdatetime:=StrToDate(edit9.text);
ClassmanageForm.adotable1.FieldByName('所在院系').AsString:=edit3.text;
ClassmanageForm.adotable1.FieldByName('班長(zhǎng)').asstring:=edit4.text;
ClassmanageForm.adotable1.fieldbyname('班長(zhǎng)聯(lián)系電話(huà)').asstring:=edit5.text;
//ClassmanageForm.adotable1.FieldByName('班主任').asstring:=edit6.text;
//ClassmanageForm.adotable1.FieldByName('班主任聯(lián)系電話(huà)').asstring:=edit7.text;
ClassmanageForm.adotable1.FieldByName('操作員').asstring:=mainform.username;
ClassmanageForm.adotable1.FieldByName('最后修改時(shí)間').asdatetime:=date();
ClassmanageForm.adotable1.FieldByName('所學(xué)專(zhuān)業(yè)').asstring:=edit2.text;
ClassmanageForm.adotable1.FieldByName('班級(jí)人數(shù)').asinteger:=StrToInt(edit8.text);
ClassmanageForm.adotable1.Post;
end;
------------------------------------------------
顯示一個(gè)提示對(duì)話(huà)框:
application.MessageBox('提示','您確定要?jiǎng)h除該班級(jí)嗎?',mb_iconinformation+mb_yesno);
如要點(diǎn)‘是’的話(huà),可以寫(xiě)為:
if (application.MessageBox('提示','您確定要?jiǎng)h除該班級(jí)嗎?',mb_iconinformation+mb_yesno))
=IdYes then
……
mb_iconinformation:提示圖標(biāo) mb_iconwarning:警告圖標(biāo)
------------------------------------------------
判斷一個(gè)內(nèi)容框中的值是否為空,為空時(shí)‘確定’按紐不可用:
if (length(edit1.Text)>1) and (length(edit2.Text)>1) and (length(edit3.Text)>1) and
(length(edit4.Text)>1) and (length(edit5.Text)>1) and (length(edit8.Text)>1) then
bitbtn1.Enabled:=true
else
bitbtn1.Enabled:=false;
------------------------------------------------
進(jìn)入一開(kāi)始就讀出數(shù)據(jù)庫(kù)的信息并顯示到EDIT中(寫(xiě)一個(gè)函數(shù)):
procedure Tclassmanageform.LoadFromTable;
begin
ClassmanageForm.edit1.text:=adotable1.FieldByName('班級(jí)名').asstring;
ClassmanageForm.edit9.text:=DatetoStr(adotable1.FieldByName('入學(xué)時(shí)間').asdatetime);
ClassmanageForm.edit3.text:=adotable1.FieldByName('所在院系').AsString;
ClassmanageForm.edit4.text:=adotable1.FieldByName('班長(zhǎng)').asstring;
ClassmanageForm.edit5.Text:=adotable1.fieldbyname('班長(zhǎng)聯(lián)系電話(huà)').asstring;
//ClassmanageForm.edit6.text:=adotable1.FieldByName('班主任').asstring;
//ClassmanageForm.edit7.Text:=adotable1.FieldByName('班主任聯(lián)系電話(huà)').asstring;
ClassmanageForm.edit2.text:=adotable1.FieldByName('所學(xué)專(zhuān)業(yè)').asstring;
ClassmanageForm.edit8.text:=IntToStr(adotable1.FieldByName('班級(jí)人數(shù)').asinteger);
end;
------------------------------------------------
如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)的備份與恢復(fù):
備份:
procedure TBackupFrm.BitBtn2Click(Sender: TObject);
begin
if Edit1.Text= ' then
begin
Showmessage('無(wú)選擇要保存的文件名');
exit;
end;
try
try
dmData.adoQryTmp.Active:= false;
dmData.adoQryTmp.SQL.Clear;
dmData.adoQryTmp.SQL.Add('BACKUP DATABASE [dzyl] TO DISK = ''+edit1.text+'' WITH INIT');
dmData.adoQryTmp.ExecSQL;
finally
begin
dmData.adoQryTmp.Active:= false;
Showmessage('數(shù)據(jù)庫(kù)備份成功!');
end;
end;
except
on e:exception do
begin
ShowMessage('數(shù)據(jù)庫(kù)備份失敗!');
end;
end;
end;
---------------------------
恢復(fù)
procedure TBackupFrm.BitBtn4Click(Sender: TObject);
begin
if Edit2.Text = ' then
begin
showmessage('未選擇要恢復(fù)的數(shù)據(jù)庫(kù)文件!');
exit;
end;
with dmData do
begin
try
adocmmd.CommandText:='use master';
adocmmd.Execute;
adocmmd.CommandText:='alter database dzyl set offline with rollback immediate';
adocmmd.Execute;
adocmmd.CommandText:='restore database dzyl from disk= ''+edit2.Text+'' with
recovery ';
adocmmd.Execute;
adocmmd.CommandText:=' alter database dzyl set online with rollback immediate';
adocmmd.Execute;
showmessage('數(shù)據(jù)庫(kù)恢復(fù)成功!');
application.Terminate;
except
on e:exception do
begin
showmessage('數(shù)據(jù)庫(kù)恢復(fù)失??!'+e.Message);
end;
end;
end;
其中dmData.adoQryTmp連接的是系統(tǒng)MASTER數(shù)據(jù)庫(kù),備份還原之前應(yīng)該關(guān)閉要備份還原的AdoConn數(shù)據(jù)庫(kù)
連接AdoConn.Connected:=False;
------------------------------------------------
另一方法:
備份如下:
try
backupString := 'BACKUP DATABASE [Paper] TO DISK = N''+edit1.Text+'' WITH
INIT , NOUNLOAD , NAME = N'Paper 備份', NOSKIP , STATS = 10, NOFORMAT';
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add(backupString);
ADOQuery1.Prepared;
adoquery1.ExecSQL;
application.MessageBox('備份成功。','提示',0);
except
application.MessageBox('備份出錯(cuò)!請(qǐng)重新備份數(shù)據(jù)。','出錯(cuò)',0);
end;
---------------------------
還原如下:
if opendialog1.Execute then
begin
try
adoquery1.Close();
adoquery1.SQL.Clear;
adoquery1.SQL.Add('use master');
adoquery1.Prepared;
adoquery1.ExecSQL;
restorestring := 'RESTORE DATABASE [Paper] FROM DISK =
N''+opendialog1.FileName+'' WITH FILE = 1, NOUNLOAD , STATS = 10, REPLACE,RECOVERY';
self.ADOCommand1.CommandText := restoreString;
adocommand1.Execute;
application.MessageBox('還原數(shù)據(jù)成功','提示',0);
adoquery1.Close();
adoquery1.SQL.Clear;
adoquery1.SQL.Add('use paper');
adoquery1.Prepared;
adoquery1.ExecSQL;
except
application.MessageBox('還原數(shù)據(jù)出錯(cuò)!請(qǐng)重新還原,并停止一切的數(shù)據(jù)操作!
','提示',0);
end;
end;
------------------------------------------------
判斷一個(gè)輸入框中字符的合法性:
在keypress事件中寫(xiě)入:
if not(key in ['0'..'9',#8,#13]) then
begin
key:=#0;
showmessage('請(qǐng)您正確填寫(xiě)電話(huà)號(hào)碼!');
end;
------------------------------------------------
使用combobox時(shí),讓拉動(dòng)菜單不可修改:
將style屬性設(shè)為csdropdownlist。
------------------------------------------------
如何使得在使用pagecontrol組件時(shí),按快捷鍵就會(huì)跳到相應(yīng)Tabsheet中去?
首先,把form窗體的keypreview設(shè)為true,然后在form的onkeydown事件中寫(xiě):
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case key of
VK_F1agecontrol1.Pages[0].Show;
VK_F2agecontrol1.Pages[1].show;
VK_F3agecontrol1.Pages[2].Show;
end;
end;
------------------------------------------------
給應(yīng)用程序設(shè)置全局快捷鍵,本程序設(shè)置了 2 個(gè)快捷鍵,無(wú)論現(xiàn)在的焦點(diǎn)在哪個(gè)控件上,按 Ctrl+R 和
Ctrl+Q 都會(huì)調(diào)用對(duì)應(yīng)的過(guò)程。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
protected
procedure hotykey(var msg: TMessage); message WM_HOTKEY;
end;
var
Form1: TForm1;
id, id2: Integer;
implementation
{$R *.DFM}
procedure TForm1.hotykey(var msg: TMessage);
begin
if (msg.LParamLo=MOD_CONTROL) and (msg.LParamHi=81) then
begin
ShowMessage(’Ctrl + Q ’);
end;
if (msg.LParamLo=MOD_CONTROL) and (msg.LParamHi=82) then
begin
ShowMessage(’Ctrl + R ’);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
id :=GlobalAddAtom(’hotkey’);
RegisterHotKey(handle, id, mod_control, 81);
id2 :=GlobalAddAtom(’hotkey2’);
RegisterHotKey(handle, id2, mod_control, 82);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnRegisterHotKey(handle,id);
UnRegisterHotKey(handle,id2);
end;
------------------------------------------------
怎樣實(shí)現(xiàn)在使用treeview時(shí),當(dāng)點(diǎn)擊一個(gè)分支時(shí),從數(shù)據(jù)庫(kù)中讀出相應(yīng)數(shù)據(jù):
if xsda_form.TreeView1.Items[1].Selected then
begin
xsda_form.Caption:='學(xué)生檔案';
xsda_form.Caption:=xsda_form.Caption+'('+xsda_form.TreeView1.Items[0].Text+'
'+xsda_form.TreeView1.Items[xi_shuxue].Text+xsda_form.TreeView1.Items[ji_02].Text+'級(jí))';
xsda_form.Query1.SQL.Clear;
xsda_form.Query1.SQL.Add('select *');
xsda_form.Query1.SQL.Add('from shuxuexi_xsda.db');
xsda_form.Query1.SQL.Add('where Rxsj=''+xsda_form.TreeView1.Items[ji_02].Text+'');
xsda_form.Query1.Active;
xsda_form.Query1.Open;
end;
------------------------------------------------
如何在面板上判斷所指對(duì)象為某控件時(shí),都會(huì)統(tǒng)一做出響應(yīng):
procedure TMainForm.Button1Click(Sender: TObject);
begin
if Sender = Button1 then //此處也可以看是否為edit1啊,其他一些控件
AboutBox.Caption := 'About ' + Application.Title
else
AboutBox.Caption := ';
AboutBox.ShowModal;
end;
------------------------------------------------
如何把鼠標(biāo)的移動(dòng)區(qū)域限制在(100,100,200,200)
var rect:TRect;
begin
rect.Left:=100;
rect.Top:=100;
rect.Bottom:=200;
rect.Right:=200;
windows.ClipCursor(@rect);
下面恢復(fù)鼠標(biāo)的移動(dòng)區(qū)域
windows.ClipCursor(0);
------------------------------------------------
1、怎么樣在delphi中調(diào)動(dòng)其它*.exe文件?
例如:winexec('d:\鄭洽\Project1.exe',sw_show);
==============================================================================
2、如何讓工程運(yùn)行時(shí)主窗體就是最大化的?
答:設(shè)置主窗體的WindowsState屬性為wsMaximized就可以了!
wsNormal 窗體以普通狀態(tài)顯示
wsMinimized 窗體以最小化狀態(tài)顯示。
wsMaximized 窗體以最大化狀態(tài)顯示。
==============================================================================
3、我想先->閃現(xiàn)窗體->主窗體->登錄窗體,工程源文件怎么設(shè)置?
答:
⒈開(kāi)始一個(gè)新工程。給表格起名為MainForm,MainForm的單元起名為Main, 工程文 件起名為T(mén)est。
⒉在MainForm中插入一個(gè)Button部件,將其Caption屬性設(shè)為“關(guān)閉”,為該部件 的onClick事件創(chuàng)建一
個(gè)過(guò)程,并在過(guò)程的begin和end之間插入Close語(yǔ)句。
⒊在應(yīng)用程序添加一個(gè)表格,將這個(gè)表格起名為MoveForm,MoveForm 的單元起名 為Move。
⒋為便于演示,在MoveForm中插入一個(gè)Label部件,設(shè)置其Caption 屬性為“歡迎 進(jìn)入本系統(tǒng)”。
5.下一步修改工程的源代碼。選擇View/Project Source,修改begin和end之間的 語(yǔ)句如下:
程序清單Test.Dpr
program Test
uses
forms,
Main in 'MAIN.PAS'{MainForm},
Move in 'Move.PAS'{MoveForm}
{$R *.RES}
begin
MoveForm:=TMoveForm.Create(Application);{Create創(chuàng)建閃現(xiàn)窗口對(duì)象}
MoveForm.Show;
MoveForm.Update;
Application.CreateForm(TMainForm,MainForm);
MoveForm.Hide;
MoveForm.Free;{Free從內(nèi)存中釋放對(duì)象}
Application.Run;
end.
第一條語(yǔ)句創(chuàng)建了對(duì)象,該對(duì)象存在內(nèi)存中,但還不能看見(jiàn), 為了讓它出現(xiàn)并更 新它的內(nèi)容,調(diào)用
對(duì)象的Show和Update成員函數(shù):Show和Update。 當(dāng)閃現(xiàn)窗口使 用完后,用Hide函數(shù)將它隱藏起來(lái),然后
用Free函數(shù)釋放它所占據(jù)的內(nèi)存。
6.如果此刻你編譯和運(yùn)行程序,MoveForm窗口一閃而過(guò), 你可能未來(lái)得及看 清。為使MoveForm窗口顯示
幾秒種,我們可為MainForm的OnCreate 事件創(chuàng)建一個(gè) 處理程序,延遲MoveForm窗口的顯現(xiàn)時(shí)間。
program TMainForm.FormCreate(sender:Tobject);
var
currentTime:LongInt;
begin
currentTime:=GetTickCount div 1000;
while ((GetTickCount div 1000)<(currentTime+3) do
{不做任何事);
end;
end.
GetTickCount函數(shù)返回窗口啟動(dòng)后過(guò)去的毫秒數(shù),這個(gè)值除以1000 轉(zhuǎn)化為秒數(shù)。 此時(shí)你編譯運(yùn)行程
序,就能得到一個(gè)延遲3秒多的閃現(xiàn)窗口。
為閃現(xiàn)窗口添加上Image部件,再對(duì)字體及窗口進(jìn)行修飾,我們就能為應(yīng)用程 序,創(chuàng)建一個(gè)精美的封面或
在程序啟動(dòng)時(shí)顯示重要提示。
制作登錄窗體一個(gè)很方便的方法就是主窗體作為主窗體,登錄成功Hide掉就行了。
如果登錄窗體不可以作為主窗體,那么和閃現(xiàn)窗體一樣的方法創(chuàng)建登錄窗體,加在Application.Run;之前
,MoveForm.Free;之后,
用showmodal顯示登錄窗體
==============================================================================
4、button上面的文字怎么樣換行?
答:
button控件不行
bitbtn控件可以。
bitbtn1.caption:='aaaa'#13'bbbbb'
==============================================================================
5、怎么樣判別焦點(diǎn)是否在某個(gè)控件上?
答:
if Tobject.focused then
//焦點(diǎn)在某某控件上
else
==============================================================================
6、怎么樣在程序中使一個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn)展開(kāi)及收閉?
答:
treeview1.selected.Expanded; //判斷節(jié)點(diǎn)的子節(jié)點(diǎn)是否展開(kāi)True展開(kāi),否則閉攏
treeview1.selected.Expand(True);//子節(jié)點(diǎn)展開(kāi)
treeview1.selected.collapse(True)://子節(jié)點(diǎn)閉攏
樹(shù)節(jié)點(diǎn)全部展開(kāi):
procedure TForm1.Button1Click(Sender: TObject);
var node:TTreeNode;
begin
if treeview1.Items[0]<>nil then
begin
node:=treeview1.Items[0];
node.Expand(true);
while node.getNextSibling<>nil do
begin
node:=node.getNextSibling;
node.Expand(true);
end;
end;
end;
樹(shù)節(jié)點(diǎn)全部收縮:
procedure TForm1.Button2Click(Sender: TObject);
var node:TTreeNode;
begin
if treeview1.Items[0]<>nil then
begin
node:=treeview1.Items[0];
node.Collapse(true);
while node.getNextSibling<>nil do
begin
node:=node.getNextSibling;
node.Collapse(true);
end;
end;
end;
==============================================================================
7、如何用delphi編程實(shí)現(xiàn)給access數(shù)據(jù)庫(kù)加密碼?
答:1,新建Project。
2,在FORM中放入ADOConnection控件。
3,雙擊ADOConnection控件,然后點(diǎn)擊Build...按鈕,在“提供者”頁(yè)中選擇“Microsoft Jet 4.0
OLE DB Provider”,然后點(diǎn)擊“下一步”按鈕,在“連接”頁(yè)中選擇要連接的Access數(shù)據(jù)庫(kù)的路徑
和數(shù)據(jù)庫(kù)的文件名,這時(shí)如果點(diǎn)“測(cè)試連接”按鈕時(shí),出現(xiàn)“初始化提供者時(shí)發(fā)生錯(cuò)誤,測(cè)試連接失敗,
密碼無(wú)效”的錯(cuò)誤提示。
4,這時(shí)點(diǎn)“所有”頁(yè),然后雙擊“Jet OLEDBatabase Password”,出現(xiàn)對(duì)話(huà)框,添入密碼后,選
擇“連接”頁(yè)中的“測(cè)試連接”按鈕,出現(xiàn)“測(cè)試連接成功”的對(duì)話(huà)框。把ADOConnection控件的
LoginPromtp設(shè)為false.
5,設(shè)置連接完成。
==============================================================================
8、如何判斷Treeview中我選中的節(jié)點(diǎn)是否有子節(jié)點(diǎn)?如果沒(méi)有給出提示啊?
答:
if Treeview.Selected.HasChildren then
//有
else
//無(wú)
var
Node :TTreeNode;
begin
Node :=TreeView1.Selected;
if Node.HasChildren then
....
對(duì)復(fù)雜的程序最好用Node過(guò)渡
==============================================================================
9、能否解釋一下try...except...end及try...finally...end;?
1.(1)是用于撲捉異常,(2)是用于保證代碼執(zhí)行的完整性
2.(1)中finally處的代碼不管什么情況都會(huì)被執(zhí)行,(2)中except處的代碼僅在發(fā)生異常時(shí)才會(huì)執(zhí)行
3.try finally之間的代碼雖可保證finally 和 end之間的程序能執(zhí)行,但不能保證程序不崩潰,
而try except就不會(huì)使程序崩潰
==============================================================================
10、怎么樣在主程序控制器中加入音樂(lè)?
在implementation下加入 mmsystem單元(windows多媒體函數(shù)動(dòng)態(tài)聯(lián)結(jié)庫(kù))。然後在的onShow,onCreate
事件中編寫(xiě)代碼:sndplaysound('sound.wav',snd_async)
==============================================================================
11、我在form1上有四個(gè)edit,輸完后我想用下上箭頭鍵進(jìn)行上移下移?怎么辦?
答:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=vk_down then perform(WM_NEXTDLGCTL,0,0) else
if key=vk_up then perform(WM_NEXTDLGCTL,1,0);
end;
==============================================================================
12、如何用delphi5實(shí)現(xiàn)讀文本文件指定的一行,并得到文本文件的總行數(shù)?謝謝!
答:
Delphi讀文件文件一般使用Readln過(guò)程,如要讀第3行可以這樣:
var
i : Integer;
F: TextFile;
S: string;
begin
if OpenDialog1.Execute then { Display Open dialog box }
begin
AssignFile(F, OpenDialog1.FileName); { File selected in dialog }
Reset(F);
For i = 1 To 3 Do
Readln(F, S);
Edit1.Text := S; { Put string in a TEdit control }
CloseFile(F);
.
end;
要統(tǒng)計(jì)總行數(shù),只能從頭逐行讀,直到文件尾(Eof函數(shù)為T(mén)rue),每讀一行計(jì)數(shù)器加1。
不過(guò)由于文本文件的每行長(zhǎng)度不相等,它不能象數(shù)據(jù)庫(kù)文件那樣想讀那行就讀哪行,只能順序讀。
上面的方法容易理解,也容易實(shí)現(xiàn)。如果希望提高速度,編程上要麻煩一些,可以以二進(jìn)制方式打開(kāi)文件
,將所有內(nèi)容讀入一個(gè)內(nèi)存變量,然后使用Pos函數(shù)查找其中的回車(chē)(#13)個(gè)數(shù),這樣可以快速地統(tǒng)計(jì)總
行數(shù)并能快速地找到指定行。
==============================================================================
13、制作主窗口顯示前的版權(quán)窗口
答:
在工程文件中選File->New Form新建一個(gè)窗口,設(shè)計(jì)好窗口的外觀。給窗口起名為AboutBox,選Project-
>Options,將新建的窗口從自動(dòng)建立中去掉。 選View->Project Source,打開(kāi)工程文件的源文件,在下
面加入紅色的句子。
Uses AboutBox
Var
lTime :TDateTime;
Begin
Application.Initialize();
AboutBox=TAboutBox.Create(AboutBox);
AboutBox.Show;
AboutBox.Update;
lTime=GetTickCount;
Application.CreateForm(TMainForm,MainForm);
while((GetTickCount-lTime) / 1000 <3) do;
AboutBox.Hide;
AboutBox.Free;
Application.Run;
end;
==============================================================================
14、Delphi中RichEdit的奧妙
一、如何得知當(dāng)前行號(hào)
用RichEdit(或者memo)控件制作文本編輯器時(shí),通過(guò)訪問(wèn)lines?count屬性可以得到總行數(shù),但是
若想知道光標(biāo)當(dāng)前所在行的行號(hào)就麻煩了,因?yàn)閐elphi沒(méi)有提供這個(gè)屬性。要實(shí)現(xiàn)這個(gè)編輯器必備功能,
就須調(diào)用em_ LineFromChar。
請(qǐng)?jiān)囋囅旅娴某绦颉?br> 先在窗口中布置一個(gè)RichEdit或者memo(命名為editor),以及一個(gè)button。在button的onclick事
件中寫(xiě)入下列代碼。
var
CurrentLine:Integer;
begin
CurrentLine:=Editor.Perform(em_ LineFromChar,SFFFF,0);
Application.MessageBox(PChar(′當(dāng)前行號(hào)是′+I(xiàn)ntToStr(CurrentLine)),′消息′,mb_
iconinformation);
end;
需要注意的是,第一行的行號(hào)為零。
二、如何撤消操作(undo)
對(duì)于memo來(lái)說(shuō),實(shí)現(xiàn)undo是不需編程的,只要讓popupmenu屬性為空,運(yùn)行時(shí)就能用鼠標(biāo)右鍵激活一
個(gè)常用操作菜單,其中包括撤消、剪切、復(fù)制、粘貼、刪除和全選六項(xiàng)。 但可惜的是,這一招對(duì)于
功能強(qiáng)大的RichEdit控件居然行不通,害得我們還要自己設(shè)計(jì)一個(gè)popupmemu。當(dāng)你用CutToClipBoard等
語(yǔ)句輕松而順利地完成了“剪切”等功能,接著便會(huì)無(wú)奈地發(fā)現(xiàn),竟找不到undo或cancel之類(lèi)的語(yǔ)句來(lái)執(zhí)
行“撤消”。 這時(shí)你需要這樣處理:
RichEdit1?Perform(EM_UNDO,0,0);
另外還應(yīng)檢查是否允許撤消,從而開(kāi)啟或關(guān)閉彈出菜單中的“撤消”項(xiàng):
Undo1?Enabled:=RichEdit?
Perform(EM_CANUNDO,0,0)<>0;
以上程序在Delphi3中調(diào)試通過(guò)?! ?nbsp;
==============================================================================
15、在主窗口中打開(kāi)另一個(gè)獨(dú)立的窗口,而這個(gè)被打開(kāi)的窗口固定顯示在..?
答:
procedure TForm2.FormCreate(Sender: TObject);
begin
form2.Hide;
self.Parent:=form1.Panel1;
end;
==============================================================================