2012-04-06 10 views
25

VCL stilleri içeren bir aksaklık bulundu: form açıklamasını güncelleştirdiğinizde, daha önce aynı yordamda yeniden çizilen diğer denetimler yeniden yazılmaz ve Resint'i çağırmak zorunda kalırsınız. yeniden işlemek için değerli işlem süresini kaybetmek.Delphi XE2 VCL stilleri, altyazı bloklarını günceller Diğer denetimler geçersiz kılma

Örnek: (set proje seçenekleri/vcl tarzı manuel) altyazı Set

unit Unit11; 

interface 

uses 
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, 
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls; 

type 
    TForm11 = class(TForm) 
    Button1: TButton; 
    Panel1: TPanel; 
    procedure Button1Click(Sender: TObject); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form11: TForm11; 

implementation 

{$R *.dfm} 

procedure TForm11.Button1Click(Sender: TObject); 
begin 
    Panel1.Caption := 'test'; 
    caption := 'glitch'; 
end; 

end. 

object Form11: TForm11 
    Left = 0 
    Top = 0 
    Caption = 'Form11' 
    ClientHeight = 89 
    ClientWidth = 352 
    Color = clBtnFace 
    Font.Charset = DEFAULT_CHARSET 
    Font.Color = clWindowText 
    Font.Height = -11 
    Font.Name = 'Tahoma' 
    Font.Style = [] 
    OldCreateOrder = False 
    PixelsPerInch = 96 
    TextHeight = 13 
    object Button1: TButton 
    Left = 8 
    Top = 8 
    Width = 121 
    Height = 57 
    Caption = 'Button1' 
    TabOrder = 0 
    OnClick = Button1Click 
    end 
    object Panel1: TPanel 
    Left = 135 
    Top = 8 
    Width = 185 
    Height = 57 
    Caption = 'Panel1' 
    TabOrder = 1 
    end 
end 

program Project10; 

uses 
    Vcl.Forms, 
    Unit11 in 'Unit11.pas' {Form11}, 
    Vcl.Themes, 
    Vcl.Styles; 

{$R *.res} 

begin 
    Application.Initialize; 
    Application.MainFormOnTaskbar := True; 
    TStyleManager.TrySetStyle('Cobalt XEMedia'); 
    Application.CreateForm(TForm11, Form11); 
    Application.Run; 
end. 
+1

Bu, sorunu açıkça göstermek için bir örnektir. – hikari

+1

Gereksiz olmasına rağmen kodu değiştirdim, burada şikayetinizi alamıyorum, konu ilk örnekle oldukça açıktı. – hikari

+1

Şikayet etmiyor. Kodunuzla ilgili bir sorun yaşıyorsanız, gönderim kodu göndermek bir yanıt almanıza yardımcı olmaz. Son yorumumu oku - Oluşturmak istediğiniz hemen hemen her sorunu çoğaltmak için kod oluşturabilirim, ancak bu benim kodumun gerçek yaşamdaki problemlere neden olduğu anlamına gelmez. Yardım istiyorsanız, kodunuzu gönderin. Ve BTW - ücretsiz yardım istemekte olduğunuz insanlara karşı bir tavır almak genellikle iyi bir fikir değildir - insanlara yardım etmek istemez. :) –

cevap

2

sırayla çağırır.

  • İlk form.caption, ardından child.caption.

Yanlış sıralamayı aradığınızda, doğru sıralamayı durdurduktan sonra. Bu yüzden burada, "varsayılanı ayarla" düğmesini kullanıyorum.

Bu işlem, herhangi bir düzeltme olmadığı sürece, bununla yaşayabilirim.

enter image description here

procedure TForm11.Button1Click(Sender: TObject); 
begin // wrong order 
    Panel1.Caption := 'test'; 
    caption := 'glitch'; 
end; 

procedure TForm11.Button2Click(Sender: TObject); 
begin // right order 
    caption := 'glitch'; 
    Panel1.Caption := 'test'; 
end; 

procedure TForm11.Button3Click(Sender: TObject); 
var 
i:integer; 
begin // count no refresh 
    for i:= 1 to 300 do begin 
    caption := 'glitch '+intToStr(i); 
    Panel1.Caption := 'test '+intToStr(i); 
    end; 
end; 

procedure TForm11.Button4Click(Sender: TObject); 
var 
i:integer; 
begin // count with refresh 
    for i:= 1 to 300 do begin 
    caption := 'glitch '+intToStr(i); 
    Panel1.Caption := 'test '+intToStr(i); 
    Panel1.Refresh; 
    end; 
end; 

procedure TForm11.Button5Click(Sender: TObject); 
begin // set default 
    caption := 'Form11'; 
    Panel1.Caption := 'Panel1'; 
    Panel1.Refresh; 
end; 

end. 

Eğer başka bir çözüm bulduysanız. Lütfen söyle bana.