AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi WM_* Message in Komponente abfangen
Thema durchsuchen
Ansicht
Themen-Optionen

WM_* Message in Komponente abfangen

Ein Thema von Codehunter · begonnen am 12. Sep 2006 · letzter Beitrag vom 13. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#1

WM_* Message in Komponente abfangen

  Alt 12. Sep 2006, 22:09
Ich habe eine Komponente abgeleitet von TComponent. Darin möchte ich auf ein Windows-Ereignis basierend auf WM_DEVICECHANGE reagieren. Normalerweise handle ich sowas in der WndProc ab. Aber in TComponent gibts noch keine WndProc sondern erst in TWinControl. Ich habe aus meiner Komponente aber auch keinen sicheren Durchgriff auf ein Formular mit WndProc.

Wie kann ich ohne Fenster auf WM_Irgendwas-Messages reagieren?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: WM_* Message in Komponente abfangen

  Alt 12. Sep 2006, 22:15
Zitat:
Wie kann ich ohne Fenster auf WM_Irgendwas-Messages reagieren?
Direkt garnicht. Leite sie doch von TWinControl ab.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: WM_* Message in Komponente abfangen

  Alt 12. Sep 2006, 22:19
Bin mir jetzt gar nicht sicher: Ist TWinControl schon eine sichtbare Komponente? Sprich wenn ich eine selbstgeschriebene TWinControl-Childklasse aus der Komponentenpalette aufs Form lege, hab ich dann ein Non-Visible-Icon oder einen grauen Kasten?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: WM_* Message in Komponente abfangen

  Alt 12. Sep 2006, 22:23
Grundsätzlich ist ein Wincontrol sichtbar, kann aber unsichtbar gemacht werden.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: WM_* Message in Komponente abfangen

  Alt 12. Sep 2006, 22:28
Macht sich dann aber in der IDE doof so ein nichtssagender grauer Kasten.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: WM_* Message in Komponente abfangen

  Alt 12. Sep 2006, 22:41
Zitat:
Macht sich dann aber in der IDE doof so ein nichtssagender grauer Kasten.
Eine nicht visuelle Komponente ist in der IDE auch sichtbar.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: WM_* Message in Komponente abfangen

  Alt 12. Sep 2006, 22:45
Ja schon aber nicht-sichtbare Komponenten haben in der IDE einen Rahmen und ein Icon. Eine nur von TWinControl abgeleitete Klasse hätte perse erstmal Höhe und Breite 0, Farbe grau oder schwarz (je nach OS). Das heißt ich müßte da extra für die IDE noch ein paar grafische Routinen bauen.

Es geht ja um eine Redist-Komponente und nichts was nur ich in der IDE verbaue wo ich zur Not was tricksen kann.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: WM_* Message in Komponente abfangen

  Alt 12. Sep 2006, 22:56
du kannst mit AllocateHwnd ein handle anfordern und eine windowproc zuweisen
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: WM_* Message in Komponente abfangen

  Alt 12. Sep 2006, 22:59
Klasse Tip

Ich halte jetzt innerhalb vom TComponent-Ableger eine HWND-Variable vor und im Constructor mach ich ein FWindowHandle:=AllocateHWnd(WndProc)

Das funzt vom Feinsten und ich hab Zugriff auf die System-Messages genauso wie ich es wollte. Manchmal braucht man nur nen kleinen Schubs in die richtige Richtung.

Danke!
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: WM_* Message in Komponente abfangen

  Alt 12. Sep 2006, 23:01
vergiss nicht im Destroy (Destructor) das Handle mit DeAllocateHwnd wieder frei zu geben. Und am besten nur während der Laufzeit (also nicht zur Designzeit) das Handle anfordern außer du brauchst es auch zur Designzeit.
mit
if csDesigning in ComponentState then kannst du abfragen ob die Komponente gerade im Designer verwendet wird oder ob die Komponente im richtigen Programm genutzt wird.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:52 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