Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Problem beim beenden eines Programms mit 3 Win-GUI-Fenstern

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 27.05.2005, 19:42    Titel: Problem beim beenden eines Programms mit 3 Win-GUI-Fenstern Antworten mit Zitat

Hi Leute!

Ich bin grade an diesem Programm:
LINK

Problem: Beim Beenden von Fenster #2 bleibt entweder die Konsole noch da (und das Prog damit aktiv), und/oder eine Fehlermeldung wird ausgegeben:
Die Anweisung in /Hex-Adresse/ verweist auf Speicher in /Hex-Adresse/. Der Vorgang "written" konnte nicht auf dem Speicher durchgeführt werden

Es geht ein bisschen von der klassischen WinMain/WndProc-Struktur weg...
Darum kurz die Funktionsweise:

Alle Objekte (Fenster und Buttons) werden zweifach identifiziert: Einmal ganz einfach durch ihren Handle, zum Anderen durch einen Arrayindex. Dieser Index bezieht sich auf...
hWnds() => Array, in dem die Handles zu den Fenstern gespeichert werden
DWnds() => UDT-Array, das Infos zum Fenster speichert (wird nur bei der Erstellung benutzt).

Zuerst werden in InitWindows die Fenster mit den in der selben SUB angegebenen Daten erstellt, die Handles in hWnds() gespeichert.

Die selbe Prozedur dann nochmal mit den Buttons, in der SUB InitControls.

Über ActiveID ist der Index aus hWnds(), über den das aktive Fenster identifiziert wird.

Interessant dürfte die Function WinMain sein:
Code:
Function WinMain ( Byval ID As Integer, Byval iChdShow As Integer ) As Integer
   Dim wMsg As MSG
   
   ActiveID = ID
   
   ShowWindow   hWnds(ActiveID), iChdShow
   UpdateWindow hWnds(ActiveID)
   
   While ( GetMessage( wMsg, null, 0, 0 ) <> false )
      TranslateMessage wMsg
      DispatchMessage  wMsg
      Print wmsg.hWnd, (wmsg.hWnd = hWnds(1)); (wmsg.hWnd = hWnds(2)); (wmsg.hWnd = hWnds(3))
   Wend
   
   WinMain = wMsg.wParam
End Function


Sicher keine Elegante Lösung, aber sie sollte doch eigentlich funktionieren...

Was hab ich mir nur bei dem Gerüst gedacht...
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 28.05.2005, 13:03    Titel: *erledigt* Antworten mit Zitat

Das Problem hat sich erledigt, war ein kleiner Fehler mit den Indexen der Arrays:

Code:
DIM DButtons(1 TO ButtonCount)
For i = 0 To ButtonCount
   With DButtons(i)
...


Wie man sieht, wird auf DButtons(0) zugegriffen, obwohl dieser Index gar nicht existiert.

In der jetztigen Version habe ich das Prog ziemlich umstrukturiert, es ist jetzt sehr viel klarer und weniger fehleranfällig.
Es wir im nächsten Tut erklärt, das vermutlich nächste Woche rauskommt... (wenn wieder schule ist verwundert )

Danke fürs Ansehen!
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz