Avatar billede landsbytossen Nybegynder
29. august 2001 - 09:41 Der er 8 kommentarer og
1 løsning

non-modal delphi dll form

Hej Delphi coders,
Har lavet en modal delphi dll form. Nu vil jeg i stedet have formen som non-modal, men hvordan ?
Koden ser bla. sådan ud:

{ This function creates an instance of the form. }
function License(hWnd: THandle): integer; stdcall;
var
  iRetVal: integer;
begin
  Application.Handle := hWnd;
  try
    try
      form1:= Tform1.Create(Application);
      iRetVal:=form1.ShowModal;
      //hvorfor er der ikke en form1.ShowModeless
    finally
      form1.Free;
    end;
  except
    on E:Exception do
      begin
        ShowMessage(\'Error on Creating or Showing License: \'+E.Message);
        raise;
      end;
  end;
  result := iRetVal;
end;

Exports License;
Avatar billede lectoc Nybegynder
29. august 2001 - 10:29 #1
Prøv med:

form1.Show;

Du kan dog ikke blot frigive din form igen i finally, når den er modeless... Dette kan du fx gøre i formen selv (sæt fx Action til caFree i event OnClose på formen).
Avatar billede landsbytossen Nybegynder
29. august 2001 - 10:55 #2
Der er ikke adgang til Show ved form1. ???
Avatar billede lectoc Nybegynder
29. august 2001 - 10:59 #3
Hvad mener du med det?? Hvis der er tale om en almindelig Delphi form, skulle den da gerne have en metode, der hedder Show (den er defineret på TCustomForm).
Avatar billede landsbytossen Nybegynder
29. august 2001 - 11:39 #4
Jeg tror problemet er at jeg bruger en TForm i stedet for en TCustomForm.
Avatar billede lectoc Nybegynder
29. august 2001 - 12:11 #5
TForm er nedarvet fra TCustomForm - så du skal altså have Show til rådighed!

Hvad mener du med, den ikke er til rådighed? Får du en compile-fejl, eller kan du bare ikke se den i CodeInsight? Hvis det er sidst-nævnte er det sikkert bare fordi, du ikke har fjernet assignment\'et foran form1.Show - Show returnerer ikke noget.

/Torben.
Avatar billede landsbytossen Nybegynder
29. august 2001 - 13:37 #6
Ja, det er rigtigt, den er der nu, sorry.
Nu mangler jeg bare at holde formen fast. Det viser sig at form1.show viser sig i et splitsekund, hvorefter form1 er væk. Selv om form1.free er udkommenteret:
Jeg er ved at skabe en nonmodal form i et non VCL-procedure orienteret miljø ved anvendelse af dll-forms. Den modale form virker fint (men er ikke særlig anvendelig, da der skal være direkte kommunikation mellem dll og det procedure orienteret basicmiljø).
Kender du en løsning på bevarelsen at den nonmodale form? Er du træt at mine begynder Delphi problemer (er lige ankommet fra VB) skal du bare sig til ;-)

{ This function creates an instance of the form. }
function License(hWnd: THandle): integer; stdcall;
var
  iRetVal: integer;
begin
  Application.Handle := hWnd;
  try
    try
      form1:= Tform1.Create(Application);
      //iRetVal:=form1.ShowModal;
      form1.Show;
    finally
      //form1.Free;
    end;
  except
    on E:Exception do
      begin
        ShowMessage(\'Error on Creating or Showing License: \'+E.Message);
        raise;
      end;
  end;
  result := iRetVal;
end;
Avatar billede landsbytossen Nybegynder
29. august 2001 - 13:48 #7
Forøvrigt: Med en ShowMessage i TForm1.FormActivate holdes formen oppe. Den forsvinder selvfølgeligt når man klikker ok.
Kunne man forestille sig et andet event der holder formen oppe.
Her er en procedure fra formen:

procedure TForm1.FormActivate(Sender: TObject);
begin
  QlikOCX1.DocName := \'D:\\Delphi\\Examples\\EXAMPLE7b\\seher.qvw\';
  ShowMessage(dette holder formen fikseret\');
end;
Avatar billede lectoc Nybegynder
29. august 2001 - 13:50 #8
Rart at høre, at endnu én er omvendt fra VB til Delphi :-)

Jeg ved ikke lige, hvordan det forholder sig i en DLL. Men det man typisk gør i en alm. Delphi app er noget lignende:

  Application.Initialize;
  Application.CreateForm(TForm1, form1);
  Application.Run;

CreateForm kaldet vil i dit tilfælde erstatte følgende linier:

  form1:= TForm1.Create(Application);
  form1.Show;

/Torben.
Avatar billede landsbytossen Nybegynder
29. august 2001 - 14:00 #9
Takker, falder nogle dll hajer over denne thread må de gerne komme med forslag....  :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester