AGB  ·  Datenschutz  ·  Impressum  







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

Fenster erstellt bzw. sichtbar !?

Ein Thema von dor557 · begonnen am 19. Apr 2007 · letzter Beitrag vom 24. Apr 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von dor557
dor557

Registriert seit: 23. Okt 2004
Ort: Walldorf
197 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

Fenster erstellt bzw. sichtbar !?

  Alt 19. Apr 2007, 12:09
Ich habe folgendes vor :

Wenn das Prg. Gestartet wird und eine Externe Datei als Parameter übergeben wurde dann soll er ein Form öffnen.

Das geht auch so weit.

Jetzt habe ich mit Hilfe von OneInst es geschafft das er auch während das Programm läuft die Datei geöffnet werden kann, ohne das Programm neu zu starten.

Nun möchte ich aber das wenn Jemand eine Datei öffnet und das Form schon erstellt wurde ert das alte geschlossen wird und dann das neue Generiert wird.

Mein problem ist Folgendes :

Delphi-Quellcode:
      xmlDatenF := TxmlDatenF.create(Application);
      xmlDatenF.Show;
Code geht. Jedes mal wenn man eine Externe datei aufruft wird das Form erstellt. So weit so gut !! Aber nun meine versuche das Form zu schliessen wenn es noch Existiert :

Delphi-Quellcode:
     if xmlDatenF = nil then
     begin
       xmlDatenF := TxmlDatenF.create(Application);
       xmlDatenF.Show;
    end else
    begin
      xmlDatenF.Release;
      xmlDatenF := TxmlDatenF.create(Application);
      xmlDatenF.Show;
    end;
Da bekomme ich eine Fehlermeldung !!

wenn ich es auf diese Weise hier Probiere :

Delphi-Quellcode:
     if xmlDatenF <> nil then
      xmlDatenF.Release;
      xmlDatenF := TxmlDatenF.create(Application);
      xmlDatenF.Show;
Bekomme ich auch eine Fehlermeldung ! Ist ja irgend wie der Gleiche vorgang nur anders Gelöst....

Wie kann man das Lösen ohne eine Fehlermeldung zu bekommen ? und vor allem auch das es Funktioniert....

Gruss Sascha
Sascha Nickel
  Mit Zitat antworten Zitat
uwewo

Registriert seit: 14. Jul 2004
Ort: Karlsruhe
479 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Fenster erstellt bzw. sichtbar !?

  Alt 19. Apr 2007, 12:33
Versuche es mal hiermit

Delphi-Quellcode:
 if xmlDatenF = nil then
     begin
       xmlDatenF := TxmlDatenF.create(Application);
       xmlDatenF.Show;
    end
 else
    begin
      xmlDatenF.Release;
      xmlDatenF := nil;
      xmlDatenF := TxmlDatenF.create(Application);
      xmlDatenF.Show;
    end;
Uwe
  Mit Zitat antworten Zitat
Benutzerbild von dor557
dor557

Registriert seit: 23. Okt 2004
Ort: Walldorf
197 Beiträge
 
Delphi 10.1 Berlin Starter
 
#3

Re: Fenster erstellt bzw. sichtbar !?

  Alt 19. Apr 2007, 12:45
Nach diesem versuch wie du mir geraten hast bekomme ich meldungen (siehe Anhang)

in etwa oder sogar Genau die gleichen....
Miniaturansicht angehängter Grafiken
fehlermeldung_862.jpg  
Sascha Nickel
  Mit Zitat antworten Zitat
uwewo

Registriert seit: 14. Jul 2004
Ort: Karlsruhe
479 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Fenster erstellt bzw. sichtbar !?

  Alt 19. Apr 2007, 13:06
Hast Du unter Projekt -> Optionen das Formular aus den automatisch erzeugten entfernt??
Uwe
  Mit Zitat antworten Zitat
Benutzerbild von dor557
dor557

Registriert seit: 23. Okt 2004
Ort: Walldorf
197 Beiträge
 
Delphi 10.1 Berlin Starter
 
#5

Re: Fenster erstellt bzw. sichtbar !?

  Alt 19. Apr 2007, 13:31
Ja habe ich. Sonst kann ich sie ja nicht ohne Fehlermeldung Ein Formular mit Create erstellen oder ??
Sascha Nickel
  Mit Zitat antworten Zitat
uwewo

Registriert seit: 14. Jul 2004
Ort: Karlsruhe
479 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Fenster erstellt bzw. sichtbar !?

  Alt 19. Apr 2007, 14:25
Ich kenne ja Deinen Code nicht komplett, ausserdem wäre es auch möglich diesen mit dem Debugger zu überwachen um zu sehen in welcher Zeile er den Fehler ausgibt, und warum!

Hast Du das schon ausprobiert??
Uwe
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Fenster erstellt bzw. sichtbar !?

  Alt 19. Apr 2007, 14:37
Hi,

man muss schon sicherstellen, dass die Formularvariable xmlDatenF beim Freigeben des Forms auch auf nil gesetzt wird.
Somit auch dann, wenn ich das Formular über das x schliesse.
Das kann man dann z.B. im OnDestroy erledigen.

Cu, Frank
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von dor557
dor557

Registriert seit: 23. Okt 2004
Ort: Walldorf
197 Beiträge
 
Delphi 10.1 Berlin Starter
 
#8

Re: Fenster erstellt bzw. sichtbar !?

  Alt 20. Apr 2007, 04:17
Ich denke ich habe das Problem Gefunden.

Ich kann ja nicht auf die Variablen in der ersten instanz zugreifen richtig ??

Falls ja dann müsste ich wissen wie !!

die momentane basis ist folgender Code :

Delphi-Quellcode:
procedure ProcessCommandline(lpData: Pointer);
begin
   MainForm.RichEdit1.Lines.Clear;
   MainForm.RichEdit1.text := ParamBlobToStr(lpData);
   if not (length(MainForm.RichEdit1.Lines[0]) > 1) then
   begin
     MainForm.RichEdit1.Lines.Add(ParamStr(1));
   end;
   if (length(MainForm.RichEdit1.lines[0]) > 2) then
   begin
     MainForm.XMLopenF.FileName := MainForm.RichEdit1.Lines[0];
     MainForm.AuswahlPanel.Visible := false;
if xmlDatenF = nil then
     begin
       xmlDatenF := TxmlDatenF.create(Application);
       xmlDatenF.Show;
    end
else
    begin
      MessageDlg('xmlDatenF ist nicht nil',mtInformation , [mbOK],0);
      xmlDatenF := TxmlDatenF.create(Application);
      xmlDatenF.Show;
    end;
   end;
end;

{ Eine zweite Instanz hat uns ihre Kommandozeilenparameter geschickt }
procedure TMainForm.WMCopyData(var Msg: TWMCopyData);
begin
  if (Msg.CopyDataStruct.dwData = SecondInstMsgId) and (SecondInstMsgId <> 0) then
    ProcessCommandline(Msg.CopyDataStruct.lpData)
  else
    { Tcha wohl doch nicht ID - stimmte nicht }
    inherited;
end;

{----------------------------------------------------------------------------}
{ Wir überschreiben den DefaultHandler, der alle Nachrichten zuerst bekommt, }
{ damit wir auf die Nachricht mit der ID SecondInstMsgId reagieren können.   }
{ (Dies ist notwendig, da wir jetzt noch nicht wissen welchen Wert           }
{  die ID haben wird, weswegen wir keine statische Message-Prozedure,        }
{  so wie bei WM_COPYDATA, schreiben können.)                                }
{----------------------------------------------------------------------------}
procedure TMainForm.DefaultHandler(var Message);
begin
  if TMessage(Message).Msg = SecondInstMsgId then
    { Eine zweite Instanz hat uns nach dem Handle gefragt }
    { Es wird in die Message-Queue des Threads gepostet.  }
    PostThreadMessage(TMessage(Message).WParam, SecondInstMsgId, Handle, 0)
  else
    { Ansonsten rufen wir die geerbte Methode auf }
    inherited;
end;

procedure TMainForm.FormShow(Sender: TObject);
var
  lpData: Pointer;
  cbData: DWORD;
begin
  lpData := ParamStrToBlob(cbData);
  try
    ProcessCommandline(lpData);
  finally
    FreeMemory(lpData);
  end;
end;
Der Fehler passiert wenn das XMLDatenF mit release geschlossen werden soll und nicht nil ist ! also im klartext mit folgendem code bekomme ich die meldung :

  XMLDatenF.Release; wahlweise auch Destroy...

das ist egal.....

Bekomme die meldung dann immer wenn ich XMLDatenF.Release schreibe.

in der OnClick anweisung muss ich ohne XMLDatenF den befehl Release machen ansonsten bekomme ich die gleiche Fehlermeldung.

Anscheinend muss die Frage also lauten wie kann ich ein Fenster mit Release schliessen ohne das XMLDatenF bzw. den Formularnamen zu benutzen !?

Gruss Sascha
Sascha Nickel
  Mit Zitat antworten Zitat
uwewo

Registriert seit: 14. Jul 2004
Ort: Karlsruhe
479 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Fenster erstellt bzw. sichtbar !?

  Alt 20. Apr 2007, 06:34
So ganz verstehe ich das letzte Posting nicht, aber hier mal einen Code der funktioniert zu deiner ersten Frage.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Form2 = nil then Form2 := TForm2.Create(Application)
    else
      begin
       Form2.Release;
       Form2 := nil;
       Form2 := TForm2.Create(Application)
      end;
  Form2.Show
end;
Falls Du Daten aus dem Form auslesen möchtest, solltest Du es vor Release und NIL tun.

Wenn es Dir um verschiedene Instanzen der Form geht, verwende doch einfach MDIChilds!
Damit könntest Du ein zweites Form öffnen und nach dem auslesen das erste schliessen.
Uwe
  Mit Zitat antworten Zitat
Benutzerbild von dor557
dor557

Registriert seit: 23. Okt 2004
Ort: Walldorf
197 Beiträge
 
Delphi 10.1 Berlin Starter
 
#10

Re: Fenster erstellt bzw. sichtbar !?

  Alt 21. Apr 2007, 02:03
Kann es denn sein das die Fehler meldung entsteht da ich das Formular als MDIChild deklariert habe ??? und es daher nicht erkennen kann... ???

und wenn nicht wie kann ich denn die Anderen geöffneten Formulare schliessen ???
Sascha Nickel
  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 15:12 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