AGB  ·  Datenschutz  ·  Impressum  







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

Sender: TSaveDialog or TOpenDialog

Ein Thema von Martin W · begonnen am 16. Apr 2006 · letzter Beitrag vom 16. Apr 2006
Antwort Antwort
Seite 1 von 2  1 2      
Martin W

Registriert seit: 29. Mai 2004
Ort: Augsburg
220 Beiträge
 
Delphi XE3 Enterprise
 
#1

Sender: TSaveDialog or TOpenDialog

  Alt 16. Apr 2006, 08:20
Hi;

Gibt es eine Möglichkeit folgendes Umzusetzten:
Delphi-Quellcode:
procedure Tserver_mainform_form.ExecuteDialog(OnCanClose: TCloseQueryEvent; Sender: TSaveDialog or TOpenDialog);
begin
  if Sender = TOpenDialog then
    begin
      Sender := TOpenDialog.Create(server_mainform_form);
      Sender.DefaultExt := 'xml';
      Sender.Filter := 'XML File / xml|*.xml';
      Sender.Title := 'Datei öffnen...';
      Sender.OnCanClose := OnCanClose;
      Sender.Options := [ofHideReadOnly,ofFileMustExist,ofEnableSizing];
      Sender.Execute;
      Sender.Free;
    end;
  if Sender = TSaveDialog then
    begin
      Sender := TSaveDialog.Create(server_mainform_form);
      Sender.DefaultExt := 'xml';
      Sender.Filter := 'XML File / xml|*.xml';
      Sender.Title := 'Speichern unter...';
      Sender.OnCanClose := SaveDialog1CanClose;
      Sender.Options := [ofOverwritePrompt,ofHideReadOnly,ofEnableSizing];
      Sender.Execute;
      Sender.Free;
    end;
end;
Momentan kommt wegen Sender: TSaveDialog or TOpenDialog folgende Fehlermeldung:

[Fehler] server_mainform_unit.pas(87): E2029 ';', ')' oder '=' erwartet, aber 'OR' gefunden

wie bekomme ich es trotzdem hin??? Es darf nur eine Prozedur sein, nicht 2

[edit=Sharky]Delphi-Tags gesetzt. Mfg, Sharky[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#2

Re: Sender: TSaveDialog or TOpenDialog

  Alt 16. Apr 2006, 08:47
Delphi-Quellcode:
procedure Tserver_mainform_form.ExecuteDialog(OnCanClose: TCloseQueryEvent;Sender: TObject);
begin
// sender MUSS schon vor dem Aufruf der Funktion existieren,
// und darf nicht erst in der Funktion durch TEtwas.Create(AOwner...) valid gemacht
if Sender is TSaveDialog then
begin
//....
end
else if Sender is TOpenDialog then
begin
//....
end;
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
16. Apr 2006, 08:49
Dieses Thema wurde von "Sharky" von "Programmieren allgemein" nach "VCL / WinForms / Controls" verschoben.
Ist ja eine Frage zu Delphi.
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Sender: TSaveDialog or TOpenDialog

  Alt 16. Apr 2006, 10:31
Hallo,

wenn ich das richtig verstehe, möchtest Du in Abhängigkeit eines Parameters einen Open- oder Save-Dialog erstellen und anzeigen. Die sauberste Lösung besteht darin, einen Aufzählungstypen für diesen Parameter zu definieren:

Delphi-Quellcode:
type
  TDialogType = (dtOpen, dtSave);

procedure Tserver_mainform_form.ExecuteDialog(AOnCanClose: TCloseQueryEvent; AType: TDialogType);
  var lOpenDialog : TOpenDialog;
      lSaveDialog : TSaveDialog;
begin
  case AType of
    dtOpen:
      begin
        lOpenDialog := TOpenDialog.Create(server_mainform_form);
        try
          lOpenDialog.DefaultExt := 'xml';
          lOpenDialog.Filter := 'XML File / xml|*.xml';
          lOpenDialog.Title := 'Datei öffnen...';
          lOpenDialog.OnCanClose := AOnCanClose;
          lOpenDialog.Options := [ofHideReadOnly,ofFileMustExist,ofEnableSizing];
          lOpenDialog.Execute;
        finally
          lOpenDialog.Free;
        end;
      end;
    dtSave:
      begin
        lSaveDialog := TSaveDialog.Create(server_mainform_form);
        try
          lSaveDialog.DefaultExt := 'xml';
          lSaveDialog.Filter := 'XML File / xml|*.xml';
          lSaveDialog.Title := 'Speichern unter...';
          lSaveDialog.OnCanClose := SaveDialog1CanClose;
          lSaveDialog.Options := [ofOverwritePrompt,ofHideReadOnly,ofEnableSizing];
          lSaveDialog.Execute;
        finally
          lSaveDialog.Free;
        end;
      end;
  end; // case AType
end;
Der Aufruf der Routine könnte dann so aussehen:

ExecuteDialog (DialogCanClose, dtOpen); Drei Dinge sind mir noch aufgefallen:

1.) Beim Erzeugen eines Dialogs übergibst Du die Formularvariable als Eigentümer, "Self" oder "Nil" wären hier die bessere Wahl. Eine direkte Verwendung der Formularvariablen als Owner sollte man nach Möglichkeit vermeiden.

2.) Das (boolesche) Ergebnis des Execute-Aufrufs wird von Dir nicht ausgewertet. Wie erfährst Du nun, ob der Benutzer den Dialog abgebrochen oder seine Eingabe bestätigt hat?

3.) Den OnCanClose-Handler für den Open-Dialog möchtest Du als Parameter übergeben, beim Save-Dialog wird ein fester Wert benutzt. Existieren beide Dialog vielleicht schon beim Aufruf der Routine? In diesem Fall wäre das erneute Erzeugen innerhalb der Routine wahrscheinlich überflüssig.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Martin W

Registriert seit: 29. Mai 2004
Ort: Augsburg
220 Beiträge
 
Delphi XE3 Enterprise
 
#5

Re: Sender: TSaveDialog or TOpenDialog

  Alt 16. Apr 2006, 16:47
Danke für eure Umfangreichen Antworten, ihr habt mir sehr weitergeholfen !!!

Gruß
Martin
  Mit Zitat antworten Zitat
Martin W

Registriert seit: 29. Mai 2004
Ort: Augsburg
220 Beiträge
 
Delphi XE3 Enterprise
 
#6

Re: Sender: TSaveDialog or TOpenDialog

  Alt 16. Apr 2006, 17:09
Erst mal Danke für deine Antwort

Zitat von Hawkeye219:
1.) Beim Erzeugen eines Dialogs übergibst Du die Formularvariable als Eigentümer, "Self" oder "Nil" wären hier d
die bessere Wahl. Eine direkte Verwendung der Formularvariablen als Owner sollte man nach Möglichkeit vermeiden.
Soll ich dies auch machen wenn ich Fenster erzeuge??? Immer Owner "self" oder "nil" lassen? Welche Auswirkungen hat dies?

Zitat von Hawkeye219:
3.) Den OnCanClose-Handler für den Open-Dialog möchtest Du als Parameter übergeben, beim Save-Dialog wird ein fester Wert benutzt. Existieren beide Dialog vielleicht schon beim Aufruf der Routine? In diesem Fall wäre das erneute Erzeugen innerhalb der Routine wahrscheinlich überflüssig.
Das war ein Versehen, sollte nicht sein...

Aber mal eine andere Frage, du hast ein sehr einheitliches System beim bennennen von Variablen, etc... Gibt es dafür soetwas wie eine Richtlinie? Wenn ja, wo kann man diese nachlesen?


Gruß
Martin W.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#7

Re: Sender: TSaveDialog or TOpenDialog

  Alt 16. Apr 2006, 17:12
Hi!

Vielleicht hilft dir das weiter:
http://community.borland.com/soapbox...,10280,00.html


Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Martin W

Registriert seit: 29. Mai 2004
Ort: Augsburg
220 Beiträge
 
Delphi XE3 Enterprise
 
#8

Re: Sender: TSaveDialog or TOpenDialog

  Alt 16. Apr 2006, 17:22
Perfekt, so waas habe ich gesucht! Danke!
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Sender: TSaveDialog or TOpenDialog

  Alt 16. Apr 2006, 17:37
Hallo Martin,

durch die Übergabe eines Owners legst Du ja den Besitzer der zu erzeugenden Komponente fest. Übergibst Du hier 'Nil', so mußt Du selbst die Komponente freigeben, im anderen Fall übernimmt der Owner die Verantwortung für die Freigabe. Eine ausführliche Erklärung zu den Besitzverhältnissen bei Komponenten findest Du in der Online-Hilfe unter dem Stichwort Delphi-Referenz durchsuchenTComponent.Owner.

Zum Thema "Bennennung von Variablen" hat Dir ja Frederic bereits einen Link genannt. Wenn Du über eine Suchmaschine Informationen zu diesem Thema oder zum Thema "Code-Formatierung" suchst, wirst Du auf sehr viele - auch gegensätzliche - Vorschläge stoßen. Die meisten orientieren sich an den unverbindlichen Vorgaben von Borland, so auch die DP. Lies einige Dokumente und übernimm die Vorschläge, die Dir sinnvoll erscheinen. Weiche dabei nach Möglichkeit nicht allzu weit von vorhandenen Standards ab, das erleichtert später die Zusammenarbeit mit anderen Programmierern in einem Team.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Martin W

Registriert seit: 29. Mai 2004
Ort: Augsburg
220 Beiträge
 
Delphi XE3 Enterprise
 
#10

Re: Sender: TSaveDialog or TOpenDialog

  Alt 16. Apr 2006, 17:43
@ Hawkeye219

Danke dir!!!

Ich schreibe momentan an einem kleinen TCP Server... könnte ich hier evt. mal ne Code posten bzw. den Quellcode zum download veröffentlichen damit ich Anregungen bekomme, wie ich den Sourcecode noch sauberer schreiben könnte, welche Fehler ich mache, ob es gut Kommentiert ist, etc...

Das ganze sind knapp 600 Zeilen.. aber rund die Hälfe davon sind Kommentare.

Gruß
  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 22:42 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