Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [Prism] Delegates von C# nach Prism übersetzen. (https://www.delphipraxis.net/143621-%5Bprism%5D-delegates-von-c-nach-prism-uebersetzen.html)

Tonic1024 20. Nov 2009 15:55

Re: [Prism] Delegates von C# nach Prism übersetzen.
 
Okay... Ich bin durch try and error und durch deine Bemerkung mit der Methode grad drauf gekommen...
Delphi-Quellcode:
API:= new Vertraulich;
API.Phone_GetNetState(@GetNetState_Callback);
So gehts. Hab's nur nicht gleich gemerkt, weil ich versucht hab ein visuelles Objekt zu updaten.

Ich weiss... Neue Frage neuer Thread. Aber vielleicht gibts ja ne ganz einfache Antwort darauf. Warum geht der Code aus GetNetState_Callback (Post #7) jetzt nicht? Messagebox geht aber obriger Code nicht ?!?

Und nochwas... was ist der Reflector und wo finde ich den? Hab ein deutsches Prism - heisst der vielleicht anders oder ist das ein externes Tool?


Toni

Phoenix 20. Nov 2009 16:11

Re: [Prism] Delegates von C# nach Prism übersetzen.
 
Der Reflector ist ein externes Tool und den gibts hier: http://www.red-gate.com/products/reflector/

Generell gilt:
Zitat:

Zitat von Tonic1024
Warum geht der Code aus GetNetState_Callback (Post #7) jetzt nicht? Messagebox geht aber obriger Code nicht ?!?

ist eine ungeheuer aussagekräftige Fragestellung. WAS geht daran denn nicht? Wie hast Du das getestet?
Delphi-Quellcode:
method MainForm.GetNetState_Callback(handle: IntPtr; ret: eTYPE_RETURN; State: UInt32);
begin
  if State = 1 then
    Label8.Visible:=true
  else
    Label8.Visible:=false;
end;
geht nicht aber:
Delphi-Quellcode:
method MainForm.GetNetState_Callback(handle: IntPtr; ret: eTYPE_RETURN; State: UInt32);
begin
  MessageBox.Show('State ist ' + State.ToString());
end;
funktioniert?

Tonic1024 20. Nov 2009 16:22

Re: [Prism] Delegates von C# nach Prism übersetzen.
 
Exakt...

Hatte jetzt nicht vermutet, dass das so tiefgründig war. Wär ich jetzt in Delphi32 hätte ich vermutet dass da jetzt jemand kommt und sagt: Ach, das... Mach mal ein "ProcessMessages" oder ein "Synchronize" rein, denn geht das.

Könnte mir halt vorstellen, dass der Callback asynchron rein kommt und das GUI nicht updaten kann. Und da hab ich halt einfach angenommen dafür gäbs ein Patentrezept.

Toni

Phoenix 20. Nov 2009 16:38

Re: [Prism] Delegates von C# nach Prism übersetzen.
 
Zitat:

Zitat von Tonic1024
Könnte mir halt vorstellen, dass der Callback asynchron rein kommt und das GUI nicht updaten kann. Und da hab ich halt einfach angenommen dafür gäbs ein Patentrezept.

Ah. Jo, dafür gibts eins ;-)
Delphi-Quellcode:
method MainForm.GetNetState_Callback(handle: IntPtr; ret: eTYPE_RETURN; State: UInt32);
begin
  SetControlVisibility(Label8, State = 1);
end;

method MainForm.SetControlVisibility(ctrl: Control; newVisibilty: Boolean);
begin
  if ctrl.InvokeRequired then
  begin
    ctrl.Invoke(method begin SetControlVisibility(ctrl, newVisibility); end);
    exit;
  end;

  ctrl.Visible := newVisibility;
end;

Tonic1024 20. Nov 2009 18:02

Re: [Prism] Delegates von C# nach Prism übersetzen.
 
Das ist exakt was ich meinte. :D

Grad fällt mir auf, dass dort noch andere Events gesynct auf der Oberfläche "herumkritzeln". Das kracht von Zeit zu Zeit. Aber Um diese Detail muss ich mich nach meinem Urlaub kümmern.

Vielen Dank für die rasche Hilfe.


Toni

Phoenix 20. Nov 2009 18:42

Re: [Prism] Delegates von C# nach Prism übersetzen.
 
Der Teil
Delphi-Quellcode:
  if ctrl.InvokeRequired then
  begin
    ctrl.Invoke(method begin SetControlVisibility(ctrl, newVisibility); end);
    exit;
  end;
Ist das pattern was man hier ansetzt. Es dürfte in ein paar Tagen auch einen Aspekt dafür geben. Dann muss man nur noch
[Aspect:SyncWithUIThreadIfNeeded] (oder so ähnlich) über die Methodendeklaration setzen und *wuppdi* macht Cirrus das automatisch ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:45 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz