Einzelnen Beitrag anzeigen

norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
505 Beiträge
 
Delphi 12 Athens
 
#7

AW: Fensterwechsel erkennen

  Alt 14. Jun 2016, 21:12
Hallo,

jetzt bin ich nicht ganz sicher ob es ein Verständnis- oder Wissensproblem meinerseits gibt.

Ich habe mehrere unabhängige Anwendungen (.exe) für unterschiedliche Aufgaben. Die MsSQL-Datenbank ist aber für alle Anwendungen dieselbe.
Manche Grunddaten, z.B. eine User-Verwaltung, werden von allen Anwendungen gleich benötigt, und so ist z.B. die Userverwaltung in eine DLL ausgelagert. Hier der Aufbau der DLL
Delphi-Quellcode:
library User;

uses
  SysUtils,
  Dialogs,
  Classes,
  ComCtrls,
  Forms,
  Ed_user in 'Ed_user.pas{foedUser},
  Di_uslog in 'Di_uslog.pas{fodiUserLogin},
  int_User in 'int_User.pas';
  dm_ConDoQMa in '..\All_Form\dm_ConDoQMa.pas',
  dm_User in 'dm_User.pas{dmUser: TDataModule};

{$R *.RES}

exports
  edUser,
  GetUser,
  InitUser0,
  SetUser;

end.
und so der Aufruf von GetUser
Delphi-Quellcode:
procedure TintUser.GetUser;
const sBef = 'GetUser';
var
  fDLL : function:TUser;
  fIni: TIniFile;
begin
  SetDLL;

  if haDLL <> 0 then
  begin
    @fDLL := GetProcAddress(haDLL, sBef);
    if uHilfs1.CheckDll(@fDLL, sBef, sDll, sUnit, sFehler) then
      User:=fDLL; { GetUser aufrufen }
  end;

  try
    { Aktuelle Benutzer unter PC-Kennung eintragen   }
    if intUser.sIni<>'then
    begin
      fIni := TIniFile.Create(intUser.sIni);
      fIni.WriteString(intUser.sPC, 'LastUser', intUser.User.Name);
      fIni.Free;
    end;
  except
  end;
end;
Das Formular zum Login oder zum Ändern von Userdaten ist also in der User.dll, Die Daten-Connection wird über das für alle DLL und EXE gleiche dm_ConDoQMa bereitgestellt.

Dieser Aufbau funktioniert seit Delphi 3 ohne Probleme.
Was ist aus deiner Sicht daran nicht korrekt?
Ich habe mich mit dem Thema VCL bis jetzt nie wirklich beschäftigt. Hatte ja auch nie ein Problem.
Bis eben jetzt, wo ich erkennen wollte, dass Anwendung1.exe ein Formulat in User.dll aufruft und ich dann mitbekommen will, wenn Anwendung1.exe wieder den Focus bekommt. Beim User.dll ist das kein Problem, da ich mir auch die Daten aus der DLL hole und damit die Daten nur innerhalb der DLL aktualisieren muss.
Bei anderen Stammdaten werden die Daten aber nur in der DLL verwaltet (angelegt oder geändert), aber in Anwendung1.exe in einer Liste angezeigt, d.h. die Anwendung hat eine eigen Verbindung zu der Tabelle. Und die sollte halt auch aktualisiert werden, wenn ich aus XX.dll zurück komme.

Für Aufklärung wäre ich sehr dankbar.

Grüße
Gerd
  Mit Zitat antworten Zitat