Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизПереход стрелочками между окошками Найти похожие ветки
← →
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]
> каждый раз надо вбивать фамилии. Справочников нет?
>
Фамилии из справочника? Оригинально!
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.58 MB
Время: 0.063 c