Конференция "KOL" » Выделение текста после события Тав [Delphi, Windows]
 
  • RusSun © (14.10.09 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 © (28.10.09 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 стоит пререйти на более
    старую версию работает нормально.
  • Дмитрий К © (28.10.09 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 © (08.11.09 14:54) [3]
    Огромное спасибо! Всё работает. У меня сейчас инета нет поэтому так припознился с ответом.
 
Конференция "KOL" » Выделение текста после события Тав [Delphi, Windows]
Есть новые Нет новых   [134431   +13][b:0][p:0.002]