Paules-PC-Forum.de Anzeige:

Microsoft Windows Intune: PC-Verwaltung und -Sicherheit in der Cloud: Updateverwaltung, Anti-Virus und vieles mehr!


Zurück   Paules-PC-Forum.de > Programmierung > XProfan

XProfan Alles rund um die Programmiersprache XProfan.

EM-Tippspiel

Paule bei Facebook


Paule bei Twitter


Letzte Forenthemen
Gehe zum ersten neuen Beitrag Kein Audiogerät
Aufrufe: 0, Antworten: 0
Gehe zum ersten neuen Beitrag Algorithmen Teil IV...
Aufrufe: 3361, Antworten: 129
Gehe zum ersten neuen Beitrag Hamachi deinstallieren
Aufrufe: 58, Antworten: 5
Gehe zum ersten neuen Beitrag Bundesliga-Tippspiel Saision...
Aufrufe: 7670, Antworten: 187
Gehe zum ersten neuen Beitrag PPF - Spiel "Wörter weiter...
Aufrufe: 26970, Antworten: 4223
Gehe zum ersten neuen Beitrag PPF - Shoppingwahn
Aufrufe: 50963, Antworten: 1397
Gehe zum ersten neuen Beitrag Pc lahmt plötzlich
Aufrufe: 186, Antworten: 6
Gehe zum ersten neuen Beitrag PC fährt nicht mehr hoch.
Aufrufe: 0, Antworten: 0
Gehe zum ersten neuen Beitrag Von Live CD Windowspfad...
Aufrufe: 329, Antworten: 19
Gehe zum ersten neuen Beitrag Captur 2.2 (Snow Leo)
Aufrufe: 28, Antworten: 0
Zeige:





Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 10.01.2012, 22:45   #1 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von GT43A
 
Registriert seit: 04.12.2011
Ort: Pöcking
Beiträge: 126
Standard WindowStyle

Hallo,

wie kann ich das Fensterschlissen abfragen?
Mit WindowStyle 10 <- ich würde gern vor beenden noch ein Parr Daten sichern!


'-Begin-----------------------------------------------------------------
'-Hauptprogramm-------------------------------------------------------
'-Erzeuge Fenster mit----------------------------------------
WindowStyle 10
Window 40, 40 - 400, 400
While 1
waitinput
If %key=2
Print "BlaBla"
waitinput
BREAK
Endif
Endwhile
'-End-------------------------------------------------------------------
End

__________________
Gerd
Windows 7 Home Premium SP1 32Bit XProfanX2 12.0B-N

Geändert von GT43A (10.01.2012 um 23:51 Uhr)
GT43A ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 10.01.2012, 23:03   #2 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von GT43A
 
Registriert seit: 04.12.2011
Ort: Pöcking
Beiträge: 126
Standard

Ich hab zwar ein weg gefunden,

aber warum nicht mit %key?

Code:
'-Begin-----------------------------------------------------------------
$H messages.ph
'-Hauptprogramm-------------------------------------------------------
'-Erzeuge Fenster mit----------------------------------------
WindowStyle 10
Window 40, 40 - 400, 400
Usermessages ~wm_close
While 1
  waitinput
  If %Umessage = ~wm_close
    Print "Test"
    Waitinput
    BREAK
  Endif
  'Case %key=2:BREAK
Endwhile
'-End-------------------------------------------------------------------
End
__________________
Gerd
Windows 7 Home Premium SP1 32Bit XProfanX2 12.0B-N

Geändert von GT43A (11.01.2012 um 08:15 Uhr)
GT43A ist offline   Mit Zitat antworten
Alt 10.01.2012, 23:47   #3 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von GT43A
 
Registriert seit: 04.12.2011
Ort: Pöcking
Beiträge: 126
Standard

Na dann ist es kein Wunder wenn ich ein Dialog beende das
das Programm ohne zusätzliche Waitinput‘s in der Hauptprogrammschleife auch gleich den Geist aufgibt.

Code:
'-Begin-----------------------------------------------------------------
'-Hauptprogramm-------------------------------------------------------
Proc Ein_Dialog
 
  var Zeit_DLG& = @Create("Window",%Hwnd,"Test",500,40,200,200)
  var Dialog_Schleife% = 0
 
  WhileNot Dialog_Schleife%
    waitinput
    If %key=2
      Print "Ich komme doch nur aus einem Dialog"
      Dialog_Schleife% = 1
    Endif
  Endwhile
  @DestroyWindow(Zeit_DLG&)
 
Endproc
'-Erzeuge Fenster mit----------------------------------------
WindowStyle $02B8
Window 40, 40 - 400, 400
While 1
  waitinput
 
  Ein_Dialog
 
  Case %key=2:BREAK
Endwhile
'-End-------------------------------------------------------------------
End
__________________
Gerd
Windows 7 Home Premium SP1 32Bit XProfanX2 12.0B-N

Geändert von GT43A (11.01.2012 um 08:15 Uhr)
GT43A ist offline   Mit Zitat antworten
Alt 11.01.2012, 00:46   #4 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von GT43A
 
Registriert seit: 04.12.2011
Ort: Pöcking
Beiträge: 126
Standard

Oh das dürfte nicht sein

Code:
 
'-Begin-----------------------------------------------------------------
'-Hauptprogramm-------------------------------------------------------
Proc Ein_Dialog
  var Zeit_DLG& = @Create("Window",%Hwnd,"Test",500,40,200,200)
  var Dialog_Schleife% = 0
  WhileNot Dialog_Schleife%
    waitinput
    If %key=2
      Print "Ich komme doch nur aus einem Dialog"
      Dialog_Schleife% = 1
    Endif
  Endwhile
  @DestroyWindow(Zeit_DLG&)
Endproc
'-Erzeuge Fenster mit----------------------------------------
 
Window 40, 40 - 400, 400
var Programm_Schleife% = 0
WhileNot Programm_Schleife%
  waitinput
  If  %key=2
    Programm_Schleife% = 1
  Endif
  Ein_Dialog
 
Endwhile
 
Print "Ich will doch noch aufräumen"
'Das wird ja alles nicht mehr abgearbeitet!!!
DeleteObject hBild&,Bild1&
DeleteObject Dialog_Font&
Dispose DateTimePick#
Dispose Bereich#
'##################  ProSpeed.dll
FreeFX(array1&)
FreeFX(array2&)
FreeFX(array3&)
FreeImage(logo&)
FreeImage(logo2&)
FreeImage(logoback&)
Dispose F_bereich#
'##################
'Dll aus dem Speicher loeschen(Wichtig!)
SKCtrl_DeInitDll()
'Dll freigeben...
FreeDll hdll&
FreeDll lvdll&
FreeDll neu&
DestroyWindow(%hwnd)
Waitinput
 
End
__________________
Gerd
Windows 7 Home Premium SP1 32Bit XProfanX2 12.0B-N
GT43A ist offline   Mit Zitat antworten
Alt 11.01.2012, 16:53   #5 (Direktlink)
Stammuser
 
Registriert seit: 21.04.2011
Ort: Hessen
Alter: 15
Beiträge: 327
Standard

&uWnd ist die Lösung für dein Problem. Damit kannst Du herausfinden, an welches Fenster die UserMessage gerichtet ist und entsprechend reagieren.
Code:
UserMessages 16
WhileNot (%uMessage = 16) And (&uWnd = %hWnd)
  If (%uMessage = 16) And (&uWnd = DialogHandle&)
    'Dialog schließen
  EndIf
EndWhile
'Schnell noch was vor'm Beenden tun
End

Gruß
Jonathan
__________________
ASUS K50IJ Notebook --- Pentium T4500 2x 2,4GHz --- 4GB RAM --- 64GB m4 SSD --- Win 7 Home Premium 32-Bit --- XProfan X2.0b

Das Schönste am Programmieren ist immernoch die Fehlersuche

Dieser Beitrag besteht zu 100% aus Recycling-Bytes.

Geändert von Jonathan (11.01.2012 um 17:46 Uhr)
Jonathan ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 11.01.2012, 21:06   #6 (Direktlink)
Weiß worum´s geht
 
Benutzerbild von GT43A
 
Registriert seit: 04.12.2011
Ort: Pöcking
Beiträge: 126
Standard

Hallo Jonathan,

danke so geht's auch super!
Aber wir haben doch unsere Kurse oder nicht?
Und dort wird nicht drauf hingewiesen, wenn wir das Programm ordnungsgemäß beenden möchten müsst ihr die UserMessage und...
hier Kurs 1
Code:
PROC Dialog1
  Declare hD%, hB%, OK%
  'Dialogfenster erzeugen
  Let hD% = @Create("Dialog",%HWnd,"Dialogfenster",80,90,180,160)
  'Einen Button mit OK erzeugen
  Let hB% = @Create("Button",hD%,"&OK",120,100,40,25)
  'Dialog-Schleife
  Let OK% = 0
  WhileNot Ok%
    WaitInput
    If @GetFocus(hB%) 'OK wurde angeklickt
      Ok% = 1
    EndIf
  EndWhile
  'Dialogfenster (incl. Button) entfernen
  @DestroyWindow(hD%)
ENDPROC
'Haupt-Programm
'--------------
Window 20,20-400,300
PopUp "&Aktion"
  AppendMenu 101,"&Dialog"
  Separator
  AppendMenu 199,"&Ende"
Let Ende% = 0
WhileNot Ende%
  WaitInput
  If @MenuItem(101)
    Dialog1
  ElseIf @MenuItem(199)
    Ende% = 1
  EndIf
EndWhile
End

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
Genau dieses wissen fehlt doch dem Einsteiger!
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
GT43A ist offline   Mit Zitat antworten
Alt 11.01.2012, 23:21   #7 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
Standard

Ist sicher eine Anregung für Roland, darauf in der Hilfe näher einzugehen.
__________________
Gruß, Frank


Webpage http://frabbing.bplaced.net
mit Freeware - Tools, Spiele und Grafiken.
Frabbing ist gerade online   Mit Zitat antworten
Alt 11.01.2012, 23:49   #8 (Direktlink)
Forenmaskottchen
 
Benutzerbild von ts-soft
 
Registriert seit: 16.05.2010
Ort: Berlin
Beiträge: 724
Standard

Statt in der Hilfe drauf hinzuweisen, lieber sowas:
Code:
WhileNot CloseWindow(%hWnd)
...
...
EndWhile
Statt dieser sinnlosen While 1
ermöglichen.

Natürlich unabhängig vom Fensterstil, was ich sowieso blödsinnig finde.
__________________
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
ts-soft ist gerade online   Mit Zitat antworten
Alt 12.01.2012, 03:14   #9 (Direktlink)
Stammuser
 
Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
Standard

Diese simplen Konstruktionen werden ja meist nur bei den minimal Beispielen, wenn kein Aufräumen erforderlich ist, eingesetzt, und sind so in der Hilfe oder dem Lehrbuch nicht zufinden. %key=2 ist auch nur im Nebenfenster brauchbar und im Hauptfenster unnötig.
Code:
cls
var ed%=CreateEdit(%hwnd,"",10,10,100,20)
DIALOG
while 1
waitinput
'case %key=2:BREAK
wend
@WINEXEC("NOTEPAD.EXE",3)
end

proc DIALOG
var dlg%=CreateWindow(%hwnd,"",400,400,200,200)
while 1
waitinput
'case %key=2:BREAK
wend
DestroyWindow(dlg%)
setfocus(%hwnd)
Endproc
Soll noch nach dem Schliessen des Haupfensters aufgräumt werden, ist halt ein Button oder %UMessage einzusetzen.
Code:
cls
var ed%=CreateEdit(%hwnd,"",10,10,100,20)
UserMessages 16
DIALOG
while 1
waitinput
case %UMessage=16:BREAK
wend
@WINEXEC("NOTEPAD.EXE",3)
end

proc DIALOG
var dlg%=CreateWindow(%hwnd,"",200,200,200,200)
while 1
waitinput
case %UMessage=16:BREAK
wend
DestroyWindow(dlg%)
setfocus(%hwnd)
Endproc
Mögen die Einsteiger unsere Kurzschrift uns verzeihen.

Gruß Thomas
THFR ist offline   Mit Zitat antworten
Alt 12.01.2012, 10:05   #10 (Direktlink)
RGH
Forenmaskottchen
 
Benutzerbild von RGH
 
Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
Standard

Ich möchte nicht in Abrede stellen, dass die Hilfe verbesserungswürdig ist, aber darauf hinweisen, dass zum Einen XProfan selbst sich beim END-Befehl ums Aufräumen kümmert und zum Anderen zumindest ab Windows XP Windows selbst beim Beenden des Programmes den Speicher wieder freigibt. Auf einige Ausnahmen bei Handles wird in der Hilfe bei der Funktion zum Erzeugen dieses Handles hingewiesen.

Nichts desto trotz wäre die Einführung einer CLOSEPROC, die beim Beenden aufgerufen wird, so sie denn existiert, sicher nachdenkenswert.

Gruß
Roland
__________________
Pentium D 2,8 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon HD5450 1024 MB / Windows 7(32) - XProfan X2.0c
AMD Athlon II X2 2,9 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon 3000 / Windows 7(64) - XProfan X2.0c


http://www.xprofan.de
RGH ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 12.01.2012, 10:20   #11 (Direktlink)
MoRoGeP-Träger 2011
 
Benutzerbild von horsthorn
 
Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.878
Beitrag

So "bastle" ich für jedes meiner Tools eine eigene ENDPROCEDUR.
Bin dann sicher, dass alles säuberlich entfernt ist.
Die hier ist für "2win4me"
Code:
PROC PROGRAMM_ENDE
CloseMessages(%hwnd)
freedll lvdll&
Dispose icons#
Dispose itemtexts#
Dispose nurso#
Dispose bereich#
Dispose maus_bereich#
DELETEOBJECT font0%
DELETEOBJECT font1%
DELETEOBJECT font2%
IF Right$(path1$,1)="\"
I%=LEN(path1$)
path1$=LEFT$(path1$,(I%-1))
ENDIF
IF Right$(path2$,1)="\"
I%=LEN(path2$)
path2$=LEFT$(path2$,(I%-1))
ENDIF
IF FILEEXISTS(log_datei$)
WRITEINI log_datei$,"Start-Weg","FENSTER_LINKS",path1$
WRITEINI log_datei$,"Start-Weg","FENSTER_RECHTS",path2$
ENDIF
IFNOT FILEEXISTS(log_datei$)
WRITEINI log_datei$,"Start-Weg","FENSTER_LINKS","C:"
WRITEINI log_datei$,"Start-Weg","FENSTER_RECHTS","C:"
ENDIF
DESTROYWINDOW(%HWnd)
UserMessageS 0
END
ENDPROC
__________________
Gruss, horst
Computer werden kleiner und kleiner, bald verschwinden sie völlig.
(Ephraim Kishon 1924-2005)

Win7-Home-Premium 32-Bit - XProfan12.0ß-S14 - Chrome-18.0.1025.142 m
http://www.web-treffpunkt.de
horsthorn ist gerade online   Mit Zitat antworten
Alt 12.01.2012, 11:26   #12 (Direktlink)
Forenmaskottchen
 
Benutzerbild von ts-soft
 
Registriert seit: 16.05.2010
Ort: Berlin
Beiträge: 724
Standard

Zitat:
Zitat von RGH Beitrag anzeigen
Nichts desto trotz wäre die Einführung einer CLOSEPROC, die beim Beenden aufgerufen wird, so sie denn existiert, sicher nachdenkenswert.
Keine CloseProc, die beim Schliessen eines Fensters aufgerufen wird, sondern
eine Funktion als Bedingung für das EventLoop, so das der Code dahinter
ausgeführt wird, der auch nicht unbedingt das tatsächliche schließen des
Fensters zur Folge haben sollte.
Der Anwender drückt auf schließen, aber der Programmierer entscheidet .

Fast jedes Programm speichert am Ende noch Einstellungen, aktuelle Position
des Fensters usw., ausserdem ist es bei Dialogfenstern oftmals besser, diese
nur zu verstecken, anstatt zu schliessen, wenn der Aufbau eines Einstellungs-
Dialoges etwas länger dauert.
__________________
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
ts-soft ist gerade online   Mit Zitat antworten
Alt 12.01.2012, 14:28   #13 (Direktlink)
RGH
Forenmaskottchen
 
Benutzerbild von RGH
 
Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
Standard

Naja, bei Dialogfenstern geht das ja jetzt schon mit %key=2.

Gruß
Roland
__________________
Pentium D 2,8 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon HD5450 1024 MB / Windows 7(32) - XProfan X2.0c
AMD Athlon II X2 2,9 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon 3000 / Windows 7(64) - XProfan X2.0c


http://www.xprofan.de
RGH ist offline   Mit Zitat antworten
Alt 12.01.2012, 15:18   #14 (Direktlink)
Forenmaskottchen
 
Benutzerbild von ts-soft
 
Registriert seit: 16.05.2010
Ort: Berlin
Beiträge: 724
Standard

Aber die Unterscheidung "DialogFenster" und anderes Fenster muss weg,
die Unterscheidung ist mir nicht schlüssig und Einsteigern schon gar nicht.
Im Endeffekt sieht es so aus, das %Key = 2 nicht immer funktioniert,
UserMessages nicht gerade Einsteigerfreundlich sind, somit muss was
einfaches her, was auch jeder Einsteiger versteht, ohne Header einzubinden
und API zu lesen .
Also eine einfache Abbruchbedingung, die immer funktioniert, wenn sie
benutzt wird, die einfach das Eventloop unterbricht und beim Code dahinter
fortsetzt. Es sollte auch das handle des Fensters, bzw. der Fenster
berücksichtigt werden, da man Dialogfenster meist ja tatsächlich gleich
schließt, im Unterschied zum Hauptfenster.

Diese Abbruchbedingung so verpacken, das alter Code unverändert
weiterhin funktioniert und gut ist, denke ich mir einfach mal so
__________________
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
ts-soft ist gerade online   Mit Zitat antworten
Alt 12.01.2012, 20:11   #15 (Direktlink)
RGH
Forenmaskottchen
 
Benutzerbild von RGH
 
Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
Standard

Zitat:
Zitat von ts-soft Beitrag anzeigen
Aber die Unterscheidung "DialogFenster" und anderes Fenster muss weg
Das wird nicht gehen, da diese beiden Fensterarten zum einen so von Windows vorgesehen sind und zum anderen auch sonst recht unterschiedlich agieren.
Der Dialogfensterstil ist immer dann zu verwenden, wenn auf dem Fenster Dialogelemente angebracht sind. Ein solches Fenster reagiert normalerweise nicht auf Klicks zwischen die Dialogelemente (etwa den Fensterhintergrund). Ohne Dialogfensterstil (normalerweise nur das Hauptfenster) wird auf Klicks in das Fenster reagiert und z.B. %MouseX und %MouseY gesetzt. Hier hat Windows ursprünglich keine Dialogelemente vorgesehen.

Aber vielleicht fällt mir ja für X3 noch was ein. Aber bis dahin ist noch eine Weile ...

Gruß
Roland
__________________
Pentium D 2,8 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon HD5450 1024 MB / Windows 7(32) - XProfan X2.0c
AMD Athlon II X2 2,9 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon 3000 / Windows 7(64) - XProfan X2.0c


http://www.xprofan.de
RGH ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Antwort

  Paules-PC-Forum.de > Programmierung > XProfan

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
ListView DLL & WindowStyle 512 Hovy Dlls, Includes, Units & Prozeduren 5 18.04.2010 11:37



Alle Zeitangaben in WEZ +2. Es ist jetzt 12:52 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Powered by vBCMS® 2.7.0 ©2002 - 2012 vbdesigns.de
(c) Paules-PC-Forum.de

::: Impressum :::

Search Engine Optimization by vBSEO 3.3.2