Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.035 c
4-1086168939
panov
2004-06-02 13:35
2004.07.11
HDC, использование в OnPaint


1-1088149552
Maks Realov
2004-06-25 11:45
2004.07.11
Ещё один вопрос про ScanLine


1-1088595153
Wadim
2004-06-30 15:32
2004.07.11
Приближение просмотра картинки в программе


14-1088146776
Nikolay M.
2004-06-25 10:59
2004.07.11
А из Твери есть кто?


4-1085663755
sesh
2004-05-27 17:15
2004.07.11
запуск программы как сервиса





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский