AGB  ·  Datenschutz  ·  Impressum  







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

message kommt im Fenster nicht an

Ein Thema von R2009 · begonnen am 8. Jan 2010 · letzter Beitrag vom 8. Jan 2010
Antwort Antwort
Seite 2 von 2     12   
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#11

Re: message kommt im Fenster nicht an

  Alt 8. Jan 2010, 09:50
Hi Alaitoc,

das handled gibt doch nur an die messagequeue weiter, dass das Ereigniss abgearbeitet ist und damit erledigt.
Das kann nicht das Problem sein. Soweit komm ich erst garnicht.

Grüsse
rainer
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#12

Re: message kommt im Fenster nicht an

  Alt 8. Jan 2010, 09:57
Hi Alaitoc,
da meckert der Compiler "unbekannte messagelist"
Aber wo hast du mir Code geschickt?
Es müsste doch aber eigentlich so sein dass getmessages bei jeder message durchlaufen wird oder?

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
    Button2: TButton;
    Memo3: TMemo;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);

    procedure Button2Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    private
    { Private-Deklarationen }
     procedure GetMessages(var msg: TMsg; var handled: boolean); message SET_LNG_CMD;
   s:pointer;
  public
    { Public-Deklarationen }
  end;
Grüsse
Rainer

PS: ich bin jetzt völlig daneben. Weiss garnichts mehr.
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#13

Re: message kommt im Fenster nicht an

  Alt 8. Jan 2010, 10:03
Hi Alaitoc,
hab kapiert was du meinst aber das funktioniert überhaupt nicht.
  Application.OnMessage:=GetMessages; Compiler meckert: unterschiedliche Parameterliste.


Grüsse
rainer
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: message kommt im Fenster nicht an

  Alt 8. Jan 2010, 10:04
Delphi-Quellcode:
unit Unit1;

interface

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

const
  SET_LNG_CMD = WM_USER+2;

type
  TForm1 = class(TForm)
    procedure FormClick(Sender: TObject);
  private
    { Private-Deklarationen }
  protected
    procedure GetMessages(var msg: TMsg); message SET_LNG_CMD;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.GetMessages(var msg: TMsg);
begin
  ShowMessage('');
end;

procedure TForm1.FormClick(Sender: TObject);
begin
  SendMessage( Self.Handle, SET_LNG_CMD, 0, 0 );
end;

end.
Also so zeigt er keinen Fehler an, also mit Message und ohne das Handled-Flag bei mir

MfG Alaitoc
  Mit Zitat antworten Zitat
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: message kommt im Fenster nicht an

  Alt 8. Jan 2010, 10:07
Ach du versuchst das mit dem OnMessage (Ereignis von TApplication) ?

Naja die Delphi-Hilfe sagt da eindeutig:

Hinweis: OnMessage kann nur für Botschaften in der Warteschlange verwendet werden, nicht aber für Botschaften, die direkt mit der API-Funktion SendMessage gesendet werden.


MfG Alaitoc
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#16

Re: message kommt im Fenster nicht an

  Alt 8. Jan 2010, 10:15
Hi Alaitoc,
das mit onmessage hab ich mittlerweile auch bemerkt.
leider funktioniert dein Vorschlag auch nicht.

Delphi-Quellcode:
procedure TForm1.GetMessages(var msg: TMsg);
begin
  if msg.message = SET_LNG_CMD then
  begin
    ShowMessage('hallo');
  end;
end;
Wenn du das hier versuchst wirst du merken, dass die message nicht ankommt.
Dein Programm reagiert nur auf den click event. das hat bei mir auch funktioniert.

Grüsse
Rainer
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#17

Re: message kommt im Fenster nicht an

  Alt 8. Jan 2010, 10:22
Delphi-Quellcode:
unit Unit1;

interface

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

const
  SET_LNG_CMD = WM_USER+3;
  SET_LNG_CMD2 = WM_USER+4;

type
  TForm1 = class(TForm)
    procedure FormClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  protected
    procedure GetMessages(var msg: TMessage); message SET_LNG_CMD;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.GetMessages(var msg: TMessage);
begin
if Msg.Msg = SET_LNG_CMD then
begin
ShowMessage('hallo');
end;
end;

procedure TForm1.FormClick(Sender: TObject);
begin
  SendMessage( Self.Handle, SET_LNG_CMD, 0, 0 );
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   SendMessage( Self.Handle, SET_LNG_CMD2 , 0, 0 );
end;

end.
Jetzt aber...also:


1. GetMessages empfängt nur die SET_LNG_CMD, bei SET_LNG_CMD2 passiert nichts. ( Kannste ja mal umändern zum Testen )
2 Nun überprüfe ich ob Msg.Msg= SET_LNG_CMD ist und es klappt ( habe TMsg durch TMessage ausgetauscht)
3. Es funktioniert auch mit TMsg jedoch muss man dann Msg.HWND abfragen.

Edit: TMsg durch TMessage ersetzt, ist sinnvoller.

MfG Alaitoc
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#18

Re: message kommt im Fenster nicht an

  Alt 8. Jan 2010, 10:31
Hi,
bin bis jetzt immer davon ausgegangen, dass in msg.message SET_LNG_CMD steht.
Man lernt eben nie aus.

Grüsse
Rainer

Vielen Dank
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#19

Re: message kommt im Fenster nicht an

  Alt 8. Jan 2010, 10:38
Wäre ich eigentlich auch, aber ich benutze eigentlich immer TMessage,
wenn ich überhaupt mal Messages benutze und das war bisher eigentlich
nur damit ich realisieren konnte das ein Objekt sich selbst freigibt.

Naja solang es nun funktioniert ist ja alles in Ordnung.

MfG Alaitoc
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#20

Re: message kommt im Fenster nicht an

  Alt 8. Jan 2010, 10:41
Hi,
jetzt funktionierts, danke. Nochmal der komplette Quellcode. Damit sende ich eine message an alle Fenster die die entsprechende Botschaftsmethode implementiert haben.

Delphi-Quellcode:
unit Unit1;

interface

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

const
  SET_LNG_CMD = WM_USER+2;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
    Memo3: TMemo;
    Button2: TButton;
    procedure FormClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  protected
    procedure GetMessages(var msg: Tmessage); message SET_LNG_CMD;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 } 
function EnumWinx(hWnd: THandle; ProcID: PCardinal): Boolean; stdcall;
var
  WinProcId: cardinal;
  Text: AnsiString;
begin
  Result := True;
  if IsWindowVisible(hWnd) then
  begin
    GetWindowThreadProcessID(hWnd, WinProcId);
    if ProcID^ = WinProcId then
    begin
      SetLength(Text, SendMessage(hWnd, WM_GETTEXTLENGTH, 0, 0));
      SendMessage(hWnd, WM_GETTEXT, Length(Text)+ 1, integer(Text));
      //if Text = 'Unbenannt - Editor' then//Beispiel Text des gesuchten Fensters
      //ShowWindow(hWnd, SW_MINIMIZE);//bei dir dann SW_HIDE
      form1.memo2.lines.add(inttostr(hwnd));
      form1.memo3.lines.add(text);
    end;
  end;
end;

procedure TForm1.GetMessages(var msg: Tmessage);
begin
  memo1.Lines.Add(inttostr(msg.Msg));
  if msg.msg = SET_LNG_CMD then
  begin
    ShowMessage('hallo');
  end;
end;

procedure TForm1.FormClick(Sender: TObject);
begin
// SendMessage( Self.Handle, SET_LNG_CMD, 0, 0 );
end;

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
  For i:=0 to memo2.lines.Count-1 do SendMessage(strtoint(memo2.lines.Strings[i]), SET_LNG_CMD, 0, 0 );
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  memo1.Clear;
  memo2.Clear;
  memo3.Clear;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
  ProcID: Cardinal;
  WinProcId: Cardinal;
begin
  memo1.Clear;
  memo2.Clear;
  GetWindowThreadProcessID(application.Handle, WinProcId);
  EnumWindows(@EnumWinx, integer(@WinProcId));
end;

end.
Vielen Dank noch mal an Alaitoc!

Grüsse
Rainer
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 23:19 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