Impostazione del gestore eventi in Delphi 2007 e visualizzazione dell'errore "Elenco parametri diverso"

StackOverflow https://stackoverflow.com/questions/434126

Domanda

Sto cercando di scrivere un corso in Delphi 2007 che utilizza una libreria ActiveX . La classe prenderà un evento in cui la libreria ActiveX deve esporre il proprio evento che aggiunge alcune informazioni all'evento della libreria ActiveX.

La linea di fondo è che quando assegno la mia procedura all'evento della libreria ActiveX che voglio usare, ottengo un errore:

E2009 Incompatible types: 'Parameter lists differ'

Sono certo che gli elenchi di parametri siano gli stessi (stesso numero di parametri e stessi tipi), quindi sto pensando di farlo nel modo sbagliato.

Qualche suggerimento o qualcuno può pubblicare un codice di esempio di ciò che sto cercando di fare?

È stato utile?

Soluzione

La prima cosa da verificare è che la cosa che stai tentando di assegnare alla proprietà dell'evento sia un metodo . Deve essere una procedura o una funzione che appartiene a una classe; non può essere una subroutine autonoma.

Quindi, nota che la semplice conferma che i nomi dei tipi corrispondenti non è sufficiente. Delphi consente di ridefinire un identificatore, quindi il nome del tipo che vedi in un'unità non si riferisce necessariamente alla stessa cosa quando vedi lo stesso identificatore in un'altra unità. Il significato può anche cambiare nel mezzo di un'unità. Ad esempio:

unit Example;

interface

uses Windows;

var
  foo: TBitmap;

implementation

uses Graphics;

var
  bar: TBitmap;

end.

La variabile foo ha il tipo Windows.TBitmap , un tipo di record, mentre bar ha il tipo Graphics.TBitmap , un tipo di classe.

Puoi consentire all'IDE di aiutarti a diagnosticare questo: Ctrl + fai clic sui nomi degli identificativi e lascia che l'IDE ti porti alle loro dichiarazioni. Ti portano negli stessi posti? In caso contrario, è possibile qualificare i nomi dei tipi con i nomi delle unità. Ad esempio, potremmo cambiare la dichiarazione bar sopra in questo:

var
  bar: Windows.TBitmap;

Ora avrà lo stesso tipo di foo . Controlla lo stesso tipo di cose nella dichiarazione del gestore dell'evento.

Altri suggerimenti

Ho usato il consiglio di Gabr con Ctrl + clic e ho scoperto che uno dei parametri era una costante che non avevo realizzato. Ho cambiato la seconda variabile in una const e ha funzionato bene. Grazie.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top