delphi - invalid class typecast

15/03/2019

0

Prezados, estou realizando esse código e na hora de atribuir a variavel ao comando, dá o erro "Invalid class typecast"...

Por gentileza, como proceder?

procedure TfrmMain.advsmthBuscaRapidaMenuItemClick(Sender: TObject;
ItemIndex: Integer);
var
tela : string;
begin
with advsmthBuscaRapida.MenuItems do
begin
//tela := Copy(Items[1].Caption, Pos ('<', Items[1].Caption) + 1, Length(Items[1].Caption)-1);
tela := Copy((Sender as TAdvSmoothMegaMenuItem).Caption, Pos ('<', (Sender as TAdvSmoothMegaMenuItem).Caption) + 1, Length((Sender as TAdvSmoothMegaMenuItem).Caption)-1);
end;

end;
Flavio Silva

Flavio Silva

Responder

Posts

17/03/2019

Hélio Devmedia

Olá Flávio,

Seu código parece está correto, porém, estou na dúvida do uso de "with advsmthBuscaRapida.MenuItems do" combinado com a linha que usa o TypeCast.

tente comentar o with e seus respectivos begin e end e testar o código novamente


Espero que funcione.

Um forte abraço e fique com Deus.
Responder

18/03/2019

Flavio Silva

Olá Flávio,

Seu código parece está correto, porém, estou na dúvida do uso de "with advsmthBuscaRapida.MenuItems do" combinado com a linha que usa o TypeCast.

tente comentar o with e seus respectivos begin e end e testar o código novamente


Espero que funcione.

Um forte abraço e fique com Deus.


Deu o mesmo erro amigo...
Responder

18/03/2019

Emerson Nascimento

tente assim:
procedure TfrmMain.advsmthBuscaRapidaMenuItemClick(Sender: TObject;
ItemIndex: Integer);
var
	tela, strCaption: string;
	nPosIni, nPosFim: integer;
begin
	strCaption := (Sender as TAdvSmoothMegaMenuItem).Caption;
	nPosIni := Pos ('<', strCaption) + 1;
	nPosFim := Length(strCaption)-1;
	//tela := Copy(Items[1].Caption, Pos ('<', Items[1].Caption) + 1, Length(Items[1].Caption)-1);
	tela := Copy(strCaption, nPosIni, nPosFim);
end;
Acredito que desta forma você identificará exatamente onde está sendo gerado o [invalid class typecast]
Responder

18/03/2019

Flavio Silva

tente assim:
procedure TfrmMain.advsmthBuscaRapidaMenuItemClick(Sender: TObject;
ItemIndex: Integer);
var
	tela, strCaption: string;
	nPosIni, nPosFim: integer;
begin
	strCaption := (Sender as TAdvSmoothMegaMenuItem).Caption;
	nPosIni := Pos ('<', strCaption) + 1;
	nPosFim := Length(strCaption)-1;
	//tela := Copy(Items[1].Caption, Pos ('<', Items[1].Caption) + 1, Length(Items[1].Caption)-1);
	tela := Copy(strCaption, nPosIni, nPosFim);
end;
Acredito que desta forma você identificará exatamente onde está sendo gerado o [invalid class typecast]


O erro está dando justamente na linha (strCaption := (Sender as TAdvSmoothMegaMenuItem).Caption;)

Mas assim, vi outra forma de pegar a caption e que dá certo, porém preciso saber o que preciso colocar no lugar do """número 5""" para pegar o item que acabo de clicar...

procedure TfrmMain.advsmthBuscaRapidaMenuItemClick(Sender: TObject; 
  ItemIndex: Integer); 
var 
  tela : string; 
  i : Integer; 
  var codmenu : array of string; 
  action : TAction; 
begin 
  with advsmthBuscaRapida.MenuItems do 
  begin 
    tela := Items[5].Caption; // como pegar o itemindex para deixar o 5 
    tela := Copy(tela , Pos('<', tela ) + 1, Length(tela)-2); 
  end; 
end; 

Responder

18/03/2019

Hélio Devmedia

Pela lógica TAdvSmoothMegaMenuItem é um objeto do tipo TObject bem como o Sender, mas se está dando o erro no type cast quando chama Sender as TAdvSmoothMegaMenuItem então TAdvSmoothMegaMenuItem não pode ser tratada como um TObject.
Responder

18/03/2019

Flavio Silva

Pela lógica TAdvSmoothMegaMenuItem é um objeto do tipo TObject bem como o Sender, mas se está dando o erro no type cast quando chama Sender as TAdvSmoothMegaMenuItem então TAdvSmoothMegaMenuItem não pode ser tratada como um TObject.


okay, mas e nesse caso que deu certo?

Como buscar o numero que cliquei, ao invés de colocar 5 direto?

procedure TfrmMain.advsmthBuscaRapidaMenuItemClick(Sender: TObject; 
  ItemIndex: Integer); 
var
  tela : string; 
  i : Integer; 
  var codmenu : array of string; 
  action : TAction; 
begin
  with advsmthBuscaRapida.MenuItems do
  begin
    tela := Items[5].Caption; // como pegar o itemindex para deixar o 5 
    tela := Copy(tela , Pos('<', tela ) + 1, Length(tela)-2); 
  end; 
end; 
Responder

18/03/2019

Emerson Nascimento

O item está sendo passado como parâmetro da procedure.
procedure TfrmMain.advsmthBuscaRapidaMenuItemClick(Sender: TObject; 
  ItemIndex: Integer); // <<<< aqui está sendo passado o ItemIndex
var
  tela : string; 
  i : Integer; 
  var codmenu : array of string; 
  action : TAction; 
begin
  with advsmthBuscaRapida.MenuItems do
  begin
    tela := Items[ ItemIndex ].Caption; // como pegar o itemindex para deixar o 5 
    tela := Copy(tela , Pos('<', tela ) + 1, Length(tela)-2); 
  end; 
end; 
Responder

18/03/2019

Flavio Silva

O item está sendo passado como parâmetro da procedure.
procedure TfrmMain.advsmthBuscaRapidaMenuItemClick(Sender: TObject; 
  ItemIndex: Integer); // <<<< aqui está sendo passado o ItemIndex
var
  tela : string; 
  i : Integer; 
  var codmenu : array of string; 
  action : TAction; 
begin
  with advsmthBuscaRapida.MenuItems do
  begin
    tela := Items[ ItemIndex ].Caption; // como pegar o itemindex para deixar o 5 
    tela := Copy(tela , Pos('<', tela ) + 1, Length(tela)-2); 
  end; 
end; 


Verdade amigo, não me atentei a isso... obrigado pelo apoio, deu certo aqui.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar