Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.02.06;
Скачать: [xml.tar.bz2];

Вниз

фокус   Найти похожие ветки 

 
den_dnepr   (2003-01-29 11:09) [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
Text:=SearchLB.Items.Strings[SearchLB.ItemIndex];
SelectAll;
// SetFocus;
SearchLB.Visible:=false;
end;
// при нажатии ESC
if key=27 then
begin
SetFocus;
SearchLB.Visible:=false;
end;
end;
end.


как передать фокус на самого компонента во нутри него? я делаю setfocus или self.setfocus когда он один то все нормально, а когда их два то глючат фокус передается не на него а на соседний такой же компонент...(текст в коде где глючит я выделил)


 
Игорь Шевченко   (2003-01-29 11:32) [1]

Не могу сказать ничего определенного, но может, так:


if key=13 then begin
Text:=SearchLB.Items.Strings[SearchLB.ItemIndex];
SearchLB.Visible:=false;
SelectAll;
end;
// при нажатии ESC
if key=27 then begin
SearchLB.Visible:=false;
SetFocus;
end;



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

Форум: "Основная";
Текущий архив: 2003.02.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.011 c
1-15724
kpo
2003-01-27 21:35
2003.02.06
help!!


6-15812
Chuker
2002-12-08 19:36
2003.02.06
Помогите плз. примером использования ReadProcessMemory


9-15380
kornoman
2002-08-12 07:09
2003.02.06
Ошибка с DelphiX


1-15542
x02x
2003-01-27 22:23
2003.02.06
Как значения переменных из одной формы перенести в другую.


3-15508
sndanil
2003-01-20 17:10
2003.02.06
QuantumGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский