AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Fenster eines OCX in einer Anwendung die eigenes Skinning verwendet
Thema durchsuchen
Ansicht
Themen-Optionen

Fenster eines OCX in einer Anwendung die eigenes Skinning verwendet

Ein Thema von Sherlock · begonnen am 26. Jan 2011 · letzter Beitrag vom 28. Jan 2011
Antwort Antwort
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#1

Fenster eines OCX in einer Anwendung die eigenes Skinning verwendet

  Alt 26. Jan 2011, 10:13
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
Miniaturansicht angehängter Grafiken
2011-01-26-10h36_45.png   2011-01-26-11h05_18.png   2011-01-26-11h11_23.png  
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann

Geändert von Sherlock (26. Jan 2011 um 10:46 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

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

  Alt 27. Jan 2011, 06:10
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.DLLName 'InitCommonControls';
Nur dann wird das Manifest auch ausgewertet.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 27. Jan 2011, 07:34
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 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.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

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

  Alt 27. Jan 2011, 21:27
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

Geändert von EWeiss (27. Jan 2011 um 21:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#5

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

  Alt 28. Jan 2011, 08:01
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...

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

Gruß,
Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

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

  Alt 28. Jan 2011, 08:27
Zitat:
ich bitte um Verständnis, es geht da um Firmendinge
null problemo
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz