如今发现越来越不会用Delphi了! 请帮忙解决,也许旁观者清!(50分)

K

kthy

Unregistered / Unconfirmed
GUEST, unregistred user!
用了七八年Delphi,如今发现越来越不会用了。最近发现一个怪问题,
抓破头皮没解决,请大家探讨:

下列一个简单的字处理程序,当“查找”对话框打开,并且输入
焦点在该对话框的“查找内容”编辑框,按下Ctrl+V,粘贴的内容却
跑到编辑的文本中了。怪!

顺便提一下,我用的是Delphi5企业版,Build 5.62。


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

program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

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

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Menus;

type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
Memo1: TMemo;
FindDialog1: TFindDialog;
procedure N1Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.N1Click(Sender: TObject);
begin
Memo1.CopyToClipboard;
end;

procedure TForm1.N3Click(Sender: TObject);
begin
Memo1.PasteFromClipboard;
end;

procedure TForm1.N5Click(Sender: TObject);
begin
FindDialog1.Execute;
end;

end.

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

object Form1: TForm1
Left = 192
Top = 185
Width = 544
Height = 375
Caption = 'Form1'
Color = clBtnFace
Font.Charset = GB2312_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = '宋体'
Font.Style = []
Menu = MainMenu1
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 12
object Memo1: TMemo
Left = 0
Top = 0
Width = 536
Height = 329
Align = alClient
TabOrder = 0
end
object MainMenu1: TMainMenu
Left = 128
Top = 96
object N2: TMenuItem
Caption = '编辑(&E)'
object N1: TMenuItem
Caption = '复制(&C)'
ShortCut = 16451
OnClick = N1Click
end
object N3: TMenuItem
Caption = '粘贴(&P)'
ShortCut = 16470
OnClick = N3Click
end
object N4: TMenuItem
Caption = '-'
end
object N5: TMenuItem
Caption = '查找(&F)'
ShortCut = 16454
OnClick = N5Click
end
end
end
object FindDialog1: TFindDialog
Left = 160
Top = 96
end
end

============================================================
 
procedure TForm1.N3Click(Sender: TObject);
begin
Memo1.PasteFromClipboard;
end;
这句有问题,你是不是设置了ctrl+v 快捷键,并把它负给了一个菜单或按钮,
所以只要把它去掉就行了。

 
To wjing:
是“粘贴”菜单项的快捷键。如果将菜单中的快捷键删除,确实不再有问题,但
通常一般的软件菜单中都是将Ctrl+V菜单快捷键列出的,所以才将问题提出!
 
我的想法比较烂,但你可以听一下:
因为如果你在程序里不加额外处理的话,WINDOWS会自动处理CTRL+V,所以我觉和你可以
在程序中加入SENDMESSAGE,然后自己再建立一个简单的消息系统,其实说白了DELPHI就
是让程序比较简单的处理问题,如果你站在VC的角度上看一下,你就会觉得其实任何事情
都自己做比较好,虽然累但都在自己的控制中.
 
不可能的
 
这是因为你把菜单中的“粘贴”的快捷键设为了“Ctrl+V”。把它改了就行了
 
呵呵,这个问题我遇到过。因为你的查找窗口是普通 Show 出来的。
自己写一个查找对话框,然后用 ShowModel 显示为模态窗口即可:)
我就是这样干的。
 
to wjing、叶枫:通常菜单中必须要写明快捷键,因为通常的软件都是如此,而且可以
明确地给用户提示;
beta:查找对话框可是标准的windows窗体,自己做好像有点说不过去!

为什么MS的开发工具开发的软件没有这个现象?Delphi高手请关注!
 
Memo1.CopyToClipboard;
Memo1.PasteFromClipboard;
把这两句改为下面两句
SendMessage(getfocus(),WM_copy,0,0);
SendMessage(getfocus(),WM_paste,0,0);
 
谢谢QuickSilver,圆满解决!
 
顶部