午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

歷史上最全的delphi技巧集錦之一 - 驚落梧桐的日志 - 網(wǎng)易博客

 昵稱(chēng)4715233 2011-04-16


------------------------------------------------
刪除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;

==============================================================================

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多