Сейчас на форуме: asfa, bartolomeo, hgdagon (+6 невидимых)

 eXeL@B —› Программирование —› Создание диалога
Посл.ответ Сообщение

Ранг: 13.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 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.010
Статус: Участник

Создано: 26 мая 2006 06:36
· Личное сообщение · #2

PS: Delphi



Ранг: 34.9 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 26 мая 2006 06:44
· Личное сообщение · #3

Iz TResourceStream vryad li poluchitsya, ispolsui chisto API(MSDN tebe pomoget)



Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 26 мая 2006 10:42
· Личное сообщение · #4

DialogBoxParam тут как раз подойдёт

нечто вроде:
DialogBoxParam(GetModuleHandle("ю.юю"),195,NULL,_dialogproc,NULL);



Ранг: 213.5 (наставник)
Активность: 0.120
Статус: Участник
забанен

Создано: 26 мая 2006 11:44
· Личное сообщение · #5

Да и такое подойдет, если фокус между диалогом и главным окном меняться должен.

CreateDialogParam (hInstance dll, в которой лежит диалог),(ID диалога),(привязка к главному окну hWindowParent или NULL, если автономно должно работать) ,_dialogproc,NULL

-----
ЗЫ: истЕна где-то рядом, Welcome@Google.com




Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 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.010
Статус: Участник

Создано: 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.030
Статус: Участник

Создано: 27 мая 2006 06:52
· Личное сообщение · #8

Kakaya oshibka? Chto compilyator pishet?



Ранг: 13.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 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.010
Статус: Участник

Создано: 27 мая 2006 06:57
· Личное сообщение · #10

Есть DLLка, так вот мне нужно показать диалогове окно, используя ресурвы из данной DLL'ки, номер ресурса 195



Ранг: 34.9 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 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.030
Статус: Участник

Создано: 27 мая 2006 07:54 · Поправил: back_analys
· Личное сообщение · #12

(DOUBLE)



Ранг: 13.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 27 мая 2006 08:10
· Личное сообщение · #13

Dll := LoadLibrary(DllPath);
DialogBox(Dll, '195', 0, @DlgProc);
Не работает, дело не в try .. finally
ID диалога указан верно, т.к. смотрел при помощи Restoratora, номер 195 )



Ранг: 13.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 27 мая 2006 08:23
· Личное сообщение · #14

Dll := LoadLibrary(DllPath);
DialogBox(Dll, '195', 0, @DlgProc);
Может тут ошибка?



Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 27 мая 2006 12:01
· Личное сообщение · #15

может так стоит попробовать всё таки

Dll := LoadLibrary(DllPath);
DialogBox(GetModuleHandle("ю.юю"),195,0,@DlgProc);
FreeLibrary(DllPath);



Ранг: 13.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 27 мая 2006 12:23
· Личное сообщение · #16

Все равно не работает



Ранг: 34.9 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 27 мая 2006 13:54
· Личное сообщение · #17

Проверь, библиотека вообще грузится(Dll<>0), потом попробуй указать не номер диалога а его имя... Если не выйдет, выпей йаду



Ранг: 34.9 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 27 мая 2006 13:56 · Поправил: back_analys
· Личное сообщение · #18

(DOUBLE)



Ранг: 13.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 27 мая 2006 14:53
· Личное сообщение · #19

Все разобрался

Dll := LoadLibrary(DllPath);
DialogBox(GetModuleHandle(DllPath),MAKEINTRESOURCE(1095),0,@DlgProc);
FreeLibrary(Dll);



Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 27 мая 2006 23:23
· Личное сообщение · #20

надо же... msdn приобрети


 eXeL@B —› Программирование —› Создание диалога
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати