AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Borderstyle bsNone deaktiviert Global-Hotkey?
Thema durchsuchen
Ansicht
Themen-Optionen

Borderstyle bsNone deaktiviert Global-Hotkey?

Ein Thema von Coder · begonnen am 26. Mai 2024 · letzter Beitrag vom 27. Mai 2024
Antwort Antwort
Benutzerbild von Coder
Coder

Registriert seit: 27. Feb 2004
Ort: Bochum
206 Beiträge
 
Delphi 3 Professional
 
#1

Borderstyle bsNone deaktiviert Global-Hotkey?

  Alt 26. Mai 2024, 23:02
Hi, ( Delphi 5 - ist aber aktuell sicher immernoch so)

ich hab mal eine Frage: Wenn ich bei einer Form BorderStyle auf z.B. bsNone setze,
funktioniert kein Global-Hotkey mehr.
Auch wenn ich auf bsSingle oder Sizable setze.
Muß das so?

Hat jemand eine Erklärung - und weiß, wie man das eventuell verhindern kann?
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
    id1, id2, id3, id4: Integer;
    procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

// Trap Hotkey Messages
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  if Msg.HotKey = id2 then
  Edit1.Text := 'Taste gedrückt';
// ShowMessage('Ctrl + Shift + A pressed !');
end;

procedure TForm1.FormCreate(Sender: TObject);
 // Different Constants from Windows.pas
const
  MOD_ALT = 1;
  MOD_CONTROL = 2;
  MOD_SHIFT = 4;
  MOD_WIN = 8;
  VK_A = $41;
begin

  id2 := GlobalAddAtom('Hotkey2');
  RegisterHotKey(Handle, id2, MOD_SHIFT + MOD_CONTROL , VK_A);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnRegisterHotKey(Handle, id2);
  GlobalDeleteAtom(id2);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  //////////////////////////////////////
  BorderStyle := bsSingle;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Edit1.Clear;
  BorderStyle := bsnone;
end;

end.
Hat jemand eine Erklärung - und weiß, wie man das eventuell verhindern kann?
Angehängte Dateien
Dateityp: zip GloBHotkey.zip (3,0 KB, 1x aufgerufen)
ICQ: 204141443
Delphi 3 Professional, Intel 2x 2,4Ghz, 3 GB-Graka, Sound-onBrd, --
außerdem D2S, D3Pro, D4S, D5S, D6S, D7S + Indy, Lazarus, VB5Std, VC++5Pro, Tasm4+5 - was braucht man mehr?
-

Geändert von Coder (26. Mai 2024 um 23:05 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.933 Beiträge
 
Delphi 12 Athens
 
#2

AW: Borderstyle bsNone deaktiviert Global-Hotkey?

  Alt 26. Mai 2024, 23:32
Hi, ( Delphi 5 - ist aber aktuell sicher immernoch so)
Das funktioniert ab mindestens Delphi 2007 (2005 und 2006 nicht getestet) problemlos. Bei Delphi 7 und früher lassen sich die Probleme nachstellen.

Es ist nun einmal so, dass es damals diverse Bugs gab (Randberechnung bei Fenstern, Alt-Tasten-Bug beim Zeichnen, Taskleistenvorschau, ...), die erst mit neueren Delphiversionen behoben wurden. Das lag auch daran, dass vieles erst mit neueren Windowsversionen auftrat. Deshalb sollte man auch eine Entwicklungsumgebung verwenden, die für die jeweilige Zielplattform gedacht ist.

In diesem Fall vermute ich, dass es am Handling des versteckten Application-Fensters liegt. Das wurde nämlich geändert, wonach dann auch die Taskleistenvorschau funktionierte. Ich bezweifle, dass du das ohne Nebenwirkungen einfach ändern kannst.

Wie wäre es mit einem Tastaturhook? Der funktioniert unabhängig davon immer.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.343 Beiträge
 
Delphi 12 Athens
 
#3

AW: Borderstyle bsNone deaktiviert Global-Hotkey?

  Alt 26. Mai 2024, 23:58
Das Umschalten des FormStyle zerstört das interne HWND (Window-Handle) und generiert ein vollkommen neues Form.
Somit ist auch ALLES weg, was im OnCreate registriert wurde, und was keine Kopie im Delphi-Objekt besitzt, also nicht automatisch wiederhergestellt wird.
siehe DestroyHandle im TCustomForm.SetFormStyle

Das Selbe gilt auch für alle untergeordneten HWND (Panels, Edits, Buttons usw.)

Außerdem kann sowas passieren, wenn der PC oder der Monitor/Grafikkarte in den Standby wechselt oder wenn man sich in eine Terminal-Sitzung einloggt oder von ihr trennt, sich per RDP mit dem Rechner verbindet und in tausenden anderen Situationen.

mögliche Lösungen:
Delphi-Quellcode:
procedure CreateWindowHandle(const Params: TCreateParams); override;
procedure CreateWnd; override;
...
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (27. Mai 2024 um 00:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.933 Beiträge
 
Delphi 12 Athens
 
#4

AW: Borderstyle bsNone deaktiviert Global-Hotkey?

  Alt 27. Mai 2024, 06:21
Das Umschalten des FormStyle zerstört das interne HWND (Window-Handle) und generiert ein vollkommen neues Form.
In den alten Quelltext hatte ich nicht reingeschaut. Das erklärt dann natürlich, weshalb es dort nicht geht. Das machen aktuelle Delphiversionen nicht mehr. Die schalten wirklich nur den Style um.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.343 Beiträge
 
Delphi 12 Athens
 
#5

AW: Borderstyle bsNone deaktiviert Global-Hotkey?

  Alt 27. Mai 2024, 09:03
Die schalten wirklich nur den Style um.
Nein, Doch.

Delphi-Quellcode:
procedure TScrollBox.SetBorderStyle(Value: TBorderStyle);
begin
  if Value <> FBorderStyle then
  begin
    FBorderStyle := Value;
    RecreateWnd;
  end;
end;
Teilweise wird es aber an anderen Stellen inzwischen selektiver gehandhabt.
Und wie gesagt, es gibt auch Sitiationen, wo sowas ohne eigenes Eingreifen ausgelöst wird.

z.B. könnten theoretisch die Handles auch freigegeben werden, wenn das Fenster ausgeblendet oder minimiert wird, um Systemressourcen zu sparen.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (27. Mai 2024 um 09:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Coder
Coder

Registriert seit: 27. Feb 2004
Ort: Bochum
206 Beiträge
 
Delphi 3 Professional
 
#6

AW: Borderstyle bsNone deaktiviert Global-Hotkey?

  Alt 27. Mai 2024, 10:28
danke.

mh, ja, vielleicht sollte ich doch mal 2300? € ausgeben (oder was kostet Delphi jetzt?)
(oder Community Edition, oder gleich Lazarus)
(ach, 1430, oder ... 5600 .. Oh - naja, brauch's ja nicht kommerziell)

mh, ja, sorry, ich find Delphi 5 einfach schnell, geladen und compiliert.

Vieles mach ich heut auch in Python/tkinter.
Aber für manches/ alle Fälle hab ich unter Win10 halt noch Delphi5 installiert, bei alten Programmen.


Andere Frage (dürfte aber vielleicht ähnliche Ursache haben):

Wenn ich nun OnMouseUp() in der Form mache, fängt der nur den (Mouse)Button = mbright ab.
mbleft ignoiert der.

Der Linke funktioniert nur im Form.OnMouseDown(), komischerweise..?
Oder ist das so gewollt?
Gerad getestet - bei rechter Maustaste geht er auch nur in Form.MouseUp() rein - (wtf)??

is mir vorher nie so aufgefallen/ genutzt
ICQ: 204141443
Delphi 3 Professional, Intel 2x 2,4Ghz, 3 GB-Graka, Sound-onBrd, --
außerdem D2S, D3Pro, D4S, D5S, D6S, D7S + Indy, Lazarus, VB5Std, VC++5Pro, Tasm4+5 - was braucht man mehr?
-

Geändert von Coder (27. Mai 2024 um 10:33 Uhr)
  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 19:39 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