Versuche eine Lösung zu finden... Und weiss gerade nicht weiter.

Antworten
Rhyt
Beiträge: 70
Registriert: Mo 28. Nov 2022, 20:22

Versuche eine Lösung zu finden... Und weiss gerade nicht weiter.

Beitrag von Rhyt »

Ich habe die letzten Wochen versucht eine Anwendung zu erstellen unter macOS die den Apple Kalender auslesen kann. Das auslesen funktioniert, nur geht das mit dem behandeln von den Eventhandlern nicht, und dazu sind die genutzten Header usw. die die MacAPi under Lazarus nutzt depricated und sollten einfach nichtmehr genutzt werden. Mein wissen ist zu gering um selbst etwas zu Wrappen oder ähnliches.
am Schluss sollen einfach die Kalendereinträge genutzt werden um eine Rechnung mit einem Report generator raushauen zu können.

In Delphi funktioniert das mit den Eventhandlern und dem Eventkit wunderbar, jedoch kosten die Report Generatoren einfach zuviel und ich habe nichts freies gefunden... es ist einfach zum kotzen.

Entweder ich mache das weiter mit Lazarus und habe ein Report generator aber dafür arbeite ich mit depricated aufrufen... und kann den handler nicht handeln weill das zu einem Absturz führen wird... wo mir irgendwie keiner helfen kann damit umzugehen. habe auch schon im Englischen Forum gefragt, alle Antworten haben zu keinem Ergebnis geführt. D.h. mit dem nächsten OS update kann es sein das die Anwendung einfach nichtmehr funktioniert...
Oder nehme delphi und kaufe nen Report generator.... Oder keine ahnung, lasse es am besten gleich mit Delphi und Co, und lerne Swift und versuche das irgendwie über ne HTML Seite zu lösen die dann gedruckt wird.

Oder eventuell ist das alles nicht so tragisch... und einfach zu lösen... aber keine Ahnung wie was wo.. steh grad bisschen vor einer Wand.

Rhyt
Beiträge: 70
Registriert: Mo 28. Nov 2022, 20:22

Re: Versuche eine Lösung zu finden... Und weiss gerade nicht weiter.

Beitrag von Rhyt »

Hab eine Lösung gefunden...
und ich verstehe noch nicht genau weshalb ich das so machen kann Vielleicht kann mir das einer erklären, dachte da müsste noch viel im hintergrund gemacht werden wenn man etwas wrappen möchte? heist das so?.

- (void)requestFullAccessToEventsWithCompletion:(EKEventStoreRequestAccessCompletionHandler)completion;

steht in der eventkit Doku für MacOS 14

ich hab jetzt versucht das nachzubasteln, und das scheint zu funktionieren. Ich dachte da muss man irgendwie noch mehr machen als

Code: Alles auswählen

  TEKEventStoreRequestAccessCompletionHandler = procedure(granted: Boolean; error: NSError) of object; cblock; cdecl;

   EKEventStore = objcclass external (NSObject)
     procedure requestFullAccessToEventsWithCompletion(completion: TEKEventStoreRequestAccessCompletionHandler); message 'requestFullAccessToEventsWithCompletion:'; // Beachten Sie die Verwendung der message-Direktive

Code: Alles auswählen

unit Unit1;

{$mode delphi}
{$modeswitch objectivec1}
{$modeswitch cblocks}
{$linkframework eventkit}
interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,MacOSAll,CocoaAll,CocoaUtils;

type

  TEKEventStoreRequestAccessCompletionHandler = procedure(granted: Boolean; error: NSError) of object; cblock; cdecl;

   EKEventStore = objcclass external (NSObject)
     procedure requestFullAccessToEventsWithCompletion(completion: TEKEventStoreRequestAccessCompletionHandler); message 'requestFullAccessToEventsWithCompletion:'; // Beachten Sie die Verwendung der message-Direktive

   end;
  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    procedure RequestAccessHandler(granted: Boolean; error: NSError); cdecl;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

procedure TForm1.RequestAccessHandler(granted: Boolean; error: NSError);
begin

  if granted then
  label1.caption := 'granted'
  else If Assigned(error) then
  Label1.Caption := 'Fehler: ' + UTF8String( error.localizedDescription);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  store: EKEventStore;
begin
  store := EKEventStore.alloc.init;
  store.requestFullAccessToEventsWithCompletion(RequestAccessHandler);
end;


end.

Antworten