miércoles, abril 04, 2007

VB6 i estils XP

Molts articles ens parlen sobre com aconseguir que les velles aplicacions VB6 tinguin un aspecte XP. De fet, tenint l'arxiu Project1.exe, només cal crear l'arxiu Project1.exe.manifest amb el següent contingut:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
  version="1.0.0.0"
  processorArchitecture="X86"
  name="Microsoft.VB6.VBnetStyles"
  type="win32"
/>
<description>VBnet Manifest for VB6 IDE</description>
<dependency>
  <dependentAssembly>
    <assemblyIdentity
      type="win32"
      name="Microsoft.Windows.Common-Controls"
      version="6.0.0.0"
      processorArchitecture="X86"
      publicKeyToken="6595b64144ccf1df"
      language="*"
    />
  </dependentAssembly>
</dependency>
</assembly>


Cal tenir en compte, però, el següent:

  • No posar directament controls sobre els Frames. Cal situar un PictureBox en el frame i situar-hi els controls sobre aquest. Sino apareixen de manera errònia.

  • He notat que el rendiment cau notablement en el cas dels controls ComboBox. Si es fa servir el métode .AddItem, per sobre de 2000 elements mateix control mostra comportaments ben diferents si s'executa amb i sense arxiu .manifest. Això es soluciona afegint items directament amb crides a la API:


    Private Const CB_ADDSTRING = &H143
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

    Private Sub AddItemToCombo(cmb As ComboBox, str As String)
      Call SendMessage(cmb.hwnd, CB_ADDSTRING, 0&, ByVal str)
    End Sub
  • No hay comentarios: