AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DLL Form in Main Programm anzeigen?

Ein Thema von napsterxx · begonnen am 24. Mai 2007 · letzter Beitrag vom 25. Mai 2007
Antwort Antwort
Seite 1 von 2  1 2      
napsterxx

Registriert seit: 18. Mär 2007
Ort: Borland
556 Beiträge
 
Delphi 7 Enterprise
 
#1

DLL Form in Main Programm anzeigen?

  Alt 24. Mai 2007, 21:28
^^ Neuer Thread

Also bei der Dll handelt es sich um ein Login Formular. Ich will dass wenn sich mein hauptprogramm öffnet, als erstes die Form der Login.dll sichtbar wir.

Wie mache ich die Form einer DLL sichtbar und wie wieder unsichtbar?
Und wie kann ich aus einer DLL eine Form meiner Haupt anwendung sichtbar machen?
Du derefernzierst p2 einmal und weißt die Adresse von i zu. Das heißt p2 (also der Zeiger auf einen Zeiger) zeigt auf den Zeiger p1 welchen du so auf i zeigen lässt.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: DLL Form in Main Programm anzeigen?

  Alt 24. Mai 2007, 21:53
Ersteres ist relativ einfach. Du exportierst eine Routine die ungefähr so aussieht:
Delphi-Quellcode:
procedure zeigeeinForm;
var f:TMeineDLLFormKlasse;
begin
f:=TMeineDLLFormKlasse.create(nil);
try
  f.showmodal; //sollte auch mit show gehen
finally
  f.free;
end;
end;
In umgekehrter Richtung musst du halt dein Form in der DLL hinterlegen. Die ruft dann einfach show und hide auf.
Hoffe geholfen zu haben
Apollonius
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
napsterxx

Registriert seit: 18. Mär 2007
Ort: Borland
556 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: DLL Form in Main Programm anzeigen?

  Alt 24. Mai 2007, 22:01
Auf jedenfall aber was meinst du damit:

TMeineDLLFormKlasse


?? Klasse??
Du derefernzierst p2 einmal und weißt die Adresse von i zu. Das heißt p2 (also der Zeiger auf einen Zeiger) zeigt auf den Zeiger p1 welchen du so auf i zeigen lässt.
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: DLL Form in Main Programm anzeigen?

  Alt 24. Mai 2007, 22:04
www.dsdt.info ->Tutorials->Delphi-Language(oder so)->DLLs
Dynamisches einbinden von DLLs
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
napsterxx

Registriert seit: 18. Mär 2007
Ort: Borland
556 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: DLL Form in Main Programm anzeigen?

  Alt 24. Mai 2007, 22:08
Delphi-Quellcode:
unit Unit1;

interface

uses windows;

type
  TSummenFunktion = function(zahl1, zahl2: integer): integer; stdcall;
  function addieren(zahl1, zahl2: integer): integer;

implementation

function addieren(zahl1, zahl2: integer): integer;
var SummenFunktion: TSummenFunktion;
    Handle: THandle;
begin
  Handle:=LoadLibrary(PChar(ExtractFilePath(ParamStr(0))+'rechnen.dll'));
  if Handle <> 0 then begin
    @SummenFunktion := GetProcAddress(Handle, 'addiere');
    if @SummenFunktion <> nil then begin
      result:=SummenFunktion(zahl1, zahl2);
    end;
    FreeLibrary(Handle);
  end;
end;

end.
?? Verstehe das nicht. Kann mir bitte einer helfen
Du derefernzierst p2 einmal und weißt die Adresse von i zu. Das heißt p2 (also der Zeiger auf einen Zeiger) zeigt auf den Zeiger p1 welchen du so auf i zeigen lässt.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#6

Re: DLL Form in Main Programm anzeigen?

  Alt 24. Mai 2007, 22:09
Das ist garnicht so einfach. In der DLL muss folgendes stehen :
Delphi-Quellcode:
library config;

uses
  SysUtils,
  Classes,
  Windows,
  Forms,
  Controls,
  ExtCtrls,
  ConfigurationMainUnit in 'ConfigurationMainUnit.pas{ConfigurationMain},
  dll_unit in 'dll_unit.pas';

{$R *.res}

procedure configuration(appHandle: THandle); stdcall;
begin
  if appHandle = 0 then apphandle := GetActiveWindow;
  Application.Handle := appHandle;
  try
    with TConfigurationMain.Create(Application) Do
      try
        ShowModal
      finally
        Free;
      end
  except
    On E: Exception Do Application.HandleException(E);
  end;
  Application.Handle := 0;
end;

exports
  configuration;

begin

end.
Die ConfigurationMainUnit.pas ist eine ganz einfache Unit mit einem Formular. Dieses kannst Du ganz normal händeln, wie jedes andere Formular auch.
In der DLLunit.pas habe ich dann folgendes stehen :
Delphi-Quellcode:
unit dll_unit;

interface
procedure configuration(appHandle: THandle); stdcall;

implementation

procedure configuration(appHandle: THandle); stdcall; external 'config.dll';

end.
Und in der MainForm.Unit habe ich dann folgendes stehen um das Formualar aus der ConfigurationMainUnit.pas aufzurufen :
Delphi-Quellcode:
uses
  dll_unit;

type
  TConfigWindow = procedure(appHandle: THandle); stdcall;

procedure TMainControl.Configuration_btnClick(Sender: TObject);
var
  hDLL : THandle;
  ConfigWindow : TConfigWindow;
begin
  hDLL := LoadLibrary(PChar(ExtractFilePath(ParamStr(0))+'config.dll'));
  if hDLL <> 0 then begin
    try
      ConfigWindow := GetProcAddress(hDLL, 'configuration');
      ConfigWindow(Application.Handle);
    finally
      FreeLibrary(hDLL);
    end;
  end;
end;

end.
So habe ich das gemacht mal für ein Programm. Ich hoffe es hilft dir weiter.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
napsterxx

Registriert seit: 18. Mär 2007
Ort: Borland
556 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: DLL Form in Main Programm anzeigen?

  Alt 24. Mai 2007, 22:19
was ist das: ConfigurationMainUnit.pas? Edit: Ok habs gecheckt
Delphi-Quellcode:
try
with TConfigurationMain.Create(Application) Do
try
[Fehler] Loginpr.dpr(31): E2003 Undefinierter Bezeichner: 'TConfigurationMain'
[Fehler] Loginpr.dpr(31): E2029 'DO' erwartet, aber Bezeichner 'Create' gefunden
[Fehler] Loginpr.dpr(33): E2003 Undefinierter Bezeichner: 'ShowModal'
[Fehler] Loginpr.dpr(35): E2003 Undefinierter Bezeichner: 'Free'
Du derefernzierst p2 einmal und weißt die Adresse von i zu. Das heißt p2 (also der Zeiger auf einen Zeiger) zeigt auf den Zeiger p1 welchen du so auf i zeigen lässt.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#8

Re: DLL Form in Main Programm anzeigen?

  Alt 24. Mai 2007, 22:28
TConfigurationMain musst Du natürlich an Dein Formular anpassen. Für die Fehler fehlen Dir entweder noch Units oder Du hast noch einen anderen Fehler drin. Zeige uns doch mal Deinen Sourcecode.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
napsterxx

Registriert seit: 18. Mär 2007
Ort: Borland
556 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: DLL Form in Main Programm anzeigen?

  Alt 24. Mai 2007, 22:33
Delphi-Quellcode:
library Loginpr;




uses
  SysUtils,
  Classes,
  Windows,
  Forms,
  Controls,
  ExtCtrls,
  ConfigurationMainUnit in 'ConfigurationMainUnit.pas{ConfigurationMain},
  Login in 'Login.pas';

{$R *.res}

procedure configuration(appHandle: THandle); stdcall;
begin
  if appHandle = 0 then apphandle := GetActiveWindow;
  Application.Handle := appHandle;
  try
    with TConfigurationMain.Create(Application) Do
      try
        ShowModal
      finally
        Free;
      end
  except
    On E: Exception Do Application.HandleException(E);
  end;
  Application.Handle := 0;
end;


exports
Configuration;

begin
end.
Du derefernzierst p2 einmal und weißt die Adresse von i zu. Das heißt p2 (also der Zeiger auf einen Zeiger) zeigt auf den Zeiger p1 welchen du so auf i zeigen lässt.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#10

Re: DLL Form in Main Programm anzeigen?

  Alt 24. Mai 2007, 22:36
Du musst die Procedure Configuration anpassen. Ich habe Dir lediglich nur ein Beispiel für ein anderes Formualr geliefert.

So könnte Deine Login.dpr aussehen :
Delphi-Quellcode:
library Loginpr;

uses
  SysUtils,
  Classes,
  Windows,
  Forms,
  Controls,
  ExtCtrls,
  Login in 'Login.pas';

{$R *.res}

procedure LoginWindow(appHandle: THandle); stdcall;
begin
  if appHandle = 0 then apphandle := GetActiveWindow;
  Application.Handle := appHandle;
  try
    with TLoginMain.Create(Application) Do
      try
        ShowModal
      finally
        Free;
      end
  except
    On E: Exception Do Application.HandleException(E);
  end;
  Application.Handle := 0;
end;


exports
 LoginWindow;

begin
end.
Nochmal, so könnte Deine Login.dpr aussehen. Es kommt darauf an, welchen Namen Du dem Formular gegeben hast.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz