![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ресурсы и диалоги
QwertyKz © (2006-05-25 09:16:00)Доброго времени суток.
Мне нужно прочитать строку из dll файла в ресурсах, а затем показать диалогове сообщение. Вот как делаю считываение:
var Dll:THandle;
buffer: array[0..255] of Char;
ResStream: TResourceStream;
begin
Dll := LoadLibrary('C:\WINDOWS\SYSTEM32\....);
try
ResStream := TResourceStream.CreateFromID(dll, num, PChar(RT_DIALOG));
finally
ResStream.free;
end;
FreeLibrary(handle);
end;
Так, считывает нормально, вот теперь вопрос, как мне показать диалогове окно, с контентом, который находится в ResStream?
QwertyKz (2006-05-27 14:56:00) [1]Все, разобрался.
Dll := LoadLibrary(DllPath);
DialogBox(GetModuleHandle(DllPath),MAKEINTRESOURCE(1095),0,@DlgProc);
FreeLibrary(Dll);
QwertyKz (2006-05-27 14:56:00) [2]Все, разобрался.
Dll := LoadLibrary(DllPath);
DialogBox(GetModuleHandle(DllPath),MAKEINTRESOURCE(1095),0,@DlgProc);
FreeLibrary(Dll);
QwertyKz (2006-05-27 10:10:00) [3]ResStream := TResourceStream.CreateFromID(dll, 1095, PChar(RT_DIALOG));
Как преобразовать то, что в ResStream в строку?
QwertyKz (2006-05-27 06:50:00) [4]
procedure TForm1.Button1Click(Sender: TObject);
function DlgProc(hWin: HWND; uMsg: UINT; wp: WPARAM; lp: LPARAM): bool; stdcall;
begin
Result := False;
case uMsg of
WM_INITDIALOG:;
WM_COMMAND:
begin
case LoWord(wp) of
100: EndDialog(hWin, 0);
end;
end;
WM_DESTROY, WM_CLOSE: PostQuitMessage(0);
end;
end;
var Dll:THandle;
ResStream: TResourceStream;
hDlg :THandle;
begin
Dll := LoadLibrary(DllPath);
try
ResStream := TResourceStream.CreateFromID(dll, 195, PChar(RT_DIALOG));
DialogBox(Dll, '195', 0, @DlgProc);
finally
ResStream.free;
end;
FreeLibrary(handle);
end;
Чуть переделал, все равно не работает. В чем тут ошибка?
begin...end (2006-05-27 06:32:00) [5]> QwertyKz © (27.05.06 06:18) [7]
> function PostProc(hWnd,Msg,wParam,lParam:Longint): Longint;
> stdcall;
Вообще-то диалоговая процедура должна TRUE или FALSE возвращать.
> Result:=DefWindowProc(hWnd,Msg,wParam,lParam);
Это зачем?
> if(IsDialogMessage(hDlg,Msg)) then
> begin
> while(GetMessage(Msg,0,0,0))do
> begin
> TranslateMessage(Msg);
> DispatchMessage(Msg);
> end;
> end;
Оригинально.
Читать: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/dialogboxes/usingdialogboxes.asp
QwertyKz (2006-05-27 06:18:00) [6]Вот, в чем тут ошибка? При нажатии ничего не появляется.
procedure TForm1.Button1Click(Sender: TObject);
function PostProc(hWnd,Msg,wParam,lParam:Longint):Longint; stdcall;
begin
Result:=DefWindowProc(hWnd,Msg,wParam,lParam);
case Msg of
WM_INITDIALOG: ;
WM_DESTROY: ExitProcess(HInstance);
end;
end;
var Dll:THandle;
ResStream: TResourceStream;
hDlg :THandle;
begin
Dll := LoadLibrary(DllPath);
try
ResStream := TResourceStream.CreateFromID(dll, 195, PChar(RT_DIALOG));
InitCommonControls();
hDlg := CreateDialog(dll,'195',0,@PostProc);
if(IsDialogMessage(hDlg,Msg)) then
begin
while(GetMessage(Msg,0,0,0))do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;
finally
ResStream.free;
end;
FreeLibrary(handle);
end;
QwertyKz (2006-05-27 03:05:00) [7]
procedure TForm1.Button1Click(Sender: TObject);
function DlgProc(hDlg, uMsg, wParam, lParam: Integer): Integer; stdcall;
begin
While GetMessage(Mesg,0,0,0) do
begin
if IsDialogMessage(hDlg,Mesg) then continue;
TranslateMessage(Mesg);
DispatchMessage(Mesg);
end;
end;
var Dll:THandle;
ResStream: TResourceStream;
buffer : array [1..$80] of byte;
begin
Dll := LoadLibrary(DLLPATH);
try
ResStream := TResourceStream.CreateFromID(dll, 1095, PChar(RT_DIALOG));
DialogBoxParam(dll,'195',Form1.handle,@DlgProc,0);
finally
ResStream.free;
end;
FreeLibrary(handle);
end;
Делаю так, в чем ошибка?
Сергей М. (2006-05-26 08:05:00) [8]Сообщения, адресованные создаваемому тобой диал.окну
QwertyKz (2006-05-26 06:52:00) [9]CreateDialog(DLL,num,0,@PostProc); - @PostProc что должен обрабатывать?
Сергей М. (2006-05-25 10:25:00) [10]
> С помощью CreateDialog можно сделать?
Можно, но тогда явная загрузка диал.ресурса не нужна.
http://xatka.vov.ru/cgi-bin/read.pl?chapter=rartic&query=13&file=artic8.txt
QwertyKz (2006-05-25 10:11:00) [11]С помощью CreateDialog можно сделать?
Может примеры кто подкинет
Сергей М. (2006-05-25 09:29:00) [12]см. CreateDialogIndirect[Param]