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

Вниз

Переход стрелочками между окошками   Найти похожие ветки 

 
Light-blr   (2010-05-07 01:59) [0]

Помогите, пожалуйста. На форме есть 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 у меня хранятся индексы названий окошек сверху/снизу/справа/слева от текущего.

Так вот в эту функцию я никак не попадаю, хотя там стоит точка останова. То есть ничего она не ловит и соответственно переход между окошками по стрелочкам не происходит.

Помогите, пожалуйста, разобраться с этой ситуацией.


 
Leonid Troyanovsky ©   (2010-05-07 07:44) [1]


> Light-blr   (07.05.10 01:59)

> Помогите, пожалуйста. На форме есть n окошек,

Если "окошко" есть Edit (n=2), то для перемещений между ними,
как и другими винконтролами, предназначен Tab & Shift+Tab.

Обработчик же формы не срабатывает потому, что сообщение
обрабатывается контролом в фокусе.

Полезно также помнить сказанное by Peter Below:
http://groups.google.com/group/fido7.ru.delphi.chainik/msg/9882c0fd38c38706

--
Regards, LVT.


 
Mike Kouzmine   (2010-05-07 07:53) [2]

используй стандартный механизм
либо сам управляй селектомнекст, либо заменяй ки ап даун на таб либо шифт таб


 
Light-blr   (2010-05-07 09:06) [3]

Спасибо, про таб и шифт-таб я знаю. Проблема в том, что мне надо переходить с окошка в 4 стороны (вверх-вниз-вправо-влево), а таб предполагает линейный порядок, т.е. только 2 стороны.

Leonid Troyanovsky
спасибо, почитала. Поняла, что надо заменить WM_KeyUp (ну или WM_KeyDown) на CM_CHILDKEY, поскольку окошко так и норовит само обработать сообщение, и WM_KeyDown не срабатывает.


 
Плохиш ©   (2010-05-07 10:22) [4]


>  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 22:15) [5]

А какой порядок правильный, если мне нужно в 4 стороны переходить? Ну не получается же линейно!

Теперь озадачилась вопросом, как при нажатии стрелочки отследить одновременное нажатие клавиши ctrl, и только тогда переходить между окошками. А то ведь и в самом окошке захочется курсор подвигать, а уже никак.


 
Игорь Шевченко ©   (2010-05-07 22:59) [6]


> Теперь озадачилась вопросом, как при нажатии стрелочки отследить
> одновременное нажатие клавиши ctrl


if GetKeyState(VK_CONTROL) < 0 then
// контрол нажат


 
Light-blr   (2010-05-07 23:07) [7]

спасибо! :) всё работает как часы.


 
Плохиш ©   (2010-05-08 02:38) [8]


> Light-blr   (07.05.10 01:59)
>
> Помогите, пожалуйста. На форме есть n окошек, расположенных
> одно под другим. Необходимо по стрелочке "вверх" переходить
> на окошко, расположенное выше текущего, ну и "вниз" соответственно.
>


> Light-blr   (07.05.10 22:15) [5]
>
> А какой порядок правильный, если мне нужно в 4 стороны переходить?
>  Ну не получается же линейно!

Бедная страна, у же в дурдоме кодеров ищут...


 
Германн ©   (2010-05-08 02:42) [9]


> Плохиш ©   (08.05.10 02:38) [8]


> Бедная страна, у же в дурдоме кодеров ищут...

Андрей. Не спеши уж с такими упрёками.
А может это будет новая игрушка, которая поразит весь мир, как когда-то Тетрис!
:)


 
MsGuns ©   (2010-05-08 02:48) [10]

Смех смехом, но когда то была такая проблемка, в итоге написал пару функций, которые определя "геометрические" координады контолов на контейнере и перемещали по кнопкам фокус "куда надо"
:)


 
Германн ©   (2010-05-08 02:54) [11]


> MsGuns ©   (08.05.10 02:48) [10]
>
> Смех смехом, но когда то была такая проблемка

И где же та игрушка? Ссылку дай.


 
Плохиш ©   (2010-05-08 02:56) [12]


> Германн ©   (08.05.10 02:42) [9]

Судя по второму абзацу из [5], я до шедевра не доживу.

> MsGuns ©   (08.05.10 02:48) [10]

Ну судя по постепенно выползающим из очередного партизана подробностям, тут можно и стринггридом обойтись.


 
Германн ©   (2010-05-08 03:08) [13]


> Плохиш ©   (08.05.10 02:56) [12]
>
>
> > Германн ©   (08.05.10 02:42) [9]
>
> Судя по второму абзацу из [5], я до шедевра не доживу.

Не дрейфь, старик! Мы тут многих переживём/пережуём.
:)


 
Anatoly Podgoretsky ©   (2010-05-08 10:36) [14]

> Плохиш  (08.05.2010 02:56:12)  [12]

Partizanen, no pasaran.


 
MsGuns ©   (2010-05-09 02:04) [15]

>Германн ©   (08.05.10 02:54) [11]
>И где же та игрушка? Ссылку дай.

Вот уж бином Ньютона, самому влом напрячься :)
а если без шуток, то на работе все мои штучки - дома давно уже принципиально не работаю


 
Германн ©   (2010-05-09 02:36) [16]


> MsGuns ©   (09.05.10 02:04) [15]
>
> >Германн ©   (08.05.10 02:54) [11]
> >И где же та игрушка? Ссылку дай.
>
> Вот уж бином Ньютона, самому влом напрячься

А оно мне надо? Напрягаться, то есть? Но уж если если сказал, то отвечай за сказанное!

P.S.
Для меня уже давно дом == работа.


 
Andy BitOff ©   (2010-05-09 02:39) [17]

> MsGuns ©   (09.05.10 02:04) [15]
> дома давно уже принципиально не работаю

А я потому, что открыл для себя Бателфилд =)))


 
Anatoly Podgoretsky ©   (2010-05-09 10:24) [18]

> Германн  (09.05.2010 02:36:16)  [16]

Ты кончай с этим. Лучше собаку выведи погулять.


 
Германн ©   (2010-05-10 02:58) [19]


> Anatoly Podgoretsky ©   (09.05.10 10:24) [18]
>
> > Германн  (09.05.2010 02:36:16)  [16]
>
> Ты кончай с этим. Лучше собаку выведи погулять.

Вывел, блин.
Впервые за много лет вышли погулять всей семьей. Плюс знакомая моей жены и дочери.
В результате все промокли и замерзли. Плюс обострилась хроника моей ноги (из-за того, что она промокла под холодным дождем). Плюс обострилась хроника моей руки (из-за того, что пришлось тянуть собаку, которая жутко боится грозы).

Но после "послеполуночной", примерно полуторачасовой работы над эксклюзивной версией газоанализатора, хроники ушли.
:)


 
Anatoly Podgoretsky ©   (2010-05-10 07:44) [20]

Ну так не всем помогает, особенно в запущеном случае, надо повторять постоянно.


 
Light-blr   (2010-05-15 23:22) [21]

> Плохиш ©   (08.05.10 02:38) [8]

> Бедная страна, у же в дурдоме кодеров ищут...

как говорится, не хами и не хамим будешь.
описала по-минимуму, поскольку в случае реализации перехода стрелочками между двумя окошками, организовать такой же переход между всеми остальными несложно. но когда посыпались предложения "переходить табом и не париться", задачу уточнила. видимо, мастерам делфи лень читать что-то кроме первого сообщения.
я ведь не спрашивала, каким образом можно переходить между окошками, предполагать что программист не знает про табуляцию может только <не очень умный человек>.
пишите, пишите свои "великие игрушки". я лично ваяю сугубо прикладные программы персонально для себя. никому не пытаюсь "загнать", не предполагаю написать нечто грандиозное, руководствуясь ответами на вопросы в конференции для начинающих.
не думала, что здесь обитают настолько неприятные типы. простите, что вмешалась своим вопросом в сплошной поток "помогите не могу посчитать сумму десяти чисел", на такие, конечно, попроще отвечать. мастера, ага...


 
Плохиш ©   (2010-05-15 23:50) [22]

Слишкам многа букав..


 
Плохиш ©   (2010-05-15 23:55) [23]


> Light-blr   (15.05.10 23:22) [21]

И всё-таки советую подробней ознакомиться с классом TStringGrid.


 
Игорь Шевченко ©   (2010-05-15 23:59) [24]

Light-blr   (15.05.10 23:22) [21]

Так их, так их...


 
Light-blr   (2010-05-16 00:52) [25]


> Плохиш ©   (15.05.10 23:55) [23]

спасибо, знакома более или менее. но он мне не подходит - в нём все клеточки ровные, а я хочу чтобы в каждой строке было различно заданное количество окошек, причём расположенных не абы-как, а выровненных по обоим бокам. В первой строчке, к примеру, 5 окошек помельче, под ними 3 окошка покрупнее. К каждому окошку подпись, поясняющая, что туда надо вводить. Новый ряд формируется в зависимости от ввода в предыдущем ряду. Просто такая вот программка для доступа к маленькой базе данных, со своими заморочками - но готовых решений, удовлетворивших бы потребности, не нашла, потому и пишу нечто своё. Использовать только то, что мне уже известно, совершенно неинтересно и бесперспективно. И ничему не научишься, и интерфейс программы получится "от бедности и по незнанию".


 
turbouser ©   (2010-05-16 01:18) [26]


> Light-blr   (16.05.10 00:52) [25]


> спасибо, знакома более или менее. но он мне не подходит
> - в нём все клеточки ровные

OMFG..
ну DrawGrid возьми.. Делов то..


 
Light-blr   (2010-05-16 02:11) [27]

спасибо, окошки меня более чем устраивают. зачем предлагать заведомо проигрышные варианты, когда есть другое решение?
мне проще написать что-то своё, чем пытаться подогнать под свои нужды что-то чужое, но уже имеющееся - если мне нужно организовать ввод в окошках разного размера и типа (не только эдиты, а всё подряд в зависимости от конкретной потребности), то я нарисую динамическое формирование на форме нужных окошек, а не буду пытаться брать готовый компонент из стандартного набора и писать на него миллион обработок каждого чиха.
вообще не понимаю идеологии "где мне взять компонент который ловит льва и сажает его в клетку", в конце концов я какой-никакой а программист, и в состоянии написать для себя программу, которая будет не по принципу чем быстрее сляпать, а по принципу как удобнее в дальнейшем пользоваться.


 
Германн ©   (2010-05-16 02:21) [28]


> Light-blr   (16.05.10 02:11) [27]

[24] +1
Типизация конечно хорошая вещь. Но не стоит её воспринимать как догму.
Но вот всё же интересно какая задача? Пока что кроме игрушек ничего в голову не приходит.


 
Light-blr   (2010-05-17 08:55) [29]


> Германн ©   (16.05.10 02:21) [28]

очень просто - автоматизация ввода описаний к радиоспектаклям :)
у них как правило есть автор и обязательно - название, а прочие поля (актёры, режиссёры, год записи) могут быть неизвестны и в эфире не объявляться, а могут быть и помногу за раз, потому нужна возможность динамического создания ряда окошек для ввода информации именно нужного типа. При вводе первых букв в окошко в одном расположенном на форме списке будут появляться возможные варианты, и тут ввод в окошко можно закончить вводом числа - номера элемента в текущем списке, и при переходе на соседнее окошко в предыдущем появится полная информация, а не сокращённый ввод.
Всё это я делаю для ускорения ввода - в идеале получится вообще вводить не останавливая воспроизведение, гораздо проще тыркать в клавиатуру, чем дёргать рукой к мышке.
Я понимаю, что при минимальных доработках можно было взять уже нечто готовое, пусть и не с таким интерфейсом, как хочется, но вполне работающее. Проблема осложняется тем, что ввод должен быть на двух языках, а ставить себе третий язык, помимо русского и английского, ну очень не хочется. Вечно забываешь какой за каким идёт и гадаешь что получится от нажатия альт-шифта. Во время ввода заменять введённую букву на букву другого языка для меня идеально.

В принципе, это всё несложно реализовать, главное для меня сейчас подобрать базу для использования. Хочется иметь возможность носить программу на флэшке, и запускать на нескольких компьютерах, в том числе чужих, где устанавливать что-нибудь вроде майэскюэля не дадут. Нужно чтобы это было просто несколько файликов с базой, доступ к которым имела бы моя программа при любых обстоятельствах. Пробовала создавать в ОпенОфисе, но не нашла возможности её использовать из делфи. Вот теперь думаю, что делать и на каком варианте базы остановиться. Ну очень не хочется заводить стационарную базу, но пока альтернатив не вижу... так, чтобы были таблицы и именно селекты, а не фильтры.


 
sniknik ©   (2010-05-17 09:41) [30]

> динамического создания ряда окошек
ну и в чем тогда проблема? 4-ре свойства добавить с "указателями" на соседние, и в у главной формы прописать в onKeyUp (включить пред просмотр ввода формой) - "если клавиша влево и у активного окошка "указатель" не нил то setfocus ему.
раз динамически, то заполнить эти свойства раз плюнуть.

> где устанавливать что-нибудь вроде майэскюэля не дадут.
sqlite встраивается в движок, FB embeded dll рядом, access стоит везде, и т.д. ...


 
sniknik ©   (2010-05-17 10:17) [31]

type
 TEdit = class(StdCtrls.TEdit)
   LeftEdit, RightEdit, TopEdit, BottomEdit: TEdit;
 end;

procedure TForm1.FormCreate(Sender: TObject);
var
 Edit1, Edit2, Edit3,
 Edit4, Edit5, Edit6,
 Edit7, Edit8, Edit9: TEdit;

 procedure CreateEdit(var Edit: TEdit; iLeft, iTop: integer);
 begin
   Edit:= TEdit.Create(self);
   with Edit do begin
     Parent:= self;
     Left  := iLeft;
     Top   := iTop;
     Width := 90;
   end;  
 end;

begin
 CreateEdit(Edit1, 100, 100); CreateEdit(Edit2, 200, 100); CreateEdit(Edit3, 300, 100);
 CreateEdit(Edit4, 100, 150); CreateEdit(Edit5, 200, 150); CreateEdit(Edit6, 300, 150);
 CreateEdit(Edit7, 100, 200); CreateEdit(Edit8, 200, 200); CreateEdit(Edit9, 300, 200);

 Edit1.RightEdit:= Edit2; Edit1.BottomEdit:= Edit4;
 Edit2.LeftEdit := Edit1; Edit2.RightEdit := Edit3; Edit2.BottomEdit:= Edit5;
 Edit3.LeftEdit := Edit2; Edit3.BottomEdit:= Edit6;

 Edit4.RightEdit:= Edit5; Edit4.TopEdit   := Edit1; Edit4.BottomEdit:= Edit7;
 Edit5.LeftEdit := Edit4; Edit5.RightEdit := Edit6; Edit5.TopEdit   := Edit2; Edit5.BottomEdit:= Edit8;
 Edit6.LeftEdit := Edit5; Edit6.TopEdit   := Edit3; Edit6.BottomEdit:= Edit9;

 Edit7.RightEdit:= Edit8; Edit7.TopEdit   := Edit4;
 Edit8.LeftEdit := Edit7; Edit8.RightEdit := Edit9; Edit8.TopEdit:= Edit5;
 Edit9.LeftEdit := Edit8; Edit9.TopEdit   := Edit6;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
 case Key of
   VK_LEFT:
     if (ActiveControl is TEdit) and (TEdit(ActiveControl).LeftEdit <> nil) then
       TEdit(ActiveControl).LeftEdit.SetFocus;
   VK_RIGHT:
     if (ActiveControl is TEdit) and (TEdit(ActiveControl).RightEdit <> nil) then
       TEdit(ActiveControl).RightEdit.SetFocus;
   VK_UP:
     if (ActiveControl is TEdit) and (TEdit(ActiveControl).TopEdit <> nil) then
       TEdit(ActiveControl).TopEdit.SetFocus;
   VK_DOWN:
     if (ActiveControl is TEdit) and (TEdit(ActiveControl).BottomEdit <> nil) then
       TEdit(ActiveControl).BottomEdit.SetFocus;
 end;
end;


 
Leonid Troyanovsky ©   (2010-05-17 14:56) [32]


> sniknik ©   (17.05.10 10:17) [31]

>    VK_RIGHT:

А в эдите табом ходить :)

--
Regards, LVT.


 
sniknik ©   (2010-05-17 15:04) [33]

> А в эдите табом ходить :)
а что делать? судьба такой... ;) ведь хочется же... (хотя, с учетом Игорь Шевченко ©   (07.05.10 22:59) [6] думаю ничего особо страшного не будет)


 
Leonid Troyanovsky ©   (2010-05-17 15:33) [34]


> sniknik ©   (17.05.10 15:04) [33]

> ничего особо страшного не будет

А если некоторые привыкли пользовать для Edit Ctrl+Right и Shift+Right,
да и к Ctrl+Shift+Right тоже? :)

IMHO, не нужны здесь динамические контролы, а нужно что-то
вроде detail TDBCtrlGrid или enable  дополнительных контролов/вкладок
по горячей клавише.

Ну, и, в любом случае, организовать при таких условиях слепой ввод
сложно, если, конечно, не под диктовку писать.

--
Regards, LVT.


 
sniknik ©   (2010-05-17 15:56) [35]

> А если некоторые привыкли ...
да пофигу честно говоря... я такое использовать не собираюсь, пример чисто  из интереса. а автор хочет. может передумает после, когда жалобы на неудобства посыпятся. а может наоборот станет пророком нового юзабилити...


 
Leonid Troyanovsky ©   (2010-05-17 18:32) [36]


> sniknik ©   (17.05.10 15:56) [35]

>  пример чисто  из интереса.

Для начала, я тоже карту нарисовал :)

Потом подумал: фигня полнейшая, честно говоря.
Вопрошающий просто не оч.много пьес ввел, ну,
или, плохо пообщался с вводящими.

--
Regards, LVT.


 
Light-blr   (2010-05-19 22:38) [37]


> Leonid Troyanovsky ©   (17.05.10 18:32) [36]

ну как не очень много - штук 100. хватило, чтобы надоело.
а программа только для меня, не думаю, что кому-то кроме ещё понадобится.
и да, если использовать сокращения - то времени на то, чтобы записать под диктовку, вполне хватит, именно чтоб хватало я и пытаюсь это всё реализовать. Все возможные актёры-режиссёры и прочие звукооператоры давным-давно распознаются на слух с первых букв, пробовала вводить в экселе - если не ошибаться при вводе, то хватает. Вот если букву пропустишь - или всё до неё стирать и набирать заново, или мышь хватать, но тогда уже выход из ячейки только по энтеру и переход на следующее окошко на стрелочку больше получается.
Всё ж продумано. Реализовать только осталось, а так, оно постепенно думалось, пока в блокноте всё вводила.

Спасибо всем за ценные советы. Думаю, теперь справлюсь.


 
Германн ©   (2010-05-20 02:33) [38]


> Спасибо всем за ценные советы. Думаю, теперь справлюсь.

Бог в помощь!
:)


 
Inovet ©   (2010-05-21 00:31) [39]

> [37] Light-blr   (19.05.10 22:38)

Сдаётся мне, что со структурой базы что-то не то, если каждый раз надо вбивать фамилии. Справочников нет? Но это не по теме сабжа уже.


 
Amoeba_   (2010-05-21 18:14) [40]


> каждый раз надо вбивать фамилии. Справочников нет?
>

Фамилии из справочника? Оригинально!


 
Inovet ©   (2010-05-22 01:04) [41]

> [40] Amoeba_   (21.05.10 18:14)
> Фамилии из справочника? Оригинально!

Речь не о фамилиях как таковых, а об

> [37] Light-blr   (19.05.10 22:38)
> Все возможные актёры-режиссёры и прочие звукооператоры давным-
> давно распознаются на слух с первых букв


 
Германн ©   (2010-05-22 01:38) [42]


> Amoeba_   (21.05.10 18:14) [40]
>
>
> > каждый раз надо вбивать фамилии. Справочников нет?
> >
>
> Фамилии из справочника? Оригинально!
>

А чем фамилии такие особенные? Чем список известных фамилий с возможностью добавления в него новых отличается от, например, списка продаваемых продуктов? Причём даже не смотря на ответ
> Inovet ©   (22.05.10 01:04) [41]
.



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

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

Наверх




Память: 0.6 MB
Время: 0.087 c
2-1271319504
Б
2010-04-15 12:18
2010.08.27
Не срабатывает SetWaitableTimer.


15-1269453084
SergD
2010-03-24 20:51
2010.08.27
Экземпляр класса


2-1271803089
GalarG
2010-04-21 02:38
2010.08.27
свзь с базой в Access


2-1271436066
@!!ex
2010-04-16 20:41
2010.08.27
Где я в хуке накосячил??


15-1275889423
myusername
2010-06-07 09:43
2010.08.27
Служебная информация в exe