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

Вниз

Криво работает окно в dll при вызове из VCL exe   Найти похожие ветки 

 
Polevi ©   (2006-05-23 09:43) [40]

нефиг сук пилить на котором сидишь


 
Leonid Troyanovsky ©   (2006-05-23 18:57) [41]


> parovoZZ ©   (23.05.06 09:22) [39]

> Ну ладно, обсуждение плавно перешло в перебранку.


Вот скажи, нах мне браниться с совершенно незнакомым человеком? Допустим, мой тон может быть резок, но, позволь, я ж не могу
позволить гордить всякую чушь совершенно безапелляционно.

Если, конечно, мыслительные мышцы атрофированы, то я - пас.

Т.е., пожалуйте-с, по существу, бо домысливать что-либо
в конце рабочего дня мне влом.

--
Regards, LVT.


 
parovoZZ ©   (2006-05-28 23:38) [42]

Ну вообщем отказался от сообщений из dll. Сделал так:
library OJDialog;

uses
 Messages,
 Windows;

const
OK_Button = 101;
Cancel_Button = 102;
Login_Edit = 103;
Password_Edit = 104;

var
MainHandle,
 DlgHandle, _DlgHandle   : THandle;
_result      : byte;
edLogin, edPassword : ShortString;

{$R Login.Res}

procedure GetInfo (Handle : THandle);
var
Text : array [0..20] of Char;

begin
GetDlgItemText (Handle, Login_Edit, Text, 20);
edLogin := Text;
GetDlgItemText (Handle, Password_Edit, Text, 20);
edPassword := Text;
end;

procedure Centering (Handle : THandle);
var
Rect              : TRect;
iWidth, iHeight   : word;

begin
GetWindowRect (Handle, Rect);
iWidth := Rect.right - Rect.left;
iHeight := Rect.bottom - Rect.top; //öåíòðîâêà äèàëîãà
Rect.left := (GetSystemMetrics (SM_CXSCREEN) - iWidth) Div 2;
Rect.top := (GetSystemMetrics (SM_CYSCREEN) - iHeight) Div 2;
MoveWindow (Handle, Rect.left, Rect.top, iWidth, iHeight, False);
SetForegroundWindow (Handle);
end;

function ConnectShowProc (DlgHandle: THandle; Msg, wParam, lParam: Integer) : boolean; stdcall;
begin
result := WordBool (0);

case Msg of

  WM_ShowWindow  : begin
                    Centering (DlgHandle);
                   end;

    WM_Destroy   : begin
                    //EndDialog (DlgHandle, DlgHandle);
                    //DlgHandle := 0;
                    Exit;
                   end;
end;
end;

procedure ConnectShow; stdcall
begin
DlgHandle := CreateDialog (hInstance, "ConnectShow", MainHandle, @ConnectShowProc);
end;

function LoginProc (DlgHandle: THandle; Msg, wParam, lParam: Integer) : boolean; stdcall;
begin
result := WordBool (0);
case Msg of

  WM_COMMAND :
   case wParam of

    OK_Button :
      begin
       GetInfo (DlgHandle);
       DestroyWindow (DlgHandle);
       _result := IDOK;
      end;

    Cancel_Button :                              
      begin                                        
       DestroyWindow (DlgHandle);
       _result := IDCANCEL;
      end;
   end;

  WM_SYSCOMMAND :
   case wParam of

    SC_Close :
     begin
      DestroyWindow (DlgHandle);
      _result := IDCLOSE;
   
     end;
   end;

  WM_ShowWindow : begin
                   Centering (DlgHandle);
                  end;

  WM_Destroy    : begin
                   EndDialog (DlgHandle, _DlgHandle);
                   _DlgHandle := 0;
                   Exit;
                  end;

end;
end;

procedure Execute (aMainHandle : THandle); stdcall;
begin
MainHandle := aMainHandle;
end;

function Login : byte; stdcall;
begin
_DlgHandle := DialogBox (hInstance, "LOGIN", MainHandle, @LoginProc);
//_DlgHandle := CreateDialog (hInstance, "LOGIN", MainHandle, @LoginProc);
result := _result;

end;

procedure PostInfo (var aLogin, aPassword : ShortString); stdcall;
begin
aLogin := edLogin;
aPassword := edPassword;
end;

procedure Destroy; stdcall;
begin
DestroyWindow (DlgHandle);
end;

Exports
Execute name "Execute",
Login name "Login",
PostInfo name "PostInfo",
ConnectShow name "ConnectShow",
Destroy name "Destroy";

end.


Вызываем примерно так:

Application.Initialize;
 Application.Title := "Operative Journal";
 Application.CreateForm (TDMd, DMd);
 MainHandle := Application.Handle;
 LoadDll (MainHandle);
 repeat
  DataModule.Destroy;
  if not DMd.Login (MainHandle) then exit;
 until DMd.Authorization = true;

 Application.CreateForm (TMainForm, MainForm);
 DataModule.Destroy;
 UnloadDll;
 Application.Run;


При первом нажатии Cancel в окне авторизации (окно создаётся в теле функции Login) приложение завершает работу и выпадает Access Violatin (из-за чего?). Если нажать ОК не вводя при этом логина, то показывается окно хода подключения (вызов функции ConnectShow), после чего из отдельной dll выскакивает мессага об ошибке подключения. Далее, подтверждаем мессагу об ошибке и снова появляется окно авторизации. А вот если теперь нажать на Cancel, то приложение завершается без вопросов. Почему так?


 
parovoZZ ©   (2006-05-29 20:26) [43]

 repeat
  DataModule.Destroy;
  if not DMd.Login (MainHandle) then
   begin
    Application.Run;
    exit;
   end;
 until DMd.Authorization = true;


Всё заработало. Век живи, век учись. VCL, чтоб его.



Страницы: 1 2 вся ветка

Текущий архив: 2006.10.15;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.049 c
1-1157526893
Term
2006-09-06 11:14
2006.10.15
Как создать файл в нужной мне кодировке


15-1158778199
PHPDeveloper
2006-09-20 22:49
2006.10.15
ICQ клиент


3-1155536671
rsa_
2006-08-14 10:24
2006.10.15
что наиболее надежнее эффективнее? MySQL or MSSQL?


1-1157349763
lightix
2006-09-04 10:02
2006.10.15
Выводить сообщения из приложения поверх всех окон


3-1155278255
wipr
2006-08-11 10:37
2006.10.15
Сменить программно свойство таблицы "Table language"





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский