1) te aconselho a tirar o "LogoPJ.Parent := Self;" de dentro AtualizarLogotipos 
... não DEVE ser necessário;
2) Tente atribuir a imagem utilizando LogoPJ.Picture.Assign( Picture )

Alessandro DUARTE de Moraes
A.C. Santa Casa do Rio Grande.
http://www.santacasarg.com.br

  ----- Original Message ----- 
  From: Paulo Jorge 
  To: delphi-br@yahoogrupos.com.br 
  Sent: Friday, March 28, 2008 4:17 PM
  Subject: [delphi-br] Componentes - Posicionamento de TImage


  Criei um componente para, dentre outras funções, exibir os logotipos
  da empresa. Acontece que o logotipo LogoPJ (Timage) não fica
  posicionado corretamente quando em runtime. Em design time está perfeito.
  Constatei que o Parent a ele atribuído durante a fase de design, se
  perde durante a execução, tornando-se nulo. Uma vez sem parent, perde
  a referência de posicionamento. Como resolver isso?

  Segue o código:

  unit PJSet;

  interface

  uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs,
  ExtCtrls, stdctrls, IniFiles, dbtables, ShellAPI, ComCtrls;

  type
  TPJLogo = (atPJPequeno, atPJNormal, atPJGrande, atPJNenhum);

  type
  TPJSet = class(TPanel)
  private
  { Private declarations }
  sDelphiAtivo : boolean;
  sMContasPresente: boolean;
  sMContasExeName : string;
  sEmiteEtiqueta, sMultiplaInstancia : boolean;
  sServidor, sRegistrado : boolean;
  sLogotipoTela, sLogotipoImp, sLogotipoEtiq : string;
  sUsuario, sComplemento,sUsuAtual, sNivelUsuAtual : string;
  LogoTela, LogoPJ : TImage;
  PanelClient, PanelRight, PanelLogoPJ : TPanel;

  protected
  { Protected declarations }

  public
  { Public declarations }
  {sobregravando o método Create}
  constructor Create(AOwner: TComponent); override;
  //destructor Destroy; override;
  function ConfigurarSistema : boolean;
  function ConfigurarLogotipo : boolean;
  function ConfigurarTituloRelatorio: boolean;
  function ExecutarArquivo(const NomeDoArquivo, Parametros,
  DiretorioPadrao: string;
  ModoDeExibicao: Integer): THandle;
  procedure VerificarUsuario;
  procedure AtualizarLogotipos;
  procedure VerificarSistemas;
  property LogotipoTela : string read sLogotipoTela write sLogotipoTela;
  property LogotipoImp : string read sLogotipoImp write sLogotipoImp;
  property LogotipoEtiq : string read sLogotipoEtiq write sLogotipoEtiq;
  property UsuarioAtual : string read sUsuAtual write sUsuAtual;
  property NivelUsuarioAtual : string read sNivelUsuAtual write
  sNivelUsuAtual;
  property MContasPresente : boolean read sMContasPresente write
  sMContasPresente;
  property MContasExeName : string read sMContasExeName write
  sMContasExeName;
  property DelphiAtivo : boolean read sDelphiAtivo write sDelphiAtivo;

  published
  { Published declarations }
  property _Servidor : boolean read sServidor write sServidor;
  property _Usuario : string read sUsuario write sUsuario;
  property _Complemento : string read sComplemento write sComplemento ;
  property _Registrado : boolean read sRegistrado write sRegistrado;
  property _EmiteEtiqueta : boolean read sEmiteEtiqueta write
  sEmiteEtiqueta;
  property _MultiplaInstancia : boolean read sMultiplaInstancia
  write sMultiplaInstancia;
  end;


  procedure Register;

  implementation
  {$R PJSET.RES}

  Uses MTitcfg, MLogocfg, PJConfig;

  function TPJSet.ExecutarArquivo(const NomeDoArquivo, Parametros,
  DiretorioPadrao: string;
  ModoDeExibicao: Integer): THandle;
  //Parâmetro 1 - Arquivo;
  //Parâmetro 2 - Parâmetros;
  //Parâmetro 3 - Diretório Default;
  //Parâmetro 5 - Estado da Janela;
  var
  zFileName, zParams, zDir: array[0..149] of Char;
  begin
  Result := ShellExecute(Application.MainForm.Handle, nil,
  StrPCopy(zFileName, NomeDoArquivo), StrPCopy(zParams, Parametros),
  StrPCopy(zDir, DiretorioPadrao), ModoDeExibicao);
  end;

  function TPJSet.ConfigurarLogotipo : boolean;
  begin
  if _Registrado then
  begin
  Application.CreateForm(TFormLogotipos, FormLogotipos);

  if not _EmiteEtiqueta then
  begin
  FormLogotipos.ComboBox1.Items.Delete(2);
  FormLogotipos.GroupBox3.Visible := False;
  FormLogotipos.BitBtnOK.Top := 190;
  FormLogotipos.BitBtnCancel.Top := 190;
  FormLogotipos.Height := 250;
  end;

  FormLogotipos.ShowModal;
  if FormLogotipos.ModalResult = mrOK then
  begin
  Result := True;
  end
  else
  Result := False;
  FormLogotipos.Free;
  end
  else
  begin
  MessageDlg('Somente usuários registrados podem alterar essa
  configuração. '+
  'Veja como registrar esse Sistema no item de menu
  "Ajuda/Registrar".', mtWarning,
  [mbOk], 0);
  Result := False;
  end;
  end;

  function TPJSet.ConfigurarSistema: boolean;
  begin
  if _Registrado then
  begin
  Application.CreateForm(TFormPJConfig,FormPJConfig);
  FormPJConfig.ShowModal;
  if FormPJConfig.ModalResult = mrOK then
  begin
  Result := True;
  end
  else
  Result := False;
  FormPJConfig.Free;
  end
  else
  begin
  MessageDlg('Somente usuários registrados podem alterar essa
  configuração. '+
  'Veja como registrar esse Sistema no item de menu
  "Ajuda/Registrar".', mtWarning,
  [mbOk], 0);
  Result := False;
  end;
  end;

  function TPJSet.ConfigurarTituloRelatorio : boolean;
  begin
  if _Registrado then
  begin
  Application.CreateForm(TFormMTitcfg,FormMTitcfg);
  FormMTitcfg.ShowModal;
  if FormMTitcfg.ModalResult = mrOK then
  begin
  Result := True;
  end
  else
  Result := False;
  FormMTitcfg.Free;
  end
  else
  begin
  MessageDlg('Somente usuários registrados podem alterar essa
  configuração. '+
  'Veja como registrar esse Sistema no item de menu
  "Ajuda/Registrar".', mtWarning,
  [mbOk], 0);
  Result := False;
  end;
  end;

  procedure TPJSet.VerificarSistemas;
  var
  MContasSession : TSession;
  Parametros : TStringList;
  AliasPath : string;
  begin
  Parametros := TstringList.Create;
  MContasSession := TSession.Create(Application);
  MContasSession.SessionName := 'MContasSession';
  //MContasSession.PrivateDir :=
  'C:\';//ExtractFilePath(Application.ExeName);
  MContasSession.Active := True;
  sMContasPresente := False;
  if MContasSession.IsAlias('MCONTAS') then
  begin
  MContasSession.GetAliasParams('MCONTAS',Parametros);
  AliasPath := Parametros.Values['PATH']; //extrai o diretório dos dados
  sMContasExeName :=
  (Copy(AliasPath,0,Length(AliasPath)-5)+'MContas.exe');
  if FileExists(MContasExeName) then
  begin
  sMContasPresente := True;
  end
  else
  begin
  sMContasPresente := False;
  AliasPath := '';
  sMContasExeName := '';
  end;
  Parametros.Free;
  MContasSession.Free;
  end;
  end;

  procedure TPJSet.VerificarUsuario ;
  begin
  // LabelUsuario.Caption := _Usuario;
  // LabelComplemento.Caption := _Complemento;
  end;

  procedure TPJSet.AtualizarLogotipos;
  var MIniFile : TIniFile;
  begin
  MIniFile :=
  
TIniFile.Create(ExtractFilePath(Application.ExeName)+Application.Title+'.ini');
  with LogoTela do
  begin
  if _Registrado then
  try
  LogotipoTela := MIniFile.ReadString('Padrao', 'LogoTela', '');
  Picture.LoadFromFile(LogotipoTela);
  Stretch := MIniFile.ReadBool('Padrao', 'LogoTelaStretch', false);
  Transparent := MIniFile.ReadBool('Padrao',
  'LogoTelaTransparent', false);
  Center := MIniFile.ReadBool('Padrao', 'LogoTelaCenter', false);
  except
  Picture := nil;
  end
  else
  Picture.Bitmap.Handle := LoadBitmap(HInstance, 'LOGO_USU');
  end; {with}
  MIniFile.Free;
  LogoPJ.Parent := Self;
  {
  LogoPJ.AutoSize := True;
  LogoPJ.Align := alCustom;
  LogoPJ.Picture.Bitmap.Handle := LoadBitmap(HInstance, 'LOGO_PJ');
  }
  LogoPJ.Align := alCustom;
  LogoPJ.Left := Self.Width - LogoPJ.Picture.Width;
  LogoPJ.Top := Self.Height - LogoPJ.Picture.Height;
  LogoPJ.Anchors := [akRight,akBottom];
  end;

  // Valores padronizados
  constructor TPJSet.Create(AOwner: TComponent);
  begin
  inherited Create(AOwner); //Executa o método original de Tcomponent.

  //TPJSet
  Align := alClient;
  BevelOuter := bvNone;
  ParentColor := True;
  Font.Color := clNavy;
  Caption := '';
  _Usuario := 'VERSÃO DEMONSTRAÇÃO';
  _Complemento := 'Cópia não registrada';

  //PanelClient
  PanelClient := TPanel.Create(Self);
  with PanelClient do
  begin
  Parent := Self;
  Align := alClient;
  BevelOuter := bvNone;
  end;

  //propriedades do LogoTela
  LogoTela := TImage.Create(Self);

  LogoTela.Parent := Self;
  LogoTela.Align := alClient;
  LogoTela.Center := True;
  LogoTela.Transparent := True;
  //SendToBack;

  //Propriedades do LogoPJ
  LogoPJ := TImage.Create(Self);
  LogoPJ.Parent := Self;
  // Center := True;
  LogoPJ.Transparent := True;
  LogoPJ.Picture.Bitmap.Handle := LoadBitmap(HInstance, 'LOGO_PJ');
  //LogoPJ.Align := alCustom;
  LogoPJ.AutoSize := True;
  LogoPJ.Align := alCustom;
  //Ajusta a largura e altura (se Align = alCustom)
  //Width := Picture.Width;
  //Height := Picture.Height;

  if (csDesigning in ComponentState) then
  begin
  LogoPJ.Left := PanelClient.Width - LogoPJ.Picture.Width+30;
  LogoPJ.Top := PanelClient.Height - LogoPJ.Picture.Height+30;
  end
  else
  begin
  LogoPJ.Left := PanelClient.Width - LogoPJ.Picture.Width+30;
  LogoPJ.Top := PanelClient.Height - LogoPJ.Picture.Height;
  end;

  //Parent.Anchors := [akRight,akBottom];
  LogoPJ.Anchors := [akRight,akBottom];

  //Self.ParentWindow := Self.Parent.Handle;
  //Self.Canvas.Draw(0,0, LogoPJ.Picture.Bitmap);

  {
  PanelRight := TPanel.Create(Self);
  with PanelRight do
  begin
  Parent := Self;
  Align := alRight;
  BevelInner := bvLowered;
  BevelOuter := bvNone;
  end;

  PanelLogoPJ := TPanel.Create(PanelRight);
  with PanelLogoPJ do
  begin
  Parent := PanelRight;
  Align := alBottom;
  BevelOuter := bvNone;
  end;
  }

  //Propriedade DelphiAtivo (Runtime)
  if FindWindow('TPropertyInspector', 'Object Inspector') <> 0 then
  sDelphiAtivo := True
  else
  sDelphiAtivo := False;

  Screen.Cursors[1] := LoadCursor(Hinstance, 'CURSOR_01');
  //ShowMessage('1 ' + LogoPJ.Parent.Name);
  VerificarUsuario;
  AtualizarLogotipos;
  //ShowMessage('2 ' + LogoPJ.Parent.Name);
  end;

  procedure Register;
  begin
  RegisterComponents('PJ-Master', [TPJSet]);
  end;

  end.



   
  -------------------------- 
  E-mail Seguro Vetorial.net 

  Mensagem classificada como NÃO-SPAM. Para classificar como SPAM, 
  encaminhe para [EMAIL PROTECTED] 

  Chave de Identificação: 54568,47ed44c7612801470711315 


[As partes desta mensagem que não continham texto foram removidas]

Responder a