Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Opendialog wird in IDE nicht angezeigt (https://www.delphipraxis.net/160314-opendialog-wird-ide-nicht-angezeigt.html)

ede57 6. Mai 2011 21:40

Opendialog wird in IDE nicht angezeigt
 
Hallo,
wenn ich die procedure unter Win7 ausführe wird von > openDialog.Execute <
gleich nach > if dxfFilename = '' then Exit;< gesprungen
Also alles nach Execute wird gar nicht erst Ausgeführt
Außerhalb der IDE läuft alles i.o.

Habe Kasperski kein Avira.
Kasperski komplett ausgeschaltet
Trotzdem funktioniert es nicht

Bei einem Anderen Project funktioniert der OpenDialog innerhalb der IDE einwandfrei

Delphi-Quellcode:
procedure Tfo_main_form.sBtnLoadDxfFileClick(Sender: TObject);
Var
  DxfFilename : String;
  X,Y : integer;
  dxl : TDXF_Layer;
  DXXF : TDxf_Entitie;
begin
   opdlg_DxfOpen.InitialDir := ExtractFilePath( Application.ExeName);
   if opdlg_DxfOpen.Execute then
      begin
        DxfFileName := opdlg_DxfOpen.FileName;
        if dxfFilename = '' then Exit;
        DXFFileReader := TDxfReader.Create(dxfFilename);
        if DXFFileReader.DxfOk then
          begin
            DxfFile := TDxf_File.Create;
            DXFFileReader.DxfFile := DxfFile;
            DXFFileReader.Execute;
          end;
       FREEANDNIL(DXFFileReader);
      end;
// keine Datei ausgewählt
   if dxfFilename = '' then Exit;
   DxfFile.Calculate;
   FDxfFileShow := True;
   ShowMinMax;
end;

ConnorMcLeod 7. Mai 2011 02:36

AW: Opendialog wird in IDE nicht angezeigt
 
Theoretisch kann gar kein leerer Filename ausgewählt werden, d.h. Execute kann nur False sein; wie auch immer:
Habe mir erlaubt, das ein bisschen umzubauen. Mir fehlen die DXF-Klassen, aber die Logik mit OpenDialog funkt.

Du bist besser dran, wenn keine exits mitten in der Funktion sind. Wenn überhaupt, dann gut sichtbar am Beginn einer Funktion.

Wenn DxfFile global ist, dann ist IMHO hier der falsche Zeitpunkt, es zu erzeugen.

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
Var
  DxfFilename : string;
  opdlg_DxfOpen: TOpenDialog;
  dxl         : TDXF_Layer;
  DXXF        : TDxf_Entitie;
begin
  opdlg_DxfOpen := TOpenDialog.Create(Self);
  try
    opdlg_DxfOpen.InitialDir := ExtractFilePath( Application.ExeName);
    if opdlg_DxfOpen.Execute and ('' <> opdlg_DxfOpen.FileName) then
    begin
      DxfFileName := opdlg_DxfOpen.FileName;
      DXFFileReader := TDxfReader.Create(dxfFilename);
      try
        if DXFFileReader.DxfOk then
        begin
          DxfFile := TDxf_File.Create;          // ist das global? wo wird das freigegeben?
          DXFFileReader.DxfFile := DxfFile;
          DXFFileReader.Execute;
        end;
      finally
        FreeAndNil(DXFFileReader);
      end;
      DxfFile.Calculate;
      FDxfFileShow := True;
      ShowMinMax;
    end
    else
    begin
      ShowMessage('Fehler beim Öffnen der Datei.');
    end;
  finally
    FreeAndNil(opdlg_DxfOpen);
  end;
end;

himitsu 7. Mai 2011 09:01

AW: Opendialog wird in IDE nicht angezeigt
 
Und man kann dem Opendialog auch sagen, daß er die angegebene Datei prüfen soll (siehe .Options).
Dann läßt der Opendialog nur Dateinamen von existierenden Dateien zu.

ede57 7. Mai 2011 09:46

AW: Opendialog wird in IDE nicht angezeigt
 
Vielleicht habe ich mich nicht richtig ausgedrückt.
Der OpenDialog wird gar nicht werst angezeigt bzw ausgeführt.
Vermute das der Fehler irgendwo im DFM liegt. Bei eine NEU erzeugten anwendung
funktioniert dieser CodeTeil einwandfrei.

Gibt es vielleicht unterschiede wenn man ein Formular mal mit D2010 und dann mit DXE
bearbeitet ??

himitsu 7. Mai 2011 10:15

AW: Opendialog wird in IDE nicht angezeigt
 
Zitat:

Zitat von ede57 (Beitrag 1099467)
Gibt es vielleicht unterschiede wenn man ein Formular mal mit D2010 und dann mit DXE
bearbeitet ??

Nee, eigentlich nicht.

Das Einzige, wo ich weiß, daß die dahinterliegende WinAPI einen Bug hat (schon seit vielen vielen Jahren) das ist,
wenn man bei Filename vor dem Aufruf einen ungültigen Pfad angegeben hat, dann wird der Dialog nicht angezeigt und es gibt auch keine Fehlermaldung.

ede57 7. Mai 2011 10:25

AW: Opendialog wird in IDE nicht angezeigt
 
Zitat:

Zitat von himitsu (Beitrag 1099469)
Zitat:

Zitat von ede57 (Beitrag 1099467)
Gibt es vielleicht unterschiede wenn man ein Formular mal mit D2010 und dann mit DXE
bearbeitet ??

Nee, eigentlich nicht.

Das Einzige, wo ich weiß, daß die dahinterliegende WinAPI einen Bug hat (schon seit vielen vielen Jahren) das ist,
wenn man bei Filename vor dem Aufruf einen ungültigen Pfad angegeben hat, dann wird der Dialog nicht angezeigt und es gibt auch keine Fehlermaldung.

Das kann ja nicht sein. Ausserhalb der IDE läuft alles einwandfrei. Auch wenn ich ein komplett neues
Project erzeuge, funktioniert alles, auc innerhalb der IDE

ConnorMcLeod 7. Mai 2011 10:32

AW: Opendialog wird in IDE nicht angezeigt
 
Verstehe beinahe ... da würde ich mal auf den ersten Blick vermuten, dass opdlg_DxfOpen nicht erzeugt ist, oder ExtractFilePath ein Riesenproblem hat.

Ist der Pfad zur EXE verschieden bei IDE/ausserhalb?
Wird die Prozedur überhaupt aufgerufen?
Gibt es zwei verschiedene Datei-öffnen-Prozeduren? ( => diese hier versagt, aber die andere tut dann)
Ist der OpenDialog created?
Versuche vllt ein try-except mit Fehlermeldung(en).
Versuche vllt, alle Logik zu entfernen, bis nur noch *Datei öffnen* überbleibt.
Bau Log-Meldungen ein.

Pffuuhhh. Jetzt fällt mir spontan mal nix mehr ein ;-)

turboPASCAL 7. Mai 2011 10:54

AW: Opendialog wird in IDE nicht angezeigt
 
Zitat:

Zitat von ConnorMcLeod (Beitrag 1099472)
Pffuuhhh. Jetzt fällt mir spontan mal nix mehr ein ;-)

Einfach mal debuggen. Breakpoints setzen... ;)

ConnorMcLeod 7. Mai 2011 11:08

AW: Opendialog wird in IDE nicht angezeigt
 
Ist ausserhalb der IDE schwierig ...

rollstuhlfahrer 7. Mai 2011 11:20

AW: Opendialog wird in IDE nicht angezeigt
 
Doch: Exzessives Logging (nach jeder Zeile 1x Logging aufrufen und alle fehlercodes nach außen führen (auch GetLastError).

Bernhard

ConnorMcLeod 7. Mai 2011 11:35

AW: Opendialog wird in IDE nicht angezeigt
 
Siehe: bau LogMeldungen ein ...

Eine Idee hab ich noch: OllyDbg

ede57 7. Mai 2011 17:32

AW: Opendialog wird in IDE nicht angezeigt
 
Danke für die vielen Tips.

habe das Problem wohl gelöst??.

Habe .dProj Datei (nachdem ich diese gesichert hatte) gelöscht.
Beim öffnen des Projectes über die .dpr wurde die .dproj neu erstellt.
Dann funktionierte alles wieder.

Wenn ich die .dproj datei aber wieder austausche,funktioniert nichts mehr.

Also lag der fehler wohl in der .dproj Datei.

ConnorMcLeod 7. Mai 2011 17:46

AW: Opendialog wird in IDE nicht angezeigt
 
Danke für die Rückmeldung, das werde ich künftig auch bedenken ;-)

Spannend wäre es jetzt noch, herauszufinden, welcher Eintrag in der .dproj zuständig war. Die .dproj ist ja im XML-Format. Da könnte man der Reihe nach die Einträge entfernen, bis das Phänomen nicht mehr auftritt und damit hat man den Schuldigen.

ede57 7. Mai 2011 19:21

AW: Opendialog wird in IDE nicht angezeigt
 
Liste der Anhänge anzeigen (Anzahl: 1)
Für interessierte habe ich mal die beiden .dproj Files im Anhang gepackt

Flinx 21. Dez 2011 19:54

AW: Opendialog wird in IDE nicht angezeigt
 
Hallo,
ich habe eure Mails mit Interesse gelesen.
Mir widderfähr gerade etwas ähnliches.
Open-und Save Dialoge werden in der IDE nicht mehr ausgeführt.
In der fertigen Applikation allerdings schon !?

Nach der Instalation einer anderen Komponente ( SynEdit ) ist mir
dieses Verhalten aufgefallen. Die Komponenten habe ich wieder deinstaliert aber leider ohne Erfolg bezüglich der Open/Save Dialoge.
Ich vermute, dass irgend welche Zeiger bzw UmgebungsVariablen der IDE nicht mehr stimmen !???
Habe aber leider keine Ahnung wie ich dem Problem zu Leibe rücken soll.
Im vorigen Beitrag wurde was von intensiven Debuggen gesagt. Was meint das und wie macht man das ?

Anbei ein einfach VCL Applikation die in der IDE den Open Dialog
in beiden Varianten ignoriert, als Anwendung gestartet aber das tut
was man erwartet.

Delphi-Quellcode:
unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation

{$R *.dfm}
//
// Zwei einfache Varianten einen Dialog aufzurufen
//
procedure TForm1.Button1Click(Sender: TObject);
var openDialog : TOpenDialog;
begin
     openDialog := TOpenDialog.Create(self);

     if openDialog.Execute then
     begin
       ShowMessage(openDialog.FileName + ' selektiert !');
     end;
     openDialog.Free;
end;


procedure TForm1.Button2Click(Sender: TObject);
begin

  if OpenDialog2.Execute then
  begin
     ShowMessage(OpenDialog2.FileName + ' selektiert !');
  end;

end;

end.

Bernhard Geyer 21. Dez 2011 22:55

AW: Opendialog wird in IDE nicht angezeigt
 
Wars nicht bei einem ein Treiber der sich in jede Anwendung reinhängt und der nicht gedebugged werden will?

Flinx 22. Dez 2011 08:48

AW: Opendialog wird in IDE nicht angezeigt
 
Nun... ein Treiber-Problem ist zwar denkbar, aber unwahrscheinlich.
Wenn ich ein älteres Projekt in der IDE starte funktionieren die
Dialoge nach wie vor !!!!
Also, das Problem tritt offenbar nur bei neuen Projekten auf.

Die Sache mit einer neuen .dproj Datei hab ich nicht verstanden!
Die Erklärung war mir leider zu kryptisch.
Geht auch für Doofe ?

DeddyH 22. Dez 2011 09:34

AW: Opendialog wird in IDE nicht angezeigt
 
Die *.dproj sichern und löschen. Anschließend Doppelklick auf die *.dpr, Delphi öffnet das Projekt und legt die *.dproj automatisch neu an. Im oben genannten Fall hat das wohl geholfen.

Flinx 22. Dez 2011 15:19

AW: Opendialog wird in IDE nicht angezeigt
 
Danke für den Tip !
Leider hilft's nix.

Noch mal zum Mitschreiben:
Open/Save Dialoge starten in neuerzeugten Projekten nicht in der IDE
In der Anwendung (.exe) jedoch sehr wohl.
Bei älteren Projekten funktionieren die Dialog sowohl als auch.

Was kann man tun ?

DeddyH 22. Dez 2011 15:25

AW: Opendialog wird in IDE nicht angezeigt
 
Und wenn Du nun die *.dproj eines älteren funktionierenden Projekts nimmst, umbenennst und wie beschrieben neu anlegen lässt? Funktioniert es dann immer noch, oder nicht mehr? Falls nicht, kannst Du die beiden *.dproj ja einmal im Editor vergleichen (ist ja simples XML).

Flinx 22. Dez 2011 15:51

AW: Opendialog wird in IDE nicht angezeigt
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also wenn ich im alten Projekt die .dproj Datei lösche und danach
die .dpr Datei starte laufen die Dialoge in der IDE nichtmehr.

Leider fällt es mir schwer beide .dproj Dateien zuvergleichen.
Hast du da eine Methode diesen Vergleich vorzunehmen ?

Wenn Ja, im Anhang sind beide Versionen

Danke

Bummi 22. Dez 2011 16:00

AW: Opendialog wird in IDE nicht angezeigt
 
die sind identisch

DeddyH 22. Dez 2011 16:03

AW: Opendialog wird in IDE nicht angezeigt
 
Stimmt.
Code:
C:\[MeinLokalerPfad]>fc CAMICMACRO_new.dproj CAMICMACRO_old.dproj
Vergleichen der Dateien CAMICMACRO_new.dproj und CAMICMACRO_OLD.DPROJ
FC: Keine Unterschiede gefunden
Jetzt gehen mir die Ideen aus :gruebel:

Bernhard Geyer 22. Dez 2011 16:07

AW: Opendialog wird in IDE nicht angezeigt
 
Kann evtl. da Manifest unterschiedlich sein? (*.res-Datei)?

Flinx 22. Dez 2011 16:11

AW: Opendialog wird in IDE nicht angezeigt
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ok !
vieleicht hab ich tatsächlich die gleiche Datei zweimal gepackt.

2.Versuch -- wenn du nochmals so freundlich bist !?

Bummi 22. Dez 2011 16:27

AW: Opendialog wird in IDE nicht angezeigt
 
keiner der vorhandenen Unterschiede erklärt für mich das Verhalten...

DeddyH 22. Dez 2011 16:50

AW: Opendialog wird in IDE nicht angezeigt
 
Ich sehe da auch nichts, was einen "Ahaa" rufen ließe.
Zitat:

Vergleichen der Dateien newCAMICMACRO.dproj und OLDCAMICMACRO.DPROJ
***** newCAMICMACRO.dproj
<PropertyGroup>
<ProjectGuid>{4173AF88-9F01-4AE5-9062-511578FF0C9D}</ProjectGuid>
<MainSource>CAMICMACROGen.dpr</MainSource>
***** OLDCAMICMACRO.DPROJ
<PropertyGroup>
<ProjectGuid>{C50CB4BA-A5DB-4763-A7B3-82DA3CC0C4A0}</ProjectGuid>
<ProjectVersion>12.0</ProjectVersion>
<MainSource>CAMICMACROGen.dpr</MainSource>
*****

***** newCAMICMACRO.dproj
<DCC_DCCCompiler>DCC32</DCC_DCCCompiler>
<ProjectVersion>12.0</ProjectVersion>
</PropertyGroup>
***** OLDCAMICMACRO.DPROJ
<DCC_DCCCompiler>DCC32</DCC_DCCCompiler>
</PropertyGroup>
*****

***** newCAMICMACRO.dproj
<DCC_DependencyCheckOutputName>CAMICMACROGen.exe </DCC_DependencyCheckOutputName>
<BRCC_IncludePath>F:\Delphi\Packages\SynEdit\Sourc e;$(BRCC_IncludePath)</BRCC_IncludePath>
<DCC_UsePackage>vclx;vcl;vclimg;dbrtl;Rave77VCL;bd ertl;rtl;vclactnband;vcldb;vcldbx;vcltouch;xmlrtl; dsn
***** OLDCAMICMACRO.DPROJ
<DCC_DependencyCheckOutputName>CAMICMACROGen.exe </DCC_DependencyCheckOutputName>
<DCC_UsePackage>vclx;vcl;vclimg;dbrtl;Rave77VCL;bd ertl;rtl;vclactnband;vcldb;vcldbx;vcltouch;xmlrtl; dsn
*****

***** newCAMICMACRO.dproj
<DCC_ImageBase>00400000</DCC_ImageBase>
<DCC_UnitAlias>WinTypes=Windows;WinProcs=Windows;D biTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;WinTypes=Wind ows
;WinProcs=Windows;$(DCC_UnitAlias)</DCC_UnitAlias>
<DCC_Platform>x86</DCC_Platform>
***** OLDCAMICMACRO.DPROJ
<DCC_ImageBase>00400000</DCC_ImageBase>
<DCC_UnitAlias>WinTypes=Windows;WinProcs=Windows;D biTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAli as)
</DCC_UnitAlias>
<DCC_Platform>x86</DCC_Platform>
*****

***** newCAMICMACRO.dproj
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>VCLApplication</Borland.ProjectType>
<BorlandProject>
***** OLDCAMICMACRO.DPROJ
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType/>
<BorlandProject>
*****

***** newCAMICMACRO.dproj
<Delphi.Personality>
<Source>
<Source Name="MainSource">CAMICMACROGen.dpr</Source>
</Source>
<Parameters>
***** OLDCAMICMACRO.DPROJ
<Delphi.Personality>
<Parameters>
*****

***** newCAMICMACRO.dproj
</Excluded_Packages>
<DebugEnvironmentVariables>
<DebugEnvironmentVariables Name="GLSCENE">&apos;F:\Delphi\Packages\GLScene\So ur
ce&apos;</DebugEnvironmentVariables>
</DebugEnvironmentVariables>
</Delphi.Personality>
***** OLDCAMICMACRO.DPROJ
</Excluded_Packages>
<Source>
<Source Name="MainSource">CAMICMACROGen.dpr</Source>
</Source>
</Delphi.Personality>
*****


Flinx 22. Dez 2011 17:22

AW: Opendialog wird in IDE nicht angezeigt
 
Vielen Dank an Euch beide !
Tröstlich dabei ist nur die Gewissheit, dass man nicht ganz alleine
mit seinem Elend ist...

DeddyH 22. Dez 2011 17:26

AW: Opendialog wird in IDE nicht angezeigt
 
Ich würde einfach mal nach und nach die Tags, die in der neuen Version hinzugekommen sind, im Editor löschen und dann neu versuchen. Irgendwann muss ja theoretisch der Schuldige dabei sein.

Flinx 28. Dez 2011 15:19

AW: Opendialog wird in IDE nicht angezeigt
 
Sorry für die lange Pause !
Ich habe den Fehler zwar nicht gefunden, aber die IDE läuft wieder!
Schuld war ein Eintrag im Environment der einen Eintag enthielt zu einer
INCLUDE Datei die nach der Deinstalation einer Komponente nicht mehr existierte.
Ich weiß das das keine Erklärung für das Verhalten ist., aber ich gebe mich
vorerst damit zufrieden. Es läuft wieder ! Und das ist erstmal die Hauptsache.
Gefunden habe ich den Bug durch den Vergleich der .dProj Dateien eines funktionierenden Projekts und der Projektdatei die nach dem Entfernen einer
Komponente erzeugt worden ist. Ich habe - wie schon gesagt - keine Ahnung welchen Einfluß der falsche Eintrag in der .dProj auf die nicht mehr starten wollenden Dialoge in der IDE hat, aber das ist mir momentan auch wurscht.

Trotzdem vielen Dank für eure Mithilfe bei der Fehlersuche.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz