Посл.ответ |
Сообщение |
Ранг: 13.7 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 26 мая 2006 06:21 · Личное сообщение · #1
Доброго времени суток.
Считываю из некой DLL'ки ресурс диалога. Тпереь встает вопрос, что нужно показать диалогове окно, как это можно реализовать? CreateDialog? Желательно пример подкиньте. Буду очень благодарен.
var Dll:THandle;
ResStream: TResourceStream;
begin
Dll := LoadLibrary(ю.юю);
try
ResStream := TResourceStream.CreateFromID(dll, 195, PChar(RT_DIALOG));
Вот, а как теперь показать диалоговое окно используя данные из ResStream?
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
| Сообщение посчитали полезным: |
|
Ранг: 13.7 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 26 мая 2006 06:36 · Личное сообщение · #2
PS: Delphi
| Сообщение посчитали полезным: |
Ранг: 34.9 (посетитель) Активность: 0.03↘0 Статус: Участник
|
Создано: 26 мая 2006 06:44 · Личное сообщение · #3
Iz TResourceStream vryad li poluchitsya, ispolsui chisto API(MSDN tebe pomoget)
| Сообщение посчитали полезным: |
Ранг: 516.1 (!), 39thx Активность: 0.28↘0 Статус: Участник
|
Создано: 26 мая 2006 10:42 · Личное сообщение · #4
DialogBoxParam тут как раз подойдёт
нечто вроде:
DialogBoxParam(GetModuleHandle("ю.юю"),195,NULL,_dialogproc,NULL);
| Сообщение посчитали полезным: |
Ранг: 213.5 (наставник) Активность: 0.12↘0 Статус: Участник забанен
|
Создано: 26 мая 2006 11:44 · Личное сообщение · #5
Да и такое подойдет, если фокус между диалогом и главным окном меняться должен.
CreateDialogParam (hInstance dll, в которой лежит диалог),(ID диалога),(привязка к главному окну hWindowParent или NULL, если автономно должно работать) ,_dialogproc,NULL
----- ЗЫ: истЕна где-то рядом, Welcome@Google.com | Сообщение посчитали полезным: |
Ранг: 450.1 (мудрец) Активность: 0.26↘0 Статус: Участник
|
Создано: 26 мая 2006 13:05 · Личное сообщение · #6
program Dialog;
uses
Windows, Messages;
const
IDD_DIALOG_1 = 200;
IDC_EDIT1 = 103;
IDC_EDIT2 = 104;
MAINICON = 400;
var
buffer : array [1..$80] of byte;
function DlgProc(hDlg, uMsg, wParam, lParam: Integer): Integer; stdcall;
begin
Result := 1;
CASE uMsg OF
WM_INITDIALOG :
begin
SendMessage(hDlg, WM_SETICON, ICON_BIG,
LoadIcon(hInstance, PChar(MAINICON)));
SendMessage(hDlg, WM_SETICON, ICON_SMALL,
LoadImage(hInstance, PChar(MAINICON), IMAGE_ICON, 16, 16, 0));
end;
WM_COMMAND :
begin
if (LOWORD(wParam) = IDC_EDIT1) and (HIWORD(wParam) = EN_CHANGE) then
begin
GetDlgItemText(hDlg, IDC_EDIT1, ADDR(buffer), SizeOf(buffer));
SetDlgItemText(hDlg, IDC_EDIT2, ADDR(buffer));
end
else
Result := 0;
end;
WM_CLOSE : EndDialog(hDlg, 0);
ELSE
Result := 0;
end; {CASE}
end;
{$R KeyGen.res}
begin
DialogBoxParam(hInstance, PChar(IDD_DIALOG_1), 0, @DlgProc, 0);
end.
| Сообщение посчитали полезным: |
Ранг: 13.7 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 27 мая 2006 01:37 · Личное сообщение · #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;
В чем ошибка?
| Сообщение посчитали полезным: |
Ранг: 34.9 (посетитель) Активность: 0.03↘0 Статус: Участник
|
Создано: 27 мая 2006 06:52 · Личное сообщение · #8
Kakaya oshibka? Chto compilyator pishet?
| Сообщение посчитали полезным: |
Ранг: 13.7 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 27 мая 2006 06:54 · Личное сообщение · #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;
| Сообщение посчитали полезным: |
Ранг: 13.7 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 27 мая 2006 06:57 · Личное сообщение · #10
Есть DLLка, так вот мне нужно показать диалогове окно, используя ресурвы из данной DLL'ки, номер ресурса 195
| Сообщение посчитали полезным: |
Ранг: 34.9 (посетитель) Активность: 0.03↘0 Статус: Участник
|
Создано: 27 мая 2006 07:52 · Личное сообщение · #11
Zachem tebe TResourceStream? Uberi ego i blok try...finally, vozmogno zarabotaet Eshe moget byt nepravilno ukazal ID dialoga, poprobui v hex.
| Сообщение посчитали полезным: |
Ранг: 34.9 (посетитель) Активность: 0.03↘0 Статус: Участник
|
Создано: 27 мая 2006 07:54 · Поправил: back_analys · Личное сообщение · #12
(DOUBLE)
| Сообщение посчитали полезным: |
Ранг: 13.7 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 27 мая 2006 08:10 · Личное сообщение · #13
Dll := LoadLibrary(DllPath);
DialogBox(Dll, '195', 0, @DlgProc);
Не работает, дело не в try .. finally
ID диалога указан верно, т.к. смотрел при помощи Restoratora, номер 195 )
| Сообщение посчитали полезным: |
Ранг: 13.7 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 27 мая 2006 08:23 · Личное сообщение · #14
Dll := LoadLibrary(DllPath);
DialogBox( Dll, '195', 0, @DlgProc);
Может тут ошибка?
| Сообщение посчитали полезным: |
Ранг: 516.1 (!), 39thx Активность: 0.28↘0 Статус: Участник
|
Создано: 27 мая 2006 12:01 · Личное сообщение · #15
может так стоит попробовать всё таки
Dll := LoadLibrary(DllPath);
DialogBox(GetModuleHandle("ю.юю"),195,0,@DlgProc);
FreeLibrary(DllPath);
| Сообщение посчитали полезным: |
Ранг: 13.7 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 27 мая 2006 12:23 · Личное сообщение · #16
Все равно не работает
| Сообщение посчитали полезным: |
Ранг: 34.9 (посетитель) Активность: 0.03↘0 Статус: Участник
|
Создано: 27 мая 2006 13:54 · Личное сообщение · #17
Проверь, библиотека вообще грузится(Dll<>0), потом попробуй указать не номер диалога а его имя... Если не выйдет, выпей йаду
| Сообщение посчитали полезным: |
Ранг: 34.9 (посетитель) Активность: 0.03↘0 Статус: Участник
|
Создано: 27 мая 2006 13:56 · Поправил: back_analys · Личное сообщение · #18
(DOUBLE)
| Сообщение посчитали полезным: |
Ранг: 13.7 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 27 мая 2006 14:53 · Личное сообщение · #19
Все разобрался
Dll := LoadLibrary(DllPath);
DialogBox(GetModuleHandle(DllPath),MAKEINTRESOURCE(1095),0,@DlgProc);
FreeLibrary(Dll);
| Сообщение посчитали полезным: |
Ранг: 516.1 (!), 39thx Активность: 0.28↘0 Статус: Участник
|
Создано: 27 мая 2006 23:23 · Личное сообщение · #20
надо же... msdn приобрети
| Сообщение посчитали полезным: |