Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Toolbutton grau machen + disable !!! (https://www.delphipraxis.net/157214-toolbutton-grau-machen-disable.html)

Metallicwar 3. Jan 2011 13:38

Toolbutton grau machen + disable !!!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen, ich verwende eine Toolbar + PNGImageList.
Ich möchte erreichen, dass meine Buttons grau gefärbt werden und dass diese "disabled" sind.
Nur bekomm ich es nicht hin, entweder ich kann sie disablen und sie sind total grau oder ich kann sie grau färben aber sind dennoch anklickbar...

Im Anhang befindet sich ne kleine Demoanwendung, vll versteht ihr dann besser was ich meine..

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, PngImageList, ImgList, ComCtrls, ToolWin, StdCtrls, ExtCtrls;

type
  TPNG = class(TForm)
    ToolBar1: TToolBar;
    tbtnAngel: TToolButton;
    PngImageList1: TPngImageList;
    tbtnRight: TToolButton;
    tbtnPlus: TToolButton;
    tbtnX: TToolButton;
    btnGrey: TButton;
    btnAlleEnable: TButton;
    Panel1: TPanel;
    procedure FormResize(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure btnAlleEnableClick(Sender: TObject);
    procedure btnGreyClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  PNG: TPNG;

implementation

{$R *.dfm}

procedure TPNG.FormResize(Sender: TObject);
begin
  Toolbar1.ShowCaptions := False;
  Application.ProcessMessages;
  Toolbar1.ShowCaptions := True;
end;

procedure TPNG.FormShow(Sender: TObject);
begin
  tbtnAngel.Enabled := True;
  tbtnRight.Enabled := True;
  tbtnPlus.Enabled := True;
  tbtnX.Enabled := True;
end;

procedure TPNG.btnAlleEnableClick(Sender: TObject);
begin
  if (tbtnAngel.Enabled = True) and (tbtnPlus.Enabled = True) and
     (tbtnX.Enabled = True) and (tbtnRight.Enabled = True) then
    begin
      tbtnAngel.Enabled := False;
      tbtnPlus.Enabled := False;
      tbtnX.Enabled := False;
      tbtnRight.Enabled := False;
      Toolbar1.ShowCaptions := False;
      Application.ProcessMessages;
      Toolbar1.ShowCaptions := True;
    end
  else
    begin
      tbtnAngel.Enabled := True;
      tbtnPlus.Enabled := True;
      tbtnX.Enabled := True;
      tbtnRight.Enabled := True;
      Toolbar1.ShowCaptions := False;
      Application.ProcessMessages;
      Toolbar1.ShowCaptions := True;
    end;
end;

procedure TPNG.btnGreyClick(Sender: TObject);
begin
  if PngImageList1.EnabledImages = True then
    begin
      PngImageList1.EnabledImages := False;
      Toolbar1.ShowCaptions := False;
      Application.ProcessMessages;
      Toolbar1.ShowCaptions := True;
    end
  else
    begin
      PngImageList1.EnabledImages := True;
      Toolbar1.ShowCaptions := False;
      Application.ProcessMessages;
      Toolbar1.ShowCaptions := True;
    end;
end;

end.

s.h.a.r.k 3. Jan 2011 14:00

AW: Toolbutton grau machen + disable !!!
 
Zu dem grau gefärbten Bilder: diese schauen echt nicht sehr schön aus! Die Transparenz wird dabei scheinbar deaktiviert.

Schau dir mal die PNGComponents an. Dort gibt es einen PNG-Button, bei dem man pngGrayscaleOnDisabled setzen kann.

Metallicwar 3. Jan 2011 14:11

AW: Toolbutton grau machen + disable !!!
 
Nach langem Suchen, habe ich eine Lösung gefunden.
Folgendermaßen:
Der Eigenschaft DisabledImages (der Toolbar) meine PNGImageList zuweisen.
Dann die Eigenschaft EnabledImages (Eigenschaft von Toolbar1.DisablesImages) auf False setzen.
und abschließend die Eigenschaft Enabled der Toolbar auf False setzen ..
siehe da, der Button ist in dunkler grauer Farbe und nicht mehr anklickbar.

Eine weiter Frage die ich mir stelle: Ist es möglich, den Button zu disablen und das Image nur in abgeschwächter Farbe darzustellen, also nicht komplett dunkelgrau, sonder dass die unrsprüngliche Farbe noch leicht zu erkennen ist?

Metallicwar 3. Jan 2011 14:16

AW: Toolbutton grau machen + disable !!!
 
ah, danke für die Antwort.
Also wenn ich von meinen Images die Eigenschaft pngGrayscaleOnDisabled auf True setze verändert sich garnichts.
Wenn ich allerdings wie oben geschrieben der Eigenschaft DisabledImages (der Toolbar) meine PNGImageList zuweisen, dann werden die Toolbuttons Disabled angezeigt und in Farbe, wenn es jetzte noch möglich wäre die Farbe abzuschwächen, dann wäre es perfekt ;)

mfg David

Progman 3. Jan 2011 14:26

AW: Toolbutton grau machen + disable !!!
 
Die folgende Procedure macht ein TPNGObject halbtransparent (stammt aus der Unit der TPNGButton-Komponente):
Delphi-Quellcode:
procedure MakeImageHalfTransparent(Source, Dest: TPNGObject);
var
  i, j: Integer;
begin
  Dest.Assign(Source);
  Dest.CreateAlpha;
  if (Dest.Header.ColorType <> COLOR_PALETTE) then
    for j := 0 to Source.Height - 1 do
      for i := 0 to Source.Width - 1 do
        Dest.AlphaScanline[j]^[i] := Dest.AlphaScanline[j]^[i] div 3;
end;
Vielleicht nützt es dir ja was.

s.h.a.r.k 3. Jan 2011 14:34

AW: Toolbutton grau machen + disable !!!
 
Zitat:

Zitat von Metallicwar (Beitrag 1071986)
ah, danke für die Antwort.
Also wenn ich von meinen Images die Eigenschaft pngGrayscaleOnDisabled auf True setze verändert sich garnichts.
Wenn ich allerdings wie oben geschrieben der Eigenschaft DisabledImages (der Toolbar) meine PNGImageList zuweisen, dann werden die Toolbuttons Disabled angezeigt und in Farbe, wenn es jetzte noch möglich wäre die Farbe abzuschwächen, dann wäre es perfekt ;)

mfg David

Funktioniert doch wunderbar?! Du musst nur die passenden Eigenschaften in der PNGImageList setzen:
  • EnabledImages auf True, dann haben die Images die normale Farbe.
  • EnabledImages auf False und PngOptions.pngGrayScaleOnDisabled := False -> dann werden die Images abgeschwächt gezeichnet.
  • EnabledImages auf False und PngOptions.pngGrayScaleOnDisabled := True -> dann werden die Images ausgegraut gezeichnet.

Metallicwar 3. Jan 2011 14:56

AW: Toolbutton grau machen + disable !!!
 
Danke für die weiteren Antworten. Ich habe es erstmal mit dem Lösungsvorschlag von s.h.a.r.k probiert.
Habe die Eigenschaften wie beschrieben gesetzt.
Die Images in den Toolbuttons werden jetzt nicht komplett grau dargestellt, sondern dunkel und ein wenig Farbe ist zu erkennen. Sooo, aber eines ist glaube ich nicht berücksichtigt worden... Die Buttons sind weiterhin anklickbar, also habe ich die Eigenschaft Enabled der Toolbar auf False gesetzt. Beim Ausführen des Programms, sind die Toolbarbuttons aber wieder komplett disabled.. (also alles grau, so wie die Farbe des Formulars).

Könntest du mal dein Project hochladen, vll habe ich nur irgendwo ne falschen Eigenschaftswert...
Weil ich wollte ja erreichen, dass die Buttons disabled sind und in einer etwas abgeschwächtere Farbe dargestellt werden.... nicht wie momentan, wo die Images sehr dunkel sind und ein wenig Farbe enthalten.

Metallicwar 3. Jan 2011 15:59

AW: Toolbutton grau machen + disable !!!
 
aaarh, ich bin am verzweifeln, da muss es doch einen Weg geben. -.-
Ich sollte vll noch mal den Vorschlag von Progman ausprobieren..

Lemmy 3. Jan 2011 16:17

AW: Toolbutton grau machen + disable !!!
 
Hi,

der Weg der bei mir immer funktioniert hat:

ein entsprechendes disabled Bild in einer zweiten ImageList und die Imagelist der entsprechenden Eigenschaft der Toolbar/Toolbutton zuweisen und fertig!

Grüße

Metallicwar 4. Jan 2011 16:51

AW: Toolbutton grau machen + disable !!!
 
@Lemmy, ja die Idee schwirrte mir auch schon im Kopf rum, wollte eben wissen, ob es nicht doch eine Alternative gibt? :o

Metallicwar 25. Jan 2011 08:09

AW: Toolbutton grau machen + disable !!!
 
guten morgen, kann mich mal wieder mit diesem Thema beschäftigen.
Ich bin gerade dabei, den Code von Progman zu verwenden.
Delphi-Quellcode:
procedure MakeImageHalfTransparent(Source, Dest: TPNGObject);
var
  i, j: Integer;
begin
  Dest.Assign(Source);
  Dest.CreateAlpha;
  if (Dest.Header.ColorType <> COLOR_PALETTE) then
    for j := 0 to Source.Height - 1 do
      for i := 0 to Source.Width - 1 do
        Dest.AlphaScanline[j]^[i] := Dest.AlphaScanline[j]^[i] div 3;
end;
im Form.OnShow möchte ich dann die Funktion anwenden.

Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin
  MakeImageHalfTransparent(Toolbutton1, TToolbutton);
end;
Nur weiß ich leider nicht, was ich als Source, bzw. Dest. angeben soll.
Momentan erhalte ich die Fehlermeldung Inkompatible Typen TPNGObject und TToolButton.
Ich verwende eine Toolbar mit entsprechenden Toolbuttons und weiße diesen Images einer ImageList zu.

DeddyH 25. Jan 2011 08:14

AW: Toolbutton grau machen + disable !!!
 
Source dürfte das Bild aus der ersten Imagelist sein, Dest dann die Entsprechung aus der zweiten.

Metallicwar 25. Jan 2011 08:32

AW: Toolbutton grau machen + disable !!!
 
Zitat:

Zitat von DeddyH (Beitrag 1077103)
Source dürfte das Bild aus der ersten Imagelist sein, Dest dann die Entsprechung aus der zweiten.

Hi,
habe ich da etwas falsch verstanden?
Wenn ich 2 Imagelist brauche, dann kann ich mir in der zweiten ImageList auch gleich die PNG's in abgeschwächter Farbe speichern und bei Bedarf den Toolbuttons zuweisen.
Ich habe gedacht, dass mit Hilfe dieser procedure die Farbe des PNG's, welches dem Toolbutton zugewiesen ist, abgeschwäch wird.

DeddyH 25. Jan 2011 08:37

AW: Toolbutton grau machen + disable !!!
 
Ich hatte mich auf Lemmys Vorschlag bezogen. Ansonsten müsstest Du halt das PNGObject, das dem Button zugewiesen ist, mit dem Code bearbeiten, aber das dürfte nur umständlich bis schwer wieder rückgängig zu machen sein.

Metallicwar 25. Jan 2011 08:44

AW: Toolbutton grau machen + disable !!!
 
also die einfachste Methode um das Image farblich abzuschwächen wäre eine zweite Imagelist in der ich die PNG's in abgeschwächter Farbe speicher und dann der Eigenschaft Toolbar.DisabledImages diese Imagelist zuweise.

Jetzte stellt sich für mich die Frage, mit welchem Tool, Programm es am einfach möglich ist, die Farbe der PNG's abzuschwächen.

mfg David

DeddyH 25. Jan 2011 08:53

AW: Toolbutton grau machen + disable !!!
 
Ich denke, mit GIMP oder IrfanView dürfte das gehen. Ansonsten selber machen, den Code hast Du ja ;)


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