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

Вниз

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

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


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

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


 
Piter ©   (2004-05-31 21:47) [41]

Файл с ресурсами я привел...
Код весь я привести не могу, программа не такая и маленькая, буду вырезать ненужные части:

program NetSend;

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

{$R ns.res}

var
 Instance, Handle: HWND;
 EditSource, EditDestination, EditText, Button: HWND ;
 msg: TMsg;
 WindowClass: TWNDClass;
 Width, Height: integer;
 nHeight, nWidth: integer;
 i:integer;

procedure ExitProgram;
begin
 Halt;
end;

function DialogProc(hWnd: THandle; Msg: Integer; wParam, lParam : Integer): Bool; stdcall;
begin
beep(500,500);
end;

function WndProc(Hwn,msg,wpr,lpr:HWND):longint;stdcall;
begin
 if msg=wm_destroy then ExitProgram;
 result:=defwindowproc(hwn,msg,wpr,lpr);
end;

BEGIN

instance:=GetModuleHandle(nil);

Windowclass.style:=CS_HRedraw or CS_VRedraw;
WindowClass.lpfnWndProc :=  @WndProc;
WindowClass.hInstance :=instance;
Windowclass.hbrBackground:=COLOR_BACKGROUND;
WindowClass.lpszClassName:= "NetSend";
Windowclass.hCursor :=LoadCursor(0,IDC_ARROW);
RegisterClass(WindowClass);

Width:= 300;
Height := 180;

nWidth:=(GetSystemMetrics(SM_CXSCREEN) div 2)-(Width div 2);
nHeight:=(GetSystemMetrics(SM_CYSCREEN) div 2)-(Height div 2);

Handle:=CreateWindowEx(0,WindowClass.lpszClassName,PChar("NetSend"),WS_SYSMENU or WS_MINIMIZEBOX, nWidth,nHeight,Width,Height,0,0,WindowClass.hInstance,nil);

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

while (GetMessage(msg,0,0,0)) do
 begin
   translatemessage(msg);
   dispatchmessage(msg);
 end;

END.


 
nikkie ©   (2004-05-31 23:05) [42]

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

тогда причем здесь TAB и WM_KEYDOWN?

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

Можно, конечно обойтись и без него, но с ним удобнее.
чем же это удобнее?

>Piter
Код весь я привести не могу, программа не такая и маленькая, буду вырезать ненужные части:

можешь все сразу выкидывать. оставь вызов DialogBoxParam и DialogProc. в DialogProc поставь
Result := False;
все остальное для диалогового приложения не нужно.


 
Piter ©   (2004-05-31 23:32) [43]

nikkie (31.05.04 23:05) [42]

да код я уже выложи более часа назал до твоего поста :)


 
nikkie ©   (2004-05-31 23:47) [44]

>да код я уже выложи более часа назал до твоего поста :)
я твой пост видел. потрудись и ты мой прочитать.


 
Piter ©   (2004-05-31 23:54) [45]

nikkie (31.05.04 23:47) [44]
потрудись и ты мой прочитать


слушай, а я твой тоже прочитал... с чего ты решил, что я его не читал?

nikkie (31.05.04 23:05) [42]
оставь вызов DialogBoxParam


оставил

nikkie (31.05.04 23:05) [42]
и DialogProc


оставил

nikkie (31.05.04 23:05) [42]
в DialogProc поставь
Result := False;


а зачем? Все равно DialogProc НИ РАЗУ не вызывается.
DialogBoxParam возвращает -1


 
nikkie ©   (2004-06-01 00:20) [46]

program Project2;

uses Messages, SysUtils, Windows;

{$R ns.res}

function DialogProc(hWnd: THandle; Msg: Integer; wParam, lParam : Integer): Bool; stdcall;
begin
 case Msg of
 WM_COMMAND:
   case LoWord(wParam) of
   IDOK:
     EndDialog(hWnd, 1);
   IDCANCEL:
     EndDialog(hWnd, 0);
   end;
 end;
 Result := False;
end;

begin
 DialogBoxParam(HInstance, MAKEINTRESOURCE(1), 0, @DialogProc, 0)
end.


 
nikkie ©   (2004-06-01 00:21) [47]

1 DIALOG DISCARDABLE  0, 0, 194, 79
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Believe me that is easy"
FONT 8, "MS Sans Serif"
BEGIN
   DEFPUSHBUTTON   "OK",IDOK,136,7,50,14
   PUSHBUTTON      "Cancel",IDCANCEL,136,24,50,14
END


 
Piter ©   (2004-06-01 00:28) [48]

nikkie (01.06.04 00:21) [47]
PUSHBUTTON &ogProc, 0)


ругается на это


 
DVM ©   (2004-06-01 00:28) [49]

Убери из файла ресурса  название класса окна. Строка с указанием класса окна нужна только если для диалога будет использоваться своя настоящая оконная процедура.


 
Piter ©   (2004-06-01 00:29) [50]

nikkie (01.06.04 00:21) [47]

и вообще, к чему ты это привел?

DialogProc у меня все равно не вызывается пока...

а ресурс твой не открывается... свой ресурс я уже приводил...


 
Piter ©   (2004-06-01 00:33) [51]

DVM (01.06.04 00:28) [49]

блин... заработало :)


 
Piter ©   (2004-06-01 00:35) [52]

DVM (01.06.04 00:28) [49]

только заголовк формы кракозябрами


 
nikkie ©   (2004-06-01 00:40) [53]

>и вообще, к чему ты это привел?
все. я сдаюсь.


 
DVM ©   (2004-06-01 00:42) [54]

>только заголовк формы кракозябрами
выкинь из файла ресурсов все что после шрифта.


 
Piter ©   (2004-06-01 01:02) [55]

nikkie (01.06.04 00:40) [53]
все. я сдаюсь.


ну я понимаю, что считаешь меня тупым и не было бы по фигу, если бы это был не ты. Но так как это ты, то попытаюсь оправдаться:

ты привел код DialogProc - спасибо, конечно. Но на кой он мне нужен был, если он все равно не вызывается?

еще ты привел файл своих ресурсов, как я понял. Но я тебе уже сказал, что они у меня не открываются... в чем я не прав?

DVM (01.06.04 00:42) [54]

это правильный путь? Может, в RW надо что настроить? А то так каждый раз выкидывать...
Кстати, а какая у вас версия этого воркшопа? У меня 4.5, чуть ли не 1994 года, хотя это очень странно...


 
nikkie ©   (2004-06-01 01:15) [56]

ты привел код DialogProc - спасибо, конечно. Но на кой он мне нужен был, если он все равно не вызывается?
я привел не код функции, а полностью работоспособную программу - dpr и rc файлы. привел ее потому, что ты проигнорировал мои слова о том, что у тебя осталась еще уйма кода, ненужного для диалогового приложения.

Но я тебе уже сказал, что они у меня не открываются... в чем я не прав?
не надо пытаться ресурс левыми программами открывать. brcc32 ns.rc - из предыдущего разговора мне казалось, что ты умеешь ресурсы компилировать.

У меня 4.5, чуть ли не 1994 года
видимо 16-bit и сохраняет русский текст в дос-кодировке? не пробовал в текстовом редакторе rc открыть?


 
DVM ©   (2004-06-01 01:37) [57]

>Кстати, а какая у вас версия этого воркшопа?

BC++5.0
он там встроенный
и еще MS VC6 - этот получше будет.
А свой редактор выкинь - больно старый.


 
DVM ©   (2004-06-01 02:14) [58]

>nikkie
>тогда причем здесь TAB и WM_KEYDOWN?
как я уже сказал передача фокуса в диалоговом окне происходит функцией SetFocus(), которую вызываетдефолтовая настоящая оконная процедура диалога, скрытая в недрах Windows по приходу WM_KEYDOWN с клавишей TAB.
Т.е как ни крути - одно и то же.

>чем же это удобнее?

Обычная практика так делать. Тот же Петзольд так делает в книге.


 
nikkie ©   (2004-06-01 02:48) [59]

>скрытая в недрах Windows
ок. просто изначальная формулировка могла наводить на мысль, что SetFocus нужно будет вызывать руками.

>Обычная практика так делать
я так не делаю. пример диалогового приложения я привел выше - код простейший, зачем лишнее окно создавать непонятно.


 
nikkie ©   (2004-06-01 03:21) [60]

по поводу Петцольда - посмотри пример /chap12/ctlmacro.c


 
Игорь Шевченко ©   (2004-06-01 11:47) [61]

Книга Петцольда называется, как ни странно, "Программирование для Windows"


 
Piter ©   (2004-06-01 18:30) [62]

nikkie (01.06.04 01:15) [56]
не надо пытаться ресурс левыми программами открывать


Resource Workshop очень левая программа?
Так какая ее последняя версия?

Игорь Шевченко (01.06.04 11:47) [61]
Книга Петцольда называется, как ни странно, "Программирование для Windows"


примеры на VC?


 
Gero ©   (2004-06-01 21:56) [63]


> Книга Петцольда называется, как ни странно, "Программирование
> для Windows"

Немного оффтопа.
Вот интересно, существуют ли в природе нормальные книги по программированию с примерами на Delphi?


 
DVM ©   (2004-06-01 23:43) [64]

Какая разница какой язык - все равно все программирование сводится к вызовам одних и тех же функций winapi.


 
Gero ©   (2004-06-01 23:52) [65]


> DVM ©   (01.06.04 23:43)

Ты конечно прав, но можешь ли ты ответить на мой вопрос?


 
DVM ©   (2004-06-02 00:08) [66]

Чтобы исключительно WinApi и Delphi я не встречал. Специфика Delphi вероятно. Среда быстрой разработки однако.


 
Gero ©   (2004-06-02 00:14) [67]


> Среда быстрой разработки однако.

Ага, батонов на форму накидал и делов-то.


 
Игорь Шевченко ©   (2004-06-02 00:35) [68]


> Вот интересно, существуют ли в природе нормальные книги
> по программированию с примерами на Delphi?


Тейксейра и Пачеко.
Бакнелл.

#ifdef FLAME

Люди, вам лень книжку купить и заглянуть в нее ? Ладно, купить, но поискать по инету, скачать и ПРОЧИТАТЬ!
Получается какое-то несправедливое расслоение - кто-то книжки покупает(скачивает) читает, а кто-то считает, что теперь прочитавшие ему на блюдце должны выкладывать готовые рецепты, так как они ни с языком другим не могут примеры разобрать, ни еще чего. Почему за них должен делать добрый дядя ?

#endif


 
Gero ©   (2004-06-02 00:49) [69]


Игорь Шевченко ©   (02.06.04 00:35)
> а кто-то считает, что теперь прочитавшие ему на блюдце должны
> выкладывать готовые рецепты, так как они ни с языком другим
> не могут примеры разобрать

Как я понял, мне это тоже адресуется.
А кто говорит, что "с языком другим не может примеры разобрать"?
Если я спросил, существуют ли в природе нормальные книги по программированию с примерами на Delphi, это значит что я на си не в состоянии разобрать пример или как??



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

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

Наверх





Память: 0.59 MB
Время: 0.032 c
14-1088073999
Gashek
2004-06-24 14:46
2004.07.11
Сервер-сокет


14-1087782551
Думкин
2004-06-21 05:49
2004.07.11
С днем рождения! 21 июня


6-1084424963
Владимир_М
2004-05-13 09:09
2004.07.11
Структура пакетов для обмена с Borland Socket Server


14-1087584156
Yegorchic
2004-06-18 22:42
2004.07.11
HTML. Меню...


4-1085918281
Ivolg
2004-05-30 15:58
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский