![]() |
Anzeige:
|
|
|||||||
| XProfan Alles rund um die Programmiersprache XProfan. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 04.12.2011
Ort: Pöcking
Beiträge: 126
|
Das Programm wird doch nur ab geschossen und nicht ordnungsgemäß beredet!
Code:
' Haupt-Fenster öffnen
'
Cls
' Messageschleife ist nötig für jedes Fenster (hier unser Hauptfenster)
'
' Unendliche Schleife starten
'
While 1
' Warten, bis eine Meldung an unser Fenster geschickt wurde
'
WaitInput
' Wenn die XProfan-Variable %key gleich 2 war, wurde eine Fenster-Schliessen-Meldung erhalten.
'
If %key=2
'
' In dem Fall verlässt das BREAK unsere Schleife sofort
'
BREAK
EndIf
' Unendliche Schleife wieder von vorn beginnen
'
EndWhile
Print "Hallo ich muss noch sichern"
Waitinput
' Programmende
'
End 'Der Quellcode erzeugt ein noch leeres Fenster. Es liegt
__________________
Gerd Windows 7 Home Premium SP1 32Bit XProfanX2 12.0B-N Geändert von Frabbing (16.01.2012 um 22:05 Uhr) Grund: Abgetrennt |
|
|
|
|
|
|
#2 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Irrtum,
das BREAK verlässt die Schleife und landet bei END. Das Programm ist ordnungsgemäss beendet. Wenn Du natürlich noch etwas vor END einbaust....
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher |
|
|
|
|
|
#3 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 23.01.2011
Ort: Bernburg
Alter: 58
Beiträge: 759
|
Hier wird doch nichts abgeschossen! Das ist das Standardverhalten und reguläre Ende von XProfan-Programmen. Wenn du selbst die Verwaltung des Systemmenüs übernehmen willst, um noch Aufräumaktionen auszuführen, findest Du in der Hilfe die entsprechenden Windowstyles und Abfragemöglichkeiten.
Zum Beispiel mit dem Stil 256 kannst Du das Beenden mit %Key = 2 abfragen und entsprechende Aktionen ausführen. Und eine elegante Möglichkeit, unabhängig vom Stil hast Du ja mit ~wm_Close schon selbst gefunden. Gruß Volkmar |
|
|
|
|
|
#4 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 16.05.2010
Ort: Berlin
Beiträge: 724
|
Wäre ja schön, wenn es so wäre, %Key = 2 wird niemals erreicht, das
Fenster schließt einfach und evtl. Aufräumcode wird niemals ausgeführt, deshalb haben ja so viele Profan Programme Memoryleaks.
__________________
Gruß Thomas Wenn mir früher jemand gesagt hätte, ich würde freiwillig eine Wanze mit mir herum tragen und sie auch noch selbst aufladen, hätte ich laut gelacht. Heute habe ich ein Smartphone. http://realsource.de |
|
|
|
|
|
#5 (Direktlink) | |
|
Weiß worum´s geht
![]() Registriert seit: 04.12.2011
Ort: Pöcking
Beiträge: 126
|
Zitat:
Ok habe mal in der Hilfe nach UserMessage geschaut, und dort ist es auch gut erklärt warum. Zitat: Eine sinnvolle Anwendung ist z.B. die Message zum Schließen des Hauptfensters abzufangen, um etwa vor Beenden des Programmes noch etwas zu speicher oder Speicher frei zu geben. Code:
Declare Ende%
UserMessages $10
CLS
WhileNot Ende%
WaitInput
If %UMessage = $10
If @MessageBox("Programm beenden?", "Frage", 36) = 6
Ende% = 1
EndIf
EndIf
EndWhile
End
Der sucht sich dann dumm und dämlich und fragt sich „was mach ich falsch“
__________________
Gerd Windows 7 Home Premium SP1 32Bit XProfanX2 12.0B-N |
|
|
|
|
|
|
|
#6 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 16.05.2010
Ort: Berlin
Beiträge: 724
|
WM_CLOSE sollte in jedem EventLoop erforderlich sein, wenn nicht vorhanden
darf das Loop auch nicht auf das Close reagieren, wie es jetzt der Fall ist. Außerdem sollten alle Beispiele in der Hilfe daraufhin angepasst werden. Aber dieses Problem ist so alt wie Profan selbst, inzwischen gibt es wenigstens UserMessages, früher hat man den schließen Button disabled und das Systemmenü entfernt um MemoryLeaks zu vermeiden Aber darüber diskutieren bringt ja nichts.
__________________
Gruß Thomas Wenn mir früher jemand gesagt hätte, ich würde freiwillig eine Wanze mit mir herum tragen und sie auch noch selbst aufladen, hätte ich laut gelacht. Heute habe ich ein Smartphone. http://realsource.de |
|
|
|
|
|
#7 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 04.12.2011
Ort: Pöcking
Beiträge: 126
|
Hallo ich noch mal,
bei allen Dialog Fenstern (auch @Create("Window"…) wird %key auf 2 gesetzt, wie in der Hilfe beschrieben. Zitat: Es wurde in einer Dialogbox bzw. einem Dialogfenster auf das Systemmenü doppelgeklickt, bzw. "Schließen" ausgewählt Richtig? Und beim %Hwnd nicht! Richtig? wenn JA dann kann ich mein Programm dementsprechend aufbauen.
__________________
Gerd Windows 7 Home Premium SP1 32Bit XProfanX2 12.0B-N Geändert von GT43A (11.01.2012 um 22:05 Uhr) |
|
|
|
|
|
#8 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 04.12.2011
Ort: Pöcking
Beiträge: 126
|
OK da mir dieses keiner bestätigen kann
werde ich %key beim Fenster schlissen mal 1000 m Tief ein graben. und nur noch folgende Abfrage benutzen! Code:
'-Begin-----------------------------------------------------------------
$H messages.ph
'-Hauptprogramm-------------------------------------------------------
Proc Ein_Dialog
var Zeit_DLG& = @Create("Window",%Hwnd,"Test",500,40,200,200)
var Dialog_Schleife% = 0
WhileNot Dialog_Schleife%
waitinput
If %Umessage = ~wm_close
Dialog_Schleife% = 1
Endif
Endwhile
@DestroyWindow(Zeit_DLG&)
Endproc
'-Erzeuge Fenster mit----------------------------------------
WindowStyle 10
Window 40, 40 - 400, 400
Usermessages ~wm_close
While 1
waitinput
If (%Umessage = ~wm_close) & (&uWnd = %hWnd)
BREAK
Else
Ein_Dialog
Endif
Endwhile
Print "Schnell noch was vor'm Beenden tun"
Waitinput
'-End-------------------------------------------------------------------
End
__________________
Gerd Windows 7 Home Premium SP1 32Bit XProfanX2 12.0B-N |
|
|
|
|
|
#9 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 23.01.2011
Ort: Bernburg
Alter: 58
Beiträge: 759
|
Wie ich oben schon geschrieben habe, mit dem Windowstyle 512 (und ich sehe gerade, da habe ich 256 geschrieben
Gruß Volkmar |
|
|
|
|
|
#10 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 04.12.2011
Ort: Pöcking
Beiträge: 126
|
Hallo Volkmar,
Zitat: Wie ich oben schon geschrieben habe, mit dem Windowstyle 512.. Zitat: Von ts-soft aber dieses Problem ist so alt wie Profan selbst, inzwischen gibt es wenigstens UserMessages, früher hat man den schließen Button disabled und das Systemmenü entfernt um MemoryLeaks zu vermeiden! Volkmar heute doch nicht mehr, wir haben 2012 Diese elementare Fehlinformation mit %key sollte doch schnellst möglichst behoben werden, in welcher Form auch immer.
__________________
Gerd Windows 7 Home Premium SP1 32Bit XProfanX2 12.0B-N |
|
|
|
|
|
|
#11 (Direktlink) | |
|
Forenmaskottchen
![]() Registriert seit: 23.01.2011
Ort: Bernburg
Alter: 58
Beiträge: 759
|
Zitat:
Code:
WindowStyle 512 + 8
' zur 512 eine 8 hinzu, damit überhaupt ein Systemmenü zum Schließen vorhanden ist
CLS
While 1
WaitInput
If %key = 2
Break
EndIf
EndWhile
Print "Das wird nach Verlassen der Schleife ausgeführt"
Print "Damit Du das auch lesen kannst, folgt noch ein WaitInput"
Print "Bitte nochmal klicken zum Beenden"
WaitInput
Würde es heißen, daß im (von mir zuerst fälschlicherweise angegebenen) Stil 256 was nicht klappt, dann geben ich Dir recht. Da wird wirklich der Schließbutton nicht berücksichtigt, der schließt das Fenster kommentarlos in jedem Falle ohen den Teil hinter der Schliefe auszuführen. Und dort genau liegt das Problem, was den guten Testern der Version X2 auch mal wieder durch die Lappen gegangen ist, weil das schon seit Erscheinen der ersten 32-Bit-Version so war. Und deshalb wohl jeder, der sich schon länger mit XProfan beschäftigt, sein eigenes Süppchen kocht und das Problem gar nicht mehr sieht. Gruß Volkmar |
|
|
|
|
|
|
#12 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 04.12.2011
Ort: Pöcking
Beiträge: 126
|
Hallo Volkmar,
ubs ich wollte keinen zu nahe treten. Es wird mehrfach in der Hilfe drauf hingewiesen z.B. Vor dem Beenden des Programmes muss das Handle mit DeleteObject wieder freigegeben werden, da ansonsten der von der Bitmap belegte Speicherplatz nicht wieder an das System zurückgegeben wird. Und wenn ich dann am Programm Ende diesen befehle aufrufe und er wird nicht ausgeführt sehe ich als Neuling meinen PC schon in Flammen aufgehen. Gut zu wissen das Rolland es im Visier hat. Und dank eurer Infos und Hilfestellung ist der Feuerlöscher wieder in der Garage. MfG
__________________
Gerd Windows 7 Home Premium SP1 32Bit XProfanX2 12.0B-N |
|
|
|
|
|
#13 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 23.01.2011
Ort: Bernburg
Alter: 58
Beiträge: 759
|
Kein Problem. Das geschriebene Wort sieht manchmal anders aus als wenn wir Angesicht von Angesicht reden würden. Deshalb nehme ich das auch nicht alles so ernst. Und mich selbst auch nicht auch wenn ich manchmal etwas ironisch schreibe. ist dann auch nicht böse gemeint.
Und daß der Rechner in Flammen aufgeht, da mußt Du dir keine Sorgen machen. Es wird dann nur etwas Speicher nicht wieder frei gegeben. Und abhängig davon, was nicht korrekt freigegeben werden konnte, verhalten sich andere Programme dann mitunter etwas seltsam. Solche hartnäckigen Reste können dann in aller Regel nur durch Neustarten des Rechners beseitigt werden. Und wenn in künftigen Versionen dann eine etwas bessere Methode drin ist, dann hat das Thema hier doch was gebracht Gruß Volkmar |
|
|
|
|
|
#14 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Ab Windows XP gibt jeder Prozess beim Beenden automatisch allen Speicher und Handles usw. frei, die er besetzt gehalten hatte. Es muss sich also heutzutage niemand einen großen Kopf machen, wenn bei Programmende mal was nicht freigegeben wird. Das oft zu unrecht gescholtene Windows macht das eh ganz automatisch!
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#15 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.786
|
Stimmt nicht ganz.
Ob alles freigegeben wird, hängt davon ab, ob es sich um globale oder lokale Handles auf das Objekt handelt. Lokale Handles sind zum Beispiel Kernelhandels - bei denen kann beim Beenden eigentlich nichts zurückbleiben. Bei globalen Handles dürfte zumindestens ein geringer Speicherbereich weiterhin in Verwendung sein.
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT Geändert von AHT (16.01.2012 um 22:28 Uhr) |
|
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| MIDI-Nachrichten abfangen | Transrapidfan | XProfan | 6 | 02.12.2011 19:00 |
| Manipulierte Nokia-Handys sollen SMS abfangen können | Info | Sicherheitsmeldungen von heise.de | 0 | 22.04.2009 12:10 |
| Nicht ladbares Bild abfangen | Jac de Lad | XProfan | 2 | 14.03.2009 10:16 |
| e-mails abfangen | hilfebedürftig | Windows 95/98/ME/2000/NT | 5 | 19.09.2006 18:27 |
| Counter Strike: Server Problem sowie Online Problem | Simon@Xp | Computerspiele | 4 | 10.04.2006 14:30 |