Forum: Object-Pascal / Delphi-Language
Delphi
by Sir Rufo,
2. Jun 2014
Das wird nur für ARC Compiler benötigt, kannst du also mit Compilerschaltern ausklammern.
Anstatt der anonymen Methoden nimmst du einfach TMethod = procedure of object;.
Forum: Object-Pascal / Delphi-Language
Delphi
by Sir Rufo,
2. Jun 2014
Wenn MyClass ein Klassentyp ist und dann muss MyClass.MachWas eine class procedure sein.
Daraus folgt weiterhin, dass mit MyClass.Create; ein Speicherleck erzeugt wird.
Wenn MyClass : TMyClass; ist (Instanz-Variable), dann wird mit MyClass.Create; der constructor nochmals durchlaufen ohne eine weitere Instanz zu erzeugen. Dazu muss aber MyClass schon mit einer gültigen Instanz belegt sein....
Forum: Object-Pascal / Delphi-Language
Delphi
by Sir Rufo,
2. Jun 2014
@Dejan Vu
Wenn es danach geht, muss man die gesamte Vorgehensweise in Frage stellen.
Denn Sinn macht das hier nur, wenn der echte Code in einem Thread gestartet wird (oder - igitt - mit Application.ProcessMessages rumhantiert wird), ansonsten sieht man davon eher recht wenig (z.B. das Setzen des TrafficLights im Ausgangsbeitrag), da der MainThread blockiert ist.
Wenn das aber in einem...
Forum: Object-Pascal / Delphi-Language
Delphi
by Sir Rufo,
2. Jun 2014
Im Profil des TE steht was von XE2 (dafür habe ich mich entschieden ;))
Forum: Object-Pascal / Delphi-Language
Delphi
by Sir Rufo,
2. Jun 2014
Nebenbei bemerkt, ist diese direkte Referenzierung MainFrom.TrafficLight := tlRed; natürlich sehr suboptimal. Damit hast du der Klasse eine sehr starke Abhängigkeit gegeben, die man eigentlich vermeiden soll (eigentlich muss).
Das solltest du anders lösen
Forum: Object-Pascal / Delphi-Language
Delphi
by Sir Rufo,
2. Jun 2014
Erweitere die Klasse um eine class function Construct : IWaitCursor;
type
IWaitCursor = interface
end;
TWaitCursor = class (TInterfacedObject, IWaitCursor)
private
fCursor : TCursor;
public
Forum: Object-Pascal / Delphi-Language
Delphi
by Sir Rufo,
2. Jun 2014
Das gibt ein Speicherleck ;)
Aber ebenfalls ein Speicherleck ;)