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]