![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передача фокуса
Piter © (2004-05-30 16:00:00)Есть несколько Edit'ов на окне. Как реализовать передачу фокуса по [TAB] ?
P.S. И еще такой вопросик в оффтоп - какой стиль надо присвоить Edit'у, чтобы он стал трехмерным, как в VCL? А то у меня плоский, некрасиво выглядит...
DVM (2004-06-01 00:28:00) [21]Убери из файла ресурса название класса окна. Строка с указанием класса окна нужна только если для диалога будет использоваться своя настоящая оконная процедура.
Piter (2004-06-01 00:28:00) [22]nikkie (01.06.04 00:21) [47]
PUSHBUTTON &ogProc, 0)
ругается на это
nikkie (2004-06-01 00:21:00) [23]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
nikkie (2004-06-01 00:20:00) [24]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.
Piter (2004-05-31 23:54:00) [25]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-05-31 23:47:00) [26]>да код я уже выложи более часа назал до твоего поста :)
я твой пост видел. потрудись и ты мой прочитать.
Piter (2004-05-31 23:32:00) [27]nikkie (31.05.04 23:05) [42]
да код я уже выложи более часа назал до твоего поста :)
nikkie (2004-05-31 23:05:00) [28]>DVM
А если нужно, чтобы по определенному условию фокус установился на некотором поле редактирования? Тогда надо использовать SetFocus()+ GetDlgItem().
тогда причем здесь TAB и WM_KEYDOWN?
Кстати, у тебя есть в программе хоть одно не диалоговое окно. Т.е. созданное нормально и имеющее обычного вида оконную процедуру? Должно быть (пусть даже невидимое).
абсолютно не должно.
Можно, конечно обойтись и без него, но с ним удобнее.
чем же это удобнее?
>Piter
Код весь я привести не могу, программа не такая и маленькая, буду вырезать ненужные части:
можешь все сразу выкидывать. оставь вызов DialogBoxParam и DialogProc. в DialogProc поставь
Result := False;
все остальное для диалогового приложения не нужно.
Piter (2004-05-31 21:47:00) [29]Файл с ресурсами я привел...
Код весь я привести не могу, программа не такая и маленькая, буду вырезать ненужные части:
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.
DVM (2004-05-31 21:08:00) [30]
> Piter © (31.05.04 19:08) [38]
Кстати, у тебя есть в программе хоть одно не диалоговое окно. Т.е. созданное нормально и имеющее обычного вида оконную процедуру? Должно быть (пусть даже невидимое). Можно, конечно обойтись и без него, но с ним удобнее.
DVM (2004-05-31 21:02:00) [31]
> Piter © (31.05.04 19:08) [38]
давай весь код и файла ресурсов и код программы включая циклы сообщений и оконные процедуры.
Piter (2004-05-31 19:08:00) [32]GuAV (31.05.04 18:58) [34]
попробуй .res отдельный, а не project1.res
конечно, отдельный!!! Кто же ресурсы в главном ресурсном файле создает...
Piter (2004-05-31 19:05:00) [33]так в чем у меня ошибка? В ДНК что ли ? :)))
Piter (2004-05-31 19:05:00) [34]GuAV (31.05.04 19:01) [35]
а дельфи тогда ругается, что файл ресурсов 16 битный...
GuAV (2004-05-31 19:01:00) [35]
> RC файл
зачем? создавай res-файл в res ws
{$R mydialog.res}
GuAV (2004-05-31 18:58:00) [36]
> i:=DialogBoxParam(Instance,PChar(1),Handle,@DialogProc,0);
аж интересно стало - сам опробовал. работает.
build сделай, попробуй .res отдельный, а не project1.res
DVM (2004-05-31 18:57:00) [37]
> Piter © (31.05.04 18:52) [29]
Погляди по той ссылке, что я приводил, там можно скачать демо-примеры. Там и с окном из ресурса есть.
Piter (2004-05-31 18:57:00) [38]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
{
}
Piter (2004-05-31 18:56:00) [39]Код программы такой:
program NetSend;
uses
Windows,
Messages,
ns in 'ns.pas';
{$R ns.res}
...
Вызов функции:
i:=DialogBoxParam(Instance,MAKEINTRESOURCE(1),Handle,@DialogProc,0);
Кстати, теперь ошибку пишет "Не удается найти класс окна". Уже не ругается, что не может найти в образе ресурс
DVM (2004-05-31 18:54:00) [40]
> Piter © (31.05.04 18:52) [29]
Нескомпилированный RC файл покажи.