![]() |
| ||
|
|
Новости |
Поиск |
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-22 01:38:00) [1]
> Amoeba_ (21.05.10 18:14) [40]
>
>
> > каждый раз надо вбивать фамилии. Справочников нет?
> >
>
> Фамилии из справочника? Оригинально!
>
А чем фамилии такие особенные? Чем список известных фамилий с возможностью добавления в него новых отличается от, например, списка продаваемых продуктов? Причём даже не смотря на ответ
> Inovet © (22.05.10 01:04) [41]
.
Inovet (2010-05-22 01:04:00) [2]> [40] Amoeba_ (21.05.10 18:14)
> Фамилии из справочника? Оригинально!
Речь не о фамилиях как таковых, а об
> [37] Light-blr (19.05.10 22:38)
> Все возможные актёры-режиссёры и прочие звукооператоры давным-
> давно распознаются на слух с первых букв
Amoeba_ (2010-05-21 18:14:00) [3]
> каждый раз надо вбивать фамилии. Справочников нет?
>
Фамилии из справочника? Оригинально!
Inovet (2010-05-21 00:31:00) [4]> [37] Light-blr (19.05.10 22:38)
Сдаётся мне, что со структурой базы что-то не то, если каждый раз надо вбивать фамилии. Справочников нет? Но это не по теме сабжа уже.
Германн (2010-05-20 02:33:00) [5]
> Спасибо всем за ценные советы. Думаю, теперь справлюсь.
Бог в помощь!
:)
Light-blr (2010-05-19 22:38:00) [6]
> Leonid Troyanovsky © (17.05.10 18:32) [36]
ну как не очень много - штук 100. хватило, чтобы надоело.
а программа только для меня, не думаю, что кому-то кроме ещё понадобится.
и да, если использовать сокращения - то времени на то, чтобы записать под диктовку, вполне хватит, именно чтоб хватало я и пытаюсь это всё реализовать. Все возможные актёры-режиссёры и прочие звукооператоры давным-давно распознаются на слух с первых букв, пробовала вводить в экселе - если не ошибаться при вводе, то хватает. Вот если букву пропустишь - или всё до неё стирать и набирать заново, или мышь хватать, но тогда уже выход из ячейки только по энтеру и переход на следующее окошко на стрелочку больше получается.
Всё ж продумано. Реализовать только осталось, а так, оно постепенно думалось, пока в блокноте всё вводила.
Спасибо всем за ценные советы. Думаю, теперь справлюсь.
Leonid Troyanovsky (2010-05-17 18:32:00) [7]
> sniknik © (17.05.10 15:56) [35]
> пример чисто из интереса.
Для начала, я тоже карту нарисовал :)
Потом подумал: фигня полнейшая, честно говоря.
Вопрошающий просто не оч.много пьес ввел, ну,
или, плохо пообщался с вводящими.
--
Regards, LVT.
sniknik (2010-05-17 15:56:00) [8]> А если некоторые привыкли ...
да пофигу честно говоря... я такое использовать не собираюсь, пример чисто из интереса. а автор хочет. может передумает после, когда жалобы на неудобства посыпятся. а может наоборот станет пророком нового юзабилити...
Leonid Troyanovsky (2010-05-17 15:33:00) [9]
> 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:04:00) [10]> А в эдите табом ходить :)
а что делать? судьба такой... ;) ведь хочется же... (хотя, с учетом Игорь Шевченко © (07.05.10 22:59) [6] думаю ничего особо страшного не будет)
Leonid Troyanovsky (2010-05-17 14:56:00) [11]
> sniknik © (17.05.10 10:17) [31]
> VK_RIGHT:
А в эдите табом ходить :)
--
Regards, LVT.
sniknik (2010-05-17 10:17:00) [12]
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;
sniknik (2010-05-17 09:41:00) [13]> динамического создания ряда окошек
ну и в чем тогда проблема? 4-ре свойства добавить с "указателями" на соседние, и в у главной формы прописать в onKeyUp (включить пред просмотр ввода формой) - "если клавиша влево и у активного окошка "указатель" не нил то setfocus ему.
раз динамически, то заполнить эти свойства раз плюнуть.
> где устанавливать что-нибудь вроде майэскюэля не дадут.
sqlite встраивается в движок, FB embeded dll рядом, access стоит везде, и т.д. ...
Light-blr (2010-05-17 08:55:00) [14]
> Германн © (16.05.10 02:21) [28]
очень просто - автоматизация ввода описаний к радиоспектаклям :)
у них как правило есть автор и обязательно - название, а прочие поля (актёры, режиссёры, год записи) могут быть неизвестны и в эфире не объявляться, а могут быть и помногу за раз, потому нужна возможность динамического создания ряда окошек для ввода информации именно нужного типа. При вводе первых букв в окошко в одном расположенном на форме списке будут появляться возможные варианты, и тут ввод в окошко можно закончить вводом числа - номера элемента в текущем списке, и при переходе на соседнее окошко в предыдущем появится полная информация, а не сокращённый ввод.
Всё это я делаю для ускорения ввода - в идеале получится вообще вводить не останавливая воспроизведение, гораздо проще тыркать в клавиатуру, чем дёргать рукой к мышке.
Я понимаю, что при минимальных доработках можно было взять уже нечто готовое, пусть и не с таким интерфейсом, как хочется, но вполне работающее. Проблема осложняется тем, что ввод должен быть на двух языках, а ставить себе третий язык, помимо русского и английского, ну очень не хочется. Вечно забываешь какой за каким идёт и гадаешь что получится от нажатия альт-шифта. Во время ввода заменять введённую букву на букву другого языка для меня идеально.
В принципе, это всё несложно реализовать, главное для меня сейчас подобрать базу для использования. Хочется иметь возможность носить программу на флэшке, и запускать на нескольких компьютерах, в том числе чужих, где устанавливать что-нибудь вроде майэскюэля не дадут. Нужно чтобы это было просто несколько файликов с базой, доступ к которым имела бы моя программа при любых обстоятельствах. Пробовала создавать в ОпенОфисе, но не нашла возможности её использовать из делфи. Вот теперь думаю, что делать и на каком варианте базы остановиться. Ну очень не хочется заводить стационарную базу, но пока альтернатив не вижу... так, чтобы были таблицы и именно селекты, а не фильтры.
Германн (2010-05-16 02:21:00) [15]
> Light-blr (16.05.10 02:11) [27]
[24] +1
Типизация конечно хорошая вещь. Но не стоит её воспринимать как догму.
Но вот всё же интересно какая задача? Пока что кроме игрушек ничего в голову не приходит.
Light-blr (2010-05-16 02:11:00) [16]спасибо, окошки меня более чем устраивают. зачем предлагать заведомо проигрышные варианты, когда есть другое решение?
мне проще написать что-то своё, чем пытаться подогнать под свои нужды что-то чужое, но уже имеющееся - если мне нужно организовать ввод в окошках разного размера и типа (не только эдиты, а всё подряд в зависимости от конкретной потребности), то я нарисую динамическое формирование на форме нужных окошек, а не буду пытаться брать готовый компонент из стандартного набора и писать на него миллион обработок каждого чиха.
вообще не понимаю идеологии "где мне взять компонент который ловит льва и сажает его в клетку", в конце концов я какой-никакой а программист, и в состоянии написать для себя программу, которая будет не по принципу чем быстрее сляпать, а по принципу как удобнее в дальнейшем пользоваться.
turbouser (2010-05-16 01:18:00) [17]
> Light-blr (16.05.10 00:52) [25]
> спасибо, знакома более или менее. но он мне не подходит
> - в нём все клеточки ровные
OMFG..
ну DrawGrid возьми.. Делов то..
Light-blr (2010-05-16 00:52:00) [18]
> Плохиш © (15.05.10 23:55) [23]
спасибо, знакома более или менее. но он мне не подходит - в нём все клеточки ровные, а я хочу чтобы в каждой строке было различно заданное количество окошек, причём расположенных не абы-как, а выровненных по обоим бокам. В первой строчке, к примеру, 5 окошек помельче, под ними 3 окошка покрупнее. К каждому окошку подпись, поясняющая, что туда надо вводить. Новый ряд формируется в зависимости от ввода в предыдущем ряду. Просто такая вот программка для доступа к маленькой базе данных, со своими заморочками - но готовых решений, удовлетворивших бы потребности, не нашла, потому и пишу нечто своё. Использовать только то, что мне уже известно, совершенно неинтересно и бесперспективно. И ничему не научишься, и интерфейс программы получится "от бедности и по незнанию".
Игорь Шевченко (2010-05-15 23:59:00) [19]Light-blr (15.05.10 23:22) [21]
Так их, так их...
Плохиш (2010-05-15 23:55:00) [20]
> Light-blr (15.05.10 23:22) [21]
И всё-таки советую подробней ознакомиться с классом TStringGrid.