Dal forum internazionale: https://forum.lazarus.freepascal.org/index.php/topic,71477.msg557873.html#msg557873 (https://forum.lazarus.freepascal.org/index.php/topic,71477.msg557873.html#msg557873)
Sunto:
impostando nell'IDE un evento di un componente LCL, l'eventuale cambio degli argomenti della procedura (l'evento viene poi gestito a codice come procedura) non genera errori in compilazione, ma bensì a runtime e difficili da dignosticare pure.
Questo potrebbe accadere sopratutto quando si usa il copia / incolla da un codice vecchio a un nuovo progetto dove la "signature" (in Italiano "firma") del metodo potrebbe essere cambiato.
A me è capitato più di qualche volta in Delphi, ma Delphi te lo segnala e ti chiede di rimuoverlo o non compila.
EDIT: un utente ha tolto nel suo sorgente il supporto alle stringhe lunghe.
Sul forum è stato segnalato in quanto è stato tolto il supporto in compilazione alle stringhe lunghe per default (cioè con {$H+} ) è ciò ha cambiato la tipologia di compilazione (da stringhe "lunghe" a stringhe "corte") senza che il compilatore segnalasse la cosa.
La LCL vuole avere le stringhe lunghe ed è per quello che viene insierito in testa a tutte le unità il ( {$H+} ) quando si usa
la modalità {$mode objfpc}. Nella modalità {$mode Delphi} è già definito l'uso di stinghe lunghe e quindi il problema non si pone.
In pratica la chiamata all'evento è avvenuta con parametri diversi da quelli che si aspettava e quindi a runtime venicano generati errori a casaccio.
Se cambiate anche a mano il tipo di uno degli argomenti di un evento settato dall'IDE, vedrete che non ci sono segnalazioni.
Esempio: mettete in una Form vuota una TEdit e impostate l'evento KeyPress, poi andate a codice e cambiate il tipo del parametro "Key" come indicato di seguito, sia nella interface che nella implementation ovviamente, di base dovrebbe essere CHAR:
procedure Edit1KeyPress(Sender: TObject; var Key: String);
... io non ho provato ma dicono che crasha il programma.
Ripeto, nessuno farebbe volontariamente qualcosa di simile, ma il cambiamento della tipologia di parametri tra una versione e l'altra potrebbe portare a situazioni simili (come segnalato nel forum basta togliere la {$H+}.
Ciò è stato riportato come bug ma sembra che poi sia stato derubricato in "limitazione dell'IDE" in quanto per adesso non c'è una soluzione.
Nell'ultima stabile 4.0 questa cosa è ancora presente.