Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fenster eines OCX in einer Anwendung die eigenes Skinning verwendet (https://www.delphipraxis.net/157825-fenster-eines-ocx-einer-anwendung-die-eigenes-skinning-verwendet.html)

Sherlock 26. Jan 2011 10:13

Fenster eines OCX in einer Anwendung die eigenes Skinning verwendet
 
Liste der Anhänge anzeigen (Anzahl: 3)
Hi zusammen,
ich stehe vor einem Rätsel. Ich habe ein OCX, das in eine MFC-Anwendung geladen werden kann. Die Anwendung hat ein eigenes Skinning (Name/Hersteller ist CodeJock). Das OCX wird zunächst ohne Probleme geladen und dargestellt. Wenn ich aber aus dem OCX ein TForm erzeugen und anzeigen möchte dann bekomme ich das Phänomen aus dem Anhang, es wird nicht vollständig gezeichnet, und der Rahmen ist weder geskinned noch gethemed. Die Komponenten auf der Form sind aber sehr wohl gethemed.

Das Fenster bekomme ich komplett gezeichnet, wenn ich im OnResize des Fensters SetWindowRgn mit den gewollten Infos füttere. Es siht dann wie Bild zwo aus. Dem geneigten Leser/Experten fällt natürlich sofort der extrem dicke Rand auf. BorderWidth ist auf 0...

JEtzt das i-Tüpfelchen: Ein TaskDialog zeichnet unter den gleichen Bedingungen zum Beispiel ein komplettes geskinntes Fenster (Bild3).

Weiss jemand was da los ist, bzw. wie das zu fixen geht?

Hier noch mal kurz die Rahmenbedinungen:
Windows 7 mit eingeschaltetem Aero
Exe mit Xp-Manifest und eigenem Skinning
OCX aus D2007 mit weiterem TForm

Sherlock

EWeiss 27. Jan 2011 06:10

AW: Fenster eines OCX in einer Anwendung die eigenes Skinning verwendet
 
Ich hoffe du weißt das du mehr machen mußt als NUR! das Manifest einzubinden.
Ohne das initialisieren der CommonControls wirst du in dem fall keine änderung der Fenster erreichen.
Das es in der Environment von Delphi funktioniert liegt wohl daran das Delphi selbst seine Designerumgebung initialisiert.

Also mal InitCommonControls aufrufen wenn möglich direkt am anfang deines projekts.

Delphi-Quellcode:
  {$EXTERNALSYM InitCommonControls}
procedure InitCommonControls; stdcall;
  external 'COMCTL32.DLL' Name 'InitCommonControls';
Nur dann wird das Manifest auch ausgewertet.

gruss

Sherlock 27. Jan 2011 07:34

AW: Fenster eines OCX in einer Anwendung die eigenes Skinning verwendet
 
Danke für die Antwort. Nein, das wusste ich tatsächlich nicht. War bei eigenständigen Exen, bisher auch nie nötig. Wie auch immer, es hat keine Besserung gebracht. :(

Zum Verständnis was ich getan habe: Ich habe ein VCL-Form dem Projekt hinzugefügt. Dieses hat
Delphi-Quellcode:
BorderStyle = bsNone
bekommen, weil ich nur innerhalb des Fenster was gezeichnet bekomme, den eigentlich Rahmen hab ich bisher gar nicht übermalen können.
Dann hab ich im OnPaint dieses Fensters eben genau das, was ich oben schon gepostet habe gemacht. Ich habe auch andere Parts probiert, WP_FRAME zum Beispiel...aber das hat überhaupt nix sichtbares bewirkt. Es ist echt frustrierend, daß die Controls gekinned/gethemed werden, aber nicht der Fensterrahmen. Wenns umgekehrt wäre,käme ich viel besser mit zurecht. :twisted:

Sherlock

EWeiss 27. Jan 2011 21:27

AW: Fenster eines OCX in einer Anwendung die eigenes Skinning verwendet
 
Zitat:

den eigentlich Rahmen hab ich bisher gar nicht übermalen können.
Das macht Windows für dich wenn Die CommonControls und das richtige Manifest eingebunden sind..
Da mußt du die Borderstyle nicht verändern.

Bei meiner Skinengine funktioniert das ohne probleme allerdings ist diese NONVCL..
Diese lade ich hier aber nicht mehr hoch. Sorry!
Ich denke mal das in der OCX die initialisierung nicht richtig eingebunden ist.. also wenn alle Controls Button usw.. nicht funktionieren unter Win7.

Lade mal die exe mit Borderstyle hier hoch ich schaue mal ob das manifest auch richtig eingebunden wurde.

gruss

Sherlock 28. Jan 2011 08:01

AW: Fenster eines OCX in einer Anwendung die eigenes Skinning verwendet
 
Ich habe zwischenzeitlich eine andere Lösung. Dadurch, daß alle Controls innerhalb des Forms den Style mitbekommen, muss ich mich ja "nur" um den Fenstertitel kümmern. Dafür gibt es aber eine Komponente von TMS, den ADVToolBarPager. Jetzt sieht das so aus, wie gewollt.
Ist zwar keine unbedingt saubere Lösung, aber akzeptabel....vor allem in Anbetracht dessen, daß ich dafür eigentlich gar keine Zeit habe. Die EXE bzw. das OCX darf ich leider hier nicht hochladen, ich bitte um Verständnis, es geht da um Firmendinge...:roll:

Ich danke Dir für die Lösungsansätze, und Dein Angebot mal reinzuschauen!

Gruß,
Sherlock

EWeiss 28. Jan 2011 08:27

AW: Fenster eines OCX in einer Anwendung die eigenes Skinning verwendet
 
Zitat:

ich bitte um Verständnis, es geht da um Firmendinge
null problemo :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:21 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