enter vmesto Tab
13 отговора
393 прегледа
enter vmesto Tab
може ли никой да ми каже как да минавам м/у editbox-oвете с enter вместо с tab..опитах разни работи от рода на долния пример..ама не става.. 10x :
procedure TKEdit.KeyDown(var Key: Word; Shift: TShiftState);
begin
if (Key=Key_Return) or (key=Key_Enter) then
begin
key:=Key_Tab ;
end;
end;
end.

procedure TKEdit.KeyDown(var Key: Word; Shift: TShiftState);
begin
if (Key=Key_Return) or (key=Key_Enter) then
begin
key:=Key_Tab ;
end;
end;
end.
Re: enter vmesto Tab
едно решение:
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if key = 13 then begin
self.FindNextControl(Edit1, true, true, true).SetFocus;
end;
end;
така написано върти ВСИЧКИ контроли, трябва да се дооправи ако искаш само TEdit-и
подлежи на оптимизация - вместо да се вика тоя готов метод, който ВСЕКИ ПЪТ прави СОРТИРАН по TabOrder лист, може да си направиш кеширане, на Form.Create, например, в ObjectList който пази необходимата информация /вкл. и филтрирането само на определени типове/ в сортиран и подходящ за логаритмуване вид :-)
ПС: Мхм, и огледай какво става с контроли, на които Parent е нещо друго, а не Form1...
--------------------------------------
Започва Път от моят праг...
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if key = 13 then begin
self.FindNextControl(Edit1, true, true, true).SetFocus;
end;
end;
така написано върти ВСИЧКИ контроли, трябва да се дооправи ако искаш само TEdit-и
подлежи на оптимизация - вместо да се вика тоя готов метод, който ВСЕКИ ПЪТ прави СОРТИРАН по TabOrder лист, може да си направиш кеширане, на Form.Create, например, в ObjectList който пази необходимата информация /вкл. и филтрирането само на определени типове/ в сортиран и подходящ за логаритмуване вид :-)
ПС: Мхм, и огледай какво става с контроли, на които Parent е нещо друго, а не Form1...
--------------------------------------
Започва Път от моят праг...
Re: enter vmesto Tab
мерси за отговора..
оба4е ..то това не работи в(или SelectNext).. в когато са в компонент(..и незнам защо
).. а то целта е този код да роботи в компонента TKEdit ..(и то на CLX..)...
ako имаш няква идея .. ще съм ти много задължен..
оба4е ..то това не работи в(или SelectNext).. в когато са в компонент(..и незнам защо
ako имаш няква идея .. ще съм ти много задължен..
Re: enter vmesto Tab
Виж KeyPreview на формата ти. Трябва да е True. И сложи този евент на самата форма, а не на някой (всичките) контроли....
Редактирано от andrew_nikoloff на
Re: enter vmesto Tab
:) опитах..ама не ще..
KeyPreview = True
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
SelectNext(self,true,true);
end;
ако в контрола.(да ре4ем TEdit)..
например..
procedure TForm1.KEdit2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
SelectNext(sender as TWidgetControl,true,true)
end;
така работи....( неговата мама)....

KeyPreview = True
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
SelectNext(self,true,true);
end;
ако в контрола.(да ре4ем TEdit)..
например..
procedure TForm1.KEdit2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
SelectNext(sender as TWidgetControl,true,true)
end;
така работи....( неговата мама)....
Re: enter vmesto Tab
мхм, сега баш нямам Delphi, ама ти погледна ли какво пише за Parent, Owner и т.н.т в хелпа?
прочее, това със SEFL, когато SELF е форма... ми няма начин да й дадеш TabStop=TRUE, и още кило други такива...
к, с готовите работи - трудно.
има едно дето е с повече писане, ама може да ти е по-полезно...
идеята: кеширай ги тия контроли дето ти трябват в едно масивче /TObjectList, да не се юрнеш сега масиви да пишеш :-)/, например на OnCreate (ако е удачно - ти си знаеш). кеширай - цикълче, погледни кое по формата дава такова инфо - да е по Owner, не по Parent! (ама май готово няма, та ще се наложи с рекурсия - обикаляш си ги контролите и гледаш имат ли ботушки), подреждаш си ги в удобен вид, после на ВСЕКИ едит, на KeyUP му закачаш при ентер да търси следващия в оня списък /глей кат стигнеш последния да почнеш от начало не от първия след последния :-)/
ПС: бата мата, как може да се върши работа в 9:00 сутринта!?!?
ППС: това всичкото го мисля на VCL, изв. ама никога не съм правил нещо с CLX... та може и ГОООЛЕМИ глупости да съм нашляпал...
--------------------------------------
Започва Път от моят праг...
прочее, това със SEFL, когато SELF е форма... ми няма начин да й дадеш TabStop=TRUE, и още кило други такива...
к, с готовите работи - трудно.
има едно дето е с повече писане, ама може да ти е по-полезно...
идеята: кеширай ги тия контроли дето ти трябват в едно масивче /TObjectList, да не се юрнеш сега масиви да пишеш :-)/, например на OnCreate (ако е удачно - ти си знаеш). кеширай - цикълче, погледни кое по формата дава такова инфо - да е по Owner, не по Parent! (ама май готово няма, та ще се наложи с рекурсия - обикаляш си ги контролите и гледаш имат ли ботушки), подреждаш си ги в удобен вид, после на ВСЕКИ едит, на KeyUP му закачаш при ентер да търси следващия в оня списък /глей кат стигнеш последния да почнеш от начало не от първия след последния :-)/
ПС: бата мата, как може да се върши работа в 9:00 сутринта!?!?
ППС: това всичкото го мисля на VCL, изв. ама никога не съм правил нещо с CLX... та може и ГОООЛЕМИ глупости да съм нашляпал...
--------------------------------------
Започва Път от моят праг...
Редактирано от Hateras на
Re: enter vmesto Tab
а то4но там..owner i parent са ми недостъпни.....
Когато ве4е имам компонентите във форма и там като на KeyDown и напиша:
procedure TForm1.KEdit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key=Key_return) then
SelectNext(sender as TWidgetControl,true,true)
end;
и това си работи..
ама като в компонента напиша:
SelectNext(self,true,true)
не става..
и още един път мерси за вниманието...
Re: enter vmesto Tab
Във формата с KeyPreview:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
If Key=#13
then begin
Key:=#0;
SelectNext(ActiveControl,True,True);
end;
end;
В контролата:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
If Key=#13
then begin Key:=#0;Perform(CM_DialogKey,VK_TAB,0);end;
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
If Key=#13
then begin
Key:=#0;
SelectNext(ActiveControl,True,True);
end;
end;
В контролата:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
If Key=#13
then begin Key:=#0;Perform(CM_DialogKey,VK_TAB,0);end;
end;
Редактирано от NDeu на
Re: enter vmesto Tab
procedure TForm1.Form1KeyPress(var Key: char);
begin
if Key = #13 then
begin
Key := #0;
PostMessage (Handle, wm_KeyDown, vk_Tab, 0);
end;
end;
и KeyPreview на формата трябва да е True. И не се занимаваш с глупости да качориш евенти на всеки контрол. Може обаче да си правиш проверка какъв е типа на активния контрол и да изпращаш Tab само за някои...
begin
if Key = #13 then
begin
Key := #0;
PostMessage (Handle, wm_KeyDown, vk_Tab, 0);
end;
end;
и KeyPreview на формата трябва да е True. И не се занимаваш с глупости да качориш евенти на всеки контрол. Може обаче да си правиш проверка какъв е типа на активния контрол и да изпращаш Tab само за някои...
Re: enter vmesto Tab
Мерси за отговорите :)
ама под Linux това не ми върши работа..:(
Пък и исках тази простотия да работи в предифинирания клас КEdit ...
ако имате ниакви идеи ще съм ви признателен , ако ги споделите
ама под Linux това не ми върши работа..:(
Пък и исках тази простотия да работи в предифинирания клас КEdit ...
ако имате ниакви идеи ще съм ви признателен , ако ги споделите
Re: enter vmesto Tab
Probvaj tova. 6te ti svar6i rabota.
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then
Edit2.SetFocus;
end;
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then
Edit1.SetFocus;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then
Edit2.SetFocus;
end;
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then
Edit1.SetFocus;
end;
Re: enter vmesto Tab
Е да де - ама при 20 edit-a представи си колко код ще изпишеш.
Хората дадоха добри отговори - има и компоненти по върпоса - ако някой се нуждае мога да помогна.
---
Е т'ва е живот!
Хората дадоха добри отговори - има и компоненти по върпоса - ако някой се нуждае мога да помогна.
---
Е т'ва е живот!
Re: enter vmesto Tab
Znam 4e ne e perfektnoto re6enie, zatova go dadoh tolkova kasno. Vse pak priemam zabelejkata :).
Re: enter vmesto Tab
Za da ne se nalaga da pi6et code za wseki control na formata prawi6 slednoto:
1) Slaga6 property na KeyPreview=True na formata
2) na OnKeyPress na formata:
if Key = #13 then SelectNext( ActiveControl, True, True );
i si gotow.
1) Slaga6 property na KeyPreview=True na formata
2) na OnKeyPress na formata:
if Key = #13 then SelectNext( ActiveControl, True, True );
i si gotow.