Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Страницы:   1 2 3

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.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо