急,急,急新写的TEdit控件拖到窗口上提示“control has no parent window”
unit uCCTEdit;
interface
uses
SysUtils, Classes, Controls, StdCtrls, Messages, Forms, Windows, uDateType, uDownForm;
type
TFiledType = (CTSNO,CTSNM,LKM,PTSNO,PTSNM,ORD,CORD,CT,CCT,BD,AE);
TCCTEdit = class(TEdit)
private
{ Private declarations }
FInfoArr: TCustInfoArr;
FFieldName: TFiledType;
FrmChangeDown: TFrmChangeDown;
FRecords: Integer;
FRows: Integer;
procedure SetInfoArr(const Value: TCustInfoArr);
procedure SetFieldName(const Value: TFiledType);
procedure GetFouse(var message: TMessage);message WM_GetFocus;
procedure GetText(var Amessage: TMessage);message WM_GetText;
procedure SetRecords(const Value: Integer);
procedure SetRows(const Value: Integer);
protected
{ Protected declarations }
FCanChange: Boolean;
procedure SearchResult(const AStr: String);
public
{ Public declarations }
procedure Change;override;
procedure KeyPress(var Key: Char); override;
procedure KeyUp(var Key: Word; Shift: TShiftState); override;
published
{ Published declarations }
property Rows: Integer read FRows write SetRows default 5;
property Records: Integer read FRecords write SetRecords default 20;
property InfoArr: TCustInfoArr read FInfoArr write SetInfoArr;
property FieldName: TFiledType read FFieldName write SetFieldName default CTSNO;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Standard', [TCCTEdit]);
end;
{ TCCTEdit }
procedure TCCTEdit.Change;
begin
inherited;
if not Assigned(FrmChangeDown) then
FrmChangeDown:= TFrmChangeDown.Create(nil);
try
if (Text <> '') and (not FCanChange) then
begin
FrmChangeDown.HWND:= Handle;
FrmChangeDown.CustInfoArr:= FInfoArr;
FrmChangeDown.SG.RowCount:= FRows;
FrmChangeDown.Show;
SearchResult(Text);
// FrmChangeDown.Top := Tform(Self.Parent).Top+self.Top+45;;
// FrmChangeDown.Left := Tform(Self.Parent).left+self.left+4;;
FrmChangeDown.Top := Top+45;;
FrmChangeDown.Left := left+4;;
end
else
FrmChangeDown.Hide;
finally
SendMessage(Handle,WM_GetFocus,0,0);
end;
end;
procedure TCCTEdit.GetFouse(var message: TMessage);
begin
if CanFocus then SetFocus;
end;
procedure TCCTEdit.GetText(var Amessage: TMessage);
var
saveChange: TNotifyEvent;
CustInfo: TCustInfoArr;
begin
saveChange:= OnChange;
OnChange:= nil;
FCanChange:= True;
CustInfo:= TCustInfoArr(Amessage.WParam);
Text:= '';
case FieldName of
CTSNO: Text:= CustInfo[0].CTSNM;
CTSNM: Text:= custInfo[0].CTSNMP;
end;
SelStart:= Length(Text);
OnChange:= saveChange;
FCanChange:= False;
end;
procedure TCCTEdit.KeyPress(var Key: Char);
begin
inherited;
if Key = #27 then //esc
begin
if Assigned(FrmChangeDown) then
FrmChangeDown.Hide;
end;
if Key = #13 then
begin
FrmChangeDown.SGKeyPress(nil,Key);
end;
end;
procedure TCCTEdit.KeyUp(var Key: Word; Shift: TShiftState);
begin
inherited;
if (Key = vk_up) or (Key = vk_down) then
begin
FrmChangeDown.Show;
SendMessage(FrmChangeDown.Handle,WM_SetSGFocus,0,0);
end;
end;
procedure TCCTEdit.SearchResult(const AStr: String);
var
i, iRow, iCol : integer;
begin
iRow := 0;
iCol := 0;
with FrmChangeDown.SG do
begin
for I := 0 to ColCount - 1 do
Cols[I].Clear;
end;
FrmChangeDown.SG.Cells[0, iRow] := '编号';
Inc(iCol);
FrmChangeDown.SG.Cells[iCol, iRow] := '客户名称';
Inc(iCol);
FrmChangeDown.SG.Cells[iCol, iRow] := '名称简码';
Inc(iRow); //1
Dec(iCol);
Dec(iCol); //0
for i:= 0 to Length(InfoArr) - 1 do
begin
if (Pos(AStr,FInfoArr[i].CTSNM) > 0) or
(Pos(AStr,FInfoArr[i].CTSNMP) > 0) then
begin
FrmChangeDown.SG.Cells[0,iRow]:= IntToStr(I);
Inc(iCol);
FrmChangeDown.SG.Cells[iCol,iRow]:= FInfoArr[i].CTSNM;
inc(iCol);
FrmChangeDown.SG.Cells[iCol,iRow]:= FInfoArr[i].CTSNMP;
Inc(iRow);
Dec(iCol);
Dec(iCol);
end;
end;
end;
procedure TCCTEdit.SetFieldName(const Value: TFiledType);
begin
FFieldName := Value;
end;
procedure TCCTEdit.SetInfoArr(const Value: TCustInfoArr);
begin
FInfoArr := Value;
end;
procedure TCCTEdit.SetRecords(const Value: Integer);
begin
FRecords := Value;
end;
procedure TCCTEdit.SetRows(const Value: Integer);
begin
FRows := Value;
end;
end.
--------------------------------------------------------------------
不知道问题出在哪,请高手帮助