Message Box im Timer



  • Ich möchte in einem Timer eine Message Box aufrufen, die, abhängig vom geklickten Button eine Aktion ausführt.
    Mein Problem ist, dass die Messagebox im Intervall des Timers immer wieder erscheint. Aus diesem Grund habe ich mir ein bool gesetzt, welches false gesetzt wird, sowie die Messagebox angezeigt wird. Dadurch kann ich erfolgreich verhindern, dass die MB mehrfach erscheint. Leider wird dadurch aber auch verhindert das das Klicken auf einen bestimmten Button in der Messagebox ein bestimmtes Ereignis auslöst.
    Gibt es dafür eine Lösung, wie man zum einen verhindert, dass die MB mehrfach erscheint und zum anderen durch Klicken von z.B. OK ein Label umbenannt wird?



  • Hallo,

    Zeig mal, wie du das gemacht hast. Der Fehler ist mir aus deiner Erklärung allein nicht ersichtlich.



  • also nur mal was ganz schnell zusammenheschustertes, somal ich auch nicht genau weiß was du willst

    Form.h

    //---------------------------------------------------------------------------
    
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ExtCtrls.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// Von der IDE verwaltete Komponenten
            TButton *Button1;
            TButton *Button2;
            TButton *Button3;
            TTimer *Timer1;
            void __fastcall Button1Click(TObject *Sender);
            void __fastcall Button2Click(TObject *Sender);
            void __fastcall Button3Click(TObject *Sender);
            void __fastcall FormActivate(TObject *Sender);
            void __fastcall Timer1Timer(TObject *Sender);
    private:	// Anwender-Deklarationen
    public:		// Anwender-Deklarationen
           enum states{button1=1,button2=2,button3=3};    //buttonstatus
           states status;
           bool showBox;                                  //soll MsgBox angezeigt werden??
           bool returning;                                //damit MsgBox nicht mehrfach erscheint, wenn die erste MsgBox nicht gleich "angeklickt" wird
            __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    

    Form.cpp

    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    status = button1;
    showBox = true;
    returning = true;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    status = button2;
    showBox = true;
    returning = true;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    status = button3;
    showBox = true;
    returning = true;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormActivate(TObject *Sender)
    {
    
    showBox = false;
    Timer1->Enabled=true;
    returning = false;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
    if((showBox==true)&&(returning==true))
    {
    returning = false;        //damit MsgBox wirklich nur einmal angezeigt wird
    if(status == button1)
     ShowMessage("Button1");
    else if(status == button2)
     ShowMessage("Button2");
    else
     ShowMessage("Button3");
    showBox = false;          //Damit sie nur angezeigt wird, wenn Button geklickt wurde
    }
    else
    {}                    //if - abfackeln ;)
    }
    //---------------------------------------------------------------------------
    

    so hier wird je nach button eine MsgBox angezeigt...nur einmal, und für jeden button anders!



  • hab jetzt net ganz genau verstanden was du willst,
    aber versuch doch mal den timer anzuhalten befor deine messagebox geöffnet wird und beim klicken eines buttons wird er wieder gestartet...
    kp ob dir des hilft war nur so ne spontane idee...
    Gruß Ky


Anmelden zum Antworten