Форум: "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