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




Вниз

CreateDialog ( R ) 


YUS   (2001-11-24 06:47) [0]

Мастера, подскажите ламеру.В Dll поместил форму,хук.
Устанавливаю хук в Explorer,он должен создать окно.Procedure ShowMyForm;-устанавливает форму.При обращении к
CreateDialog выдает ошибку.Неверно установлен первый или второй
параметр ф-ции CreateDialog.Подскажите, как не присоединяя дополнительных файлов(*.res)можно использовать CreateDialog в моем случае?

function GetMsdProc(Code: Integer; wParam, lParam:Longint):Longint; stdcall;
begin
if nOk = 0 then begin
CreateDialog(hInstance,@ShowMyForm,null,@Disp)
PostThreadMessage(IdPot,WM_NULL,0,0);
inc(nOk);
end ;



Suntechnic   (2001-11-24 08:27) [1]

У тебя что, амнезия?
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1006365171&n=5



YUS   (2001-11-24 17:49) [2]

:)
Чем ругаться, подскажи лучше, как файл (*.res)подключить в DLL



Suntechnic   (2001-11-24 18:28) [3]

...а кто сказал что я ругался? Я диагноз ставил :)

>Чем ругаться, подскажи лучше, как файл (*.res)подключить в DLL
Точно так же как и к exe...



YUS   (2001-11-24 18:39) [4]

Делаю так
const
WM_IPoint = WM_USER+512;
WM_IName = WM_USER+513;
WM_OK = WM_USER+514; //окно создано
WM_ComandD = WM_USER+515; // передать координаты
IDD_DIALOG = "Dialog.res";
.
.
CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG),null,@Disp);
Выдает ошибку при создании окна.



Suntechnic   (2001-11-24 18:45) [5]

Ну и что ты понаписывал? Бред полный...

Открой ещё раз ветку
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1006365171&n=5

и перечитай всё сначала...



YUS   (2001-11-24 19:14) [6]


" Подключи в свою программу полученный RES файл. ( {$R твой_файл.res})"
В таком виде подключения файла $R DIALOG.res не работает Сделал, так как
подключал DLL к EXE .

CreateDialog(hInstance,IDD_DIALOG,null,@Disp);- так тоже ошибку выдает при создании окна. Если не трудно напиши как должно быть,в качестве исключения,
как больному амнизией. :)



Suntechnic   (2001-11-24 23:01) [7]

Блин, ну что тут непонятного?
Файл resources.rc
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
10 DIALOGEX 0, 0, 193, 74
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE |
WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_TOPMOST
CAPTION "Test Application"
FONT 8, "Helv", 0, 0
BEGIN
PUSHBUTTON "Close",IDCANCEL,134,38,52,15
LTEXT "Test:",IDC_STATIC,7,7,107,10
CONTROL 101,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE,7,68,
179,3
EDITTEXT 160,7,17,179,15,ES_AUTOHSCROLL | ES_READONLY
END

Текст программы(предварительно обработав resources.rc утилитой BRCC32.EXE):
program Project1;

{$R "resources.res" "resources.rc"}

uses
SysUtils,
Windows,
Messages;

function WndFunc(Wnd, Msg: DWord; wParam, lParam: integer): integer; stdcall;
begin
Result := 0
end;



begin { main }
DialogBox(hInstance,MAKEINTRESOURCE(10),0,@WndFunc);
// CreateDialog(hInstance,MAKEINTRESOURCE(10),0,@WndFunc);
end.

Разница в вызовах CreateDialog и DialogBox заключается в том, что в одном случае окно будет модальным а во втором нет. Тебе скорее всего надо первый случай, но тебе видней.



YUS   (2001-11-25 07:03) [8]

Suntechnic , я использовал редактор ресурсов для создания ресурса окна.Назвал его не 10 а IDD_DIALOG Сделаю как скажешь(но разници помоему нет)Созданый редактором файл назвал Dialog.res.
Вместо function WndFunc(Wnd, Msg: DWord; wParam, lParam: integer): integer; stdcall;использовал Procedure Disp(Wnd, Msg: DWord; wParam, lParam: integer); в этом наверно ошибка Заменил на функцию ошибке не выдает но и окна тоже нет. В твоем вышеописаном примере нет подключения ресурсов Может в этом причина???
{$R "resources.res" "resources.rc"}-Это же не подключение????



Suntechnic   (2001-11-25 07:34) [9]

Ты как окно создаёшь? Одно дело, что окно не создаётся, а другое, что оно не показывается. Если ты используешь CreateDialog, то ты скорее всего его просто на экране не видишь. Как я уже упоминал эту ф-ция создаёт немодальное окно. Попробуй вместо CreateDialog использовать DialogBox. Как процедура называется вообще никакого значения не имеет...

Хоть это и не в моих принципах, но если уж и после этого ничего не выйдет можешь мне намылить исходники я гляну, что у тебя там не запускается...
spam_kamashev@hotbox.ru

Только уберёшь "spam_" из мыльника, а то спамщики совсем достали...



Evgeny   (2001-11-26 10:13) [10]

{$R "resources.res"}
Данная строка как раз и является подключением ресурса. Дальше ты описал диалог как IDD_DIALOG, но этот идентификатор нигде, скорее всего, не определил. Вот тебе и ошибка. По этой причине я и предлагал использовать число. Suntechnic тебе совершенно верно все описал:
CreateDialog(hInstance, MAKEINTRESOURCE(10), 0, @WndFunc);
А вот такая запись:
IDD_DIALOG = "Dialog.res";
является полной ахинеей.

Должно быть так:

/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
10 DIALOGEX 0, 0, 193, 74

равносильно, но с описанием в дополнительном PAS файле:

/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_DIALOG DIALOGEX 0, 0, 193, 74

тогда в том PAS файле пишем так:

const
IDD_DIALOG = 10;

и этот файл обязательно подключаем в Uses.
Теперь вроде все разжевано.




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




Наверх





Память: 0.74 MB
Время: 0.041 c
7-90403           Ph.D.Kot              2001-10-11 08:56  2002.01.28  
Отправка факса через модем. Хелп.


1-90250           raiv                  2002-01-09 15:02  2002.01.28  
Где можно скачать TeeChart Pro VCL для


14-90356          limon                 2001-12-03 19:07  2002.01.28  
FW: ПОСЛЕДНИЕ СЛОВА компьютера:


1-90315           Shein                 2002-01-11 10:19  2002.01.28  
Есть проблемка с оболочкой Дельфей


1-90327           Dmitriy_R             2002-01-09 08:42  2002.01.28  
Добавить приложение без формы и чтобы доступ к ее данным был из других форм.