Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1148900358
abhtr
2006-05-29 14:59
2006.07.09
Непонятности с определением координат курсора в MEMO


1-1148419576
asdqwer
2006-05-24 01:26
2006.07.09
Проблема с подключением к БД в сервисе


2-1150176880
Rezya
2006-06-13 09:34
2006.07.09
DBGride


2-1150444896
redlord
2006-06-16 12:01
2006.07.09
label и его handel


6-1141205541
Владимир__
2006-03-01 12:32
2006.07.09
WebBrowser и картинки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский