Delphi-PRAXiS
Seite 1 von 2  1 2      

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 TToolbutton & 32 Bit farbtiefeneinstellung (https://www.delphipraxis.net/121504-ttoolbutton-32-bit-farbtiefeneinstellung.html)

gibb 29. Sep 2008 10:43


TToolbutton & 32 Bit farbtiefeneinstellung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,

Ich versteh das ganze nicht....

Das im Anhang als Roten Kringel dargestellte ist ein TToolButton...
Das im GrünGelben Kringel dargestellte ist ein TSpeedButton....
bei dem zwei unter dem GrünGelben Kringel handelt es sich um einen BitButton.

Jetzt zu meinem Problem (Was wohl schon ziemlich deutlich aus dem Screenshot herauskommt) Es trit nur auf wenn ich den 32 bit farbtiefen Modus in Windows eingestellt habe. Im 16 Bit farbtiefen modus von Windows wird die BitMap datei genauso dargestellt wie im grünen kringel.

Alle Buttons sind auf dem Screenshot disabled und es geht auch nur um diesen Status.

hat Jemand eine Idee warum das teil falsch dargestellt wird und was man dagegen unternehmen könnte ? ich bin Ratlos. Einen anderen Button nehmen geht leider nicht da dies mit enormen aufwand verbunden währe.

Freundliche Grüsse

Gibb

toms 29. Sep 2008 11:51

Re: TToolbutton & 32 Bit farbtiefeneinstellung
 
Hallo

Ich kenne zwar nicht die Ursache doch ein Workaround wäre eine "Disabled" ImageList zu verwenden.

gibb 29. Sep 2008 12:01

Re: TToolbutton & 32 Bit farbtiefeneinstellung
 
Ja das währe es ^-^'

Theoretisch. Das Problem ist jedoch das alles dynamisch erstellt wird. Und eine DisabledImageList keine mögliche lösung darstellt. ;)

Entweder ich bieg das hin das das mit den normalen bilder funktioniert oder es bleibt so wie es ist. Nun wie es so ist währe es halt besser wenn es mit der einen ImageList funktionieren würde.

Ich habe mit einer anderen Toolbar komponente gearbeitet und dort folgenden source entdeckt:

Delphi-Quellcode:
  with TmpImage.Canvas do begin
            Brush.Color := clBtnFace;
            FillRect (IRect);
            Brush.Color := clBtnHighlight;
            DC := Handle;
            SetTextColor (DC, clBlack);
            SetBkColor (DC, clWhite);
            BitBlt (DC, 1, 1, IWidthA, IHeightA,
              MonoBmp.Canvas.Handle, 0, 0, ROP_PSDPxax);
            Brush.Color := clBtnShadow;
            DC := Handle;
            SetTextColor (DC, clBlack);
            SetBkColor (DC, clWhite);
            BitBlt (DC, 0, 0, IWidthA, IHeightA,
              MonoBmp.Canvas.Handle, 0, 0, ROP_PSDPxax);
          end;
[delphi]

jeh nachdem ob bei BitBlt ROP_PSDPxax oder ROP_DSPDxax übergeben wird funktioniert es so wie im grünen oder im roten.

Leider versteh ich von dem ganzen nicht viel mehr als Bahnhof ;)

BitBlt wird in der gdi32.dll aufgerufen welche laut google mit der windwos installation vorhanden sein sollte ?

Sagt das jemandem was ?

gibb 30. Sep 2008 07:54

Re: TToolbutton & 32 Bit farbtiefeneinstellung
 
hat niemand eine Idee wie man das beheben könnte ?

Währe wirklich um jeden Input dankbar...

lg gibb

gibb 1. Okt 2008 06:45

Re: TToolbutton & 32 Bit farbtiefeneinstellung
 
letzter push...

toms 1. Okt 2008 07:26

Re: TToolbutton & 32 Bit farbtiefeneinstellung
 
Zitat:

Zitat von gibb
Theoretisch. Das Problem ist jedoch das alles dynamisch erstellt wird. Und eine DisabledImageList keine mögliche lösung darstellt. ;)

Warum nicht? Verstehe ich nicht ganz. Die disabled Bilder können ja auch dynamisch erstellt werden?

gibb 1. Okt 2008 08:19

Re: TToolbutton & 32 Bit farbtiefeneinstellung
 
Weil es nunmal nicht möglich ist ;)

Wobei möglich ist alles, es währe einfach mit zuviel aufwand verbunden. Es müsten im Projekt X dinge umgestellt werden. Es zieht einfach einen Ellen langen Rattenschwanz mit sich. Und die nebeneffekte sind dann mehr oder weniger unbekannt. Sagen wir so: es kostet zuviel zeit, und kann nicht genügend getestet werden resp. ist ein zu grosses risiko.

Codewalker 1. Okt 2008 10:29

Re: TToolbutton & 32 Bit farbtiefeneinstellung
 
Ich hätte keine Lösung, aber eine Alternative: TPNGImageList von www.thany.org.
Damit musst du zwar PNGs nutzen (also auch ein klein wenig konvertieren, aber nicht viel Aufwand). Du hast aber den Vorteil, dass die ImageList für "Disabled"-Elemente die Bilder selbstständig monochrom und/oder halbtransparent darstellt. Damit sollte das dann kein Problem sein. Sie ist von TImageList abgeleitet, kann also allen Komponenten in der gleichen Art und Weise zugeordnet werden

gibb 1. Okt 2008 10:32

Re: TToolbutton & 32 Bit farbtiefeneinstellung
 
Ich finds ja nett das ihr mir alternativen vorschläg :lol:

aaaaber das hilft mir nicht... mir geht es wirklich konkret um DAS Problem.

EDIT: deine alternativ scheitert daran das es viel aufwand währe alles umzukonvertieren. Wenn müsste ich einen Parallel betrieb gewährleisten können und das ist mir leider unmöglich.

wenn jemand ne alternative von ttoolbutton hätte wo das funktionieren würd DANN wärs vielleicht ne alternative ;) aber das müsste wiederum alles unterstützen was der normale toolbutton unterstützt.

gibb 3. Okt 2008 12:16

Re: TToolbutton & 32 Bit farbtiefeneinstellung
 
Hallo,

Also ich hab sehrwarscheindlich die Fehlerursache gefunden ;)

Es liegt mit 99% Wahrscheindlichkeit daran das in der TCustomImageList bei der procedure DoDraw der dll call BitBlt(DestDC, X, Y, Width, Height, SrcDC, 0, 0, ROP_DSPDxax); mit dem ROP_DYPDxax aufgerufen wird.

Kann mir jemand sagen wie ich diese am einfachsten üerschreiben kann ? Sie ist Virtuell, wenn ich jedoch eine klasse davon ableite und genau diese funktion deklariere und mit override deklariere habe ich das Problem das gewisse funktionen oder Felder der Klasse halt fehlen. Woran liegt das? hatte bisher mit der vererbung noch nicht alzu viel am hut. Sehrwarscheinlich liegt das ja daran das die felder als Private deklariert sind. Gibt es jedoch ne möglichkeit genau diese felder trozdem zu benutzen ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:05 Uhr.
Seite 1 von 2  1 2      

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