Windows XP se manifestă în Delphi

În Windows XP există un manager de teme care modifică aspectul majorității obiectelor standard Windows. Misrosoft susține că versiunile vechi ale bibliotecii comctl32.dll conțin coduri pentru a sprijini diferite platforme ale familiei Windows. Microsoft a decis în mod inteligent să curățe conținutul comctl32.dll pentru a îmbunătăți activitatea temelor în Windows XP. Acum, se pare că există două versiuni ale bibliotecii: vechi (versiunea 5.8), care este compatibil cu toate versiunile anterioare de Windows (inclusiv XP) și noua versiune (versiunea 6), care este compatibil doar cu XP (și a următoarelor versiuni de Windows).

Ce este un manifest?

Ce este un manifest și ce rol joacă în alegerea versiunii 6.0 a bibliotecii comctl32.dll pentru aplicația mea? Manifest este un document XML care trebuie scris în resursele aplicației. De obicei, resursele sunt folosite pentru a stoca lucruri precum imagini, icoane și cursoare de mouse. (Pentru resursele pe care le puteți citi în articolul meu, notați Traducător) Un document XML, când este conectat la o secțiune de resurse, permite Windows XP să decidă ce versiune de comctl32.dll să utilizeze.

Cum se face acest lucru?

Pentru a conecta acest manifest XML la aplicația dvs., trebuie să cunoașteți mai întâi constantele furnizate de Microsoft. Când adăugați o resursă la aplicație, există un număr de grup și un număr de serie asociat resursei. Numărul grupului este numit, de obicei, un nume clar. Dacă vă uitați la exploratorul de resurse furnizat împreună cu Delphi ca proiect demo (situat), veți vedea grupuri numite "Strings", "Bitmaps", "Icons" sau "Cursos" mouse) - este doar o reprezentare a numărului grupului. Numărul grupului pentru "Manifest" este de 24, în conformitate cu antetele C distribuite de Microsoft. Numărul manifest pentru determinarea versiunii bibliotecii comctl32.dll este 1 (De asemenea, în conformitate cu antetele C distribuite de Microsoft). Aceste informații vor fi necesare atunci când vom crea noua noastră resursă (fișier .RES) pentru a vă conecta la aplicația noastră. Pentru a crea fișierul .RES necesar, trebuie să creați un fișier .RC care să conțină manifestul nostru XML care aparține grupului și resurselor corespunzătoare. În arhiva zip inclusă în acest document veți vedea două fișiere:

Fișierul WindowsXP.RC conține instrumentele pentru conectarea WindowsXP.Manifest (document XML), și anume:

Acum, că avem aceste două fișiere, trebuie să folosim compilatorul de resurse Delphi pentru a compila fișierul .RC. Ca rezultat, vom primi un fișier WindowsXP.RES pe care îl putem conecta la aplicația noastră. Pentru a compila resursa, la promptul de comandă, tastați:

Desigur, cred că ați inserat directorul BIN Delphi în variabila de mediu PATH.

După compilare, veți vedea fișierul WindowsXP.RES din același director. Ultimul pas pentru ca aplicația dvs. să devină compatibilă cu WindowsXP este să conectați fișierul de resurse la aplicația dvs. Cea mai ușoară modalitate de a face acest lucru este să adăugați următoarea directivă în fișierul proiectului sau în formularul principal:

Cel mai probabil va trebui să puneți această linie imediat după directiva care este deja disponibilă în aplicația dvs., imediat după implementare. Odată ce ați conectat WindowsXP.RES în aplicația dvs., compilați aplicația și rulați-o. Managerul de teme Windows va aduce aplicația dvs. la vizualizarea altor aplicații scrise pentru Windows XP.

Editați avertismentele

Microsoft avertizează toți dezvoltatorii că au eliminat o cantitate mare de cod din biblioteca comctl32.dll și că este necesar să verificați cu atenție toate aspectele componentelor înainte de a distribui noua versiune. Din experiența mea, pot spune că pot exista probleme de compatibilitate cu Delphi. Pe de altă parte, am găsit o singură problemă - cu componenta TListView. Dacă utilizați TListView în stilul de vizualizare a vsReport, veți avea probleme utilizând proprietatea TColumns. În timpul pornirii, când încercați să utilizați anteturile coloanelor cu tipul de afișare, veți avea o eroare de kernel (eroare de kernel).

În general, uite ce am primit: projectxp.zip

Remediați o problemă cu TListView (datorită lui Eugene Ivanov)

Am început să caut cum să remediem această omisiune, deoarece Delphi 6 cu Update 1 nu ajută la rezolvarea acestei probleme. Soluția este după cum urmează:

  1. Deschideți "ComCtrls.pas" și găsiți "TCustomListView.UpdateColumn"
  2. Să găsim următoarea linie.
  1. Îl înlocuim cu:
  1. Salvăm Comctrls.pas. Acum, TListView nu provoacă o eroare în modul vsReport sub Windows XP.

Depanarea TPageControl

Soluția la problema de a seta culoarea de fundal clBtnFace pentru TTabSheet.
După cum știți, TPageControl este un container TTabSheet: TPageControl este în mod normal perceput de manifestul Windows XP, dar rămâne corect până când adăugați TTabSheet.

Soluția este după cum urmează:

  1. Deschideți modulul "ComCtrls.pas" și găsiți linia "TTabSheet.UpdateTabShowing"
  2. Veți vedea următorul text:
  1. Adăugați următoarea linie la această procedură:
  1. Dacă în TPageControl este creată mai mult de o fișă TTab, este posibil ca atunci când porniți aplicația să vedeți toate componentele desenate pe prima foaie (TTabSheet). Nu vă panicați. Găsiți metoda "TPageControl.Loaded" și schimbați-o astfel încât să arate următoarele coduri:

Codul adăugat determină TPageControl să treacă prin toate paginile înainte de spectacol. Este cu siguranță puțin urât, dar funcționează. Dacă aveți alte metode pentru a rezolva această problemă, anunțați-ne.

Remediați o problemă cu TTrackBar

TTrackBar - Îmi pare rău, dar care este poziția actuală?

Un indiciu care arată valoarea curentă a TTrackBar atunci când se deplasează cursorul este convenabil, adică nu va trebui să adăugați un TLabel pentru acest lucru.

  1. Deschideți "ComCtrls.pas" și găsiți "TTrackBar.CreateParams".
  2. Veți vedea următorul cod:
  1. Adăugați condiția "sau TBS_TOOLTIPS" pe linia "Style: =". În cele din urmă, ar trebui să obțineți:
  1. Salvați ComCtrls.pas și bucurați-vă de sugestii.

Articole similare