AGB  ·  Datenschutz  ·  Impressum  







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

Form1 aus Form2 schluießen

Ein Thema von BAMatze · begonnen am 5. Mär 2009 · letzter Beitrag vom 23. Mai 2009
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.351 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: Form1 aus Form2 schluießen

  Alt 6. Mär 2009, 10:37
Es gibt einen Bereich mit Konstanten für Botschaften des Systems. Diese darf man natürlich nicht selbst nutzen, das wäre dann ja vielleicht z.B. der selbe Wert wie WM_PAINT. Deshalb gibt es die Grenze WM_USER, ab diesem Wert kann man eigene Konstanten definieren für die Botschaften.

Deshalb zählt man zu diesem ersten möglichen Wert noch etwas dazu um einen gültigen Konstantenwert für die eigenen Botschaften zu bekommen.

Wichtig:
Botschaften zwischen WM_USER und WM_APP dürfen nur innerhalb der Anwendung benutzt werden!
Sollen die Botschaften systemweit verwendet werden, dann müssen diese oberhalb von WM_APP liegen.

Mehr dazu findet sich in der Dokumentation von Microsoft:
http://msdn.microsoft.com/en-us/library/ms644931.aspx
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#12

Re: Form1 aus Form2 schluießen

  Alt 6. Mär 2009, 10:42
Also erstmal: Kein Problem. Hab gerne geholfen

Zum Nächsten mit den Messages:

Aus der Hilfe:
Zitat:
The WM_USER constant is used by applications to help define private messages for use by private window classes, usually of the form WM_USER+X, where X is an integer value.
Es Basiert also darauf, dass es Nummern sind. Es gibt vergebene Nummern (unterhalb von WM_USER) wie z.B. WM_CLOSE. Diese dürfen halt nicht verwendet werden.
Du erzeugst dir als eine Konstante für eine Message im Bereich WM_USER +X und unterhalb von WM_APP um eigene Nachrichten zu verarbeiten - also solche die es noch nicht gibt.

Um jetzt auf so eine Nachricht reagieren zu können muss man ein paar Regeln einhalten. Ich denke aber, da gibt es weit aus qualifiziertere Leute hier die das erklären könnten. Im groben kann ich dir aber erklären was ich gemacht habe.

Die Methode procedure WMMachJetztWeiter(var Msg: TMessage); selber dürfte ja klar sein. Durch das dahinter schreiben von message WM_MACH_JETZT_WEITER; erkläre ich, dass diese Methode ausgelöst werden soll, wenn eine Nachricht mit dieser Nummer - WM_MACH_JETZT_WEITER - kommt.

Und das ist alles.

Und den Aufwand betreiben wir quasi nur, um den Thread von dem MainThread zu entkoppeln

Gruß, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Form1 aus Form2 schluießen

  Alt 6. Mär 2009, 10:53
Danke an Chris und jaenicke für die Erklärung
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Form1 aus Form2 schluießen

  Alt 9. Mär 2009, 09:53
Hallo hier nochmal eine kleine Frage zu meinem Verständnis zu den Windows-Messages und ihrem Gültigkeitsbereich.

Wenn ich in einer Unit eine:
  const M_MACH_WEITER = WM_USER +1; definiere, ist diese rein für diese Form/Unit und nicht für das gesamte Projekt gültig, so dass ich für eine andere Form/Unit diese WM_User+1-Message nochmal benutzen könnte oder?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.351 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: Form1 aus Form2 schluießen

  Alt 9. Mär 2009, 09:58
Du versendest diese Botschaft als Windowsbotschaft. D.h. es darf nicht passieren, dass zwei verschiedene Nachrichten mit dem selben Wert an die selbe Adresse gehen. Denn für den Empfänger wäre diese ja dann anhand des Wertes nicht mehr zu unterscheiden.

Deshalb ist es keine gute Idee mehrere Botschaften mit dem selben Wert zu benutzen. Am besten gib immer verschiedene Werte, dann kann auch nichts durcheinander gehen.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#16

Re: Form1 aus Form2 schluießen

  Alt 9. Mär 2009, 10:36
Hallo,

sehe ich ähnlich wie jaenicke allerdings mit einer Unterscheidung. Da bei jedem Post/SendMessage eine Adresse angegeben werden muss - der Handle des Fensters das diese Botschaft verarbeiten soll - kann man durchaus ein und die selbe Nummer vergeben für unterschiedliches verhalten. Schliesslich sind die Aufgaben oftmals sehr Fensterbezogen, also doch sehr nah an dem Fenster für das die Nachricht ist.

Da man aber eben in der Programmierung nie weiß was noch kommt sollte man vielleicht schon den Weg der Eindeutigkeit gehen Dann sollten diese aber auch global in einer Deklarationsunit liegen. Sonst wird die Suche nach diesen Variablen um die entsprechend nächste Konstante anzulegen doch etwas aufwendig

Gruß, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
Dipl Phys Ernst Winter

Registriert seit: 14. Apr 2009
Ort: Jena
103 Beiträge
 
Delphi 3 Professional
 
#17

Re: Form1 aus Form2 schluießen

  Alt 23. Mai 2009, 16:02
Versuchts doch einmal ganz einfach:
Das Hauptformular exportiert eine logische Variable
isAborted: boolean; Form2 wird geöffnet mit
Delphi-Quellcode:
procedure TForm1.btnForm2ShowClick(Sender: TObject);
begin
  Form2.ShowModal;
  if isAborted then Close
end;
Zum Schließen von Form2 gibt es die Buttons btnClose und btnAbort
Delphi-Quellcode:
procedure TForm2.btnCloseClick(Sender: TObject); // Form2 schließen
begin
  isAborted:= false; Close
end;

procedure TForm2.btnAbortClick(Sender: TObject); // Programm beenden
begin
  isAborted:= true; Close
end;
die dem Hauptprogramm mit isAborted übermitteln, ob das Programm beendet werden soll oder nicht.

Mit ModalResult kann man's eleganter ausdrücken, es ist dann aber nicht mehr so einfach zu überblicken.
Angehängte Dateien
Dateityp: zip form2abort_194.zip (105,7 KB, 0x aufgerufen)
Autor: DP Ernst Winter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 14:46 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