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

Вниз

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

 
Piter ©   (2004-05-30 16:00) [0]

Есть несколько Edit"ов на окне. Как реализовать передачу фокуса по [TAB] ?

P.S. И еще такой вопросик в оффтоп - какой стиль надо присвоить Edit"у, чтобы он стал трехмерным, как в VCL? А то у меня плоский, некрасиво выглядит...


 
Гость с юга   (2004-05-30 16:04) [1]

1. TabOrder -> 0,1,2
2. Ctrl3D = True (Default)


 
Piter ©   (2004-05-30 16:11) [2]

Нда... спасибо большое


 
Piter ©   (2004-05-30 16:11) [3]

Рекомендую посмотреть на название конференции


 
GuAV ©   (2004-05-30 16:43) [4]


> какой стиль надо присвоить Edit"у

WS_EX_CLIENTEDGE Specifies that a window has a border with a sunken edge.


 
Piter ©   (2004-05-30 16:45) [5]

GuAV (30.05.04 16:43) [4]

нет, не работает


 
GuAV ©   (2004-05-31 00:28) [6]


> Piter ©   (30.05.04 16:45) [5]
> GuAV (30.05.04 16:43) [4]
>
> нет, не работает

Работает.
юзай CreateWindowEx и шли его первым параметром.


 
Piter ©   (2004-05-31 00:32) [7]

GuAV (31.05.04 00:28) [6]

нда... тормозить не запретишь :)

А как насчет

>Есть несколько Edit"ов на окне. Как реализовать передачу фокуса по [TAB] ?


 
DVM ©   (2004-05-31 01:19) [8]


> Piter ©   (30.05.04 16:00)  
> Есть несколько Edit"ов на окне. Как реализовать передачу
> фокуса по [TAB] ?

Окно и Edit-ы созданы из ресурса или CreateWindowEx?


 
Piter ©   (2004-05-31 01:32) [9]

CreateWindowEx

А что ты подразумеваешь под
>созданы из ресурса
?


 
nikkie ©   (2004-05-31 01:35) [10]

ресурс есть такой DIALOG
и функции соответствующие - DialogBox, DialogBoxParam.


 
DVM ©   (2004-05-31 01:40) [11]


> Piter ©   (31.05.04 01:32) [9]

При программировании интерфейса на WinApi обычно не используют кучу вызовов CreateWindow() для создания диалоговых окон и контролов на них. Вместо этого шаблон окна диалога описывают в файле ресурсов и потом вызывая DialogBoxParam(), например, создают такое окно одим махом, дополнительно получая массу бонусов, например, передача фокуса и т.д.
Подробнее тут:
http://web.ict.nsc.ru/~cancel/delphi/vclfree.html/file3.html
В любом случае передача фокуса будет происходить с помощью SetFocus(). А нажатие TAB - это лишь сообщение WM_KEYDOWN.


 
nikkie ©   (2004-05-31 01:53) [12]

>DVM
>В любом случае передача фокуса будет происходить с помощью SetFocus(). А нажатие TAB - это лишь сообщение WM_KEYDOWN.


это зачем? по приведенной тобой же ссылке написано:

Преимущество такого способа создания диалоговых окон заключается в том, что Windows берет на себя обеспечение интерфейса диалоговых окон, к которому привык пользователь — кнопки по умолчанию (срабатывающия, когда пользователь нажмет <Enter> или <Esc>); возможность переключения между дочерними элементами управления при помощи клавиши <Tab> и т.п.


 
Piter ©   (2004-05-31 02:33) [13]

Что-то не получается ни фига... ресурс создал, подключил.

Вызываю так:

i:=DialogBoxParam(Instance,"DIALOG_1",Handle,@DialogProc,0);

После вызова i=-1

GetLastError дает "Не удается найти класс окна", если DialogBoxParam вообще устанавливает код ошибки...


 
nikkie ©   (2004-05-31 02:35) [14]

DialogBoxParam(Instance,MAKEINTRESOURCE(DIALOG_1),Handle,@DialogProc,0);


 
Piter ©   (2004-05-31 02:40) [15]

Piter (31.05.04 02:33) [13]
MAKEINTRESOURCE(DIALOG_1)


ну тогда уж наверное все таки

MAKEINTRESOURCE("DIALOG_1")

Все равно не работает, тоже самое. Да и вообще MAKEINTRESOURCE это ведь просто приведение к PChar"у.
А Дельфи и так к PChar"у приводит...


 
nikkie ©   (2004-05-31 02:49) [16]

>ну тогда уж наверное все таки
нет. параметром MAKEINTRESOURCE должен быть ID диалога - целое число.


 
Piter ©   (2004-05-31 03:40) [17]

nikkie (31.05.04 02:49) [16]
параметром MAKEINTRESOURCE должен быть ID диалога


а как я узнаю ID диалога? DIALOG_1 естественно неизвестная переменная для дельфи...


 
Piter ©   (2004-05-31 11:05) [18]

вот блин...


 
GuAV ©   (2004-05-31 12:23) [19]


> а как я узнаю ID диалога? DIALOG_1 естественно неизвестная
> переменная для дельфи...

В pедакотре ресурсов обзови его каким-то числом, например 1000, это и будет ID


 
Игорь Шевченко ©   (2004-05-31 12:27) [20]

Piter ©   (31.05.04 11:05)

Петцольда читать. Наизусть. Буду экзамен принимать.


 
Piter ©   (2004-05-31 17:25) [21]

Игорь Шевченко (31.05.04 12:27) [20]

а как полностью книжка называется?


 
Piter ©   (2004-05-31 17:37) [22]

GuAV (31.05.04 12:23) [19]
В pедакотре ресурсов обзови его каким-то числом, например 1000, это и будет ID


обозвал еденичкой. Вызываю:

i:=DialogBoxParam(Instance,MAKEINTRESOURCE(1),Handle,@DialogProc,0);

не пашет :(
"Указанной имя ресурса не найдено в файле образа"


 
DVM ©   (2004-05-31 18:00) [23]


> Piter ©   (31.05.04 17:37) [22]

i:=DialogBoxParam(Instance,PChar(1),Handle,@DialogProc,0);


 
DVM ©   (2004-05-31 18:13) [24]


> nikkie ©   (31.05.04 01:53) [12]
> >DVM
> >В любом случае передача фокуса будет происходить с помощью
> SetFocus(). А нажатие TAB - это лишь сообщение WM_KEYDOWN.
>
> это зачем? по приведенной тобой же ссылке написано:

А если нужно, чтобы по определенному условию фокус установился на некотором поле редактирования? Тогда надо использовать SetFocus()+ GetDlgItem().


 
Piter ©   (2004-05-31 18:31) [25]

DVM (31.05.04 18:00) [23]

ну так MAKEINTRESOURCE это и есть приведение к PChar"у!


 
DVM ©   (2004-05-31 18:48) [26]


> Piter ©   (31.05.04 18:31) [25]

В чем делал ресурс?
Ты ресурс скомпилировал?
К проекту подцепил?
Все должно работать вообще то.


 
Gero ©   (2004-05-31 18:50) [27]

Иногда с ресурсами бывает подобная фигня, попробуй закрыть проект и открыть заново.


 
Piter ©   (2004-05-31 18:51) [28]

DVM (31.05.04 18:48) [26]
В чем делал ресурс?


Resource Workshop

DVM (31.05.04 18:48) [26]
Ты ресурс скомпилировал?


да, с помощью brcc32

DVM (31.05.04 18:48) [26]
К проекту подцепил?


да

DVM (31.05.04 18:48) [26]
Все должно работать вообще то.


ан не работает


 
Piter ©   (2004-05-31 18:52) [29]

Gero (31.05.04 18:50) [27]
Иногда с ресурсами бывает подобная фигня, попробуй закрыть проект и открыть заново


да я чего только не делал


 
DVM ©   (2004-05-31 18:54) [30]


> Piter ©   (31.05.04 18:52) [29]

Нескомпилированный RC файл покажи.


 
Piter ©   (2004-05-31 18:56) [31]

Код программы такой:

program NetSend;

uses
 Windows,
 Messages,
 ns in "ns.pas";

{$R ns.res}
...


Вызов функции:

i:=DialogBoxParam(Instance,MAKEINTRESOURCE(1),Handle,@DialogProc,0);

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


 
Piter ©   (2004-05-31 18:57) [32]

DVM (31.05.04 18:54) [30]
Нескомпилированный RC файл покажи


/****************************************************************************

ns.rc

produced by Borland Resource Workshop

*****************************************************************************/

1 DIALOG 69, 52, 161, 127
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX
CLASS "MyClass"
CAPTION "Мое окно"
FONT 8, "MS Sans Serif"
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
{
}


 
DVM ©   (2004-05-31 18:57) [33]


> Piter ©   (31.05.04 18:52) [29]

Погляди по той ссылке, что я приводил, там можно скачать демо-примеры. Там и с окном из ресурса есть.


 
GuAV ©   (2004-05-31 18:58) [34]


> i:=DialogBoxParam(Instance,PChar(1),Handle,@DialogProc,0);

аж интересно стало - сам опробовал. работает.
build сделай, попробуй .res отдельный, а не project1.res


 
GuAV ©   (2004-05-31 19:01) [35]


> RC файл

зачем? создавай res-файл в res ws
{$R mydialog.res}


 
Piter ©   (2004-05-31 19:05) [36]

GuAV (31.05.04 19:01) [35]

а дельфи тогда ругается, что файл ресурсов 16 битный...


 
Piter ©   (2004-05-31 19:05) [37]

так в чем у меня ошибка? В ДНК что ли ? :)))


 
Piter ©   (2004-05-31 19:08) [38]

GuAV (31.05.04 18:58) [34]
попробуй .res отдельный, а не project1.res


конечно, отдельный!!! Кто же ресурсы в главном ресурсном файле создает...


 
DVM ©   (2004-05-31 21:02) [39]


> Piter ©   (31.05.04 19:08) [38]

давай весь код и файла ресурсов и код программы включая циклы сообщений и оконные процедуры.


 
DVM ©   (2004-05-31 21:08) [40]


> Piter ©   (31.05.04 19:08) [38]

Кстати, у тебя есть в программе хоть одно не диалоговое окно. Т.е. созданное нормально и имеющее обычного вида оконную процедуру? Должно быть (пусть даже невидимое). Можно, конечно обойтись и без него, но с ним удобнее.



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

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

Наверх




Память: 0.56 MB
Время: 0.045 c
14-1087582324
Delphi5.01
2004-06-18 22:12
2004.07.11
Vopros ne iz logkih


3-1086973843
Дэвид
2004-06-11 21:10
2004.07.11
Трехзвенная архитектура...


1-1088354677
DeepProg
2004-06-27 20:44
2004.07.11
TStringGrid OnDrawCell неверное размещение текста


1-1088003458
tria
2004-06-23 19:10
2004.07.11
Как сделать, чтобы вид окон под ХР не портился?


4-1085718626
Alibaba
2004-05-28 08:30
2004.07.11
Уважаемые мастера подскажите плиз, как в сервисе установить