AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi WM_Hotkey und WndProc - Error : Ungültiges Fensterhandle !?!
Thema durchsuchen
Ansicht
Themen-Optionen

WM_Hotkey und WndProc - Error : Ungültiges Fensterhandle !?!

Ein Thema von Assun · begonnen am 21. Okt 2005 · letzter Beitrag vom 25. Nov 2005
Antwort Antwort
Benutzerbild von Assun
Assun

Registriert seit: 3. Feb 2005
Ort: Hilzingen am Bodensee
469 Beiträge
 
Delphi 2005 Personal
 
#1

WM_Hotkey und WndProc - Error : Ungültiges Fensterhandle !?!

  Alt 21. Okt 2005, 11:39
Hi !

Edit //

Also der error is nur weg und es lässt sich kompilieren...

jedoch kommt nun beim start des Programmes der error "ungültiges Fensterhandle" und das Prog killt sich selbst wieder

hier mein kompletter Code :

Delphi-Quellcode:
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, XPMan, ComCtrls, jpeg, ExtCtrls, Menus, ButtonComps;

type
  TForm1 = class(TForm)
    Image1: TImage;
    ImageButton1: TImageButton;
    ImageButton2: TImageButton;
    ImageButton3: TImageButton;
    Bezeichnung: TEdit;
    Aktion: TEdit;
    Aktion2: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure ImageButton2Click(Sender: TObject);
    procedure ImageButton1Click(Sender: TObject);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private

  public
    procedure WMHotKey(var msg: TMessage); message WM_HOTKEY;
    procedure WndProc(var mymsg: TMessage); override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const
  MY_MENU_ID = 999;

procedure TForm1.WndProc(var mymsg: TMessage);
var
  hMenu : THandle;
begin
  // Unnötige Systemmenü-Punkte entfernen
  hMenu := GetSystemMenu(Handle, False);
  if hMenu <> 0 then
  begin
    if not DeleteMenu(hMenu, 6, MF_BYPOSITION) then
      ShowMessage(SysErrorMessage(GetLastError));
    DrawMenuBar(hMenu);
  end;
end;


// Auf die HotKeys reagieren
procedure TForm1.WMHotKey(var msg: TMessage);
begin
  Case msg.WParam of
    01: ShowMessage('F1');
    02: ShowMessage('F2');
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
// HotKeys registrieren
RegisterHotKey(Handle,01,0,vk_F1);
RegisterHotKey(Handle,02,0,vk_F2);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
// HotKeys wieder freigeben
UnregisterHotKey(Handle,01);
UnregisterHotKey(Handle,02);
end;




procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Form1.Perform(WM_SYSCOMMAND, $F012, 0);
end;

procedure TForm1.ImageButton1Click(Sender: TObject);
begin
Application.Terminate;
end;

procedure TForm1.ImageButton2Click(Sender: TObject);
begin
Application.Minimize;
end;


end.
Sebastian Dietrich
http://Assun.de - bald komplett überarbeitet
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: WM_Hotkey und WndProc vertragen sich nicht !?!?

  Alt 21. Okt 2005, 11:42
Dein Fehler ist wohl, dass du die Methoden nur deklariert, aber nicht definiert hast.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von Assun
Assun

Registriert seit: 3. Feb 2005
Ort: Hilzingen am Bodensee
469 Beiträge
 
Delphi 2005 Personal
 
#3

Re: WM_Hotkey und WndProc vertragen sich nicht !?!?

  Alt 21. Okt 2005, 12:01
und was genau bedeutet das ?

sry ich habs nicht so mit diesen Begriffen
Sebastian Dietrich
http://Assun.de - bald komplett überarbeitet
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#4

Re: WM_Hotkey und WndProc vertragen sich nicht !?!?

  Alt 21. Okt 2005, 12:06
Irgendwo in deinem Sourcecode musst du auch
Delphi-Quellcode:
procedure TForm1.WndProc(var mymsg: TMessage);
begin
  ...
end;
haben. Ansonsten, wenn du nur die Hotkeys abfangen möchtest, brauchst du die WndProc nicht überschreiben.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von Assun
Assun

Registriert seit: 3. Feb 2005
Ort: Hilzingen am Bodensee
469 Beiträge
 
Delphi 2005 Personal
 
#5

Re: WM_Hotkey und WndProc - Error : Ungültiges Fensterhandle

  Alt 21. Okt 2005, 13:44
Hi !

Edit //

Also der error is nur weg und es lässt sich kompilieren...

jedoch kommt nun beim start des Programmes der error "ungültiges Fensterhandle" und das Prog killt sich selbst wieder

hier mein kompletter Code :

Delphi-Quellcode:
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, XPMan, ComCtrls, jpeg, ExtCtrls, Menus, ButtonComps;

type
  TForm1 = class(TForm)
    Image1: TImage;
    ImageButton1: TImageButton;
    ImageButton2: TImageButton;
    ImageButton3: TImageButton;
    Bezeichnung: TEdit;
    Aktion: TEdit;
    Aktion2: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure ImageButton2Click(Sender: TObject);
    procedure ImageButton1Click(Sender: TObject);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private

  public
    procedure WMHotKey(var msg: TMessage); message WM_HOTKEY;
    procedure WndProc(var mymsg: TMessage); override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const
  MY_MENU_ID = 999;

procedure TForm1.WndProc(var mymsg: TMessage);
var
  hMenu : THandle;
begin
  // Unnötige Systemmenü-Punkte entfernen
  hMenu := GetSystemMenu(Handle, False);
  if hMenu <> 0 then
  begin
    if not DeleteMenu(hMenu, 6, MF_BYPOSITION) then
      ShowMessage(SysErrorMessage(GetLastError));
    DrawMenuBar(hMenu);
  end;
end;


// Auf die HotKeys reagieren
procedure TForm1.WMHotKey(var msg: TMessage);
begin
  Case msg.WParam of
    01: ShowMessage('F1');
    02: ShowMessage('F2');
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
// HotKeys registrieren
RegisterHotKey(Handle,01,0,vk_F1);
RegisterHotKey(Handle,02,0,vk_F2);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
// HotKeys wieder freigeben
UnregisterHotKey(Handle,01);
UnregisterHotKey(Handle,02);
end;




procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Form1.Perform(WM_SYSCOMMAND, $F012, 0);
end;

procedure TForm1.ImageButton1Click(Sender: TObject);
begin
Application.Terminate;
end;

procedure TForm1.ImageButton2Click(Sender: TObject);
begin
Application.Minimize;
end;


end.

PS : der Systemmenü Code ist übrigends von Luckie

Aber es geht wie gesagt nicht wirklich
Sebastian Dietrich
http://Assun.de - bald komplett überarbeitet
  Mit Zitat antworten Zitat
Benutzerbild von Assun
Assun

Registriert seit: 3. Feb 2005
Ort: Hilzingen am Bodensee
469 Beiträge
 
Delphi 2005 Personal
 
#6

Re: WM_Hotkey und WndProc - Error : Ungültiges Fensterhandle

  Alt 22. Okt 2005, 15:26
Weis jemand Rat ?
Sebastian Dietrich
http://Assun.de - bald komplett überarbeitet
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: WM_Hotkey und WndProc - Error : Ungültiges Fensterhandle

  Alt 22. Okt 2005, 15:32
das ganze dürfte aber nix mit dem Hotkey zu tun haben sondern eher damit das du jedes mal wenn eine Message für deine Klasse ankommt das Menüitem löschen willst. Es reicht doch wenn du das ein einzige mal machst (und nicht jedes mal wenn irgend eine message an dein programm kommt)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#8

Re: WM_Hotkey und WndProc - Error : Ungültiges Fensterhandle

  Alt 25. Nov 2005, 14:51
Hallo Assun,
SirThornberry hat recht. Außerdem musst du unbedingt ein inherited in die erste Zeile deiner
procedure TForm1.WndProc(var mymsg: TMessage); schreiben, sonst wird keine einzige Nachricht weitergeleitet. Dadurch beendet sich dein Programm beim Start sofort, weil es keine Nachricht erhält.
  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 16:54 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