Suche Event von Form1
-
Hallo,
gibt es ein Event das dann aktiviert wird wenn ich irgendetwas in dem Window Form1 tue? also nicht OnClick oder sowas, da es ja auch buttons und groupboxes gibt, und dann OnClick leider nicht anspricht.
Ich habe bis jetzt leider keine passende gefunden... hoffe ihr könnt mir helfen.
Grüßchen
-
MouseMove, KeyPress, etc.
Es kommt schon darauf an was du mnachen willst.
-
Dann gibt es kein Event das bei irgendeiner aktivität in dem Fenster gestartet wird?
-
Nachtrag:
Leider funktioniert MouseMove oder OnClick nicht, weil wenn ich zb. in einer
GroupBos bin oder dort einen button betätige diese funktion nicht anspricht, sie sppricht leider nur an wenn ich wirklich auf die Grundmaske von Form1 klicke bzw. die maus bewege...Weil wenn es soetwas nicht gibt, muss ich von allen komponenten die ich in der mainform habe MouseMove starten und dort immer das selbe ausführen, ist aber sehr aufwenig... aber wenns wirklich nicht anders geht ....^^
Danke
-
Hallo,
was genau soll denn die Funktion machen?
Es gibt noch die Möglichkeit OnActivate als Event zu versuchen...LG, Micha
-
ich habe einen Timer der eine int variable hochzählt und immer nach 5sek aufgerufen wird.
Wenn jetzt in der mainform etwas passiert soll diese int variable wieder auf 0 gesetzt werden.
Und wenn diese dann auf 60 ist (quasi 5min afk), soll eine Funktion im Timer eine große Datei speichern.
OnActivate habe ich auch schon probiert... leider auch nicht das was ich suche.
Gruß
-
Hi,
in der WndProc könnte man entsprechende Messages abfangen bzw. ausschliessen.
ed: bzw eine Message-Map für WM_MOUSEMOVE etc schreiben
-
Hallo kpeter,
könntest du das ein wenig genauer beschrieben was du damit meinst, ich verstehe jetzt nur bahnhof
Was meinst du mit WndProc?
Keine ahnung was du mit Message-Map meinst...
-
Naja, der grosse Erklärer bin ich nicht, ich zitiere mal:
BCB-Hilfe schrieb:
Die Methode WndProc überprüft Botschaften, bevor sie diese an die Methode Dispatch übergibt. Dispatch bestimmt dann,
welche Methode die Behandlung der Botschaft übernimmt.
Durch Überschreiben von WndProc können Sie der Komponente die Möglichkeit geben, Botschaften vor der Weiterleitung an die Behandlungsroutine auszufiltern.In dieser WndProc kannst du theoretisch alle das Formular einschl. dessen Komponenten betreffende Nachrichten abfangen.
Eventuell findest du in den Examples ein Beispiel zu dieser Funktion.Eine Message-Map betrifft nur ausgewählte Nachrichten und ist damit effektiver/schneller.
Beispiel einer Message-Map im Formular-Header:BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_MOUSEMOVE, TMessage, MyMouseMove) MESSAGE_HANDLER(WM_PAINT, TMessage, MyPaint) END_MESSAGE_MAP(TForm)
MyMouseMove und MyPaint sind dann die Funktionen, die nur WM_MOUSEMOVE bzw. WM_PAINT behandeln.
Für dein Problem solltest du überlegen, welche Ereignisse zutreffen könnten:
Tasteneingaben, Mausereignisse...
-
siehe auch hier
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39204.html
-
Hi,
habe im nachfolgenden mal eine WndProc aufgesetzt, in der so ziemlich alle die Messages abgefangen werden, die es braucht, damit dein Vorhaben geht.
Die wichtigste Feststellung ist hierbei, dass Tastaturereignisse nicht immer ein WM_KEYDOWN oder WM_KEYUP sind.
void __fastcall TForm1::WndProc(TMessage &Message) { // WM_KEYUP und WM_KEYDOWN greifen nicht unbedingt in untergeordneten // Fenstern wie TMemo etc. Es trifft die Message CM_CHILDKEY ein. // Auf switch wird hier verzichtet, da einheitliche Behandlung der Messages if (Message.Msg == WM_ACTIVATE || Message.Msg == WM_ACTIVATEAPP || Message.Msg == WM_KEYDOWN || Message.Msg == WM_KEYUP || Message.Msg == WM_LBUTTONDOWN || Message.Msg == WM_MBUTTONDOWN || Message.Msg == WM_MOUSEMOVE || Message.Msg == WM_NCACTIVATE || Message.Msg == WM_RBUTTONDOWN || Message.Msg == WM_SETCURSOR || Message.Msg == WM_KILLFOCUS || Message.Msg == WM_COMMAND || // erforderlich ?? Message.Msg == CM_CHILDKEY || // Taste im untergeordneten Fenster Message.Msg == CM_CHANGED ) { ResetTimer(); // deine Funktion } TForm::WndProc(Message); } //---------------------------------------------------------------------------
Die WndProc im Header unter protected eintragen.
Du siehst also, für eine Message-Map doch etwas viel...