Delphi-PRAXiS
Seite 3 von 5     123 45      

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/)
-   -   Farbe zur Laufzeit verändern? (https://www.delphipraxis.net/180616-farbe-zur-laufzeit-veraendern.html)

Simo 3. Jun 2014 14:27

AW: Farbe zur Laufzeit verändern?
 
Ich komme leider nicht voran..
Ich habe einen Code geschreiben, wenn auf das Panel klike(grau) dann wird es einfach blau! Aber das ist nicht was ich machen soll. Es muss genau aussehen wie im Anhang (Farbverlauf)!

Ich wäre echt sehr dankbar wenn mir jemand helfen kann..-)

TiGü 3. Jun 2014 14:37

AW: Farbe zur Laufzeit verändern?
 
Zitat:

Zitat von Simo (Beitrag 1261211)
Ich habe einen Code geschreiben, wenn auf das Panel klike(grau) dann wird es einfach blau! Aber das ist nicht was ich machen soll. Es muss genau aussehen wie im Anhang (Farbverlauf)!

Und wo ist dein Code?
Zeig ihn uns!
Trau dich!

Simo 3. Jun 2014 14:41

AW: Farbe zur Laufzeit verändern?
 
Delphi-Quellcode:
unit Panel;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.ImgList;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    procedure Panel1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
  //procedure FormCreate(Sender: TObject);
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}



procedure TForm1.Panel1Click(Sender: TObject);
const
  bgcolor = $00FF0000; //$00FFDDEE;
  linecolor = $00FFFFFF; //$00554366;
var
  img: array of TImage;
  reg: hrgn;
  i: Integer;
begin
  for i := 0 to ComponentCount - 1 do
  begin
    if Components[i].ClassName = 'TPanel' then
    begin
      setlength(img, Length(img) + 1);
      img[i] := TImage.Create(Self);
      img[i].Width := (Components[i] as TPanel).Width;
      img[i].Height := (Components[i] as TPanel).Height;
      img[i].Parent := (Components[i] as TPanel);
      img[i].Canvas.Brush.Color :=bgcolor;
      img[i].Canvas.pen.Color := bgcolor;
      img[i].Canvas.Rectangle(0,0,img[i].Width, img[i].Height);
      img[i].Canvas.pen.Color :=linecolor;
      img[i].Canvas.RoundRect(5,5,img[i].Width - 5,img[i].Height - 5,20,20);
      reg := CreateRoundRectRgn(0,0,(Components[i] as TPanel).Width,
        (Components[i] as TPanel).Height, 20,20);
      setwindowrgn((Components[i] as TPanel).Handle, reg, True);
      deleteobject(reg);
    end;
  end;
end;

end.
Wenn man drauf klickt dann wird das Panel einfach blau..
Ich möchte es genau programmieren wie im Anhang -(

??

Simo 4. Jun 2014 06:56

AW: Farbe zur Laufzeit verändern?
 
Zitat:

TiGü :
Und wo ist dein Code?
Zeig ihn uns!
Trau dich!
Wie könnte man es genauso machen??
.

Sir Rufo 4. Jun 2014 07:42

AW: Farbe zur Laufzeit verändern?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Diese Buttons sind mit 2 simplen Bildern gemacht worden auf die dann (zur Laufzeit) das Icon und der Text (weiß oder schwarz) gepinselt wurden.

Um die Breiten anpassen zu können und/oder zum Animieren, werden bestimmte Bereiche der Bilder wiederholt (sieht man sehr schön durch die Artefakte im blauen Bereich bei einer entsprechenden Vergrößerung)
Anhang 41295

Simo 4. Jun 2014 08:19

AW: Farbe zur Laufzeit verändern?
 
Hey!
Danke für die Antwort..
das ist nur ein Button(Bild links)!! Erst wenn man drauf klickt wird es wie aufm rechten Bild..


Und wie kann ich das machen, Wie aufm Bild?
.

Simo 4. Jun 2014 08:45

AW: Farbe zur Laufzeit verändern?
 
Ich hab's versucht.. ist aber leider nicht was ich will..

Delphi-Quellcode:
unit Panel;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.ImgList;


type
  TPanel = class(Vcl.ExtCtrls.TPanel)
    private { Private-Deklarationen }
    FOnPaint: TNotifyEvent;
    protected { Protected-Deklarationen }
    procedure Paint; override; public
    { Public-Deklarationen }
    property Canvas;
    published { Published-Deklarationen }
    property OnPaint: TNotifyEvent read FOnPaint write FOnPaint;
    end;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    procedure FormCreate(Sender: TObject);
    procedure Panel1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure OnPanel1Paint(Sender: TOBject);
  public
  //procedure FormCreate(Sender: TObject);
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}



procedure TForm1.Panel1Click(Sender: TObject);
const
  bgcolor = $00FF0000; //$00FFDDEE;
  linecolor = $00FFFFFF; //$00554366;
var
  img: array of TImage;
  reg: hrgn;
  i: Integer;
begin
  for i := 0 to ComponentCount - 1 do
  begin
    if Components[i].ClassName = 'TPanel' then
    begin
      setlength(img, Length(img) + 1);
      img[i] := TImage.Create(Self);
      img[i].Width := (Components[i] as TPanel).Width;
      img[i].Height := (Components[i] as TPanel).Height;
      img[i].Parent := (Components[i] as TPanel);
      img[i].Canvas.Brush.Color :=bgcolor;
      img[i].Canvas.pen.Color := bgcolor;
      img[i].Canvas.Rectangle(5,5,img[i].Width, img[i].Height);
      img[i].Canvas.pen.Color :=linecolor;
      img[i].Canvas.RoundRect(0,0,img[i].Width - 50,img[i].Height - 5,20,20);
      reg := CreateRoundRectRgn(0,0,(Components[i] as TPanel).Width,
        (Components[i] as TPanel).Height, 0,0);
      setwindowrgn((Components[i] as TPanel).Handle, reg, True);
      deleteobject(reg);
    end;
  end;
end;



procedure TPanel.Paint;
begin
inherited;
  if assigned(fOnPaint) then
  fOnPaint(Self);
  end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  Panel1.OnPaint := OnPanel1Paint;
end;

procedure TForm1.OnPanel1Paint(Sender: TOBject);
var r: Trect;
begin
  r := Panel1.ClientRect;
  InflateRect(r, -2, -2);
  With Panel1 do
  begin
  Canvas.Brush.Color :=$CD0000;//clWindow;
  Canvas.RoundRect(r.Left, r.Top, r.Right, r.Bottom, 20, 20);
  Canvas.Brush.Color := Panel1.Color;
  Canvas.Draw(5, 5, Application.Icon);
  Canvas.Brush.Color := $FFFFE0;
  Canvas.RoundRect(r.Left, r.Top, r.Right-120, r.Bottom, 30, 30);
  Canvas.Brush.Color:=Panel1.Color;
  Canvas.Draw(5, 5, Application.Icon);

  end;
end;

end.

DeddyH 4. Jun 2014 08:52

AW: Farbe zur Laufzeit verändern?
 
Wo hakt es denn noch? Und muss es unbedingt ein Panel sein?

Sir Rufo 4. Jun 2014 09:02

AW: Farbe zur Laufzeit verändern?
 
Zitat:

Zitat von Simo (Beitrag 1261297)
Hey!
Danke für die Antwort..
das ist nur ein Button(Bild links)!! Erst wenn man drauf klickt wird es wie aufm rechten Bild..


Und wie kann ich das machen, Wie aufm Bild?
.

:roll: Das weiß ich, ich wollte dir damit sagen, wie das gemacht worden ist.

Nimm 2 Bilder und zeige eins davon an. Sobald die Maustaste sich nach unten bewegt zeige das andere Bild an und wenn die Maustaste losgelassen wird, dann zeige wieder das erste Bild an.
Einfach gell?

DeddyH 4. Jun 2014 09:07

AW: Farbe zur Laufzeit verändern?
 
Oder man erstellt nur eine Grafik und "schiebt die rein", damit das auch animiert aussieht. Erstmal dürfte dafür ein einfacher Timer genügen, ein Multimedia-Timer wäre allerdings hübscher.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 Uhr.
Seite 3 von 5     123 45      

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