The problem is maybe not a bug but rather a very irritating behaviour when trying to write cross-platform code. Some event types have changed between Delphi 1.0 and 2.0. For instance, the OnGetText events of TTable and TQuery haveĻ changed their "var Text" parameter from "OpenString" to "String" (meaning AnsiString, because VCL is compiled in the $H+ state. This change causes all kinds of problems. I try to keep a singe source code base for both the 32-bit and 16-bit versions of my application. I tried to overcome the problem of the changed parameter-type like this: {$IFDEF VER90} {$H+} procedure SQLQueryTimeGetText(Sender: TField; var Text: String; DisplayText: Boolean); procedure SQLQueryMMGetText(Sender: TField; var Text: String; DisplayText: Boolean); {$H-} {$ELSE} procedure SQLQueryTimeGetText(Sender: TField; var Text: OpenString; DisplayText: Boolean); procedure SQLQueryMMGetText(Sender: TField; var Text: OpenString; DisplayText: Boolean); {$ENDIF} This works fine at compile-time and the program runs as expected. The irritation is that every time I save or recompile this unit, Delphi runs some sort of source scanner on my code to verify that my event methods has the correct parameters. If the source scanner had been as smart as the compiler, there would have been no problem, but in Delphi 2.0 I now get the message: "The SQLQueryTimeGetText method referenced by SQLQueryTime.OnGetText has an incompatible parameter list. Remove the reference?" for every such event I have a handler for. I have found no way to avoid this message, even if my code is legal and correct. The source scanner obviously searches the unit-file backwards and do simple string comparisions. It knows nothing of IFDEFs or type-declarations. Worse, the default button on the message-box above is 'Yes' so if I accidently press space or Enter, the reference to the event will be gone. To correct this I tried to re-set the reference in the field editor at design-time. But this operation uses the scanner again and denies to set the event to my method. The only solution to this is to physically move the 32-bit declaration in my unit so that it comes last: {$IFDEF VER80} procedure SQLQueryTimeGetText(Sender: TField; var Text: OpenString; DisplayText: Boolean); procedure SQLQueryMMGetText(Sender: TField; var Text: OpenString; DisplayText: Boolean); {$ELSE} {$H+} procedure SQLQueryTimeGetText(Sender: TField; var Text: String; DisplayText: Boolean); procedure SQLQueryMMGetText(Sender: TField; var Text: String; DisplayText: Boolean); {$H-} {$ENDIF} Now things works as expected in Delphi 2.0, but then I have the same problem in Delphi 1.0. I just realized that to avoid these messages I should simply remove all design-time events and set my events at run-time in the FormCreate method. This should work, but it is against Delphi-philosophy and is probably not something that average Delphi users would think of.