| Autor |
Beitrag |
Andreas Pfau
      
Beiträge: 997
|
Verfasst: Sa 14.06.03 21:49
Hallo,
mal eine kleine Frage... ich habe ein TPageControl in Delphi 7, und habe das XPManifest eingebaut. Nun wird das PageControl nicht mehr gleichfarbig wie das Form dargestellt, sondern heller... keine Ahnung, wie die Farbe heißt... Das ist jetzt doof, weil sich andere Objekte nicht farblich abheben sollen... also:
- wie ermittle ich die Farbe oder
- wie lege ich diese Farbe fest?
_________________ Life is a bad adventure, but the graphic is really good!
|
|
mb
      
Beiträge: 185
|
Verfasst: So 15.06.03 22:10
Die TabSheets (bei "aktiviertem" XP-Manifest) haben keine Farbe sondern sind, wie die anderen XP-Panels auch, schattiert.
Du kannst aber für das Pagecontroll die Eigenschaft "Ownerdraw" auf TRUE setzen. Dann musst Du im Code der OnDraw Eigenschaft in etwa diesen Code einfügen, damit die Reiter-Titel geschrieben werden:
Quelltext 1: 2: 3: 4: 5: 6: 7:
| with control as TCustomTabControl do begin canvas.brush.color:=clBtnFace; canvas.fillrect(rect); canvas.textout(rect.left+10,rect.top+3,PageControl.Pages[tabindex].Caption); end; |
Ich hoffe, es hilft so, wie Du es wolltest...
_________________ Gruß,
MB
|
|
Andreas Pfau 
      
Beiträge: 997
|
Verfasst: Mo 16.06.03 14:24
Hallo,
der Tipp ist gut, aber dann geht ja das XP-Style verloren. Dann kann ich ja gleich das Manifest weglassen.
Aber du sagtest, es sei schattiert. Welche Farbe ist denn "Schattiert"? Wenn ich die genaue Farbe hätte, könnte ich ja die Objekte obendrauf in dieser Farbe zeichnen. das ist ja grade das Problem: Es sieht echt doof aus, wenn ich was mit clBtnFace drauzeichne, und ich habe halt keine Ahnung, welche Fabrkonstante ich nehmen soll.
_________________ Life is a bad adventure, but the graphic is really good!
|
|
mb
      
Beiträge: 185
|
Verfasst: Mo 16.06.03 16:34
| Zitat: | | aber dann geht ja das XP-Style verloren |
Klar, für das PageControl geht der XP-Style damit verloren, weil Du ja dann selbst zeichnest. Ich hatte das so verstanden, dass Du das auch wolltest, denn der XP-Style für die anderen Komponenten bleibt ja erhalten.
Wenn Du den XP-Style auch für das PageControl möchtest, dann muss OwnerDraw wieder deaktiviert werden und Du musst dir XP-Komponenten raussuchen, oder solche, die eine Transparent-Eigenschaft haben. Dann müsstest Du diese auf TRUE setzen.
Bei Labels, etc. wird aber bei aktiviertem XP-Style automatisch Transparenz verwendet....
_________________ Gruß,
MB
|
|
Andreas Pfau 
      
Beiträge: 997
|
Verfasst: Mo 16.06.03 17:54
Hallo,
wie meinst du das, "XP-Komponenten raussuchen"? Meinst du VCL aus dem Internet? Das PageControl von D7 hat KEINE Transparent-Eigenschaft.
Aber, es MUSS doch eine Möglichkeit geben, diese Farbe rauszufinden, die muss doch irgendwo hibnterlegt sein???
_________________ Life is a bad adventure, but the graphic is really good!
|
|
Andreas Pfau 
      
Beiträge: 997
|
Verfasst: Mo 16.06.03 18:40
Hallo,
 ich war wohl ein bisschen voreilig...
Ich habe mal einen Screenshot mit PhotoImpact untersucht, da fiel mir auf, dass es sich nicht um eine Farbe, sondern um einen ganz feinen Farbverlauf handelt. Da ist klar, dass ich die Farbe nirgends auslesen kann, da es ja viele einzelne Farben sind.
Ich denke jetz mal in eine andere Richtung, und versuche, meine anderen Objekte Transparent zu machen. Dann ist eingntlich egal, welche Farbe das PageControl hat.
_________________ Life is a bad adventure, but the graphic is really good!
|
|
mb
      
Beiträge: 185
|
Verfasst: Mo 16.06.03 19:03
Ja, genau. Es ist eben ein Verlauf von Farben (oder: wenn man ganz genau hinsieht eher etwas "ähnliches" *g*)
Du kannst ansonsten natürlich auch auf jedes TabSheet ein Panel platzieren, dass dann eine einheitliche Farbe (z.B. clBtnFace) hat. Die Eigenschaft Align des Panels setzt Du dann auf alClient.
(Aber das vielleicht nicht der optimalste Programmier-/Entwicklungsstil; trotzdem könntest Du es versuchen, wenn es für Dich in Ordnung ist)
_________________ Gruß,
MB
|
|
Andreas Pfau 
      
Beiträge: 997
|
Verfasst: Mo 16.06.03 19:14
Hallo,
erst gackern, dann keine Eier legen  ! Was ist "wenn man genau hinsieht"? Ich erkenne nur einen vertikalen Farbverlauf... OK, villeicht gibt es XP-Skins, bei denen das anders ist.
Na ja, ich habe es jetzt mal so implementiert:
- "ParentBAckground" der ScrollBoxen und Panels auf "True" gesetzt
- Die PainBoxen sind "Visible=False", wenn nix angezeigt werden soll
Trotzdem vielen Dank für deine Mühe!!! 
_________________ Life is a bad adventure, but the graphic is really good!
|
|
mb
      
Beiträge: 185
|
Verfasst: Mo 16.06.03 19:36
| Zitat: | | erst gackern, dann keine Eier legen |
Hab doch alles gesagt, was Du wissen musst. Wenn man sich das Standard-XP-Skin (Luna) ansieht - dort speziell die Farbverläufe z.B. bei PageControls - dann sieht man dass es ein Muster gibt, dass ein wenig der JPEG-Kompression ähnelt .... aber wirklich nur ein wenig.
Und komm hier keiner auf die Idee zu sagen, das das nicht so ist oder an meiner Grafikausrüstung (Monitor/Grafikkarte) liegt. ... Es ist so. Und zwar auf sehr vielen Systemen mit sehr unterschiedlicher Ausstattung
Deine Lösung ist doch ok und geht ja in die Richtung der Lösung, die ich Dir mit dem Transparenz-Ansatz vermittelt habe...
Ansonsten: Eigene Komponente schreiben und am besten gleich hier als OpenSource veröffentlichen ... oder irgend wo anders *FG*
_________________ Gruß,
MB
|
|
Andreas Pfau 
      
Beiträge: 997
|
Verfasst: Mo 16.06.03 20:15
Hallo,
mehr wollte ich doch gar net wissen! Aber ehrlich gesagt, erkenne ich da nix. Aber, das kann sehr gut sein, denn die Skins sind meines Wissens als Grafik-Dateien hinterlegt statt als Farbverlaufs-Code.
Allerdings werde ich kein OpenSource machen  , denn ich finde meine Lösung gut und habe keine Lust, dass noch weiter zu tweaken, also schreibe ich ga nicht erst neue Kompos (die die Welt eh' nicht braucht).
Tipp an alle, die das auch machen wollen: Wenn ihr in der PaintBox NICHTS darstellen wollt (also Transparent), dann zeichnet einfach NIX in "OnPaint". Der Hintergrund wird bein Repaint automatisch wiederhergestellt. Wenn ihr allerdings ohne Repaint "transparent" zeichnen wollt, also einen ausgefüllte Bereich wieder löschen wollt, ohne Repaint aufzurufen: Sendet "WM_PAINT" an das Parent-Element, mit "wParam=PaintBox.Canvas.Handle". Dann ist sicher, dass der Hintergrund OK ist. Bei Repaint oder Invalidate wird der Hintergrund nämlich NICHT implizit gelöscht. Korrigiert mich, falls das falsch ist.
_________________ Life is a bad adventure, but the graphic is really good!
|
|
Andreas Pfau 
      
Beiträge: 997
|
Verfasst: Mo 16.06.03 20:37
Hallo,
habe mir gedacht, wo ich grad' dabei bin, rette ich schnell deine Ehre  ... also, du hast GUTE Hardware (und ich schlechte Augen  ): Es sind Kompressions-Effekte zu sehen. Habe bei einem Screenshot mit Helligkeit und Kontrast rumgespielt:
Ich habe NICHTS komprimiert oder so, das ist ein Screenshot in ORIGINALGRÖßE, die Block-Effekte sind tatsächlich da, ich habe nur den Kontast verändert, dass man die Abstufungen sieht. Es handelt sich um ein GIF, also keine weitere Kompression. Ihr könnt @mb glauben.
_________________ Life is a bad adventure, but the graphic is really good!
|
|
mb
      
Beiträge: 185
|
Verfasst: Di 17.06.03 10:20
| Andreas Pfau hat folgendes geschrieben: | | habe mir gedacht, wo ich grad' dabei bin, rette ich schnell deine Ehre |
Danke
*gg*
_________________ Gruß,
MB
|
|
|