Trovato un problema tecnico con gli stili VCL: quando si aggiorna la didascalia del modulo, gli altri controlli precedentemente ridisegnati all'interno della stessa procedura non vengono ridipinti e si è costretti a chiamare Repaint, perdere tempo prezioso di elaborazione per ridisegnare.Stili Delphi XE2 VCL, aggiornamento didascalia blocca altri controlli invalidazione
Esempio: (stile Imposta opzioni di progetto/VCL manualmente)
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.
Questo è solo un esempio per mostrare chiaramente il problema. – hikari
Va bene modificato il codice, anche se non era necessario, non mi lamento da questo punto, il problema era abbastanza chiaro con l'esempio iniziale. – hikari
Non si lamenta. Se hai un problema con il tuo codice, la pubblicazione di un codice inventato non ti aiuterà a ottenere una risposta. Leggi il mio ultimo commento: posso creare il codice per duplicare quasi tutti i problemi che vuoi creare, ma ciò non significa che il mio codice inventato sia ciò che sta causando il problema nella vita reale. Se vuoi aiuto, pubblica il tuo codice. E BTW: assumere un atteggiamento nei confronti delle persone a cui chiedi aiuto gratuito non è di solito una buona idea - fa sì che le persone non vogliano aiutare. :) –