mse-org / mseide-msegui

MSEide is a Rapid Application Development IDE for platform independent rich GUI applications in the Pascal language. It comes with its own GUI toolkit called MSEgui. Binaries: https://github.com/mse-org/mseide-msegui/releases
GNU General Public License v2.0
124 stars 15 forks source link

FPC compatibility in general #7

Closed circular17 closed 4 years ago

circular17 commented 4 years ago

Having a folder with copies of FPC packages that are tweaked with mclasses unit leads to incompatibilities when using packages that are not included in the folder.

Two solutions to avoid this problem are :

As Fred suggests we can compare Classes and mclasses to see what are the difference and see what really needs to be tweaked.

If no tweaking is needing it would simplify to remove the files from the compatibility folder.

circular17 commented 4 years ago

I guess I have found a solution: https://github.com/mse-org/mseide-msegui/pull/11

rchastain commented 4 years ago

I guess I have found a solution:

11

OK, I start to test your modifications.

circular17 commented 4 years ago

Note that if you test with BGRABitmap you need to change in BGRAClasses the following types like this:

  TStream = Classes.TStream;
  TPersistent = Classes.TPersistent;
  TStrings = Classes.TStrings;
  TStringList = Classes.TStringList;
rchastain commented 4 years ago

I opened, compiled, run many projects using the code from your repository: no problem detected.

Je ne sais pas comment tu as fait ça, mais en tout cas, chapeau ! Ce qui m'étonne, c'est que Martin ait inclus ces unités dans MSEgui alors qu'il était possible, apparemment, de s'en passer...

circular17 commented 4 years ago

Cool content que ça fonctionne !

Héhé j'ai plus d'un tour dans mon sac. J'ai utilisé des techniques de "magicien", si l'on peut dire. C'est-à-dire des choses qu'on n'est pas censé faire, mais qui combinées peuvent aboutir à une illusion vraisemblable : remplacer des fonctions virtuelles au lieu de les hériter, tout en les laissant virtuelles pour qu'on puisse dériver encore, en utilisant des classes ayant apparemment le même nom.

Je suppose que Martin se satisfaisait juste de hacker les unités en rajoutant mclasses. Cela fonctionne si on est peu à utiliser le projet parce qu'on peut toujours rajouter des unités, mais cela a ses limites. De ce fait, à mon humble avis, il n'a pas visé la compatibilité, comme par exemple le fait qu'il ait ajouté une propriété memory à l'objet de base tstream, ce qui ne me semble pourtant pas nécessaire.

circular17 commented 4 years ago

Je précise que je ne porte pas un jugement sur son approche, je comprends qu'il ait voulu avoir la latitude de changer ce qu'il voulait afin d'obtenir exactement ce dont il avait besoin.

fredvs commented 4 years ago

Sincèrement je suis hyper impressionné par vous deux. Circular, ta solution est géniale, je ne sais pas pourquoi Martin ne l'a pas utilisée. Roland ta profonde lucidité reste légendaire .

Fre;D

fredvs commented 4 years ago

OK, let say it in International English: WOW

I just did test with last pull of Circular, trembling when launching the compilation of a big application, and boom OOTB, without cry, clean , fluid, logical.

Congrats Magic-Circular and I think we have to upgrade the msegui version number to 5.0.1.

JonnyTech commented 4 years ago

let say it in International English

What did we miss?

circular17 commented 4 years ago

That we are happy about the solution and wondering why Martin did not try that.