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

Вниз

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

 
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 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.004 c
2-1389003648
Aleks
2014-01-06 14:20
2015.02.08
Установка начального каталога SelectDirectory


2-1389046385
Signal
2014-01-07 02:13
2015.02.08
Есть ли реальный алгоритм вычисления прямоугольника


11-1236694785
swa1
2009-03-10 17:19
2015.02.08
MHUpDown


2-1389092311
Jimmy
2014-01-07 14:58
2015.02.08
TNT компоненты


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