uso usan son que para las etiquetas etiqueta delphi styles delphi-xe2 vcl skinning

usan - Estilos VCL Delphi XE2, la actualización de los subtítulos bloquea la invalidación de otros controles



seo h3 (1)

Se ha encontrado un problema con los estilos de VCL: cuando actualiza el título del formulario, otros controles previamente redibujados dentro del mismo procedimiento no se vuelven a pintar, y se ve obligado a llamar a Repaint, perdiendo un valioso tiempo de procesamiento para volver a dibujar.

Ejemplo: (establecer opciones de proyecto / estilo 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.


Establezca las llamadas de subtítulos en la secuencia.

  • Primero form.caption, luego child.caption.

Una vez que haya llamado a la secuencia incorrecta, entonces dejó de funcionar la secuencia correcta. Es por eso que uso aquí, el botón "establecer por defecto".

Esto procede, mientras no haya una solución para eso, puedo vivir con eso.

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.

Si encontraste otra solución. Por favor dime.