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

Вниз

Выделение текста после события Тав   Найти похожие ветки 

 
RusSun ©   (2009-10-14 21:05) [0]

Доброе время суток, форумчане.
Как правильно сделать выделение текста Editbox"a при
переходе после эмуляции Tab?
что-то с sender"ом не так.
Вот мой код:

procedure KeyDown(Dummy : Pointer; Sender: PControl; var Key: Integer;Shift: Cardinal);
begin
if key=VK_UP then begin
//ShowMessage("верх");
keybd_event(VK_SHIFT,0,0,0);
keybd_event(9,0,0,0);
keybd_event(9,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0);
                end;
if key =VK_DOWN then begin
  Key := 0;
form.GotoControl(9);
  sender.Focused:=true;
  sender.SelStart:=0;
 sender.SelLength:=sender.TextSize;
                              end;
end;


 
RusSun ©   (2009-10-28 16:52) [1]

Немного уточняю свой вопрос
Дело в следующем этот вопрос не стоял бы, но
невыходит продолжение
В Vcl
При переходе от Editbox"са к Editbox"су
при включённом свойстве autoselect
происходит выделение.
В Kol не аналога подходящего мне
вот и пишу отсебятину:
//область для процедур
procedure KeyDown(Dummy : Pointer; Sender: PControl; var Key: Integer;Shift: Cardinal);
begin
//pcontrol(sender).LookTabKeys:= [tkTab,tkUpDown];
//pcontrol(sender).TabStop:= true ;
if key=VK_UP then begin
//ShowMessage("верх");
keybd_event(VK_SHIFT,0,0,0);
keybd_event(9,0,0,0);
keybd_event(9,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0);
                end;
if key =VK_DOWN then begin
Key := 0;
form.GotoControl(9);
                    end;
if key = VK_TAB then        begin
 sender.Perform(WM_LBUTTONDBLCLK,0,0);
{sender.SelStart:=0;
sender.SelLength:=editbox1.TextSize; }
                              end;
end;

Вообщем работает она как-то странно :crazy:
Сперва проходим прямо, затем в обратном направлении
и только в третий раз начинает выделять, то что нужно
как сделать нормально чтобы работало? :wall:
Кстати в 2.88 почему-то свойство VK_UP
работает также как и VK_DOWN стоит пререйти на более
старую версию работает нормально.


 
Дмитрий К ©   (2009-10-28 17:15) [2]

Sender в данном случае - контрол, с которого уходите. Естественно, двойной щелчок возвращает ему фокус. Для выделения после перехода отлавливайте WM_SETFOCUS.
program tabemul;

uses
 Windows,
 Messages,
 KOL;

var
 Form: PControl;
 Edit1: PControl;
 Edit2: PControl;

function EditMessage(Sender: PControl; var Msg: TMsg; var Rslt: Integer): Boolean;
begin
 Result := False;
 if Msg.message = WM_SETFOCUS then
 begin
   Sender.SelStart := 0;
   Sender.SelLength := -1;
 end;
end;

procedure EditKeyDown(Dummy, Sender: PControl; var Key: Integer; Shift: Cardinal);
begin
 if key = VK_UP then
 begin
   Key := 0;
   keybd_event(VK_SHIFT, 0, 0, 0);
   Form.GotoControl(VK_TAB);
   keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
 end;
 if key = VK_DOWN then
 begin
   Key := 0;
   Form.GotoControl(VK_TAB);
 end;
end;

begin
 Form := NewForm(nil, "Form1").Tabulate;
 Edit1 := newEditBox(Form, []);
 Edit2 := newEditBox(Form, []).PlaceUnder;
 Edit1.OnKeyDown := TOnKey(MakeMethod(nil, @EditKeyDown));
 Edit2.OnKeyDown := TOnKey(MakeMethod(nil, @EditKeyDown));
 Edit1.OnMessage := TOnMessage(MakeMethod(Edit1, @EditMessage));
 Edit2.OnMessage := TOnMessage(MakeMethod(Edit2, @EditMessage));

 Run(Form);
end.


 
RusSun ©   (2009-11-08 14:54) [3]

Огромное спасибо! Всё работает. У меня сейчас инета нет поэтому так припознился с ответом.



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

Форум: "KOL";
Текущий архив: 2015.02.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.002 c
2-1388836471
suhar92
2014-01-04 15:54
2015.02.08
Нужна помощь!


11-1257351348
Dy1
2009-11-04 19:15
2015.02.08
найти контрол


15-1404246606
Юрий
2014-07-02 00:30
2015.02.08
С днем рождения ! 2 июля 2014 среда


15-1404333002
Юрий
2014-07-03 00:30
2015.02.08
С днем рождения ! 3 июля 2014 четверг


11-1255539904
RusSun
2009-10-14 21:05
2015.02.08
Выделение текста после события Тав





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский