Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.13;
Скачать: CL | DM;

Вниз

ФОКУС   Найти похожие ветки 

 
den_dnepr ©   (2003-02-05 13:56) [0]

ВОТ КОД КОМПОНЕНТА НА ВЫДЕЛЕННОМ ФРАГМЕНТЕ ФОКУС НЕ ПРЕДАЕТСЯ НА САМ КОМПОНЕНТ...
Т.Е. КОГДА КОМПОНЕНТ ОДИН НА ФОРМЕ ФОКУС ПЕРЕДАЕТСЯ НОРМАЛЬНО НА НЕГО, А КОГДА ИХ БОЛЬШЕ ТО ГЛУЧИТ ФОКУС ПЕРЕДАЕТСЯ НА ТОЧНО ТАКОЙЖЕ...
unit ListSearch;

interface

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

var
SearchQ: Tquery;
SearchLB:TListBox;


type
TListSearch = class(TEdit)
private
{ Private declarations }
FTableName,FKeyField,FResultField, FDatabaseName, FFilter: String;
FFiltered: Boolean;
FResult: Integer;
procedure Change; override;
procedure KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure OnKeyDownLB(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure ShowListBox;

protected
{ Protected declarations }

public
{ Public declarations }
published
{ Published declarations }
constructor Create(aowner:Tcomponent);override; //Конструктор
// имя базы данных
property T_DatabaseName: String read FDatabaseName write FDatabaseName;
property T_TableName: String read FTableName write FTableName;
property T_KeyField: String read FKeyField write FKeyField;
property T_ResultField: String read FResultField write FResultField;
property T_Filter: String read FFilter write FFilter;
property T_Filtered: Boolean read FFiltered write FFiltered;

function ShowResult: integer;
// property DataA:String read FDataB write FDataB;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents("Samples", [TListSearch]);
end;

constructor TListSearch.Create(aowner:Tcomponent);
begin
inherited create(aowner);
// создаем query
SearchQ:=TQuery.Create(self);
// создаем ListBox и устанавливаем его параметры
SearchLB:=TListBox.Create(self);
SearchLB.Parent:=aowner as tform;
SearchLB.MultiSelect:=true;
SearchLB.OnKeyDown:=OnKeyDownLB;
SearchLB.visible:=false;
// задаем обработчик события onKeyDown для елемента TEdit
onKeyDown:=KeyDown;
end;


function TListSearch.ShowResult;
begin
result:= searchq.fieldbyname(FResultField).asinteger
end;


// отображает ListBox под эелеинтом TEdit
procedure TListSearch.ShowListBox;
begin
SearchLB.Top:=top+ height;
SearchLB.Left:=left;
SearchLB.Width:=width;
SearchLB.Visible:=true;
end;

// обработка события Change для Edit
procedure TListSearch.Change;
var i: integer;
begin
if FDatabaseName="" then exit;
SearchQ.DatabaseName:=FDatabaseName;
ShowListBox;

SearchQ.Filtered:=FFiltered;
SearchQ.Filter:=FFilter;
searchQ.close;
searchQ.sql.clear;
searchQ.sql.add("select "+FKeyField +","+FResultField +" from "+FTableName+" where "+FKeyField+" LIKE ""+trim(Text)+"%"");
searchQ.open;
searchQ.First;

// заполняем список листбокса выбранными значениями с кваери
SearchLB.Items.Clear;
for i:=1 to searchq.RecordCount do
begin
SearchLB.Items.Add(searchq.fieldbyname(FKeyField).asstring);
searchQ.Next;
end;

// выделяем первую строку в лист боксе
if SearchLB.Items.Count>0 then SearchLB.Selected[0]:=true;
end;


procedure TListSearch.KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
// при нажатии на ввод в едите
if key=13 then
begin
if SearchLB.Items.Count=0 then text:="";
Text:=SearchLB.Items.Strings[SearchLB.ItemIndex];
SelectAll;
SetFocus;
SearchLB.Visible:=false;
end;
// при нажатии стрелки вниз передаем фокус листбоксу
if key=40 then
begin
SearchLB.SetFocus;
if SearchLB.Items.Count>2 then
begin
SearchLB.Selected[0]:=false;
SearchLB.Selected[1]:=true;
end;
end;
end;

procedure TListSearch.OnKeyDownLB(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
//inherited OnKeyDown;
// при нажатии ввода в лист бокса передаем текст и фокус в едит
if key=13 then
begin
windows.setfocus(Handle);
// self.Text:=SearchLB.Items.Strings[SearchLB.ItemIndex];
// SearchLB.Visible:=false;
// self.SelectAll;
// self.SetFocus;

end;
// при нажатии ESC
if key=27 then
begin
SearchLB.Visible:=false;
// self.SetFocus;

end;

end;


end.


 
Cobalt ©   (2003-02-05 20:38) [1]

Попробуй так:
windows.setfocus(Sender.Handle);



Страницы: 1 вся ветка

Текущий архив: 2003.02.13;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.012 c
7-38592
SPIRIT
2002-12-11 01:45
2003.02.13
Дополнительные кнопки на клавиатуре


1-38299
UDS
2003-02-06 00:05
2003.02.13
Как перейти к определнному шагу выполнения программы?


3-38130
kkostik
2003-01-28 14:27
2003.02.13
Как бороться со снятием задачи


3-38086
Kalinka
2003-01-23 18:13
2003.02.13
Фильтрация в kdmMemTable


1-38187
anonymos
2003-02-04 21:24
2003.02.13
Медиа