Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.09;
Скачать: CL | DM;

Вниз

Ресурсы и диалоги   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.055 c
11-1129737524
thaddy
2005-10-19 19:58
2006.07.09
Worse, it is a general bug!


2-1150789701
Exile
2006-06-20 11:48
2006.07.09
может кто подскажет как решить проблему


15-1150125324
antonn
2006-06-12 19:15
2006.07.09
Помогите на англицкий перевести...


1-1148748141
Ярослав
2006-05-27 20:42
2006.07.09
Вызов MDI из DLL


15-1150036998
PZ
2006-06-11 18:43
2006.07.09
Путь по умолчанию