Conversao D2004 para D2010 - Propriedade Label.Transparent fica errado

28/01/2010

0

Amigos Estou iniciando a conversão do meu aplicativo do Delphi 4 para o Delphi 2010, sei que vou encontrar varios problemas, o primeiro deles é esse. Nos meus FORMS uso muitos Labels, coloridos , transparentes , etc ... após instalar o D2010 como teste, abri um aplicativo pequeno para ver se estava tudo ok, compilei e deu certinho, porém meus LABEL ficaram com a propriedade TRANSPARENT = TRUE. sendo que no original esta FALSE. Alguem saberia o motivo ... Obrigado pela ajuda
Gilberto Moura

Gilberto Moura

Responder

Posts

28/01/2010

Emerson Souza

Esse problema aconteceu em todos os labels de todos os formulários ou so alguns ?      meu blog: www.emersonti.blogspot.com
Responder

29/01/2010

Gilberto Moura

  Sim, com todos os FORMS.
tenho varias aplicações. estou escolhendo as pequenas primeiros.
e nelas esta ocorrendo isso.
Qdo abro no D2010 um projeto que ainda esta no D4 ele diz
que esta fazendo a conversão e em seguida disponibiliza os forms
vi a tela diferente, e quando passei pelos LABELs vi que sua
propriedade .TRANSPARENT esta TRUE, obviamente meus LABELs
coloridos deixaram se ser coloridos. Por enquanto foi só isso.
Responder

01/02/2010

Gilberto Moura

Percebi tambem outros problemas nesta conversao do delphi 4 para o delphi 2010 :  . No fonte original meus paineis são coloridos porém qdo foi convertido ele fica com uma cor neutra.   . O segundo painel dentro de um outro fica se fosse ENVIDRAÇADO, TRANSLUCIDO, TRANSPARENTE   ou seja de dentro de segundo painel voce fica VENDO as informações do primeiro painel.   Porém após compilar, na execução, a visualização da tela volta ao normal igual ao original. mas se entra no projeto tá tudo bagunçado. ou seja, . todos os labels transparent=true e no projeto original esta transparente=false . Paineis com as cores neutras sendo que no original as corem sao forte . Paineis translucidos e no original são opacos   Socorro !!!  
Responder

01/02/2010

Alison Bissoli

Tenta contato com andreano lanusse, não é possivel que eles não tenham uma solução pra isso, já devem ter deparado com certeza com este problema.   http://blogs.embarcadero.com/andreanolanusse/   Infelizmente nunca é 100% compatível, se alteram alguma coisa do componente lá se vai tudo por água abaixo, caso não tenha sucesso com contato com ele quebraremos a cabeça um pouquinho.
Responder

02/02/2010

Alison Bissoli

Conseguiu contato com o Lanusse?
Responder

03/02/2010

Gilberto Moura

Antes de falar com o lanousse esta quebrando a cabeça mais um pouco e descobri umas coisas que realmente indica um BUG mesmo. É o seguinte : Imprimi no Formato texto estes componentes que estao com erro na conversao, via copiar colar e percebi que a propriedade TRANSPARENT não foi relatada certamente porque ela estava Transparent=False e por default não seria necessario, assim no delphi 4 este LABEL estava correto no nosso FORM no Delphi 4. Agora quando abrimos este projeto no novo Delphi 2010 percebemos que um programinha interno faz a CONVERSÃO e cria-se um novo projeto. Então entrei no fonte da classe "StdCtrls" a qual pertence este label pois é lá que o cara é criado. Na rotina do create do label ele comenta que a propriedade 'Transparent'  por default dependerá se existe THEMES disponivel e habilitado. porém o fonte é muito complexo para mim, mas então chequei a conclusao que o Delphi 2010 quando carregou um projeto não soube configurar essa propriedade transparent que originalmente estava marcada como FALSE. É realmente um BUG que deverá ser corrigido pois imagina a quantidade de programadores que estão fazendo conversões. Mas dagora pra frente vou chamar ajuda dos universitários, não sei como acionar esse povo não. Fico P da vida porque parece que eu atraio esses BUGS, bug da bematech então me enrrosquei com uns 10.  Veja ai fragmentos do FONTE da classe STDCTRLS -------   constructor TCustomLabel.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ControlStyle := ControlStyle + [csReplicatable];
  Width := 65;
  Height := 17;
  FAutoSize := True;
  FShowAccelChar := True;
  { The "default" value for the Transparent property depends on
    if you have Themes available and enabled or not. If you have
    ever explicitly set it, that will override the default value. }
//if ThemeServices.ThemesEnabled then
//  ControlStyle := ControlStyle - [csOpaque]
//else
    ControlStyle := ControlStyle + [csOpaque];
  UpdateDrawTextProc;
end;
-----------   procedure TCustomLabel.Paint;
const
  Alignments: array[TAlignment] of Word = (DT_LEFT, DT_RIGHT, DT_CENTER);
  WordWraps: array[Boolean] of Word = (0, DT_WORDBREAK);
var
  Rect, CalcRect: TRect;
  DrawStyle: Longint;
begin
  with Canvas do
  begin
    Rect := ClientRect;
    if not Transparent then
    begin
      Brush.Color := Self.Color;
      Brush.Style := bsSolid;
      if not (csGlassPaint in ControlState) then
        FillRect(Rect)
      else
        FillGlassRect(Canvas, Rect);
    end;
   
    Brush.Style := bsClear;
    { DoDrawText takes care of BiDi alignments }
    DrawStyle := DT_EXPANDTABS or WordWraps[FWordWrap] or Alignments[FAlignment];
    { Calculate vertical layout }
    if FLayout <> tlTop then
    begin
      CalcRect := Rect;
      DoDrawText(CalcRect, DrawStyle or DT_CALCRECT);
      if FLayout = tlBottom then OffsetRect(Rect, 0, Height - CalcRect.Bottom)
      else OffsetRect(Rect, 0, (Height - CalcRect.Bottom) div 2);
    end;
    DoDrawText(Rect, DrawStyle);
  end;
end;   ------------   De repente para consertar o BUG tinha que alterar o FONTE do Delphi e compilar novamente, não é coisa pra min não. Que interessante o Delphi é feito de Delphi.   Abraços      
Responder

03/02/2010

Emerson Nascimento

creio que há uma distância muito grande pra percorrer...

Delphi 4,
Delphi 5,
Delphi 6,
Delphi 7,
Delphi 8,
Delphi 2005,
Delphi 2006,
Delphi 2007,
Delphi 2009,
Delphi 2010

creio que não estavam preparados para uma conversão de tamanha distância.

veja se você consegue um Deplhi 7 e abra seu projeto nele. veja se a conversão dá o resultado correto.

se der certo, veja se consegue um Delphi 2006 e tente converter.

creio que haja muita evolução no Delphi 2010 em relação ao Delphi 4 e, por isso, o problema na conversão.

eu importei um sistema do Delphi 7 para o Delphi 2006 sem qualquer problema. e agora para o Delphi 2009. tudo perfeito!
Responder

03/02/2010

Gilberto Moura

Bem, acabo de enviar para o Andreano Lanusse um historico do BUG e ficamos aguardando um retorno. e quando houver resposta vou relatar aqui o final da historia para aqueles que estao acompanhando. Obrigado a Todos por enquanto, e seu alguem tiver alguma novidade estamos por 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