5
votes

I am working on a large delphi application with a tonne of legacy code that is being converted to xe2. I am implementing the vcl styles and for the most part there is no problem.

However on some forms, specifically where I have a tpanel, with a page control and tab sheets on them, the tabsheets are sometimes not drawing correctly. They display whatever image was previously in the area where the tabsheet is. So when the form first shows it will be the background screen on my computer, but if I change tabs, the tab backgrounds / labels/components appear to overlap.

This only occurs when I am using the vcl styles, if I do not apply the style, everything appears to display normally.

It only occurs on some tabs. I have tried to isolate a specific property or method call (or lack thereof) that may be causing this problem, but I am really struggling, especially given the pure size of the methods called in this code (in some forms, the method that fires on the tab change is over a 1000 lines of code).

I went to take some screen shots to demonstrate this happening, but the forms on the screen shots are all rendered correctly. This suggests to me that there is some sort of disconnect between what I am seeing, and what is actually 'there'.

Any advice would be most appreciated.

2
What? The contents of a screen shot is different from what you actually see on the screen?Mr Lister
@MrLister Yep, the most bizarre thing I have seen.Elissa
Is there custom drawing in the code (search for 'OnDraw')? Is it messing with DoubleBuffering or other properties that may influence how the screen is built up?Jan Doggen
Are you using TMS components? qc.embarcadero.com/wc/qcmain.aspx?d=99538Jan Doggen
@JanDoggen Not using any TMS components, and there is no custom drawing. However, I did try setting some of the problem tab sheets to have the doublebuffered property set to true. This actually caused the worst of the painting problems to be fixed! (Actually it is more of a bandaid than a fix...but definitely better than before). However doesn't solve all of the painting issues, only some of them.Elissa

2 Answers

2
votes

Maybe you should use the Vcl Styles Utils what corrects lot of style bug in delphi. If I remember correctly painting of the TTabSheets are incorrect by default - except you put it into a TPanel/etc.

0
votes

I was able to reproduce what i believe is the same issue on a windows XP PC,
windows 8.1 seemed to work fine with the same exe

Im running Delphi XE 5

Start a new VCL Forms Application

Copy the below code into your clipboard

Click on the main form in your new project and Paste

then go to Project > Options > Application > Appearance > "Choose any Style e.g. Luna"

Run the project, the tab "ts3" has the background of whatever was there prior.

setting DoubleBuffered to true on the panel as suggested by Elissa above did make it print better

Also setting DBEdit15, DBEdit16 and DBEdit18 to visible false made it print better - but i was unable to determine why

object pgc1: TPageControl
  Left = 0
  Top = 0
  Width = 635
  Height = 299
  ActivePage = ts3
  Align = alClient
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  ParentFont = False
  TabOrder = 0
  object ts3: TTabSheet
    Caption = 'ts3'
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -11
    Font.Name = 'Tahoma'
    Font.Style = []
    ImageIndex = 2
    ParentFont = False
    object pTotals: TPanel
      Left = 3
      Top = 36
      Width = 486
      Height = 237
      BevelOuter = bvNone
      DoubleBuffered = False
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      ParentDoubleBuffered = False
      ParentFont = False
      TabOrder = 0
      object Label19: TLabel
        Left = 3
        Top = -4
        Width = 8
        Height = 13
        Alignment = taRightJustify
        Caption = 'llll'
      end
      object Label21: TLabel
        Left = 3
        Top = 59
        Width = 8
        Height = 13
        Alignment = taRightJustify
        Caption = 'llll'
      end
      object Label22: TLabel
        Left = 3
        Top = 115
        Width = 8
        Height = 13
        Alignment = taRightJustify
        Caption = 'llll'
      end
      object Label23: TLabel
        Left = 3
        Top = 167
        Width = 8
        Height = 13
        Alignment = taRightJustify
        Caption = 'llll'
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clWindowText
        Font.Height = -11
        Font.Name = 'Tahoma'
        Font.Style = []
        ParentFont = False
      end
      object Label24: TLabel
        Left = 233
        Top = 216
        Width = 8
        Height = 13
        Alignment = taRightJustify
        Caption = 'llll'
        Visible = False
      end
      object Label29: TLabel
        Left = 343
        Top = 145
        Width = 8
        Height = 13
        Alignment = taRightJustify
        Caption = 'llll'
      end
      object Label30: TLabel
        Left = 343
        Top = 165
        Width = 8
        Height = 13
        Alignment = taRightJustify
        Caption = 'llll'
      end
      object Label48: TLabel
        Left = 3
        Top = 21
        Width = 8
        Height = 13
        Alignment = taRightJustify
        Caption = 'llll'
      end
      object Label53: TLabel
        Left = 319
        Top = 91
        Width = 8
        Height = 13
        Caption = 'llll'
      end
      object Label54: TLabel
        Left = 3
        Top = 139
        Width = 8
        Height = 13
        Alignment = taRightJustify
        Caption = 'llll'
      end
      object Label64: TLabel
        Left = 343
        Top = 185
        Width = 8
        Height = 13
        Alignment = taRightJustify
        Caption = 'llll'
      end
      object lbCons: TLabel
        Left = 3
        Top = 81
        Width = 8
        Height = 13
        Alignment = taRightJustify
        Caption = 'llll'
        Visible = False
      end
      object lPeriod_1: TLabel
        Left = 343
        Top = -4
        Width = 8
        Height = 13
        Alignment = taRightJustify
        Caption = 'llll'
      end
      object lPeriod_2: TLabel
        Left = 343
        Top = 16
        Width = 8
        Height = 13
        Alignment = taRightJustify
        Caption = 'llll'
      end
      object lPeriod_3: TLabel
        Left = 343
        Top = 39
        Width = 8
        Height = 13
        Alignment = taRightJustify
        Caption = 'llll'
      end
      object lPeriod_4: TLabel
        Left = 343
        Top = 60
        Width = 8
        Height = 13
        Alignment = taRightJustify
        Caption = 'llll'
      end
      object btnPayHist: TButton
        Left = 15
        Top = 200
        Width = 121
        Height = 25
        Caption = 'btn'
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clWindowText
        Font.Height = -11
        Font.Name = 'Tahoma'
        Font.Style = []
        ParentFont = False
        TabOrder = 0
      end
      object btnRefreshTotals: TBitBtn
        Left = 355
        Top = 112
        Width = 121
        Height = 25
        Caption = 'btn'
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clWindowText
        Font.Height = -11
        Font.Name = 'Tahoma'
        Font.Style = []
        ParentFont = False
        ParentShowHint = False
        ShowHint = True
        TabOrder = 1
      end
      object DBEdit13: TDBEdit
        Left = 23
        Top = 0
        Width = 121
        Height = 21
        TabStop = False
        Color = clBtnFace
        Ctl3D = True
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clBlack
        Font.Height = -11
        Font.Name = 'MS Sans Serif'
        Font.Style = []
        ParentCtl3D = False
        ParentFont = False
        ParentShowHint = False
        ReadOnly = True
        ShowHint = False
        TabOrder = 2
      end
      object DBEdit14: TDBEdit
        Left = 23
        Top = 25
        Width = 121
        Height = 21
        TabStop = False
        Color = clBtnFace
        Ctl3D = True
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clBlack
        Font.Height = -11
        Font.Name = 'MS Sans Serif'
        Font.Style = []
        ParentCtl3D = False
        ParentFont = False
        ParentShowHint = False
        ReadOnly = True
        ShowHint = False
        TabOrder = 3
      end
      object DBEdit15: TDBEdit
        Left = 23
        Top = 119
        Width = 121
        Height = 21
        TabStop = False
        Color = clBtnFace
        Ctl3D = True
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clBlack
        Font.Height = -11
        Font.Name = 'MS Sans Serif'
        Font.Style = []
        ParentCtl3D = False
        ParentFont = False
        ReadOnly = True
        TabOrder = 4
      end
      object DBEdit16: TDBEdit
        Left = 23
        Top = 171
        Width = 121
        Height = 21
        TabStop = False
        Color = clBtnFace
        Ctl3D = True
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clBlack
        Font.Height = -11
        Font.Name = 'MS Sans Serif'
        Font.Style = []
        ParentCtl3D = False
        ParentFont = False
        ReadOnly = True
        TabOrder = 5
      end
      object DBEdit17: TDBEdit
        Left = 249
        Top = 213
        Width = 121
        Height = 21
        TabStop = False
        Color = clBtnFace
        Ctl3D = True
        DataField = 'Last_Statement'
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clBlack
        Font.Height = -11
        Font.Name = 'MS Sans Serif'
        Font.Style = []
        ParentCtl3D = False
        ParentFont = False
        ReadOnly = True
        TabOrder = 6
        Visible = False
      end
      object DBEdit18: TDBEdit
        Left = 23
        Top = 143
        Width = 121
        Height = 21
        TabStop = False
        Color = clBtnFace
        Ctl3D = True
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clBlack
        Font.Height = -11
        Font.Name = 'MS Sans Serif'
        Font.Style = []
        ParentCtl3D = False
        ParentFont = False
        ReadOnly = True
        TabOrder = 7
      end
      object DBEdit19: TDBEdit
        Left = 23
        Top = 63
        Width = 121
        Height = 21
        TabStop = False
        Color = clBtnFace
        Ctl3D = True
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clBlack
        Font.Height = -11
        Font.Name = 'MS Sans Serif'
        Font.Style = []
        ParentCtl3D = False
        ParentFont = False
        ReadOnly = True
        TabOrder = 8
      end
      object DBEdit20: TDBEdit
        Left = 23
        Top = 87
        Width = 121
        Height = 21
        TabStop = False
        Color = clBtnFace
        Ctl3D = True
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clBlack
        Font.Height = -11
        Font.Name = 'MS Sans Serif'
        Font.Style = []
        ParentCtl3D = False
        ParentFont = False
        ReadOnly = True
        TabOrder = 9
        Visible = False
      end
      object DBEdit21: TDBEdit
        Left = 363
        Top = 0
        Width = 121
        Height = 21
        TabStop = False
        Color = clBtnFace
        Ctl3D = True
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clBlack
        Font.Height = -11
        Font.Name = 'MS Sans Serif'
        Font.Style = []
        ParentCtl3D = False
        ParentFont = False
        ReadOnly = True
        TabOrder = 10
      end
      object DBEdit22: TDBEdit
        Left = 357
        Top = 16
        Width = 121
        Height = 21
        TabStop = False
        Color = clBtnFace
        Ctl3D = True
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clBlack
        Font.Height = -11
        Font.Name = 'MS Sans Serif'
        Font.Style = []
        ParentCtl3D = False
        ParentFont = False
        ReadOnly = True
        TabOrder = 11
      end
      object DBEdit23: TDBEdit
        Left = 363
        Top = 43
        Width = 121
        Height = 21
        TabStop = False
        Color = clBtnFace
        Ctl3D = True
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clBlack
        Font.Height = -11
        Font.Name = 'MS Sans Serif'
        Font.Style = []
        ParentCtl3D = False
        ParentFont = False
        ReadOnly = True
        TabOrder = 12
      end
      object DBEdit24: TDBEdit
        Left = 363
        Top = 64
        Width = 121
        Height = 21
        TabStop = False
        Color = clBtnFace
        Ctl3D = True
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clBlack
        Font.Height = -11
        Font.Name = 'MS Sans Serif'
        Font.Style = []
        ParentCtl3D = False
        ParentFont = False
        ReadOnly = True
        TabOrder = 13
      end
      object DBEdit25: TDBEdit
        Left = 363
        Top = 150
        Width = 121
        Height = 21
        TabStop = False
        Color = clBtnFace
        Ctl3D = True
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clBlack
        Font.Height = -11
        Font.Name = 'MS Sans Serif'
        Font.Style = []
        ParentCtl3D = False
        ParentFont = False
        ReadOnly = True
        TabOrder = 14
      end
      object DBEdit26: TDBEdit
        Left = 363
        Top = 170
        Width = 121
        Height = 21
        TabStop = False
        Color = clBtnFace
        Ctl3D = True
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clBlack
        Font.Height = -11
        Font.Name = 'MS Sans Serif'
        Font.Style = []
        ParentCtl3D = False
        ParentFont = False
        ReadOnly = True
        TabOrder = 15
      end
      object DBEdit27: TDBEdit
        Left = 355
        Top = 182
        Width = 121
        Height = 21
        TabStop = False
        Color = clBtnFace
        Ctl3D = True
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clBlack
        Font.Height = -11
        Font.Name = 'MS Sans Serif'
        Font.Style = []
        ParentCtl3D = False
        ParentFont = False
        ReadOnly = True
        TabOrder = 16
      end
      object DBEdit28: TDBEdit
        Left = 363
        Top = 96
        Width = 121
        Height = 21
        TabStop = False
        Color = clBtnFace
        Ctl3D = True
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clBlack
        Font.Height = -11
        Font.Name = 'MS Sans Serif'
        Font.Style = []
        ParentCtl3D = False
        ParentFont = False
        ReadOnly = True
        TabOrder = 17
      end
    end
    object Panel2: TPanel
      Left = 0
      Top = 0
      Width = 627
      Height = 30
      Align = alTop
      BevelOuter = bvNone
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      ParentFont = False
      TabOrder = 1
      object pDisp2: TPanel
        Left = 69
        Top = 4
        Width = 473
        Height = 21
        BevelOuter = bvNone
        Caption = 'pDisp2'
        Font.Charset = DEFAULT_CHARSET
        Font.Color = clWindowText
        Font.Height = -11
        Font.Name = 'Tahoma'
        Font.Style = []
        ParentFont = False
        TabOrder = 0
        object Label18: TLabel
          Left = 1
          Top = 4
          Width = 8
          Height = 13
          Caption = 'llll'
          Font.Charset = DEFAULT_CHARSET
          Font.Color = clWindowText
          Font.Height = -11
          Font.Name = 'Tahoma'
          Font.Style = []
          ParentFont = False
        end
        object DBEdit29: TDBEdit
          Left = 51
          Top = 0
          Width = 421
          Height = 21
          TabStop = False
          Color = clBtnFace
          Ctl3D = True
          DataField = 'Name'
          Font.Charset = DEFAULT_CHARSET
          Font.Color = clBlack
          Font.Height = -11
          Font.Name = 'MS Sans Serif'
          Font.Style = []
          ParentCtl3D = False
          ParentFont = False
          ReadOnly = True
          TabOrder = 0
        end
      end
    end
  end
  object ts1: TTabSheet
    Caption = 'ts1'
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -11
    Font.Name = 'Tahoma'
    Font.Style = []
    ParentFont = False
    object shp1: TShape
      Left = 48
      Top = 32
      Width = 521
      Height = 201
    end
    object Shape1: TShape
      Left = 120
      Top = 104
      Width = 377
      Height = 81
    end
  end
end