![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Переход стрелочками между окошками
Light-blr © (2010-05-07 01:59:00)Помогите, пожалуйста. На форме есть n окошек, расположенных одно под другим. Необходимо по стрелочке "вверх" переходить на окошко, расположенное выше текущего, ну и "вниз" соответственно.
Пытаюсь поймать сообщение, ничего у меня не выходит.
...
type
TForm1 = class(TForm)
Shape1: TShape;
Edit1: TEdit;
Shape2: TShape;
Edit2: TEdit;
procedure Edit1Enter(Sender: TObject);
procedure Edit1Exit(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure WMKeyUp(var Msg:TWMKeyUp); message WM_KeyUp;
...
procedure TForm1.WMKeyUp(var Msg:TWMKeyUp);
begin
if Msg.CharCode = vk_Up then
if Order[tp,3]<>0 then tp:=Order[tp,3];
Comp:=FindComponent(Names[tp]);
(Comp as TEdit).SetFocus;
inherited;
end;
в массиве Order у меня хранятся индексы названий окошек сверху/снизу/справа/слева от текущего.
Так вот в эту функцию я никак не попадаю, хотя там стоит точка останова. То есть ничего она не ловит и соответственно переход между окошками по стрелочкам не происходит.
Помогите, пожалуйста, разобраться с этой ситуацией.
Плохиш (2010-05-15 23:50:00) [21]Слишкам многа букав..
Light-blr (2010-05-15 23:22:00) [22]> Плохиш © (08.05.10 02:38) [8]
> Бедная страна, у же в дурдоме кодеров ищут...
как говорится, не хами и не хамим будешь.
описала по-минимуму, поскольку в случае реализации перехода стрелочками между двумя окошками, организовать такой же переход между всеми остальными несложно. но когда посыпались предложения "переходить табом и не париться", задачу уточнила. видимо, мастерам делфи лень читать что-то кроме первого сообщения.
я ведь не спрашивала, каким образом можно переходить между окошками, предполагать что программист не знает про табуляцию может только <не очень умный человек>.
пишите, пишите свои "великие игрушки". я лично ваяю сугубо прикладные программы персонально для себя. никому не пытаюсь "загнать", не предполагаю написать нечто грандиозное, руководствуясь ответами на вопросы в конференции для начинающих.
не думала, что здесь обитают настолько неприятные типы. простите, что вмешалась своим вопросом в сплошной поток "помогите не могу посчитать сумму десяти чисел", на такие, конечно, попроще отвечать. мастера, ага...
Anatoly Podgoretsky (2010-05-10 07:44:00) [23]Ну так не всем помогает, особенно в запущеном случае, надо повторять постоянно.
Германн (2010-05-10 02:58:00) [24]
> Anatoly Podgoretsky © (09.05.10 10:24) [18]
>
> > Германн (09.05.2010 02:36:16) [16]
>
> Ты кончай с этим. Лучше собаку выведи погулять.
Вывел, блин.
Впервые за много лет вышли погулять всей семьей. Плюс знакомая моей жены и дочери.
В результате все промокли и замерзли. Плюс обострилась хроника моей ноги (из-за того, что она промокла под холодным дождем). Плюс обострилась хроника моей руки (из-за того, что пришлось тянуть собаку, которая жутко боится грозы).
Но после "послеполуночной", примерно полуторачасовой работы над эксклюзивной версией газоанализатора, хроники ушли.
:)
Anatoly Podgoretsky (2010-05-09 10:24:00) [25]> Германн (09.05.2010 02:36:16) [16]
Ты кончай с этим. Лучше собаку выведи погулять.
Andy BitOff (2010-05-09 02:39:00) [26]> MsGuns © (09.05.10 02:04) [15]
> дома давно уже принципиально не работаю
А я потому, что открыл для себя Бателфилд =)))
Германн (2010-05-09 02:36:00) [27]
> MsGuns © (09.05.10 02:04) [15]
>
> >Германн © (08.05.10 02:54) [11]
> >И где же та игрушка? Ссылку дай.
>
> Вот уж бином Ньютона, самому влом напрячься
А оно мне надо? Напрягаться, то есть? Но уж если если сказал, то отвечай за сказанное!
P.S.
Для меня уже давно дом == работа.
MsGuns (2010-05-09 02:04:00) [28]>Германн © (08.05.10 02:54) [11]
>И где же та игрушка? Ссылку дай.
Вот уж бином Ньютона, самому влом напрячься :)
а если без шуток, то на работе все мои штучки - дома давно уже принципиально не работаю
Anatoly Podgoretsky (2010-05-08 10:36:00) [29]> Плохиш (08.05.2010 02:56:12) [12]
Partizanen, no pasaran.
Германн (2010-05-08 03:08:00) [30]
> Плохиш © (08.05.10 02:56) [12]
>
>
> > Германн © (08.05.10 02:42) [9]
>
> Судя по второму абзацу из [5], я до шедевра не доживу.
Не дрейфь, старик! Мы тут многих переживём/пережуём.
:)
Плохиш (2010-05-08 02:56:00) [31]
> Германн © (08.05.10 02:42) [9]
Судя по второму абзацу из [5], я до шедевра не доживу.
> MsGuns © (08.05.10 02:48) [10]
Ну судя по постепенно выползающим из очередного партизана подробностям, тут можно и стринггридом обойтись.
Германн (2010-05-08 02:54:00) [32]
> MsGuns © (08.05.10 02:48) [10]
>
> Смех смехом, но когда то была такая проблемка
И где же та игрушка? Ссылку дай.
MsGuns (2010-05-08 02:48:00) [33]Смех смехом, но когда то была такая проблемка, в итоге написал пару функций, которые определя "геометрические" координады контолов на контейнере и перемещали по кнопкам фокус "куда надо"
:)
Германн (2010-05-08 02:42:00) [34]
> Плохиш © (08.05.10 02:38) [8]
> Бедная страна, у же в дурдоме кодеров ищут...
Андрей. Не спеши уж с такими упрёками.
А может это будет новая игрушка, которая поразит весь мир, как когда-то Тетрис!
:)
Плохиш (2010-05-08 02:38:00) [35]
> Light-blr (07.05.10 01:59)
>
> Помогите, пожалуйста. На форме есть n окошек, расположенных
> одно под другим. Необходимо по стрелочке "вверх" переходить
> на окошко, расположенное выше текущего, ну и "вниз" соответственно.
>
> Light-blr (07.05.10 22:15) [5]
>
> А какой порядок правильный, если мне нужно в 4 стороны переходить?
> Ну не получается же линейно!
Бедная страна, у же в дурдоме кодеров ищут...
Light-blr (2010-05-07 23:07:00) [36]спасибо! :) всё работает как часы.
Игорь Шевченко (2010-05-07 22:59:00) [37]
> Теперь озадачилась вопросом, как при нажатии стрелочки отследить
> одновременное нажатие клавиши ctrl
if GetKeyState(VK_CONTROL) < 0 then
// контрол нажат
Light-blr (2010-05-07 22:15:00) [38]А какой порядок правильный, если мне нужно в 4 стороны переходить? Ну не получается же линейно!
Теперь озадачилась вопросом, как при нажатии стрелочки отследить одновременное нажатие клавиши ctrl, и только тогда переходить между окошками. А то ведь и в самом окошке захочется курсор подвигать, а уже никак.
Плохиш (2010-05-07 10:22:00) [39]
> if Order[tp,3]<>0 then tp:=Order[tp,3];
> Comp:=FindComponent(Names[tp]);
> (Comp as TEdit).SetFocus;
> inherited;
> end;
> в массиве Order у меня хранятся индексы названий окошек
> сверху/снизу/справа/слева от текущего.
>
Выкинуть этот код вместе с массивом.
Расставить TabOrder в правильном порядке и использовать для перемещения:
PostMessage(Handle, WM_NEXTDLGCTL, 1, 0);
PostMessage(Handle, WM_NEXTDLGCTL, 0, 0);
Light-blr (2010-05-07 09:06:00) [40]Спасибо, про таб и шифт-таб я знаю. Проблема в том, что мне надо переходить с окошка в 4 стороны (вверх-вниз-вправо-влево), а таб предполагает линейный порядок, т.е. только 2 стороны.
Leonid Troyanovsky
спасибо, почитала. Поняла, что надо заменить WM_KeyUp (ну или WM_KeyDown) на CM_CHILDKEY, поскольку окошко так и норовит само обработать сообщение, и WM_KeyDown не срабатывает.