![]() |
hintergrundefekt
hay,
wenn man im klassischen anmeldeverfahren bei windows auf start/herunterfahren klickt, wird der hintergrund ja langsam so schwarz/weiss und man kann im hintergrund nichts mehr anklicken. weiss jemand von euch vielleicht wie man das machen kann? mfG toredo |
Re: hintergrundefekt
Diese Frage wurde hier schonmal irgendwann gestellt, das ist ein Screenshot, der Scharz-Weiß gemacht wurde und dann lässt Windows das Bild in das Scharz-Weiß-Bild langsam überlaufen.
Dass man nichts drücken kann liegt einfach an Windows, das ist Absicht :zwinker: Flare |
Re: hintergrundefekt
hay,
ich hab jetzt recht lange gesucht und auch viele stichworte benutzt, aber nichts gefunden, könntest du mir plz den link zu dem thread geben? mfG toredo |
Re: hintergrundefekt
Ich habe nach "Windows grau" gesucht, einen Thread gefunden der
![]() Flare |
Re: hintergrundefekt
thx, ich hab nur herunterfahren, schwarz/weiss und so gesucht aber gerda das was du eingegeben hast ned.^^
in dem thread wird zwar erklärt wie das ganze abläuft, aber nicht wie man das in delphi verwirklichen kann. so ein kleines code-schnipsel-ding wär shcon ned schlecht. mfG toredo |
Re: hintergrundefekt
Du hast ja auch nur gefragt wie man das machen kann, nicht nach Code oder ähnlichem ^^
Ich kenne mich nicht mit Bitmpas aus, deswegen kann ich dir nur Vorschläge geben wie man es machen könnte. Du hast ein Bitmap, und jedes Pixel hat einen Farbwert RGB. Diesen Farbwert musst du Zu einem Grau machen. Also bildest du den Mittelwert von den 3 Farben und machst eben in der ersten Stufe 5% Anpassung an diesen Grauwert, in der 2. Stufe 10% und so weiter. Zwischen den einzelnen Stufen lässt du das Bild immer wieder anzeigen (is ja logisch :mrgreen: ). Also so würde ich das machen. Flare |
Re: hintergrundefekt
:-D danke für die gute anleitung :-D
ich verstehs jetzt zimlich, also wies funzt, aber beim verwirklichen hab ich noch probs. und mit bitmaps kenn ich mich auch ned gut aus (eigentlich kennnn ich mich (noch) mit nichts aus^^). könnte plz einer der sich gut mit solchen dingen auskennt shcnell helfen? danke für deine hifle Flare :zwinker: mfG toredo |
Re: hintergrundefekt
Hallo,
im Grunde brauchst Du dafür drei Funktionen: Eine, die ein Graustufenbild erzeugt. Eine, die zwei Bilder überlagert Eine, die diese Überlagerung in einer Schleife widerholt. Ich hab mal diese drei Funktionen geschrieben. Du brauchst nur noch ein TImage und einen Button:
Delphi-Quellcode:
Gruß
procedure ToGray(const Bitmap: TBitmap);
var Trip: PRGBTriple; P: PByte; PixelCount: Integer; C: Integer; Gray: Byte; Alignment: Byte; begin if not (Bitmap.PixelFormat in [pf24Bit, pf32Bit]) then Exit; // Vorbereitungen P := Bitmap.ScanLine[Bitmap.Height - 1]; // Alignment berechnen if (Bitmap.PixelFormat = pf24Bit) then Alignment := (4 - (Bitmap.Width * 3) mod 4) mod 4 else Alignment := 0; // In einer Schleife alle Pixel durchgehen PixelCount := Bitmap.Width * Bitmap.Height; for C := 0 to PixelCount - 1 do begin //Pixel holen Trip := PRGBTriple(P); // Graustufenberechnung Gray := Round(Trip.rgbtBlue * 0.114 + Trip.rgbtGreen * 0.578 + Trip.rgbtRed * 0.299); Trip.rgbtBlue := Gray; Trip.rgbtGreen := Gray; Trip.rgbtRed := Gray; // Nächster Pixel Inc(P, 3); if Bitmap.PixelFormat = pf32Bit then Inc(P); // Alignment am Ende der Zeile if (C > 0) and (C mod Bitmap.Width = 0) then Inc(P, Alignment); end; end; function Fade(const Bitmap1, Bitmap2: TBitmap; Delta: Byte): TBitmap; var Trip1, Trip2, TripR: PRGBTriple; P1, P2, PR: PByte; PixelCount: Integer; C: Integer; Alignment1, Alignment2, AlignmentR: Byte; begin Result := nil; if (Bitmap1 = nil) or (Bitmap2 = nil) or (Bitmap1.Width <> Bitmap2.Width) or (Bitmap1.Height <> Bitmap2.Height) or not (Bitmap1.PixelFormat in [pf24Bit, pf32Bit]) or not (Bitmap2.PixelFormat in [pf24Bit, pf32Bit]) then Exit; // Vorbereiten Result := TBitmap.Create; Result.PixelFormat := pf24Bit; Result.Width := Bitmap1.Width; Result.Height := Bitmap1.Height; P1 := Bitmap1.ScanLine[Bitmap1.Height - 1]; P2 := Bitmap2.ScanLine[Bitmap2.Height - 1]; PR := Result.ScanLine[Result.Height - 1]; // Alignment berechnen if (Bitmap1.PixelFormat = pf24Bit) then Alignment1 := (4 - (Bitmap1.Width * 3) mod 4) mod 4 else Alignment1 := 0; if (Bitmap2.PixelFormat = pf24Bit) then Alignment2 := (4 - (Bitmap2.Width * 3) mod 4) mod 4 else Alignment2 := 0; AlignmentR := (4 - (Result.Width * 3) mod 4) mod 4; // In einer Schleife alle Pixel durchgehen PixelCount := Result.Width * Result.Height; for C := 0 to PixelCount - 1 do begin // Pixel holen Trip1 := PRGBTriple(P1); Trip2 := PRGBTriple(P2); TripR := PRGBTriple(PR); // Faden TripR.rgbtBlue := Round((Trip1.rgbtBlue * Delta + Trip2.rgbtBlue * (255 - Delta)) / 255); TripR.rgbtGreen := Round((Trip1.rgbtGreen * Delta + Trip2.rgbtGreen * (255 - Delta)) / 255); TripR.rgbtRed := Round((Trip1.rgbtRed * Delta + Trip2.rgbtRed * (255 - Delta)) / 255); // Nächster Pixel Inc(P1, 3); Inc(P2, 3); Inc(PR, 3); if Bitmap1.PixelFormat = pf32Bit then Inc(P1); if Bitmap2.PixelFormat = pf32Bit then Inc(P2); // Alignment am Ende der Zeile if (C > 0) and (C mod Result.Width = 0) then begin Inc(P1, Alignment1); Inc(P2, Alignment2); Inc(PR, AlignmentR); end; end; end; procedure TForm1.Button1Click(Sender: TObject); var B1, B2: TBitmap; I: Integer; Count, Delta: Integer; begin try Screen.Cursor := crHourglass; // Bilder vorbereiten B1 := TBitmap.Create; B1.Assign(Image1.Picture.Bitmap); B2 := TBitmap.Create; B2.Assign(B1); ToGray(B2); // Die Schleife // einfach mal mit den Werten spielen, // aber (Count - 1) * Delta darf nicht größer sein als 255! Count := 20; Delta := 12; for I := 0 to Count - 1 do begin Image1.Picture.Bitmap := Fade(B1, B2, 255 - I * Delta); Image1.Update; end; finally B2.Free; B1.Free; Screen.Cursor := crDefault; end; end; xaromz |
Re: hintergrundefekt
hay,
thx für den code :) ich hab einfach gemacht, dass man nicht auf nen button klicken muss, sondern, dass das alles am anfang wenn die form1 gemacht wird passieren soll. 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? weil n'TImage kann man ja nicht auserhalb der form hinsetzen^^ mfG toredo |
Re: hintergrundefekt
Liste der Anhänge anzeigen (Anzahl: 1)
Servus,
hab mal vor über einem Jahr damit angefangen eine Komponente zu schreiben, die gerade den XP-Shutdowneffekt nachahmt. Die Quelltexte sind ziemlich konfus, nicht doukumentiert. Wollte alles "professionell" machen :-D. Vllt. checkst du durch. Man braucht glaube ich noch folgende Kopmenenten :-(:
Have Fun Manne [edit]Ich idiot sollte die datei auch anhängen :wall: [/edit] |
Re: hintergrundefekt
:mrgreen: klingt kompliziert, ich werds mir aber trozdem anschauen:)
mfG toredo |
Re: hintergrundefekt
Hallo,
Zitat:
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:
Gruß xaromz |
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 |
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 |
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 |
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 |
Re: hintergrundefekt
Wie Du einen ScreenShot machen kannst findest Du hier:
![]() Grüße Klaus |
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 |
Re: hintergrundefekt
Du kannst ja die Taskbar verstecken ->
![]() oder hier -> ![]() ![]() 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 |
Re: hintergrundefekt
Liste der Anhänge anzeigen (Anzahl: 3)
Ein Beispiel:
Delphi-Quellcode:
Warum das "Programm" aber anhält, wenn man es beim faden anklickt ist mir unklar. (Thread ?) :gruebel:
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. |
Re: hintergrundefekt
thx, für das beispiel, ich glaub jetzt sollte ich hinkriegen :-D
danke für die gute und schnelle hilfe. mfG toredo |
Re: hintergrundefekt
Soebend ist ein Update gemacht worden. ;)
:hi: |
Re: hintergrundefekt
turboPascal, wie kommst du darauf:
Delphi-Quellcode:
Danke,
h:= HiByte(r * 77 + g * 150 + b * 28);
Ralf |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz