Здравствуйте, Flamer, Вы писали:
F>Что-то с трудом верится... Давайте-ка посмотрим полный код компонента и как компонент используется, а уже потом будем думать
TSearchEdit = class(TCustomEdit)
private
FGrid: TCustomDBGridEx;
FColumn: TColumnEx;
procedure SetColumn(const Value: TColumnEx);
procedure WMKillFocus(var Message: TMessage); message WM_KILLFOCUS;
procedure InternalChange(Sender: TObject);
protected
procedure CreateParams(var AParams: TCreateParams); override;
procedure Locate;
procedure KeyPress(var Key: Char); override;
public
constructor Create(AOwner: TCustomDBGridEx); reintroduce; virtual;
property Column: TColumnEx read FColumn write SetColumn;
end;
{ TSearchEdit }
constructor TSearchEdit.Create(AOwner: TCustomDBGridEx);
begin
inherited Create(AOwner);
OnChange := InternalChange;
FGrid := AOwner;
FreeNotification(FGrid);
Parent := FGrid;
BorderStyle := bsNone;
end;
procedure TSearchEdit.CreateParams(var AParams: TCreateParams);
begin
inherited;
AParams.Style := AParams.Style or WS_BORDER;
end;
procedure TSearchEdit.InternalChange(Sender: TObject);
begin
Locate;
end;
procedure TSearchEdit.KeyPress(var Key: Char);
begin
inherited;
if Key = Chr(VK_ESCAPE) then
begin
Key := #0;
PostMessage(FGrid.Handle, WMU_KILLME, 0, 0);
end;
end;
procedure TSearchEdit.Locate;
begin
with FGrid.DataLink.DataSet do
if Active then
try
Locate(Column.FieldName, Text, [loCaseInsensitive, loPartialKey]);
except
end;
end;
procedure TSearchEdit.SetColumn(const Value: TColumnEx);
var R: TRect;
begin
if FColumn = Value then
Exit;
FColumn := Value;
R := FGrid.CellRect(FColumn.Index + 1, 0);
Left := R.Left - 1;
Top := R.Top - 1;
Height := R.Bottom - R.Top + 2;
Width := R.Right - R.Left + 2;
Text := FColumn.Field.AsString;
SetFocus;
end;
procedure TSearchEdit.WMKillFocus(var Message: TMessage);
begin
inherited;
PostMessage(FGrid.Handle, WMU_KILLME, 0, 0);
end;
... << RSDN@Home 1.1.4 beta 3 rev. 185>>