Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Передача фокуса


Страницы:   1 2 3 4

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 файл покажи.


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо