Ir para conteúdo
Fórum Script Brasil
  • 0

Instalar Componente


Thales Pontes Martins

Pergunta

Eu escrevi aquele componente derivado do TLabel que todo mundo já esceveu. só que eu não conseguí instalar auquela p**** de jeito nenhum.

Eu fui em component -> Install Component, instalei em novo package, não deu certo. Instalei em Existing Package, não deu certo. Instalei todos os packages nos quais eu instalei, não deu certo. Já fiz de tudo e o máximo que eu consegui foi fazer ele aparecer lá no 'Configure Palette', Mas não consigo fazer ele aparecer na paleta de componentes pra eu colocar na p**** do projeto! Alguém me dá uma ajuda aí? Obrigado.

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

por acaso você está registrando o seu compoente?

unit suaunit;
...
  TSeuLabel = class(TLabel)
  ...
  end;

procedure Register;

implementation

constructor TSeuLabel.create...
...
procedure Register;        {Registro do componente}
begin
  RegisterComponents('Standard', [TSeuLabel]);
end;

end.

Dê uma olhada no help em RegisterComponents para maiores detalhes.

Link para o comentário
Compartilhar em outros sites

  • 0

Com certeza, Micheus. Estou registrando o componente, aí quando eu instalo, ele diz que o componente foi adicionado com sucesso no pacote user def...bla, bla, bla... Só que não aparece na paleta de componetes de jeito nenhum :angry: .

Link para o comentário
Compartilhar em outros sites

  • 0
...o máximo que eu consegui foi fazer ele aparecer lá no 'Configure Palette',...
se você o vê nesta tela, deveria poder ver em qual das paletas ele foi adicionado. Se você selecionar na lista de paletas (à esquerda) a opção [All] e na lista da direita localizar seu componente, a coluna Page lhe indicará em qual paleta ele está.

Observe que se você não criou um arquivo .dcr (contendo o ícone) para ele, provavelmente estará utilizando o mesmo icone do TLabel (ou na pior das ipóteses, aquele famoso icone contendo um quadrado azul, um triângulo vermelho e uma esfera amarela)

Link para o comentário
Compartilhar em outros sites

  • 0

Pois é, eu vejo em qual paleta está lá no 'configure palette', mas quando eu vou lá na paleta ele não está lá... De vez em quando ele aparece na paleta, mas somente quando não tem nehum projeto aberto, quando eu abro um ele some na hora. Acho que ele está querendo evitar que eu use o componente :lol: . Deve ser algum bug no meu delphi 6.

Link para o comentário
Compartilhar em outros sites

  • 0

Meu código está aí cara, a coisa mais simples do mundo:

unit ULabelTime;

interface

uses
  Windows, Messages, SysUtils, Classes, QControls, QStdCtrls, QExtCtrls;

type
  TLabelTime = class(TLabel)
  private
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
    Timer : TTimer;
    constructor create(aowner : TComponent); override;
    procedure refresh(sender : tobject);
  published
    { Published declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Standard', [TLabelTime]);
end;


constructor TLabelTime.create(aowner : TComponent);
begin
  inherited create(aowner);
  Timer:=Timer.Create(Aowner);
  Timer.Enabled:=true;
  Timer.interval:=1000;
  Timer.OnTimer:=refresh;
  refresh(self);
end;


procedure TLabelTime.refresh(sender : tobject);
begin
  Caption:=TimeToStr(now);
  invalidate;
end;

end.

No configure palatte ele aparece assim

E na paleta aparece assim:

Se é que é possivel inserir imagens do meu computador aí, elas vão aparecer.

Link para o comentário
Compartilhar em outros sites

  • 0

Pois não é que aconteceu a mesma coisa aqui. Fiquei intrigado, ai lembrei que, um dia desses, olhando os itens da paleta via Configure Palette notei que haviam componentes repetidos - mas que não estavam obviamente aparecendo na paleta padrão. Então notei que são aqueles utilizados para aplicações CLX. Daí olhando melhor a cláusula uses observei que você estava derivando de compontes desta bibiloteca (CLX) QStdCtrls e QExtCtrls, enquanto que se fosse as da VCL seriam StdCtrls e ExtCtrls.

To postando seu código com algumas alterações extras:

1 - substituiução das units na cláusula uses;

2 - inclusão do destructor;

3 - alteração de owner para self na instanciação do timer, motivo pelo qual foi adicionado o destructor. Se ficasse como estáva, ao adicionar o seu componente no form, você observaria que o timer também aparecerá nele (os dois componentes - experimente);

4 - habilitação do timer apenas se não estiver no modo design-time, caso contrário, assim que você adiciona ele no form o relógio começa a atualizar o label (normalmente não é o que se quer - experimente);

unit ULabelTime;
interface
uses
  Windows, Messages, SysUtils, Classes, StdCtrls, ExtCtrls;

type
  TLabelTime = class(TLabel)
  private
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
    Timer : TTimer;
    constructor create(aowner : TComponent); override;
    destructor destroy;
    procedure refresh(sender : tobject);
  published
    { Published declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Standard', [TLabelTime]);
end;

constructor TLabelTime.create(aowner : TComponent);
begin
  inherited create(aowner);
  Timer := TTimer.Create(Self);
  Timer.interval := 1000;
  Timer.OnTimer := refresh;
  Timer.Enabled := not (csDesigning in ComponentState);
  if Timer.Enabled then
    refresh(self);
end;

destructor TLabelTime.destroy;
begin
  Timer.Free;
  inherited;
end;

procedure TLabelTime.refresh(sender : tobject);
begin
  Caption:=TimeToStr(now);
  invalidate;
end;

end.

[]s

Link para o comentário
Compartilhar em outros sites

  • 0

É isso mesmo, cara! Como não pensei nisso antes? Eu acho que é porque tem que ser inteligente mesmo :lol: . O negócio do ComponentState não tem problema, porque o legal do componente é ele já ir marcando a hora no form antes de rodar. Mas então, quer diser que a unit que contém o componente ancestral não pode ser QStdCtrls, QControls, QExtCtrls? tem que ser sem o "que"?

Eu também não sei muito bem a diferença de aplicação vcl e clx........ mas não fui eu que coloquei aqueles que's lá não :huh: .

Eu não consigo escrever a letra "que" nesta p****!

Link para o comentário
Compartilhar em outros sites

  • 0
quer diser que a unit que contém o componente ancestral não pode ser QStdCtrls, QControls, QExtCtrls? tem que ser sem o "que"?
da VCL seriam StdCtrls e ExtCtrls (sem o "que")

Se você criar componentes derivados dos existentes, utilizando a opção do menu->Component->New Component, em Ancestor type você verá que os componentes usuais possuem duas "versões" uma contida nas bibliotecas da VCL e outra na CLX (aparece o tal do "que" no nome das mesmas que está entre parenteses). Se você pressionar F1 encima da classe ancestral, no seu caso TLabel, irá verificar que aparecem duas opções para você escolher: CLX Reference ou VCL Reference.

[]s

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...