charlytango hat geschrieben: Do 3. Okt 2024, 23:27
kann sein, dass ich das Problem nicht verstehe:
(...)
Ich gehe mal davon aus dass du ein fremdes Package(=FP) meinst, das z.B. per Lazarus oder OPM installiert werden kann.
(...)
Sollte das FP nicht per Lazarus bzw OPM installierbar sein, musst du es eben mitliefern (...).
Das ist aus meiner Sicht ein völlig übliches Verhalten. Wo also ist das Problem?
Hallo CharlyTango,
fast alles richtig was Du schreibst.
Es handelt sich (kein Geheimnis) um die Komponente LazMapViewer, die ich in meinem (schon häufiger erwähnten) Projekt LazQuadTree (welches ich bald als OpenSource veröffentlichen werde) verwende und da dann konkret in einer Demo-Anwendung dazu.
Die Komponente TMapView verwaltet intern auf "GPSLayers" GPS-Objekte, die diverse Symbole darstellen können. Das Problem dabei, wenn man sehr viele davon einträgt (bspw. 95.000) dauert das Löschen quälend lange, weil die Löschmethode ein Feuerwerk von Aktionen abbrennt, die hier nicht benötigt werden, aber endlos Zeit kosten.
Das wäre nicht schlimm, aber es sieht für den einfachen Benutzer der Demo so aus, als ob meine Komponente der Störenfried ist und das System ausbremmst - und das möchte ich nicht unkommentiert so stehen lassen.
Einer der Entwickler/Betreuer (User wp_xyz in diesem Forum) war so lieb, dieses Problem dahingehend zu lösen, dass er in die Komponente eine Methode eingebaut hat, die das Löschen schnellstens erledigt.
Diese Methode hat mit der alten Methode nichts zu tun, sondern ist, wie in meinem Eingangsbeispiel, einfach was Neues. Leider ist diese schöne Änderung noch nicht in der aktuellen Distribution vorhanden, ja noch nicht einmal in den Downloads, und daran wird sich aus verständlichem und nachvollziehbarem Zeitmangel auch nicht schnell etwas ändern.
Jetzt besteht mein Problem darin, eine lauffähige Demo zu bauen, die ohne den Benutzer zu nerven, die beste verfügbare Lösung zu verwendet. Die bestünde darin, mittels eines Compiler-Befehls zu prüfen, ob die schnelle Variante installiert ist (was in einigen Wochen/Monaten dann der Fall ist) oder eben nur die langsame.
Natürlich könnte ich die veränderte Version des MapViewers mitliefern, das ist aber nicht zielführend, denn niemand will sich kurz eine Demo ansehen und dafür zuvor installierte Drittkomponenten (mit Änderungen aus dritter Hand und im laufenden Betrieb) aktualisieren.
Viel schöner wäre im Übrigen die Lösung die Komponente abzuleiten, die "böse" Methode zu überschreiben und dann in meiner Demo diese Variante zu instantiieren. Leider geht das nicht, weil die Entwickler der Komponente (das bedaure ich, ist aber deren durchaus auch begründete Entscheidung gewesen) sehr restriktiv mit den Schlüsselworten "virtual" und "protected" umgehen und man/ich da einfach nicht rankomme.
Ich werde jetzt den Weg mittels eines Defines gehen und eine sichtbare Warnung einbauen, die dann bei Bedarf umgangen werden kann, wenn die Voraussetzungen dafür vorhanden sind.