AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Showmessage oder auch Form.showmodal verschwindet manchmal hinter Form

Showmessage oder auch Form.showmodal verschwindet manchmal hinter Form

Ein Thema von Poolspieler · begonnen am 2. Jul 2012 · letzter Beitrag vom 3. Jul 2012
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
34.931 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#11

AW: Showmessage oder auch Form.showmodal verschwindet manchmal hinter Form

  Alt 2. Jul 2012, 16:22
Das FreeOnTerminate ist nicht nötig, da es im Constructor des TAnonymousThread schon auf true gesetzt wird.
Delphi-Quellcode:
TThread.CreateAnonymousThread(procedure
  begin
    ...
  end).Start;

// oder

TAnonymousThread.Create(procedure
  begin
    ...
  end).Start;
Man könnte aber auch das FreeOnTerminate auf false setzen und eine Warteschleife (ähnlich dem DelayDelay) anhängen, welche auf den Thread wartet, aber die GUI sich aktualisieren läßt.

Die anonymen Methoden können sogar Variablen hin und her verwalten.
Delphi-Quellcode:
proedure Test;
var
  xyz: string;
begin
  xyz := 'abc';

  TThread.CreateAnonymousThread(procedure
    var
      i: Integer;
    begin
      for i := 0 to 29 do begin
        xyz := xyz + IntToStr(i mod 10);
        Sleep(1000);
      end;
      TThread.Synchronize(nil, procedure
        begin
          ShowMessage(xyz);
        end;
    end).Start;
end;
Und das Schöne, man sieht hier sogar direkt den Programmablauf, was sich aber eher nur für kurze Methoden eignet, also für längeren Code sollte man besser eine getrennte Prozedur/Methode übergeben.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 2. Jul 2012 um 16:37 Uhr)
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
394 Beiträge
 
Delphi XE2 Professional
 
#12

AW: Showmessage oder auch Form.showmodal verschwindet manchmal hinter Form

  Alt 2. Jul 2012, 16:48
Delphi-Quellcode:
// oder

TAnonymousThread.Create(procedure
  begin
    ...
  end).Start;
Wie kriegst Du denn das kompiliert?
Das ist ja in der Klassenfunktion TThread.CreateAnonymousThread drin.
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
34.931 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#13

AW: Showmessage oder auch Form.showmodal verschwindet manchmal hinter Form

  Alt 2. Jul 2012, 18:07
Das ist eine anonyme Methode.
Sie wird einfach an Ort und Stelle deklariert, wo man sie verwenden will.

Die gibt es seit Delphi 2009. (genauer, seitdem es die Generics gibt)

- Unicode
- Record-Methoden (schau dir z.B. mal Delphi-Referenz durchsuchenTRect an)
- Record-Operatoren
- Generics
- anonyme Methoden
- ...
Es gab halt in letzer Zeit einige Neuerungen.



Der Parameter des CreateAnonymousThread/Create wurde als procedure of deklariert, womit man dort alles mögliche übergeben kann.
Delphi-Quellcode:
type
  TMyProcedure = procedure; // nimmt nur Prozeduren auf
  TMyMethod = procedure of object; // nimmt nur Methoden auf
  TMyAnonymus = reference to procedure; // nimmt alles auf (dahinter versteckt sich ein geheimes generisches Interface)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 2. Jul 2012 um 18:14 Uhr)
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#14

AW: Showmessage oder auch Form.showmodal verschwindet manchmal hinter Form

  Alt 2. Jul 2012, 18:54
Das ist eine anonyme Methode.
Sie wird einfach an Ort und Stelle deklariert, wo man sie verwenden will.

Die gibt es seit Delphi 2009. (genauer, seitdem es die Generics gibt)

- Unicode
- Record-Methoden (schau dir z.B. mal Delphi-Referenz durchsuchenTRect an)
- Record-Operatoren
- Generics
- anonyme Methoden
- ...
Es gab halt in letzer Zeit einige Neuerungen.



Der Parameter des CreateAnonymousThread/Create wurde als procedure of deklariert, womit man dort alles mögliche übergeben kann.
Delphi-Quellcode:
type
  TMyProcedure = procedure; // nimmt nur Prozeduren auf
  TMyMethod = procedure of object; // nimmt nur Methoden auf
  TMyAnonymus = reference to procedure; // nimmt alles auf (dahinter versteckt sich ein geheimes generisches Interface)
(weil es den DANKE-Button immer noch nicht gibt )
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
394 Beiträge
 
Delphi XE2 Professional
 
#15

AW: Showmessage oder auch Form.showmodal verschwindet manchmal hinter Form

  Alt 3. Jul 2012, 07:38
Das ist eine anonyme Methode.
[...]
Der Parameter des CreateAnonymousThread/Create wurde als procedure of deklariert, womit man dort alles mögliche übergeben kann.[...]
Danke. Mittlerweile kenne ich all diese Features auch. Ich hatte ja weiter oben den Threadersteller darauf hingewiesen.
Meine Frage bezog sich auch nicht auf die Anonyme Methode welche Du übergibst sondern:

TThread.CreateAnonymousThread() ist ja eine Klassenfunktion und da ist auch alles o.k.

Du hast aber geschrieben es gehe auch:
TAnonymousThread.Create() Und dies kann ich meinem Delphi XE2 Upd3 nicht beibringen. Du schon?
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
34.931 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#16

AW: Showmessage oder auch Form.showmodal verschwindet manchmal hinter Form

  Alt 3. Jul 2012, 08:57
Arg, ich hatte mich verguckt.

Delphi-Quellcode:
class function TThread.CreateAnonymousThread(const ThreadProc: TProc): TThread;
begin
  Result := TAnonymousThread.Create(ThreadProc);
end;
Nur daß mal wieder jemand auf die saublöde Idee gekommen ist und diese Klasse versteckt in der Implementation deklariert hat.
Haben die noch nie was von Vererbung gehört und daß es eventuell jemanden geben könnte, der davon mal ableiten wöllte?
Eine Funktion wie CreateAnonymousThread hatte ich mir ja schon vorher (bevor die mir die Idee geklaut hatten), selbst implementiert. (Hier im Forum suchenRunAsThread)

Nja, ich hätte da eher noch die die edde gehabt, für eine Wartefunktion, aber egal, häng ich die halt via Class-Helper an TThread dran.
(CreateAnonymousThreadAndWait)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 3. Jul 2012 um 09:00 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 07:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf