AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Halb VCL, halb nonVCL

Ein Thema von gerritlober · begonnen am 28. Apr 2004 · letzter Beitrag vom 28. Apr 2004
Antwort Antwort
gerritlober

Registriert seit: 22. Nov 2003
Ort: Apelern
82 Beiträge
 
#1

Halb VCL, halb nonVCL

  Alt 28. Apr 2004, 21:18
Hallo,

wie kann ich die Standardnachrichten vom Betriebssystem
Delphi abarbeiten lassen, aber spezielle Nachrichten selbst behandeln?
Grüße
Gerrit
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Halb VCL, halb nonVCL

  Alt 28. Apr 2004, 21:23
Moin Gerrit,

ich hoffe mal das richtig verstanden zu haben:

Du könntest die WndProc überschreiben.

Delphi-Quellcode:
type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
  protected
    procedure WndProc(var msg : TMessage); override;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}
procedure TForm1.WndProc(var msg : TMessage);
begin
  // Message abfangen
  // z.B.
  if msg.Msg = ..... then begin
    // Message behandeln
  end;
  inherited WndProc(msg);
end;
ob Du nun tatsächlich immer die geerbte WndProc aufrufst/aufrufen musst, hängt von der jeweiligen Message ab, und was Du mit der Abfrage bezweckst.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#3

Re: Halb VCL, halb nonVCL

  Alt 28. Apr 2004, 21:26
Alternativ kannst du dir mal in der Online-Hilfe das Keyword "message" anschauen (eintippen, cursor drauf, F1), ist vielleicht ein wenig übersichtlicher als die WndProc
  Mit Zitat antworten Zitat
gerritlober

Registriert seit: 22. Nov 2003
Ort: Apelern
82 Beiträge
 
#4

Re: Halb VCL, halb nonVCL

  Alt 28. Apr 2004, 21:28
Ich habe eine Nachricht selbst erstellt, sie hat die Konstante WM_TEST und im wParam auch Daten, wie kann ich diese Nachricht verarbeiten?
Grüße
Gerrit
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Halb VCL, halb nonVCL

  Alt 28. Apr 2004, 21:31
Moin Gerrit,

schau Dir doch mal tommie-lies Vorschlag, und TMessage an.
Damit sollte das lösbar sein.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
gerritlober

Registriert seit: 22. Nov 2003
Ort: Apelern
82 Beiträge
 
#6

Re: Halb VCL, halb nonVCL

  Alt 28. Apr 2004, 21:38
Ja, und wie kann ich da nun auf lParam und WParam zugreifen?
Grüße
Gerrit
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Halb VCL, halb nonVCL

  Alt 28. Apr 2004, 21:39
Moin Gerrit,

wenn Du Dir TMessage angeschaut hast, müsstest Du das eigentlich wissen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
gerritlober

Registriert seit: 22. Nov 2003
Ort: Apelern
82 Beiträge
 
#8

Re: Halb VCL, halb nonVCL

  Alt 28. Apr 2004, 21:44
Und warum bekomme ich nun bei message die Meldung Unbekannter bezeichner?

Delphi-Quellcode:
procedure TMainWindow.WMChar(var mMessage: TWMChar); message WM_TEST;
begin
end;
Grüße
Gerrit
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#9

Re: Halb VCL, halb nonVCL

  Alt 28. Apr 2004, 22:16
Ich frage mich, was an dem Beispiel aus der Delphi-Hilfe so falsch gelesen werden kann...
Das Message muss in die Deklaration der Methode, nicht in deren Implementation.
Also suchst du ganz oben in der Unit nach dem "type", was irgenwo gefolgt wird von der Struktur deiner TForm1. Dort ergänzt du wie bei jeder anderen Methode auch deinen eigenen Funktionsnamen und machst dahinter ein " message WM_TEST;".
Die Implementation erfolgt dann ohne "message".

Und wenn du direkt auf lParam und wParam zugreifen willst, solltest du nicht TWMChar nehmen, sondern die Basis"klasse" TMessage, die leitet nämlich nur die Felder der Windows-Message weiter, während Delphi bei den diversen TWMxxx-Records die Message bereits entsprechend vorbereitet und die Informationen passend weiterleitet. (Zugegeben, sowas steht nicht in der Hilfe, aber dafür der Rest...)

Und jetzt schütten wir erlangtes Wissen in einen großen Topf voll Gemüsebrühe und rühren kräftig um, bei kleiner Flamme kurz aufköcheln lassen, fertig zum Servieren:
Delphi-Quellcode:
unit Unit1;

interface

const
  WM_TEST = WM_USER + 1;

{...}

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
    procedure OnTest(var Message: TMessage); message WM_TEST
  end;

{...}

implementation

{...}

procedure TForm1.OnTest(var Message: TMessage);
begin
  ShowMessage(IntToStr(Message.lParam) + ' - ' + IntToStr(Message.wParam));
end;

end.
  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:28 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