AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TPoerbutton ereigniss wird permanent ausgeführt:
Thema durchsuchen
Ansicht
Themen-Optionen

TPoerbutton ereigniss wird permanent ausgeführt:

Ein Thema von CTV · begonnen am 2. Feb 2004 · letzter Beitrag vom 5. Feb 2004
Antwort Antwort
Benutzerbild von CTV
CTV

Registriert seit: 20. Jan 2004
Ort: Zug CH
83 Beiträge
 
Delphi 7 Professional
 
#1

TPoerbutton ereigniss wird permanent ausgeführt:

  Alt 2. Feb 2004, 15:54
Ich hab mal ein Tool gemacht um das Powerbutton peress Ereigniss abzufangen nun wollte ich daraus eine komponente machen: Die funktioniert soweit de pc fährt nicht runter wenn ich die Eigenschaft PowerbuttenEnable auf false stelle .. jedoch wird das ereignis onPowerbottenpress kontinuierlich ausgeführt weiss jemand wieso ?

componenten Ssource:

Delphi-Quellcode:
unit PowerButton;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Menus, ShellApi, ExtCtrls,dialogs;

  

type
  TPowerButton = class(TComponent)
  private
    FHooked: Boolean;
    FOnPowerbuttonPress : TNotifyEvent;
    PPowerOffEnable:Boolean;
    function MessageHook(var Msg: TMessage): Boolean;
  protected
    procedure DoPowerbuttonPress; dynamic;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    {events}
    property OnPowerbuttonPress: TNotifyEvent read FOnPowerbuttonPress write FOnPowerbuttonPress;
    {properties}
    property PowerOffEnable : boolean read PPowerOffEnable write PPowerOffEnable;

  end;

procedure Register;

implementation

const
  PBT_APMQUERYSUSPEND = 0; {Request for permission to suspend.}

procedure Register;
begin
  RegisterComponents('Zusätzlich', [TPowerButton]);
end;

constructor TPowerButton.create(AOwner : TComponent);
begin
  inherited Create(AOwner);
  FHooked := False;
  if not (csDesigning in ComponentState) then
  begin
    Application.HookMainWindow(MessageHook);
    FHooked := True;
  end;
end;

Procedure TPowerButton.DoPowerbuttonPress;
begin
  if Assigned(FOnPowerbuttonPress) then FOnPowerbuttonPress(Self);

end;

function TPowerButton.MessageHook(var Msg: TMessage): Boolean;
begin
  case msg.WParam of
    PWR_SUSPENDREQUEST: //win2000,XP
    begin
      if PPowerOffEnable = false then
      begin
        msg.Result := PWR_FAIL;
      end;
      DoPowerbuttonPress;
    end;

    PBT_APMQUERYSUSPEND: //win95,98
    begin
      if PPowerOffEnable = false then
      begin
        msg.Result := BROADCAST_QUERY_DENY;
      end;
      DoPowerbuttonPress;
    end;
  end;
end;

destructor TPowerButton.Destroy;
begin
  if FHooked then Application.UnhookMainWindow(MessageHook);
  inherited Destroy;
end;
Diese Proceure: DoPowerbuttonPress sollte eingelich nur dann ausgeführt werden wenn der PB wirklich gedückt wird jedoch wird sie die ganze zeit ausgeführt weis jemand wieso ?

Greetz Cyrus
Wer glaub er ist, hört auf zu werden!
Delphi Rulez!!!
  Mit Zitat antworten Zitat
Benutzerbild von CTV
CTV

Registriert seit: 20. Jan 2004
Ort: Zug CH
83 Beiträge
 
Delphi 7 Professional
 
#2

Re: TPoerbutton ereigniss wird permanent ausgeführt:

  Alt 2. Feb 2004, 16:07
Wenn das Programm startet wird das Ereigniss DoPowerbuttonPress genau 5 mal ausgeführt. Ich hab das mal so getestet:

Delphi-Quellcode:
procedure TForm1.PowerButton1PowerbuttonPress(Sender: TObject);
var s:string;
begin
  s:='L';
  label1.Caption:=label1.Caption+s;
end;
Wenn ich danach auf den Powerbutton drücke fügt es ein L hinzu und bei weitern druck auf den PB ein weiteres also so wie das sein müsste. Das einzige was noch komisch sit wieso das ereignis 5 mal ausgeführt wird am anfang weiss jemand wieso ?

Greetz Cyrus
Wer glaub er ist, hört auf zu werden!
Delphi Rulez!!!
  Mit Zitat antworten Zitat
Benutzerbild von CTV
CTV

Registriert seit: 20. Jan 2004
Ort: Zug CH
83 Beiträge
 
Delphi 7 Professional
 
#3

Re: TPoerbutton ereigniss wird permanent ausgeführt:

  Alt 2. Feb 2004, 16:12
ich hab ez mal das eingebaut:

Delphi-Quellcode:
..
private
    i:integer;
..

constructor TPowerButton.create(AOwner : TComponent);
begin
  inherited Create(AOwner);
  i:=1;
  FHooked := False;
  if not (csDesigning in ComponentState) then
  begin
    Application.HookMainWindow(MessageHook);
    FHooked := True;
  end;
end

...

Procedure TPowerButton.DoPowerbuttonPress;
begin
  if i>5 then
  begin
    if Assigned(FOnPowerbuttonPress) then FOnPowerbuttonPress(Self);
  end;
  inc(i);
end;

...
Nun funktionierts jedoch kann das ja nicht die lösung sein oder ? das ist eher ein gebastel mich nimmts wunder wieso das genau 5 mal ausgeführt wird

Greetz Cyrus
Wer glaub er ist, hört auf zu werden!
Delphi Rulez!!!
  Mit Zitat antworten Zitat
Benutzerbild von CTV
CTV

Registriert seit: 20. Jan 2004
Ort: Zug CH
83 Beiträge
 
Delphi 7 Professional
 
#4

Re: TPoerbutton ereigniss wird permanent ausgeführt:

  Alt 4. Feb 2004, 08:53
ich ez raus gefunden dass der meine procedure "DoPowerbuttonPress;" jedes mal ausführt wenn meine Applikation eine WinMsg erhält egal welche. Wenn ich z.b die grösse des fensters ändere wird sie auch aus geführt. An was kann das liegen? sie sollte doch wirklich nur dann ausgeführt werden wenn die message diese: PWR_SUSPENDREQUEST oder diese ist: PBT_APMQUERYSUSPEND was läuft da falsch ? hat jemand eine Idee oder einen Verdacht ?

Greetz Cyrus
Wer glaub er ist, hört auf zu werden!
Delphi Rulez!!!
  Mit Zitat antworten Zitat
Benutzerbild von CTV
CTV

Registriert seit: 20. Jan 2004
Ort: Zug CH
83 Beiträge
 
Delphi 7 Professional
 
#5

Re: TPoerbutton ereigniss wird permanent ausgeführt:

  Alt 4. Feb 2004, 14:10
nun bin ich der sache etwas näher gekommen msg.wparam gibt immer 0 aus wenn man den power knopf drückt. ich hab ez mal untersucht was msg.msg ausgibt wenn man den powerknopf drückt. und es gibt bei mir 536 aus nun klapts auch mit dem ereignis wenn ich nähnlich dies hier einfüge:

Delphi-Quellcode:
 if (msg.msg=536) and (msg.WParam=0) then
  begin
    DoPowerbuttonPress;
  end;
Meine frage ist nun ist das nur bei mir dieser wet wenn man den button drückt oder ist das beu euch auch so ? Wie ist es bei Win95/98 ??
Wer glaub er ist, hört auf zu werden!
Delphi Rulez!!!
  Mit Zitat antworten Zitat
Benutzerbild von CTV
CTV

Registriert seit: 20. Jan 2004
Ort: Zug CH
83 Beiträge
 
Delphi 7 Professional
 
#6

Re: TPoerbutton ereigniss wird permanent ausgeführt:

  Alt 5. Feb 2004, 09:42
Problem gelöst!!!!
Wer glaub er ist, hört auf zu werden!
Delphi Rulez!!!
  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 14:43 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