Форум: "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.019 c
4-90434           a-leksey              2001-11-26 11:39  2002.01.28  
Нужно на время и конкретно отключить клавиатуру и мышь


3-90241           Грифон                2001-12-22 00:59  2002.01.28  
возникла следующая проблемка:


4-90433           Alex870               2001-11-28 23:18  2002.01.28  
Привет апишники!


1-90290           Delphimun             2002-01-07 12:11  2002.01.28  
Как найти в заданном тексте, сочетания символов, которые подходят заданной схеме?


14-90363          wHammer               2001-12-03 11:09  2002.01.28  
Складской учет и Delphi