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

Вниз

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

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

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

Наверх




Память: 0.61 MB
Время: 0.04 c
8-1082698200
D. Andrew
2004-04-23 09:30
2004.07.11
Как вырезать звуковой фрагмент из WAV потока?


6-1084770253
Graf
2004-05-17 09:04
2004.07.11
Работа TCP под ДОС


14-1087569243
cf
2004-06-18 18:34
2004.07.11
;)


14-1087754325
Knight
2004-06-20 21:58
2004.07.11
Путь Мастера...


4-1085655974
mmn
2004-05-27 15:06
2004.07.11
Проблема обхода реестра Windows (TRegistry).