jueves, abril 05, 2007

Organitza els gadgets en un sabater de plàstic



No se m'havia acudit, però reconec que és una bona idea per a tenir organitzats tots els gadgets i accessoris que acostumem a aculumar. Adaptadors, cables, transformadors de corrent, mans lliures, etc. Tot a la vista i en un sol pla vertical. A veure si trobo algun organitzador d'aquestos en un tot a 1€ i experimento un aquesta idea...

Via Lifehacker

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
  •