Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi hintergrundefekt (https://www.delphipraxis.net/69267-hintergrundefekt.html)

toredo 13. Mai 2006 12:17

Re: hintergrundefekt
 
:mrgreen: klingt kompliziert, ich werds mir aber trozdem anschauen:)



mfG toredo

xaromz 13. Mai 2006 12:19

Re: hintergrundefekt
 
Hallo,
Zitat:

Zitat von toredo
aber wenn ich das mache wird logischerweise das bild im TImage dunkler (aber irgendwie ist es einfach ein bisschen grauer und wird ned dunkler?), aber kann ich auch machen, dass der hintergrund dunkler wird?

Genau, das Bild wird ja mit einer grauen Version seiner Selbst überblendet, also mit jedem Schleifendurchlauf immer grauer.
Wenn Du das Bild dunkler haben willst (was dann nicht mehr der WinXP-Effekt wäre), dann ändere doch einfach die Funktion "ToGray" so ab, dass alle Farben noch etwas dunkler sind, z. B.
Delphi-Quellcode:
...
    //Pixel holen
    Trip := PRGBTriple(P);

    // Graustufenberechnung
    Gray := Round((Trip.rgbtBlue * 0.114 + Trip.rgbtGreen * 0.578 + Trip.rgbtRed * 0.299) * 0.5); // halbe Helligkeit
    Trip.rgbtBlue := Gray;
    Trip.rgbtGreen := Gray;
    Trip.rgbtRed := Gray;

    // Nächster Pixel
...
Zitat:

Zitat von toredo
weil n'TImage kann man ja nicht auserhalb der form hinsetzen^^

Das TImage ist ja nur ein Beispiel. Wo Du Dein Bitmap hernimmst und wo Du dann hinmalst ist natürlich Deine Sache.

Gruß
xaromz

toredo 13. Mai 2006 12:22

Re: hintergrundefekt
 
ok, aber wie kann ich denn ein bild vom hintergrund machen, bzw. es dann später auf dem hintergrund darstellen lassen?

das mit den farben hab ich jetzt auch kapiert:)



mfG toredo

Klaus01 13. Mai 2006 12:32

Re: hintergrundefekt
 
vielleicht eine Form die den ganzen Bildschirm ausfüllt
ohne Rahmen und ohne alles.
Damit kannst Du das dann auch erreichen, daß
niemand mehr in den Hintergrund klicken kann.

Grüße
Klaus

toredo 13. Mai 2006 13:17

Re: hintergrundefekt
 
hm, also ne zweite form wär keine schlechte idee:D

dann muss ich nur noch wissen wie man vom ganzen bildschirm ein pic erstellt bevor die form erscheint, udn dieses pic sollte dann auf die neue form kommen.



mfG toredo

Flare 13. Mai 2006 13:23

Re: hintergrundefekt
 
Du könntest ja ShowMasTa ganz nett fragen ob er dir sagt wie er es gemacht hat.
Den sein Programm läuft ja hier nebenbei als Thread.


Flare

Klaus01 13. Mai 2006 14:42

Re: hintergrundefekt
 
Wie Du einen ScreenShot machen kannst findest Du hier:
http://www.dsdt.info/tipps/?id=316

Grüße
Klaus

toredo 13. Mai 2006 14:50

Re: hintergrundefekt
 
öhm, ich habe grade gemerkt, dass ich die neue form nicht über die taskleiste legen kann...
weiss jemand wie man das machen kann?

und wie kann ich machen, dass ne form nicht "bewegbar" ist, also man kann sie halt ned hin und her schieben und so...



mfG toredo

Klaus01 13. Mai 2006 14:57

Re: hintergrundefekt
 
Du kannst ja die Taskbar verstecken -> http://home.arcor.de/hardcoders/delp...ten/sy_15.html
oder hier -> http://delphi.zsg-rottenburg.de/faq.html oder auch hier -> http://www.patrick-lenger.de/html/delphi/taskleiste.htm

und bitte daran denken, die taskbar wieder sichtbar zu machen, wenn Dein Programm beendet wird.

Wenn Deine Form keine Rahmen hat, kann man sie theoretisch auch nicht bewegen.

Grüße
Klaus

turboPASCAL 13. Mai 2006 16:49

Re: hintergrundefekt
 
Liste der Anhänge anzeigen (Anzahl: 3)
Ein Beispiel:

Delphi-Quellcode:
unit Unit1;

interface

uses
  {$IFDEF VER170}
    XPMan,
  {$ENDIF}
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Buttons;

type
  TFadeThread = class(TThread)
  private
    FParameter: Integer;
  protected
    procedure Execute; override;
  public
    constructor Create(FadeLevel: Integer);
  end;

  TForm1 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    Panel2: TPanel;
    Panel3: TPanel;
    Panel4: TPanel;
    Panel5: TPanel;
    Panel6: TPanel;
    PaintBox1: TPaintBox;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure PaintBox1Paint(Sender: TObject);
  private
    { Private-Deklarationen }
    bmp: TBitmap;
    Fade: TFadeThread;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

type
  TPixRGBArray = Array [0..2] of Byte;
  PPixRGBArray = ^TPixRGBArray;

procedure ScreenCapture(Bitmap: TBitmap);
var
  c: TCanvas;
  r: TRect;
begin
  c := TCanvas.Create;
  c.Handle := GetWindowDC(GetDesktopWindow);
  try
    r := Rect(0, 0, Screen.Width, Screen.Height);
    Bitmap.Width := Screen.Width;
    Bitmap.Height := Screen.Height;
    Bitmap.Canvas.CopyRect(r, c, r);
  finally
    ReleaseDC(0, c.Handle);
    c.Free;
  end;
end;

procedure MakeGray(Bitmap: TBitmap; HowGray : Byte);
var
  x, y: integer;
  R, G, B, h: Byte;
  Pixel: PPixRGBArray;
begin
  if Bitmap.PixelFormat <> pf24bit then
    Bitmap.PixelFormat := pf24bit;

  for y := 0 to Bitmap.height - 1 do
  begin
    Pixel := Bitmap.ScanLine[y];
    for x := 0 to Bitmap.Width - 1 do
    begin
      R := Pixel^[2];
      G := Pixel^[0];
      B := Pixel^[1];

      //h := (r+b+g) div 3;
      h:= HiByte(r * 77 + g * 150 + b * 28);

      Pixel^[2] := h + Round((R - h) / 255 * HowGray);
      Pixel^[0] := h + Round((G - h) / 255 * HowGray);
      Pixel^[1] := h + Round((B - h) / 255 * HowGray);

      inc(Pixel);
    end;
  end;
end;

constructor TFadeThread.Create(FadeLevel: Integer);
begin
  inherited Create(True);  // Create thread as suspended
  FreeOnTerminate := True; // Fire and forget
  Priority := tpNormal;    // the priority
  FParameter := FadeLevel;
end;

procedure TFadeThread.Execute;
var
  fa: integer;
begin
  fa := 255;
  while (fa > FParameter) do
  begin
    if not Terminated then Sleep(2) else Break;
    MakeGray(Form1.bmp, fa);
    Form1.PaintBox1.Canvas.Lock;
    Form1.PaintBox1.Canvas.Draw(0, 0, Form1.bmp);
    Form1.PaintBox1.Canvas.Unlock;
    if fa > 0 then dec(fa);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  bmp := TBitmap.Create;
  ScreenCapture(bmp);

  Width := Screen.DesktopWidth;
  Height := Screen.DesktopHeight;

  Panel1.Left := (ClientRect.Right div 2) - (Panel1.Width div 2);
  Panel1.Top := (ClientRect.Bottom div 2) - (Panel1.Height div 2);

  Fade := TFadeThread.Create(196);
  Fade.Resume;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  bmp.free;
end;

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
  PaintBox1.Canvas.Draw(0, 0, bmp);
end;

end.
Warum das "Programm" aber anhält, wenn man es beim faden anklickt ist mir unklar. (Thread ?) :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:00 Uhr.
Seite 2 von 3     12 3      

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