Seite 1 von 3

Frage zum Messagerequester

Verfasst: 27.07.2006 18:18
von Milten
Hallo Leute!
Ich bin ein absoluter anfnger, also bitte etwas sparsamer mit fachbegriffen :)
Also: Ich wollte ein programm schreiben, was mehrere Messagerequester Fenster auf einmal öffnet. Habe dazu in der anleitung leider nix gefunden.

danke schon mal für alle antworten, schön wäre auch konstruktive kritik, wie man aus 'dummen fragen' anständge threads macht...

danke
Milten

Verfasst: 27.07.2006 18:29
von ts-soft
MessageRequester sind Systembedingt immer Modal, was bedeutet, sie
blockieren mindestens die aufrufende Anwendung. Es macht eigentlich auch
gar keinen Sinn, mehrere MessageRequester zu öffnen:

1. wie willste das Auswerten?
2. Der Anwender ist total überfordert (erschrickt bei jeder Messagebox und
hat Angst was verkehrt gemacht zu haben :mrgreen: )

Beschreib mal lieber, was Du vorhast, dann finden wir auch die beste
Vorgehensweise :wink:

Verfasst: 27.07.2006 18:35
von Milten
:D Microsoft hacken
Ne also eigentlich hatte ich vor das programmm von einem freund auszulasten...Der hat so nen ding gechriebn, was alle Messageboxenschließt bevor sie da sind
Und zwar möglichst ohne das mein computer den geist aufgbt...

Verfasst: 27.07.2006 18:43
von ts-soft

Code: Alles auswählen

Procedure MessageBox(lol.l)
  MessageRequester("Test", "Und noch eine!")
EndProcedure

For I = 1 To 1000
  CreateThread(@MessageBox(), 0)
Next
Viel Spaß :wink:

//Nachtrag: Danach ist evtl. ein Windows-Neustart sinnvoll :mrgreen:

Verfasst: 27.07.2006 18:47
von Milten
aua..das läuft ohne abstürzen oder? na ja..probieren geht über studieren..
finde es toll das hier so prompt geantwortet wird!

Verfasst: 27.07.2006 18:54
von Falko
Warum willst du es gleich mit 1000 Boxen Probieren :mrgreen:

Kannst ja ändern, denn du bist der Programmierer und musst selbst wissen,
ob dein Rechner abstürzen soll :lol:

Aber ich würde am Ende noch ein

Repeat:ForEver

am Ende einfügen.

Grüße Falko

Verfasst: 27.07.2006 19:03
von ts-soft
Falkos Variante ist aber auch schön, man sollte den Taskmanager griffbereit haben :mrgreen:

Code: Alles auswählen

Procedure MessageBox(lol.l)
  MessageRequester("Test", "Und noch eine!")
EndProcedure

Repeat
  CreateThread(@MessageBox(), 0)
ForEver

Verfasst: 27.07.2006 19:26
von Falko
Thomas seine Lösung ist echt gut, aber damit du auch Platz für diese
Requester hast, würde ich diesen Sourceteil voran stellen :mrgreen:

Code: Alles auswählen

hwndDesktop.l=FindWindow_(#NUL,"Program Manager"); Finde den ProgrammManager und spreichere die Adresse in ein handle

If hwndDesktop ; Wenn das Fenster bzw. Programm vorhanden ist, existiert auch eine Adresse zum Desktop
    ShowWindow_(hwndDesktop,#SW_HIDE); Hiermit werden die Programmverknüpfungen auf dem Desktop unsichtbar
    Delay(50000)                      ; Ab jetzt warte 50 Sekunden (50000ms/1000 = 50s)
    ShowWindow_(hwndDesktop,#SW_SHOW); Und nun wird wieder alles angezeigt, wie es war :D
EndI
Grüße Falko

Verfasst: 27.07.2006 19:31
von Milten
hilfe...wäre nett wenn ihr das erklärt, wie gesagt bin anfänger und würde auch gern was lernen

Verfasst: 27.07.2006 19:49
von Falko
Ich hoffe du verstehst, das so einigermassen, was ich in meinen source kommentiert habe.
Zu dem was Thomas geschrieben hat, ist auch nicht schwer zu verstehen, wenn man im Handbuch liest, was ein Thread ist.

Lies mal die Hilfe zu MessageRequester durch. Denn eigendlich
kanns du den Messagrequester nur einmal öffnen und das Progamm wird an der Stelle
angehalten, wo der Aufruf des Messagerequester ist. Dein Programm wird
erst weiterlaufen, wenn dieser mit OK oder anderen Buttons bestätigt wurde.

Mit Hilfe des Threads, kann man eigendlich ganz einfach dieses umgehen. Man stelle sich vor, jeder Thread ist ein eigenes Programm in dem ein Messagerequester ist. Threads sind voneinander unabhängig und können
zigmal aufgerufen werden, bis der Speicher voll ist. In jeden neuen Thread wird quasi jedesmal ein Messagerequester aufgerufen, welches auf einen
klick wartet. Erst wenn dessen Button jeweils geklickt wird, wird auch der jeweilige Thread beendet.

Ich hoffe, du hast es einigermassen verstanden

Grüße Falko