Autor Beitrag
N8Falter74
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53

Win XP
D7 Prof
BeitragVerfasst: Do 02.02.06 11:07 
Hallo,

ich habe ein Export Tool für eine DB Anwendung geschrieben. Das funktioniert auf vielen PCs einwandfrei, nur auf einigen Rechnern bleibt die Anwendung beim Start folgender Procedure hängen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure Tfrm_Main.btn_ExportClick(Sender: TObject);
var iCount, iArcID, iLgrID, iType, iIcon: Integer;
    sFileName, sArcName, sTblName, sPassWd: String;
    ini: TIniFile;
    burn: TXPBurn;
begin
  sFileName := '';
  if not PromptForFileName(sFileName, 'Offline DB|*.SDB''sdb''Wie soll die Offline-Datei heißen?''', True) then exit;
.
. [Schnipp]
.


Beim Start der Procedure soll ja, wie man sieht, ein Dateinamen-Abfragefenster angezeigt werden. Dies passiert allerdings auf einigen PCs nicht und die Anwendung friert ein. (Mauszeiger wird auf dem Anwendungsfenster zur Eieruhr). Die Anwendung kann dann nur noch per Task-Manager geschlossen werden.
Bisher habe ich das Phänomen nur auf Windows 2000 PCs beobachtet. Es gibt aber auch Windows 2000 PCs bei denen die Anwendung tadelos funktioniert.

Bin etwas ratlos - hat jemand eine Idee wo hier ein Fehler liegen kann?

grüße
Sebastian
Alpha_Wolf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 297

Ubuntu, Win XP, Win Vista
C#, Delphi 6 Prof, Delphi 2007 Prof, Java
BeitragVerfasst: Do 02.02.06 11:17 
Was passiert denn in der Funktion "PromptForFileName"?

Dann können wir vielleicht die Ursache finden.

_________________
Diskutiere nie mit einem Irren - er zieht dich auf sein Niveau und schlägt dich mit seiner Erfahrung.
N8Falter74 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53

Win XP
D7 Prof
BeitragVerfasst: Do 02.02.06 11:27 
user profile iconAlpha_Wolf hat folgendes geschrieben:
Was passiert denn in der Funktion "PromptForFileName"?

Dann können wir vielleicht die Ursache finden.


Auszug aus der Delphihilfe:
Zitat:
Die Funktion bewirkt die Anzeige eines Dialogfelds zum Öffnen oder Speichern einer Datei, deren Name der Benutzer angeben kann.

Unit

Dialogs

Kategorie

Dialogfelder und Meldungen

Delphi-Syntax:

ausblenden Delphi-Quelltext
1:
function PromptForFileName(var AFileName: stringconst AFilter: string = ''const ADefaultExt: string = ''const ATitle: string = ''const AInitialDir: string = ''; SaveDialog: Boolean = False): Boolean;					

C++ Syntax:

ausblenden C#-Quelltext
1:
extern PACKAGE bool __fastcall PromptForFileName(AnsiString &AFileName, const AnsiString AFilter, const AnsiString ADefaultExt, const AnsiString ATitle, const AnsiString AInitialDir, bool SaveDialog);					

Beschreibung

Mit PromptForFileName wird ein Dialogfeld zum Öffnen oder Speichern von Dateien angezeigt.

AFilename ist der Name der Datei. Der vom Aufrufer übergebene Wert dient zur Initialisierung des Dateinamens im Dialogfeld. Beim Schließen des Dialogfeldes enthält AFileName den im Dialogfeld angegebenen Dateinamen.

AFilter bestimmt, welche Dateimasken (Filter) im Dialogfeld verfügbar sind. Wenn AFilter einen leeren String enthält, verwendet das Dialogfeld automatisch den String "Alle Dateien (*.*)|*.*". Es werden dann alle Dateien im aktuellen Verzeichnis angezeigt. Informationen zu Filter-Strings finden Sie unter dem Thema Filter.

ADefaultExt legt die Dateinamenserweiterung fest, die automatisch an den übergebenen Dateinamen angefügt wird, falls der gewählte Dateiname nicht bereits eine registrierte Erweiterung enthält. Wenn der Benutzer eine Datei mit einer nicht registrierten Erweiterung angibt, wird ADefaultExt an die Erweiterung angehängt.

ATitle ist der Titel des Dialogfelds. Wenn ATitle auf einen leeren String gesetzt ist, wird in der Titelleiste der String Öffnen bzw. Speichern unter angezeigt, je nachdem, welchen Wert der Parameter SaveDialog hat.

AInitialDir legt das Verzeichnis fest, das beim Öffnen des Dialogfelds angezeigt wird. Wenn AInitialDir ein leerer String ist oder das angegebene Verzeichnis nicht vorhanden ist, wird das von der globalen Variablen ForceCurrentDirectory definierte Anfangsverzeichnis verwendet. Wenn ForceCurrentDirectory den Wert true hat, wird das Dialogfeld mit dem aktuellen Arbeitsverzeichnis geöffnet. Andernfalls wird entweder das aktuelle Arbeitsverzeichnis (NT) oder der Ordner Eigene Dateien (Windows 98 und Windows 2000) angezeigt.

SaveDialog bestimmt, ob das Dialogfeld die Funktion Speichern unter übernimmt (true) oder zum Öffnen von Dateien dient (false).

PromptForFileName gibt den Wert true zurück, wenn der Benutzer einen Dateinamen ausgewählt hat. Der Wert false bedeutet, dass der Benutzer das Dialogfeld mit der Schaltfläche Abbrechen verlassen hat.


Es handelt sich um eine Borland Funktion in der Unit Dialogs.

Inhalt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
function PromptForFileName(var AFileName: stringconst AFilter: string = '';
  const ADefaultExt: string = ''const ATitle: string = '';
  const AInitialDir: string = ''; SaveDialog: Boolean = False): Boolean;
var
  Dialog: TOpenDialog;
begin
  if SaveDialog then
  begin
    Dialog := TSaveDialog.Create(nil);
    Dialog.Options := Dialog.Options + [ofOverwritePrompt];
  end
  else
    Dialog := TOpenDialog.Create(nil);
  with Dialog do
  try
    Title := ATitle;
    DefaultExt := ADefaultExt;
    if AFilter = '' then
      Filter := SDefaultFilter else
      Filter := AFilter;
    InitialDir := AInitialDir;
    FileName := AFileName;
    Result := Execute;
    if Result then
      AFileName := FileName;
  finally
    Free;
  end;
end;


grüße
Sebastian