Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TabControl mit OwnerDraw klappt nicht unter Vista 64-bit (https://www.delphipraxis.net/118613-tabcontrol-mit-ownerdraw-klappt-nicht-unter-vista-64-bit.html)

WalterFr 11. Aug 2008 15:14


TabControl mit OwnerDraw klappt nicht unter Vista 64-bit
 
Hallo,

ich verwende ein TPageControl und zeichne die einzelnen Tabs selber;
ich setze also OwnerDraw auf True und hänge an den OnDrawTab meinen Code.

Funktionierte bisher völlig problemlos - bis ich auf Vista 64-bit umgestiegen
bin; dort werden die Tabs nicht gezeichnet, sie bleiben leer, nix ist zu
sehen. Mit Vista 32-bit läuft's einwandfrei.

Ein Debugger-Breakpoint in der OnDrawTab-Methode wird nicht erreicht, d.h.
unter Vista 64-bit wird die OnDrawTab-Methode gar nicht aufgerufen!!!
Dasselbe passiert beim TTabControl.

Ich setze Delphi 7 ein und verwende im Projekt ein XPManifest.


Was mache ich falsch - bzw. was macht Vista 64-bit anders als die anderen
Windows-Mutationen?

Ich bin für jeden Hinweis dankbar!

Bernhard Geyer 11. Aug 2008 15:19

Re: TabControl mit OwnerDraw klappt nicht unter Vista 64-bit
 
Aktuellen Grafikkartentreiber installiert (meine Standardfrage bei Vista nachdem ich hier schon genügend Probleme damit hatte)

WalterFr 11. Aug 2008 15:32

Re: TabControl mit OwnerDraw klappt nicht unter Vista 64-bit
 
Zitat:

Zitat von Bernhard Geyer
Aktuellen Grafikkartentreiber installiert (meine Standardfrage bei Vista nachdem ich hier schon genügend Probleme damit hatte)

Was sollte der Grafikkartentreiber damit zu tun haben, dass der OnDrawTab-Handler unter Vista 64-bit nicht aufgerufen wird, unter Vista 32-bit dagegen schon? Außerdem bleiben ja NUR die Register leer, die Tabsheets selber werden problemlos gezeichnet ...

Bernhard Geyer 11. Aug 2008 15:45

Re: TabControl mit OwnerDraw klappt nicht unter Vista 64-bit
 
Zitat:

Zitat von WalterFr
Was sollte der Grafikkartentreiber damit zu tun haben, dass der OnDrawTab-Handler unter Vista 64-bit nicht aufgerufen wird, unter Vista 32-bit dagegen schon? Außerdem bleiben ja NUR die Register leer, die Tabsheets selber werden problemlos gezeichnet ...

Die Treiberuntiefen sind tief. z.B. ActiveX-Control läuft im IE problemlos. Ist das ActiveX per IE (TWEbBrowser) in die eigene Anwendung eingebunden erfolgt keine korrekte Anzeige. Treiberupdate behebt dieses Problem.

WalterFr 11. Aug 2008 16:15

Re: TabControl mit OwnerDraw klappt nicht unter Vista 64-bit
 
Zitat:

Zitat von Bernhard Geyer
Die Treiberuntiefen sind tief. z.B. ActiveX-Control läuft im IE problemlos. Ist das ActiveX per IE (TWEbBrowser) in die eigene Anwendung eingebunden erfolgt keine korrekte Anzeige. Treiberupdate behebt dieses Problem.

Ich glaube nicht, dass das Problem was mit dem Grafikkartentreiber zu tun hat.
Schließlich funktioniert ein TPageControl mit OwnerDraw = False problemlos.

Der OnDrawTab-Event wird unter Vista 64-bit einfach nicht aufgerufen, was mir ein
Problem zwischen der Win32 VCL von Delphi 7 und Vista 64-bit zu sein scheint. Ich
hab sogar die Vermutung, dass man das Problem auf jedem beliebigen 64-bit Windows
reproduzieren könnte ... mir steht aber nur Vista 64-bit zur Verfügung.

Bernhard Geyer 11. Aug 2008 17:21

Re: TabControl mit OwnerDraw klappt nicht unter Vista 64-bit
 
Zitat:

Zitat von WalterFr
Ich glaube nicht, dass das Problem was mit dem Grafikkartentreiber zu tun hat.
Schließlich funktioniert ein TPageControl mit OwnerDraw = False problemlos.

Ein aktueller Treiber wäre schnell installiert.

Zitat:

Zitat von WalterFr
Der OnDrawTab-Event wird unter Vista 64-bit einfach nicht aufgerufen, was mir ein
Problem zwischen der Win32 VCL von Delphi 7 und Vista 64-bit zu sein scheint. Ich
hab sogar die Vermutung, dass man das Problem auf jedem beliebigen 64-bit Windows
reproduzieren könnte ... mir steht aber nur Vista 64-bit zur Verfügung.

Dann stell doch mal ein kleine Demo-App zur verfügung. Es wird genügend User hier geben die entweder Vista 64 einsetzen oder schnell in einer VM (wie ich) starten können. Dann sehen wir ja was ist.

WalterFr 12. Aug 2008 12:06

Re: TabControl mit OwnerDraw klappt nicht unter Vista 64-bit
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Bernhard Geyer
Dann stell doch mal ein kleine Demo-App zur verfügung. Es wird genügend User hier geben die entweder Vista 64 einsetzen oder schnell in einer VM (wie ich) starten können. Dann sehen wir ja was ist.

Okay. Ich habe mal die Sourcen und ein EXE ohne Laufzeit-Packages gezippt und angehängt.
Das Formular enthält jeweils ein PageControl und TabControl mit OwnerDraw = True (oben) und OwnerDraw = False (unten).

semo 12. Aug 2008 12:36

Re: TabControl mit OwnerDraw klappt nicht unter Vista 64-bit
 
Liste der Anhänge anzeigen (Anzahl: 1)
Im Anhang ein Screenshot.
Bitte prüfe einmal wohin du das projekt gespeichert hast.
Im Programmverzeichnis von Delphi 7?
Schieb es einmal in einen anderen Ordner - auf dem Desktop zum Beispiel.

Bernhard Geyer 12. Aug 2008 12:44

Re: TabControl mit OwnerDraw klappt nicht unter Vista 64-bit
 
Unter meiner VM-Ware installation werden die Tab-Laschen bei OwnerDraw = True nicht gezeichnet.

WalterFr 12. Aug 2008 13:02

Re: TabControl mit OwnerDraw klappt nicht unter Vista 64-bit
 
Zitat:

Zitat von M. Hassmann
Im Anhang ein Screenshot.
Bitte prüfe einmal wohin du das projekt gespeichert hast.
Im Programmverzeichnis von Delphi 7?
Schieb es einmal in einen anderen Ordner - auf dem Desktop zum Beispiel.

Ich kann es schieben, wohin ich will, unter Vista 64-bit sind die Tabs leer. Unter allen 32-bit Windowsen sieht das Formular so aus, wie auf deinem Screenshot.

Unter welchem Windows hast du die Demo laufen lassen?

semo 12. Aug 2008 13:03

Re: TabControl mit OwnerDraw klappt nicht unter Vista 64-bit
 
windows vista ultimate sp1

WalterFr 12. Aug 2008 13:11

Re: TabControl mit OwnerDraw klappt nicht unter Vista 64-bit
 
Zitat:

Zitat von M. Hassmann
windows vista ultimate sp1

32-Bit oder 64-Bit???

semo 12. Aug 2008 13:41

Re: TabControl mit OwnerDraw klappt nicht unter Vista 64-bit
 
64 bit

WalterFr 18. Aug 2008 15:28

Re: TabControl mit OwnerDraw klappt nicht unter Vista 64-bit
 
Zitat:

Zitat von M. Hassmann
64 bit

Ich habe inzwischen im Verwandten-, Kollegen-, Bekannten- und Unbekannten-Kreis recherchiert und habe keinen Vista 64-Bit Rechner gefunden, bei dem die Tab-Reiter im OwnerDraw-Fall sichtbar wären.

Ein "Herumspielen" mit dem Kompatibilitäts-Modus hat auch nix gebracht.

Ich versuche jetzt einen Upgrade von Delphi7 Prof. auf ein jüngeres Delphi und hoffe, das das etwas bringt ...

Jedenfalls vielen Dank für eure Bemühungen!!

WalterFr 2. Sep 2008 12:58

Re: TabControl mit OwnerDraw klappt nicht unter Vista 64-bit
 
Ich habe das Projekt jetzt mit dem Delphi 2007 RAD Studio compiliert und siehe da,
die Tab-Reiter sind dann auch unter Vista 64-Bit sichtbar.

Ganz offensichtlich existiert da in Delphi 7 (resp. der win32 vcl) ein Bug, der
dazu führt, dass der OnDrawTab unter einem 64-Bit Betriebssystem nicht aufgerufen wird.

win568 8. Sep 2008 15:30

Re: TabControl mit OwnerDraw klappt nicht unter Vista 64-bit
 
Hi

Aber was ist nun mit D7. Werde wegen dem Bug nicht das komplette Projekt auf D2007 umstellen.
Gibt es eine Lösung ???

Bernhard Geyer 8. Sep 2008 15:46

Re: TabControl mit OwnerDraw klappt nicht unter Vista 64-bit
 
Und was spricht gegen umstellen?

Falls du D2007 hast kannst du ja versuchen im Quellcode zu erkennen was geändert wurde und diese Fixes nach D7 rückportieren.

win568 9. Sep 2008 06:39

Re: TabControl mit OwnerDraw klappt nicht unter Vista 64-bit
 
Hi

Hab ich ja versucht. Das Problem ist, dass die Unterschiede im TTabControl marginal sind. Es wurde vieles in TWincontrol und TControl geändert. Und diese wiederrum kann ich nicht nachführen, da das andere Komponenten beeinflußt.

kopernikus 8. Jun 2009 10:05

Re: TabControl mit OwnerDraw klappt nicht unter Vista 64-bit
 
Es sind einige kleine Änderungen in der Unit Controls.pas erforderlich

(siehe auch: http://qc.embarcadero.com/wc/qcmain.aspx?d=19859):

Delphi-Quellcode:
procedure TWinControl.WMCompareItem(var Message: TWMCompareItem);
begin
  if not DoControlMsg(Message.CompareItemStruct^.hwndItem, Message) then inherited;
end;

procedure TWinControl.WMDeleteItem(var Message: TWMDeleteItem);
begin
  if not DoControlMsg(Message.DeleteItemStruct^.hwndItem, Message) then inherited;
end;

procedure TWinControl.WMDrawItem(var Message: TWMDrawItem);
begin
  if not DoControlMsg(Message.DrawItemStruct^.hwndItem, Message) then inherited;
end;

procedure TWinControl.WMMeasureItem(var Message: TWMMeasureItem);
begin
  if not DoControlMsg(Message.IDCtl, Message) then inherited;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz