Läuft Xojo2017R3 unter Sequoia

Hallo Leute, weiß jemand, ob Xojo2017R3 unter Sequoia noch läuft?
Mein ur-altes Projekt compiliert unter neueren Xojo-Versionen nicht mehr.

Liebe Grüße

Stefan

Garantiert ist die Version zu alt für Sequoia. Was ist denn das Problem mit dem alten Projekt?

Mein Problem ist, dass ich seit über 6 Jahren nicht mehr programmiere und da völlig raus bin. Ich habe wohl die aktuelle Xojo Version, aber mir fehlen die Skills, um die alten Klassen, die ich da benutze, selbst zu aktualisieren. Ich habs mehrfach versucht, scheitere aber …

Zeig doch mal ein Beispiel … So schwierig kann das nicht sein.

Ich glaube, das würde den Rahmen hier sprengen. Vor allem die Klassen, die auf einem (alten)Canvas aufbauen, werfen halt eine Menge Fehler raus, dann laufen die alten Datum-Sachen (100 MAL AbbreviatedDate) nicht mehr. Dann benutze ich ChartPart, um meine Statistik darzustellen, ebenfalls eine uralte Grafikklasse. file.mactype gibt es nicht mehr… ich denke, das hier Stück für Stück durchzugehen sprengt den Rahmen.

Mactype gibt’s halt nicht mehr, weil es das in macOS nicht mehr gibt; insofern würde Dir auch eine alte Xojo-Version nicht helfen, wenn die unter dem aktuellen macOS laufen soll.

Und Probleme, die hundert Mal auftreten, erledigt man am schnellsten, da man es nur an einer Stelle tun muss; der Rest ist „Alles ersetzen“. Du könntest Dir auch in wenigen Minuten ein eigenes AbbreviatedDate schreiben.

1 Like

Da mußt Du leider durch, wenn Du das alte Programm zum laufen bekommen willst. Hier schon mal etwas für das Datum:

Public Function getShortDate(extends theDate as DateTime) As String
  
  if theDate = Nil then Return ""
  
  Return theDate.ToString(Locale.Current, DateTime.FormatStyles.Short, DateTime.FormatStyles.None)
  
End Function
1 Like

Hallo Stefan, diese Themen scheinst du letztes Jahr diskutiert zu haben, wie ich zufällig sehe. Und alle mit Antworten und Tipps. Nur mal Teil 1:

Ja und damals hatte ich aufgegeben, jetzt muss ich es wohl oder übel angehen :grinning_face:

Dafür schon mal Danke!

Anbei ein Testprojekt mit den betreffenden Canvas-Klassen, die seit Xojo2018 nicht mehr laufen. Im Grunde sind diese Klassen mein Hauptproblem.
Test.xojo_binary_project.zip (19.0 KB)

Teilweise fehlen da nur Grafiken, Maus-Cursor etc. Da es die ja mal gegeben haben muss, liegen sie wahrscheinlich nur anderswo in Deinem Projekt.

Den Grafikcode musst Du allerdings gründlich überdenken, denn einfach in den Graphics-Kontext zu malen, das funktioniert nicht mehr. Das muss alles im Paint-Event-Handler passieren.

Was mactype betrifft, so wird der Dateityp jetzt über die Dateiendung gekennzeichnet; statt des mactype „TEXT“ müsstest Du dem Dateinamen eine „.txt“-Extension anhängen. Und dann würde ich Texte nicht nach dem uralten MacRoman konvertieren; bleib’ besser bei UTF-8. Es sei denn natürlich, irgendeine Anwendung erwartete MacRoman, aber das wäre heutzutage doch eher unwahrscheinlich.

Die alten Grafiken findest du - falls noch vorhanden - in einer compilierten Version beim Reingucken in den Paketinhalt in einem Ordner “Ressourcen”. Das sollte auch noch möglich sein, wenn die Software selber nicht mehr starten will.

Alternativ kann man Grafiken auch codiert in Base64 als String-Konstanten in den Quellcode packen. Macht das Projekt zwar etwas größer, man muss aber nie wieder danach suchen. Für ein größeres Projekt hab ich auch mal in den Tiefen des Web einen SVG-Renderer in purem Xojo-Code entdeckt und zentral eingebaut. Die Icons sorgfältig in Adobe Illustraor gezeichnet und als Textkonstanten eingebettet. Die SVG-XMLs sind deutlich kleiner als Base64-codierte Pixelfiles. Mit getImage(ID, width, height) konnte ich sie intern als Pixel abrufen.

Hinweis zum Thema Graphics. Ich lege immer gleich nach dem Erzeugen eines Pictures ein eigenes Graphics-Objekt und wenn nötig, ein RGBSurface an, z.B.:

var pict as picture = new picture(w,h,24)
var gfx as graphics = pict.graphics
var rgbs as rgbsurface = pict.rgbsurface

Damit ist gfx erstmal persistent, nicht nur im Paint-Event. Sichbar mache ich die Ergebnisse der Grafik-Operationen einfach mit canvasX.backdrop = pict (was auch im paint-event stehen kann)

Wenn auf Pixel-Ebene gelesen und gemalt werden soll, bietet sich xcolor = rgbs.pixel(x,y) bzw. die Umkehrung rgbs.pixel(x,y) = rgb(r,g,b). RGBSurface greift auf gfx durch.