PDA

Ver la Versión Completa : Funcion OndrawTab funciona dependiendo del PC


Parsec
27-03-2014, 18:17:55
Hola,

Pongo la propiedad OwnerDraw del PageControl en true y pongo el siguiente código en su evento OnDrawTab:


procedure TForm1.PageControl1DrawTab(
Control: TCustomTabControl;
TabIndex: Integer; const Rect: TRect; Active: Boolean);
var
R: TRect;
Texto: String;

begin
if Active then
begin
Control.Canvas.Font.Color := clRed;
Control.Canvas.Font.Style := [fsBold];
end;

Texto := PageControl1.Pages[TabIndex].Caption;

R := Rect;
Control.Canvas.FillRect(R);

if not Active then
InflateRect(R, 0, -3);

DrawText(
Control.Canvas.Handle, PChar(Texto), -1, R,
DT_SINGLELINE or DT_CENTER or DT_VCENTER);
end;

En mi portátil funciona perfectamente, lo llevo al PC del cliente y no funciona, muestra las pestañas en blanco.
He comprobado que cuando abre el formulario Form1.Show en mi portátil ejecuta la función OndrawTab y en el PC del cliente no pasa por ella, como si no existiese.

¿Alguien me puede explicar que sucede?
Muchas gracias

Chris
27-03-2014, 19:58:19
Tu PC no utiliza los temas de Windows?
La PC del Cliente utiliza los temas de Windows?

ecfisa
27-03-2014, 20:40:25
Hola Parsec.

Con seguridad el otro equipo tiene Windows 64 bits, aquí está reportado el error + solución: Report #: 19859 - WMDrawItem fails under WOW64 (http://qc.embarcadero.com/wc/qcmain.aspx?d=19859).

Y en este otro: TPageControl OnDrawTab and Win64 (https://forums.embarcadero.com/thread.jspa?messageID=292598), encontrarás el código en una unidad para agregarlo a tu aplicación.

Saludos :)

Parsec
27-03-2014, 21:16:12
Hola Ecfisa,

exacto!!!, es de 64 bits.

Muchas gracias...algún día tendré que ver la forma de invitaros a algo.