Das war ein Tipp von Alex.
Code: Alles auswählen
void ShowMessage(char *Message)
{
OSDMenuInfoBoxShow(PROGRAM_NAME " " VERSION, Message, 300);
do
{
OSDMenuEvent(NULL, NULL, NULL);
[b] TAP_SystemProc();
[/b] }while(OSDMenuInfoBoxIsVisible());
}
FireBird hat geschrieben:Das stellt sicher, dass alle andere TAPs zum Zuge kommen. Es gibt nur einen Knackpunkt: Dein eigener EventHandler erhält auch diese Events, obwohl Du gerade mitten drin bist. Das kann bei komplexeren Programmen zum Absturz führen, da sie nicht erwarten, dass plötzlich wieder von vorne begonnen wird. Das löse ich dann immer so:
Code: Alles auswählen
dword TAP_EventHandler(word event, dword param1, dword param2)
{
static bool DoNotReenter = FALSE;
if(DoNotReenter) return param1;
DoNotReenter = TRUE;
//do everything
DoNotReenter = FALSE;
return param1;
}
EDIT:
für Messageboxen habe ich es so gemacht:
Code: Alles auswählen
void MessageBoxShow(char *Title, char *Text, char *ButtonText)
{
int i = 0;
OSDMenuMessageBoxInitialize(Title, Text);
OSDMenuMessageBoxButtonAdd(ButtonText);
OSDMenuMessageBoxShow();
[b] do
{
OSDMenuEvent(NULL, NULL, NULL);
TAP_SystemProc();
i++;
}while(OSDMenuMessageBoxIsVisible() && i<10);
[/b]}