VA création descendant d'un TLabel
Bonjour,
Je m'essaye à Lazarus ( 0.9.30 ; W7 64 bits) depuis quelques heures seulement.
Souhaitant adapter des codes Delphi pour m'entraîner et évaluer la facilité de portabilité, je cherche à le faire sur un descendant très simple de TLabel qui surcharge la fonction GetText.
le constructeur permet de "remplacer" le Label initial, passé en var
Code:
1 2 3 4 5
| constructor TDepasseLabel.Create(var aLabel: TLabel; // ...
begin
//...
aLabel:=self;
end; |
A l'exécution, j'obtiens une violation d'accès, dès la création, apparemment sur l'appel suivant (je suppose engendrée par ma surcharge de la méthode GetText) à la fonction TControl.GetText de l'unité Control.inc de Lazarus :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
{------------------------------------------------------------------------------
TControl GetText
------------------------------------------------------------------------------}
function TControl.GetText: TCaption;
var
len: Integer;
begin
// Check if GetTextBuf is overridden, otherwise
// we can call RealGetText directly
if TMethod(@Self.GetTextBuf).Code = Pointer(@TControl.GetTextBuf) //ici !
then begin
Result := RealGetText;
end
else begin
// Bummer, we have to do it the compatible way. |
La syntaxe avec "@" ne m'est pas courante en Delphi, aurais-je dû utiliser aLabel:=@self, ou @aLabel:=@self, ou ?
Ou bien une autre piste ?
Au passage, je récolte une erreur "Error: Project raised exception class 'External:SIGSEGV'" à l'ecécution à partir de l'EDI, ce qui ne facilite pas la trace. Sur le net, il semble que ce puisse être un bug du debugger ?
Merci pour vos idées et conseils.