Autor Beitrag
MephistoFFF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win 7

BeitragVerfasst: Fr 12.12.08 18:42 
Meine frage ist eigentlich ganz simpel: Wie fange ich das beenden über das standardmäßige rote "X" ab?
Also ich will nachdem auf das rote X geklicht wird noch befehle ausführen lassen, bevor sich die form schließt.
Wie kann ich das umsetzen?

Danke für eure Hilfe.

mfG
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Fr 12.12.08 18:44 
CloseQuery ist das wort das du suchst! Gibs mal in die Hilfe ein und du wirst weiterkommen. ;-)

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 12.12.08 18:45 
Oder einfach OnClose noch schnell das abarbeiten, was abzuarbeiten ist.
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Fr 12.12.08 19:29 
Um was handelt es sich denn? Wenn du Variablen, die du in OnCreate erzeugt hast, wieder freigeben willst, ist OnDestroy die richtige Wahl. Willst du das Beenden vielleicht noch abbrechen, verwende OnCloseQuery. Für alles andere ist OnClose gedacht.
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit
D7, BDS 2006, RAD Studio 2009+C++, Delphi XE2, XE3, VS 2010 Prof.
BeitragVerfasst: Fr 12.12.08 19:51 
Hallo MephistoFFF,

um ein Programm nur mit einem Passwort zu schließen, verwende ich das onClose-Ereignis.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TfrmHauptMenue.FormClose(Sender: TObject; var Action: TCloseAction);
var
  Prg_Ende: Boolean;
begin
  Prg_Ende:= FALSE;
  TFormPassWort.PassWortFreigabe (PRG_Ende); // Aufruf des Paßwort-Forms
  if Prg_Ende then
  begin
    Action:= caFree;  // Erst, wenn das richtige Paßwort eingegeben worden ist.
  end else
  begin
    Action := caNone; // Zurück zum Programm
  end;
end;

Bis bald Chemiker
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Fr 12.12.08 20:17 
user profile iconChemiker hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TfrmHauptMenue.FormClose(Sender: TObject; var Action: TCloseAction);
var
  Prg_Ende: Boolean;
begin
  Prg_Ende:= FALSE;
  TFormPassWort.PassWortFreigabe (PRG_Ende); // Aufruf des Paßwort-Forms
  if Prg_Ende then
  begin
    Action:= caFree;  // Erst, wenn das richtige Paßwort eingegeben worden ist.
  end else
  begin
    Action := caNone; // Zurück zum Programm
  end;
end;


WT...? Du greifst direkt auf eine Methode zu, ohne Instanz der Klasse?? Selbst wenn es funktionieren sollte, ist es verdammt unschön.
Btw: Dafür ist das Ereignis "OnCloseQuery" eher gedacht.

_________________
PROGRAMMER: A device for converting coffee into software.
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit
D7, BDS 2006, RAD Studio 2009+C++, Delphi XE2, XE3, VS 2010 Prof.
BeitragVerfasst: Fr 12.12.08 20:25 
Hallo Xentar,

warum ist das unschön? Ich finde das eigentlich sehr übersichtlich.

Bis bald Chemiker
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 12.12.08 20:45 
In neueren Delphi-Versionen funktioniert das, wenn man die Methode als class procedure deklariert. Innerhalb solcher Methoden kann dann aber natürlich nicht auf instanzspezifische Dinge wie eigene Felder zugegriffen werden.
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit
D7, BDS 2006, RAD Studio 2009+C++, Delphi XE2, XE3, VS 2010 Prof.
BeitragVerfasst: Fr 12.12.08 20:54 
Hallo Xentar und DeddyH,

genau, nicht eine Procedure sondern ich setze eine Function ein.

Ist nur ein Beispiel, Passwort ist nicht sicher! Damit wird ein Button [Beenden] freigegeben.

ausblenden volle Höhe 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:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
type
  TFormPassWort = class(TForm)
    StatusBar1: TStatusBar;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    Edit1: TEdit;
    Label1: TLabel;
    procedure Edit1Change(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    class function PassWortFreigabe (out Rueckgabe : Boolean): Boolean;
  end;

implementation

{$R *.dfm}

class function TFormPassWort.PassWortFreigabe (out Rueckgabe : Boolean): Boolean;
begin
  with TFormPassWort.Create(nildo
    try
      Result := ShowModal=mrok;  // ModalResult auf mrOk
      if Result then
        Rueckgabe := TRUE            // Rückgabe-Wert
       else
        Rueckgabe := FALSE;
     finally
       free;                    // Speicherfreigabe
   end;
end;

procedure TFormPassWort.Edit1Change(Sender: TObject);
begin
  if Edit1.Text = 'P' then   // Das Paßwort muss noch geändert werden.
    BitBtn3.Enabled := TRUE; // Der Button wird freigegeben
end;

end.

Bis bald Chemiker
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 12.12.08 20:57 
Sry, ich hatte Klassenmethoden sagen wollen, aber der Begriff war mir nicht mehr eingefallen ;)
turboPASCAL
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP / Vischda
D6 PE / D2005 PE
BeitragVerfasst: Fr 12.12.08 20:59 
[ot] Ja, das kommt so mit dem Alter... :mrgreen: [/ot]

_________________
Nein, ich bin nicht der turboPASCAL aus der DP, ich seh nur so aus... :P
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 12.12.08 21:01 
[OT] Immerhin bin ich nicht der Älteste in diesem Forum :mrgreen: [/OT]
turboPASCAL
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP / Vischda
D6 PE / D2005 PE
BeitragVerfasst: Fr 12.12.08 21:05 
:lol:

_________________
Nein, ich bin nicht der turboPASCAL aus der DP, ich seh nur so aus... :P
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit
D7, BDS 2006, RAD Studio 2009+C++, Delphi XE2, XE3, VS 2010 Prof.
BeitragVerfasst: Fr 12.12.08 21:10 
[OT] ich auch nicht, glaube ich [OT]

Bis bald Chemiker
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Fr 12.12.08 22:00 
Ach, Klassenmethoden, daran hab ich gar nicht gedacht :(
Hab zwar auch D2007, die Dinger aber noch nie benutzt..
ich würd es immer noch auf die "klassiche" Art machen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.CloseQuery;
begin
  MyPasswordDLG := TPasswordDLG.Create(self);
  try
    MyPasswordDLG.ShowModal;
    CanClose := MyPasswordDLG.PassWortFreigabe;
  finally
    FreeAndNil(MyPasswordDLG);
  end;
end;

Mal so grob ausm Kopf geschriebem

_________________
PROGRAMMER: A device for converting coffee into software.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 12.12.08 22:20 
Das ist aber deutlich unübersichtlicher als das ganze gekapselt an der Stelle zu machen wo es hingehört. ;-)
Da finde ich hat user profile iconChemiker schon recht. Vor allem muss dann die aufrufende Klasse nix weiter wissen wie das Formular erzeugt und angezeigt wird, sondern nur diese eine Methode aufrufen.

user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Ach, Klassenmethoden, daran hab ich gar nicht gedacht :(
Hab zwar auch D2007, die Dinger aber noch nie benutzt..
Die gibts schon mindestens seit Delphi 3, also 11 Jahre. :lol: :lol: :lol:
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Sa 13.12.08 01:54 
mkay, geb mich geschlagen, habs grad in D5 ausprobiert, und da ging das auch schon durch den Compiler.
Komisch, könnt schwören, dass diese class function mal bei D2006 auf der "New features" Liste stand.

Naja, habs trotzdem noch nie verwendet, und leb immernoch :D aber könnte ich in Zukunft auch mal verwenden, jo.

_________________
PROGRAMMER: A device for converting coffee into software.
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Sa 13.12.08 10:28 
user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Naja, habs trotzdem noch nie verwendet, und leb immernoch :D
Das gilt auch für 'Repeat..Until'. :wink:

_________________
Na denn, dann. Bis dann, denn.
Mitmischer 1703
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: Sa 13.12.08 11:23 
Was für einen Sinn hat dein schöner Knopf, wenn der Taskmanager doch diesen gar nich braucht? :gruebel: :mrgreen:

_________________
Die Lösung ist nicht siebzehn.
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit
D7, BDS 2006, RAD Studio 2009+C++, Delphi XE2, XE3, VS 2010 Prof.
BeitragVerfasst: Sa 13.12.08 14:24 
Hallo Mitmischer 1703,

Mitmischer 1703 hat folgendes geschrieben:
Was für einen Sinn hat dein schöner Knopf, wenn der Taskmanager doch diesen gar nich braucht?

???

Bis bald Chemiker