粗略看了一下,delphi的代码编辑框是个TeditControl,而出现的提示框是个叫TCodecompleteListView的东东,现在有点思路了,就是解决怎么能在listview生成后TeditControl不接受上下和回车esc,而listview只接受这四个键
解决方案 »
- 极速浏览器源代码 谁编译成功过呀?求助
- 关于条码打印机 TEC B-452H 使用BarTender 7.75 打印老是偏
- 用tdbf实现dbf2sql的问题
- 如何使编绎后的.exe文件显示在与右下角与时间是一栏?
- 乞求关于dxTreeList的统计问题,分不够再加!!!!
- 怎样把dcu引入到dll中?
- 怎样能使ListView的条数限制在100行并在insert的时候自动del掉顶头的?(要求最优方法)
- 我在想PaintBox里处理一个复杂的绘画过程,那能否在OnPaint事件中加入线程处理,在线等待!
- ERP的程序员第3次问?来了就有分uo也有分
- 我想在运行“打开文件对话框组件”(TOpenDialog)中被选择的是文件夹,TOpenDialog的属性应该怎样设置?
- 帮程序员女友问的问题(动态控件数组& Tdxmemdata)
- 这样的SQL语句怎么在ACCESS数据库中执行??
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;type
TForm1 = class(TForm)
Memo1: TMemo;
ListView1: TListView;
procedure ListView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
procedure Memo1KeyPress(Sender: TObject; var Key: Char);
procedure Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
procedure SendKey(H: Hwnd; Key: char);
var
vKey, ScanCode: Word;
lParam, ConvKey: Longint;
begin
ConvKey := OemKeyScan(Ord(Key));
ScanCode := ConvKey and $000000FF or $FF00;
vKey := Ord(Key);
lParam := LongInt(ScanCode) shl 16 or 1;
SendMessage(H, WM_KEYDOWN, vKey, lParam);
SendMessage(H, WM_CHAR, vKey, lParam);
lParam := lParam or $C0000000;
SendMessage(H, WM_KEYUP, vKey, lParam);
end;
procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
memo1.SetFocus;
end;procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
// if item.Index:=sel then
if item.Selected then
begin
Sender.Canvas.Brush.Color :=clnavy;
Sender.Canvas.Font.Color:=clwhite;
end;
end;procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
var p:Tpoint;
begin
if key='.' then
begin
GetCaretPos(p);
listview1.Left:=p.X+font.Size;
listview1.Top:=p.Y+font.Size;
listview1.Items[0].Selected:=true;
listview1.Show;
end;
if key=#13 then key:=#0;
if key=#27 then listview1.Visible:=false;
end;procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var s,t:string;
i,j:integer;
begin
// showmessage(inttostr(key)) ;
if ord(key)=vk_up then begin
if listview1.Showing then
begin
key:=0;
if listview1.Selected.Index>0 then
listview1.Items[listview1.Selected.Index-1].Selected:=true;
end;
end;
if ord(key)=vk_down then begin
if listview1.Showing then
begin
key:=0;
if listview1.Selected.Index<listview1.Items.Count-1 then
listview1.Items[listview1.Selected.Index+1].Selected:=true;
end;
end;
if ord(key)=13 then begin
if listview1.Showing then
begin
memo1.SetFocus;
listview1.Visible:=false;
s:=listview1.Selected.Caption;
t:=memo1.Text;
for i:=1 to length(s) do
begin
sendkey(memo1.Handle,s[i]);
end;
end;
end;
end;end.建立一个form,
一个memo align 为alclient,
一个listview viewstye为vslist把代码里的相应事件关联,注意viewstyle的CustomDrawItem不要漏掉
你要demo的话我给你发
消息返回值为MA_NOACTIVATE就是不获得焦点。
但是该消息不能处理标题栏点击。
好的办法是:
创建无边框窗体,窗体所用控件全部从TGraphicControl继承