![]() |
Dimmed Sample
Projekt entfernt..
|
AW: Dimmed Sample
Noch nicht perfekt aber ein Anfang.
Windows werden nun richtig gezeichnet. Hatte vergessen das GetDC ja nur für den Client Bereich zuständig ist Mit GetWindowDC hat's dann funktioniert. Und die Farbe zu der gefaded werden soll kann man nun angeben.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin AutoFade(Form1, RGB(255,255,255), RGB(0, 0, 0) {RGB(64,128,255), RGB(0, 32, 64)}); ShowMessage('What nu.. Hi greyed out'); deinit := DIMMED_DEINIT; end; gruss |
AW: Dimmed Sample
Darf man nach der Technik fragen, die du da anwendest? Legst du eine weiter Form über die bestehende? Oder greifst du irgendwie in die Zeichenprozedur ein?
|
AW: Dimmed Sample
Zitat:
Ich lege eine Form als Child in die Anwendung kopiere den Hintergrund vom Devicekontex mit GetWindowDC / BitBlt und übertrage diesen in das Childwindow dabei wird die Original Farbe in die Übergebene gefadet. Das ganze EXE -> DLL gruss |
AW: Dimmed Sample
Okay, hatte ich mir schon gedacht, dass das so läuft ;) Danke dir!
|
AW: Dimmed Sample
Zitat:
Hab im moment wiedermal ein problem beim Freigeben der Classe mal gehts mal nicht :wall: To many error in Free :oops: Obwohl alles korrekt freigegeben wird. Wüßte nicht was da falsch sein sollte.
Delphi-Quellcode:
type
TFadeWnd = class(TComponent) private { Private-Deklarationen } procedure AutoFade(pParentWnd: TWinControl; clLight: COLORREF; clDark: COLORREF); stdcall; procedure CreateGradient(clLight: COLORREF; clDark: COLORREF); virtual; procedure FadeWnd(pParentWnd: TWinControl; clLight: COLORREF; clDark: COLORREF); stdcall; public function GetDibR(const drgb: cardinal): cardinal; inline; function GetDibG(const drgb: cardinal): cardinal; inline; function GetDibB(const drgb: cardinal): cardinal; inline; function Create(pParentWnd: TWinControl; rc: TRect): Bool; reintroduce; overload; constructor Create(AOwner: TWinControl); reintroduce; overload; destructor Destroy; override; protected m_clGradient: array [0..255] of COLORREF; m_hBitmap: HBITMAP; m_hNewBitmap: HBITMAP; m_pWndLock: TWinControl; procedure OnDraw(pDC: HDC); function CopyScreenToBitmap(lpRect: TRect): HBITMAP; function FadeBitmap(hBmp: HBITMAP; dfTrans: double = 100.0; hBmpDC: HDC = 0): HBITMAP; end; var pFade: TFadeWnd; MainHandle: HWND; Pixels: array of Cardinal; // Exports function FadeCreate(pParentWnd: TWinControl;clLight: COLORREF; clDark: COLORREF): Bool; stdcall; procedure FadeDestroy; stdcall;
Delphi-Quellcode:
procedure FadeDestroy; stdcall;
begin if Assigned(pFade) then begin DestroyWindow(MainHandle); pFade.Free; pFade := nil; end; end; gruss |
AW: Dimmed Sample
Knallt's denn bei DestroyWindow(MainHandle) oder bei pFade.Free?
|
AW: Dimmed Sample
Zitat:
Der Compiler geht ins ASM Window und steht in TObject.Free. Muss mal schaun scheint ein problem mit dem Array Pixels zu sein. EDIT: Jo das wars.. Mußte nach der zuweisung vom neuen Bitmap das verändert wurde das Array löschen.
Delphi-Quellcode:
FillChar(Pixels, SizeOf(Pixels), 0);
Jetzt gehts.. gruss |
AW: Dimmed Sample
Hier zum Testen...
Bei mir läuft es auf Win7. gruss |
AW: Dimmed Sample
Lööf... aber beim Schließen ist dann doch wieder Farbe zu sehen, wenn auch nur kurz ;)
|
AW: Dimmed Sample
Zitat:
Muss noch schaun wie ich da innerhalb der DLL OnClick und solche sachen also Evens implementiere. Da ich keine Winproc innerhalb der DLL verwende also das erstellte Window die DefWindowProc verwendet ist das nicht so einfach. Danke für's testen. Source kommt dann wenn fertig in die Rubrik Sotware Projekt (Open Source) Will jetzt erst noch den Desktop Kram verwirklichen. Vielleicht werde ich dann doch nur das Handle übergeben so läuft es zur zeit ja nur mit Delphi. gruss |
AW: Dimmed Sample
Zitat:
Rufe FadeDestroy doch einfach im FormDestroy auf. |
AW: Dimmed Sample
Zitat:
Der Sinn der DLL ist bei inaktiven Window/ gestarteten Dialog usw.. das Window zu faden so wie in XP wenn man das system herunterfährt. Jetzt halt nur auf die Anwendung ausgelegt ohne Runterfahren natürlich ;) Habe es jetzt so ausgelegt das man nur ein Handle übergeben muss das der Form oder vom Desktop eben.
Delphi-Quellcode:
Initialize := FadeCreate(Handle, RGB(255, 255, 255), RGB(0, 0, 0));
gruss |
AW: Dimmed Sample
Einer der Admins.. verschiebt das teil mal bitte nach Software-Projekte der Mitglieder.. Danke.
Neue Version.. noch kein source von der DLL ansonsten alles vorhanden.
Button für Desktop hinzugefügt. Bei mir läuft es nicht aus schon genannten gründen. (start auf eigene Gefahr) Nach dem Klick auf "Dimm ME" einfach nochmalig in das Fenster klicken danach geht das Fenster auf den Urzustand zurück. gruss |
Dieses Thema wurde am "29. Mar 2012, 07:52 Uhr" von "Daniel" aus dem Forum "Programmieren allgemein" in das Forum "Software-Projekte der Mitglieder" verschoben.
|
AW: Dimmed Sample
WIN 7 64Bit:
Zugriffsverletzung in Modul Dimmed.dll. Nachtrag: Programm bleibt nach dem Beenden im Speicher und treibt die CPU-Last nach oben. Kann nur mit dem Task-Manager gekillt werden! |
AW: Dimmed Sample
Bekomme auch eine Zugriffsverletzung, wenn ich auf "Dimm Desktop" klicke -- Win XP, 32 Bit:
Code:
Ansonsten gibt es noch folgende Probleme:
Zugriffsverletzung bei Adresse 005D1A4A in Modul 'Dimmed.dll'. Lesen von Adresse 02C50000.
|
AW: Dimmed Sample
Zitat:
Habe ja geschrieben das es ein problem beim allocieren des Speichers gibt in verbindung mit CreateDibSection. Zitat:
Wenn du in XP Herunterfährst und der Logout Dialog kommt hast du auch keinen zugriff mehr auf dahinter liegende Fenster. Hatte vorher EnableWindow(ParentHandle, False) wäre vielleicht sinnvoll das wieder zu aktivieren. Zitat:
Sondern den Status Aktiv/Deaktiv wiederzugeben wie beim ShutDown Effekt bei Xp Das Teil ist noch am Anfang und ein resize während es grau ist im fertigen projekt nicht mehr möglich. Zum dem wäre es ja auch dann der Fall das du dich selbst (HauptAnwendung) darum kümmern mußt. Die DL kann nicht den resize der Anwendung steuern das muss man schon selbst machen. Also der Normale weg ist nicht der über einen Button sondern in verbindung mit Dialogen und dem Windowstate Aktiv/Deaktiv sinnvoll. Zitat:
Dabke für's testen @Daniel Danke für das verschieben. gruss |
AW: Dimmed Sample
Neue Version oben..
Nicht bekannte Fehlermeldungen oder änderungen die noch etwas bringen sind erwünscht. gruss |
AW: Dimmed Sample
Das problem mit dem array lag wirklich nur am vergessenen "nSize -1"
Sind trotzdem noch genug andere da.. Hab jetzt diesen Fehler behoben dafür addiert sich aber jede menge Speicher. Werd mal schaun wann ich das noch behebe. (Wenn bedarf für die DLL besteht natürlich) gruss |
AW: Dimmed Sample
Neue Version oben!
Siehe History Über WM_NCACTIVATE VirtualPiano mit Dimmed.dll gruss |
AW: Dimmed Sample
Liste der Anhänge anzeigen (Anzahl: 1)
Hi...
Muss gestehen ich hab mich den Code grad nicht so genau angeschaut aber die Demo scheint Probleme mit Multi-Monitor Betrieb zu haben. Die rechte Hälfte des Forms wurde auf dem rechten Monitor dargestellt. Achja: Vista32 Gruß, Toni |
AW: Dimmed Sample
Zitat:
Denn wer braucht so was hab nur einen Monitor und kanns nicht testen. gruss |
AW: Dimmed Sample
Zitat:
|
AW: Dimmed Sample
[OT]
Gerade in einem alten Projekt (Delphi 5) gefunden:
Delphi-Quellcode:
K.A. wo ich das damals herhatte und ob's bei zwei Monitoren auch klappt :oops:
procedure TeilGrau(b: TBitmap; stufe: byte);
var sp1: byte; x, y: integer; p: PBytearray; g: byte; function rech(b: byte): byte; begin result := (b * stufe + g) div sp1; end; begin sp1 := succ(stufe); for y := 0 to b.height - 1 do begin p := b.scanline[y]; x := 0; while x < b3 do begin g := (p[x] + p[x + 1] + p[x + 2]) div 3; p[x] := rech(p[x]); p[x + 1] := rech(p[x + 1]); p[x + 2] := rech(p[x + 2]); inc(x, 3); end; end; end; procedure TFormCountDown.MakeDesktopGray(Zeit: Integer); var x, y, z: integer; dwStyle: DWord; dc, ddc: HDC; hbm: HBitmap; bmp: TBitmap; // b3: integer; geschwindigkeit: integer; begin geschwindigkeit := 200; dc := createDC('DISPLAY', nil, nil, nil); // --- Bildschirm in einer Bitmap sichern --- ddc := CreateCompatibleDC(dc); hbm := CreateCompatibleBitmap(dc, screen.width, screen.height); selectobject(ddc, hbm); BitBlt(ddc, 0, 0, screen.width, screen.height, dc, 0, 0, srcCopy); // ------------------------------------------- bmp := TBitmap.create; bmp.pixelformat := pf24bit; bmp.width := screen.width; bmp.height := screen.height; b3 := screen.width * 3; BitBlt(bmp.canvas.handle, 0, 0, screen.width, screen.height, dc, 0, 0, srcCopy); z := 255 - geschwindigkeit; y := round(2.5 * z / sqrt(z)); x := 1; while x < y do begin TeilGrau(bmp, z div x); BitBlt(dc, 0, 0, screen.width, screen.height, bmp.canvas.handle, 0, 0, srcCopy); application.processmessages; sleep(10); inc(x); end; // etwas den grauen Bildschirm stehen lassen sleep(2000); // Wiederherstellen des farbigen Desktops BitBlt(dc, 0, 0, screen.width, screen.height, ddc, 0, 0, srcCopy); // freigeben bmp.free; deleteobject(hbm); deletedc(ddc); deletedc(dc); end; GG [/OT] |
AW: Dimmed Sample
Zitat:
|
AW: Dimmed Sample
Zitat:
Alleine schon aufgrund der neuen Desktop Umgebung AktiveDesktop, Desktop usw.. ist das schon zum scheitern verurteilt.. bzw muss man noch eine menge mehr machen. Der Grund meiner DLL ist dieser das sie auch von anderen Sprachen verwendet werden kann. Dazu ist es nur von nöten das man die beiden funktionen auf andere umgebungen übersetzt. Zitat:
Schreibe nur Quelltext den ich auch selber überprüfen kann. Aber hab nichts dagegen wenn es noch jemand anderes einbaut der 2 Monitore hat. gruss |
AW: Dimmed Sample
Dimmed VB6
Modul mDimmed
Code:
Form Form1
Option Explicit
Public Declare Function GetDesktopWindow Lib "user32" () As Long Public Declare Function FadeCreate Lib "Dimmed.dll" ( _ ByVal WinHandle As Long, _ ByVal FadeTime As Long, _ ByVal clLight As Long, _ ByVal clDark As Long _ ) As Boolean Public Declare Sub FadeDestroy Lib "Dimmed.dll" () Public Declare Sub InitCommonControls Lib "comctl32" ()
Code:
Neue Version oben incl. VB6 API und Sample
Option Explicit
Private Initialize As Boolean Private Sub cmdDimmed_Click() Initialize = FadeCreate(Me.hWnd, 3500, RGB(255, 255, 255), RGB(0, 0, 0)) End Sub Private Sub cmdDimmedDesktop_Click() Initialize = FadeCreate(GetDesktopWindow, 3500, RGB(255, 255, 255), RGB(0, 0, 0)) End Sub Private Sub Form_Load() Call InitCommonControls Me.Caption = "Dimmed Sample " + "DLLVers. " + Dimmed_GetVersion End Sub Private Sub Form_Unload(Cancel As Integer) If Initialize Then FadeDestroy End If End Sub Nur damit jetzt jeder weis warum eine DLL VB6.exe 100K Delphi.exe 1MB Zum vergleich.. ;) gruss |
AW: Dimmed Sample
Moin Emil,
Zitat:
Ist die Delphi-Exe auch mit Runtime-Packages compiliert worden? |
AW: Dimmed Sample
Zitat:
Danke für die richtigstellung. gruss |
AW: Dimmed Sample
Managed Wrapper_DLL Dimmed_API Class für Dimmed C#
Code:
Dimmed Sample VB_NET
namespace Dimmed_Api
{ using System; using System.Runtime.InteropServices; using System.Security; [SuppressUnmanagedCodeSecurity] public sealed class Fade { [DllImport("user32.dll", SetLastError = false)] public static extern IntPtr GetDesktopWindow(); //Dimmed_GetVersion public static string Dimmed_GetVersion() { IntPtr ptr = Dimmed_GetVersionPtr(); if (ptr != IntPtr.Zero) { return Marshal.PtrToStringAnsi(ptr); } return null; } [DllImport("dimmed.dll", EntryPoint = "Dimmed_GetVersion", CharSet = CharSet.Auto)] private static extern IntPtr Dimmed_GetVersionPtr(); //FadeDestroy [DllImport("dimmed.dll", EntryPoint = "FadeDestroy", CharSet = CharSet.Auto)] public static extern void FadeDestroy(); //FadeCreate [return: MarshalAs(UnmanagedType.Bool)] [DllImport("dimmed.dll", EntryPoint = "FadeCreate", CharSet = CharSet.Auto)] public static extern bool FadeCreate(IntPtr handle, int FadeTime, int clLight, int clDark); } }
Code:
Dimmed Sample C#
Option Explicit On
Imports Dimmed_Api Public Class Form1 Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed Fade.FadeDestroy() End Sub Private Sub cmdDimmMe_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDimmMe.Click Fade.FadeCreate(Me.Handle, 3500, RGB(255, 255, 255), RGB(0, 0, 0)) End Sub Private Sub cmdDimmDesktop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDimmDesktop.Click Fade.FadeCreate(Fade.GetDesktopWindow, 3500, RGB(255, 255, 255), RGB(0, 0, 0)) End Sub Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Me.Text = "Dimmed Sample " & "DLLVers. " & Fade.Dimmed_GetVersion End Sub End Class
Code:
using System;
using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Dimmed_Api; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void cmdDimmMe_Click(object sender, EventArgs e) { Fade.FadeCreate(Handle, 3500, ColorTranslator.ToWin32(Color.FromArgb(255, 255, 255)), ColorTranslator.ToWin32(Color.FromArgb(0, 0, 0))); } private void cmdDimmDesktop_Click(object sender, EventArgs e) { Fade.FadeCreate(Fade.GetDesktopWindow(), 1500, ColorTranslator.ToWin32(Color.FromArgb(255, 255, 255)), ColorTranslator.ToWin32(Color.FromArgb(0, 0, 0))); } private void Form1_FormClosed(object sender, FormClosedEventArgs e) { Fade.FadeDestroy(); } private void Form1_Load(object sender, EventArgs e) { Text = "Dimmed Sample " + "DLLVers. " + Fade.Dimmed_GetVersion(); } } } gruss |
AW: Dimmed Sample
Neue Version.. Finale und fertig!
Siehe History gruss |
AW: Dimmed Sample
Wobei Windows auch schon sowas Ähnliches integriert hat.
![]() |
AW: Dimmed Sample
Zitat:
Ähnliches .. jup. Ich möchte hingegen so wie in Winamp meine Farbschemas in meinem MediaPlayer verändern können und das geht über eine DLL(Delphi) um einiges Fixer als in VB. PS: Dafür wird diese (privat) noch etwas verändert. Sollte es jemand brauchen OK.. ansonsten auch egal ;) Habe es für jemanden hier im Forum gemacht der danach gefragt hat. Gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 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