Форум: "Основная";
Текущий архив: 2006.07.09;
Скачать: [xml.tar.bz2];
ВнизРесурсы и диалоги Найти похожие ветки
← →
QwertyKz © (2006-05-25 09:16) [0]Доброго времени суток.
Мне нужно прочитать строку из 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?
← →
Сергей М. © (2006-05-25 09:29) [1]см. CreateDialogIndirect[Param]
← →
QwertyKz © (2006-05-25 10:11) [2]С помощью CreateDialog можно сделать?
Может примеры кто подкинет
← →
Сергей М. © (2006-05-25 10:25) [3]
> С помощью CreateDialog можно сделать?
Можно, но тогда явная загрузка диал.ресурса не нужна.
http://xatka.vov.ru/cgi-bin/read.pl?chapter=rartic&query=13&file=artic8.txt
← →
QwertyKz © (2006-05-26 06:52) [4]CreateDialog(DLL,num,0,@PostProc); - @PostProc что должен обрабатывать?
← →
Сергей М. © (2006-05-26 08:05) [5]Сообщения, адресованные создаваемому тобой диал.окну
← →
QwertyKz © (2006-05-27 03:05) [6]
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;
Делаю так, в чем ошибка?
← →
QwertyKz © (2006-05-27 06:18) [7]Вот, в чем тут ошибка? При нажатии ничего не появляется.
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;
← →
begin...end © (2006-05-27 06:32) [8]> 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:50) [9]
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;
Чуть переделал, все равно не работает. В чем тут ошибка?
← →
QwertyKz © (2006-05-27 10:10) [10]ResStream := TResourceStream.CreateFromID(dll, 1095, PChar(RT_DIALOG));
Как преобразовать то, что в ResStream в строку?
← →
QwertyKz © (2006-05-27 14:56) [11]Все, разобрался.
Dll := LoadLibrary(DllPath);
DialogBox(GetModuleHandle(DllPath),MAKEINTRESOURCE(1095),0,@DlgProc);
FreeLibrary(Dll);
← →
QwertyKz © (2006-05-27 14:56) [12]Все, разобрался.
Dll := LoadLibrary(DllPath);
DialogBox(GetModuleHandle(DllPath),MAKEINTRESOURCE(1095),0,@DlgProc);
FreeLibrary(Dll);
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.07.09;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c