AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi [nonVCL]Bildschirmschoner Vorschau verschieben & schließen
Thema durchsuchen
Ansicht
Themen-Optionen

[nonVCL]Bildschirmschoner Vorschau verschieben & schließen

Ein Thema von rollstuhlfahrer · begonnen am 3. Jun 2008 · letzter Beitrag vom 4. Jun 2008
Antwort Antwort
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#1

[nonVCL]Bildschirmschoner Vorschau verschieben & schließ

  Alt 3. Jun 2008, 16:51
HI,

ich hab mich mal daran gemacht, einen Bildschirmschoner per nonVCL zu proggen. Schön und gut. Wenn ich das Fenster "Eigenschaften von Anzeige" verschiebe, so wandert der nonVCL-Bildschirmschoner nicht mit. Der, der auf VCL aufsetzt, schon. Wenn ich jetzt das Fenster "Eigenschaften von Anzeige" schließe, bleibt der Bildschirmschoner immernoch online. Im Anhang mal 3 Screenshots.

Wie kann ich
1. das Fenster so mitbewegen, dass es "mitläuft" und
2. das Fenster rechtzeitig beenden?


Ich glaub die Fragen haben etwas gemein, nämlich dass ein Event nicht richtig behandelt wird

Codeausschnitt:
Delphi-Quellcode:
// Window-Prozedur
function WndProc(hWnd: HWND; uMsg: UINT; wParam: wParam; lParam: LParam): lresult; stdcall;
begin
  Result := 0;
  case uMsg of
    WM_DESTROY: WMDestroy(hWnd); // Timer löschen und PostQuitMessage();
    WM_CREATE: hTimer := WMCreate(hWnd); // Timer erstellen
    WM_CLOSE: PostQuitMessage(0);

    WM_TIMER: WMTimer(hWnd); // Timer zum neuzeichnen
  else
    Result := DefWindowProc(hWnd, uMsg, wParam, lParam);
  end;
end;

// Preview-Main
procedure PreView;
var
  parentwindow: HWND;
  Rec: TRect;
begin
Window.hbrBackground := CreateSolidBrush(RGB(0, 0, 0));
Window.hInstance := hInstance;
Window.hIcon := LoadIcon(hInstance,MAKEINTRESOURCE(100));
Window.hCursor := LoadCursor(0, IDC_ARROW);
Window.lpszClassName := ClassName;
Window.lpfnWndProc := @WndProc;
RegisterClassEx(Window);

parentwindow := StrToIntDef(ParamStr(2), 0);
GetWindowRect(parentwindow, Rec);
Width := Rec.Right - Rec.Left;
Height := Rec.Bottom - Rec.Top;

CreateWindowEx(0, ClassName, AppName,
    WS_VISIBLE or WS_CHILD or WS_POPUP,
    Rec.Left, Rec.Top, Width, Height,
    parentwindow, 0, hInstance, nil);

// [...] weiter mit nachrichtenschleife
end;
Bernhard
Miniaturansicht angehängter Grafiken
bild2_207.jpg   bild1_1_858.jpg   bild1_909.jpg  
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: [nonVCL]Bildschirmschoner Vorschau verschieben & sch

  Alt 3. Jun 2008, 16:57
schau mal hier, das gute template vom turboPASCAL, denk mal das kann dir da weiter helfen

bildschirm schoner template
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#3

Re: [nonVCL]Bildschirmschoner Vorschau verschieben & sch

  Alt 3. Jun 2008, 18:14
Zitat von lbccaleb:
schau mal hier, das gute template vom tuboPASCAL ...
Wir wollen doch die Sache beim Namen nennen.


Auf den selbigen wollte ich nach dem lesen des Beitrags gerade auch verweisen.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: [nonVCL]Bildschirmschoner Vorschau verschieben & sch

  Alt 3. Jun 2008, 18:18
für mich klingt es einfach nur danals das der parent nicht wirklich gesetzt wurde.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: [nonVCL]Bildschirmschoner Vorschau verschieben & sch

  Alt 3. Jun 2008, 18:39
Zitat von turboPASCAL:
Zitat von lbccaleb:
schau mal hier, das gute template vom tuboPASCAL ...
Wir wollen doch die Sache beim Namen nennen.


Auf den selbigen wollte ich nach dem lesen des Beitrags gerade auch verweisen.
ohh sorry, sicher doch turboPASCAL oben geändert^^
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#6

Re: [nonVCL]Bildschirmschoner Vorschau verschieben & sch

  Alt 3. Jun 2008, 21:02
Auf das Beispiel von turboPascal bin ich schon gestoßen. (Habs auch grad noch offen)
Das handle wird genauso wie im Beispiel (siehe Codeausschnitt) zugewiesen.

Immerhin hab ich das programm jetzt soweit bekommen, dass essich gleichzeitig beendet. Der Vorschau-Bildschirm bleibt aber schwarz

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#7

Re: [nonVCL]Bildschirmschoner Vorschau verschieben & sch

  Alt 4. Jun 2008, 15:04
HI,

ich hab mitlerweile die Fensterklasse gewechselt, CreateWindowEx und CreateWindow ausprobiert. Problem ist: sobald als Stil WS_Popup dazukommt, wird die Vorschau angezeigt, ist es nicht dabei, wird die vorschau nicht angezeigt, aber entsprechend geschlossen. Weil ich nicht weiterkomme, häng ich den bisherigen Code an.

Delphi-Quellcode:
unit PreViewU;

interface

uses
  Windows,
  Messages,
  globals, // width, heigth, classname, appname
  MySysUtils; // IntTostr, StrToInt, Uppercase, strtointdef
// CommCtrl;

var
  hTimer: HWND;
(*  Window: TWndClassEx = (
    cbSize          : SizeOf(TWndClassEx);
//    Style          : CS_HREDRAW or CS_VREDRAW;
    Style          : CS_VREDRAW or CS_HREDRAW or CS_SAVEBITS or CS_DBLCLKS;
//    lpfnWndProc    : @WndProc;
    cbClsExtra      : 0;
    cbWndExtra      : 0;
    hbrBackground  : COLOR_APPWORKSPACE;
    lpszMenuName    : nil;
    lpszClassName  : ClassName;
    hIconSm        : 0;
  );                              *)

  Window: TWndClass;
  Msg: TMsg;
  Width, Height: Integer;

procedure PreView;

implementation

// Create-Event
function WMCreate(hWnd: HWND): HWND;
begin
// Aus der TaskBar bannen
(*SetWindowLong(hWnd, GWL_EXSTYLE,
              GetWindowLong(hWnd, GWL_EXSTYLE)
              or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);        *)


// Timer erstellen
Result := SetTimer(hWnd, IDC_TIMER, 1, nil);
end;

// Timer-Event
procedure WMTimer(hWnd: HWND);
var dc: HDC;
    Brush: HBRUSH;
    Color: COLORREF;
begin
dc := GetDC(hWnd);
if dc = 0 then MessageBox(0, 'Kein DC-Objekt', 'FEHLER', mb_iconwarning);
(*Inc(r);
TextOut(dc, 10, 10, PChar(IntToStr(r)), 3);
brush := CreateSolidBrush(RGB(r, 255, 255));
SelectObject(dc, brush);
SetBkColor(dc, RGB(r, 255, 255));*)


Color := RGB(Random(255), Random(255), Random(255));
Brush := CreateSolidBrush(Color);
FillRect(dc, Rect(0, 0, WindowWidth, WindowHeight), Brush);
ReleaseDC(hWnd, dc);
end;

// Fenster wird geschlossen
procedure WMDestroy(hwnd: HWND);
begin
KillTimer(hwnd, IDC_Timer);
ShowCursor(true);
PostQuitMessage(0);
end;

// Window-Prozedur
function WndProc(hWnd: HWND; uMsg: UINT; wParam: wParam; lParam: LParam): lresult; stdcall;
begin
  Result := 0;
  case uMsg of
    WM_DESTROY: WMDestroy(hWnd);
    WM_CREATE: hTimer := WMCreate(hWnd);
    WM_CLOSE: PostQuitMessage(0);

    WM_TIMER: WMTimer(hWnd);
  else
    Result := DefWindowProc(hWnd, uMsg, wParam, lParam);
  end;
end;

// Screensaver-Main
procedure PreView;
var
  parentwindow: HWND;
  apphwnd: HWND;
  Rec: TRect;
begin
Window.style := CS_VREDRAW or CS_HREDRAW or CS_SAVEBITS or CS_DBLCLKS;
Window.lpfnWndProc := @WndProc;
Window.cbClsExtra := 0;
Window.cbWndExtra := 0;
Window.hInstance := HInstance;
Window.hIcon := LoadIcon(hInstance,MAKEINTRESOURCE(100));
Window.hCursor := LoadCursor(0, IDC_ARROW);
Window.hbrBackground := GetStockObject(BLACK_BRUSH);
Window.lpszMenuName := nil;
Window.lpszClassName := ClassName;

(*Window.hbrBackground := GetStockObject(BLACK_BRUSH);
Window.hInstance := hInstance;
Window.hIcon := LoadIcon(hInstance,MAKEINTRESOURCE(100));
Window.hCursor := LoadCursor(0, IDC_ARROW);
Window.lpszClassName := ClassName;
Window.lpfnWndProc := @WndProc;
RegisterClassEx(Window);        *)

RegisterClass(Window);

parentwindow := StrToIntDef(ParamStr(2), 0);

GetWindowRect(parentwindow, Rec);
Width := Rec.Right - Rec.Left;
Height := Rec.Bottom - Rec.Top;

CreateWindowEx(0, ClassName, AppName,
    WS_VISIBLE or WS_CHILD,
    Rec.Left, Rec.Top, Width, Height,
    parentwindow, 0, hInstance, nil);

(*Apphwnd := CreateWindow(
        ClassName,
        AppName,
        WS_VISIBLE or WS_Child,
        Rec.Left,
        Rec.Top,
        Width,
        Height,
        parentwindow,
        0,
        hInstance,
        nil);

if GetParent(apphwnd) <> parentwindow then
begin
  MessageBox(0, 'Parent nicht zugewiesen', 'FEHLER', MB_ICONSTOP);
  SetParent(apphwnd, parentwindow);
end;           *)


{Nachrichtenschleife starten}
while GetMessage(msg,0,0,0) do
begin
  TranslateMessage(msg);
  DispatchMessage(msg);
end;
end;

end.
Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:18 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