Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ресурсы и диалоги


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]


Наверх

Титульная страница Поиск, карта сайта Написать письмо