Neue Antwort erstellen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Unsere Datenschutzerklärung wurde aktualisiert. Mit der Nutzung unseres Forums akzeptierst Du unsere Datenschutzerklärung. Du bestätigst zudem, dass Du mindestens 16 Jahre alt bist.

Die letzte Antwort auf dieses Thema liegt mehr als 365 Tage zurück. Das Thema ist womöglich bereits veraltet. Bitte erstellen Sie ggf. ein neues Thema.

Informationen
Frage Bitte beantworten Sie die untenstehende Frage bzw. lösen Sie die untenstehende Aufgabe.
Nachricht
Internet-Adressen werden automatisch erkannt und umgewandelt.
Smiley-Code wird in Ihrer Nachricht automatisch als Smiley-Grafik dargestellt.
Sie können BBCodes zur Formatierung Ihrer Nachricht nutzen.

Vorherige Beiträge 6

  • Hier schließt "END" von XProfan sauber sogar Windows-8 ;-)

    Quellcode

    1. VAR font0%=CREATE("FONT","ARIAL",16,6,0,0,0)
    2. VAR mini%=CREATE("FONT","ARIAL",10,5,0,0,0)
    3. ADDHOTKEY 10,78,4
    4. ADDHOTKEY 20,66,4
    5. SetDialogFont font0%
    6. WindowStyle 8
    7. WINDOW (%MaxX/2-200),(%MaxY/2-60)-400,120
    8. USEICON "A"
    9. WindowTitle "WINDOWS verlassen"
    10. TEXTCOLOR RGB(200,0,0),-1
    11. USEFONT "ARIAL",20,0,1,0,0
    12. DRAWTEXT 20,0,"Soll die Windows-Sitzung beendet werden ?"
    13. VAR back%=CREATE("BUTTON",%hwnd," Alt+N &NEIN",10,30,120,30)
    14. SETZE_WAHL_ICON back%,"DOS",2,2,24,24
    15. VAR OK%=CREATE("BUTTON",%hwnd," Alt+B &Beenden",230,30,150,30)
    16. SETZE_WAHL_ICON OK%,"GESICHT",2,2,24,24
    17. WHILE 1
    18. WAITINPUT
    19. IF MENUITEM(254)
    20. Messagebox("copyright by Horst Horn ©2013\n\nwebmaster@horst-horn.de","Info...",64)
    21. ENDIF
    22. CASE GETFOCUS(back%) | MenuItem(10):END
    23. CASE GETFOCUS(OK%) | MenuItem(20):END
    24. ENDWHILE
    25. '#########################################
    26. PROC SETZE_WAHL_ICON
    27. DECLARE b_icon%
    28. PARAMETERS b_handle%,b_icon$,iX%,iY%,iB%,IH%
    29. b_icon% = CREATE("ICON",b_handle%,b_icon$,0,0)
    30. SetWindowPos b_icon% =0,0-0,0;0
    31. SetWindowPos b_icon% =iX%,iY%-iB%,iH%;0
    32. ENDPROC
    Alles anzeigen

    Die Icons werden nach dem Compilieren von mir ausgetauscht
  • H.Brill;977564 schrieb:

    Das ist mir schon klar, hat aber meine Frage nicht
    beantwortet. Wollte ja nur das ~wm_close auswerten.

    Quellcode

    1. SubClassProc
    2. If SubClassMessage(dlg&, ~wm_close)
    3. Set("WinProc", 0)
    4. End
    5. EndIf
    6. EndProc
    Da wollte ich wissen, ob XProfan beim End - Befehl das Programm
    sauber beendet.


    Ja, das sollte es!
    Außerdem trägt Windows seinen Teil dazu bei und würde nicht von XProfan freigegebene Ressourcen selber freigeben. (Naja, bis auf ein paar wenige Ausnahmen, aber da wird in der Hilfe gesondert darauf hingewiesen.)

    Gruß
    Roland
  • Das ist mir schon klar, hat aber meine Frage nicht
    beantwortet. Wollte ja nur das ~wm_close auswerten.

    Quellcode

    1. SubClassProc
    2. If SubClassMessage(dlg&, ~wm_close)
    3. Set("WinProc", 0)
    4. End
    5. EndIf
    6. EndProc


    Da wollte ich wissen, ob XProfan beim End - Befehl das Programm
    sauber beendet.

    Zum Thema SubClassing wollte ich dann noch wissen, WARUM
    man in der SubClass-Procedur nur das allernötigste reinpacken
    sollte. In deinem Code oben muß ich dann doch noch eine Proc
    erstellen, wenn ich dann MenuItem abfrage. Sonst blähe ich
    meine Ereignis-Schleife ja unnötig auf und der Code wird unleserlich.

    Außerdem kann man das auch mit den Notify-Messages realisieren.

    Quellcode

    1. Proc MeinFensterProc
    2. If &NotifyWnd = GridBox&
    3. If %NotifyCode = -5
    4. Messagebox("Grid geklickt mit rechter Maustaste !", "", 0)
    5. EndIf
    6. EndIf
    7. EndProc
    8. var dlg&=Create("Dialog",%hwnd,"Rechte Maustaste in Gridbox",10,10,700,300)
    9. var GridBox&=Create("GridBox", dlg&, "Spalte 1;2;140;Spalte 2;2;140;Spalte 3;2;140;Spalte 4;2;140;NR;0;100", 0, 20, 20, width(dlg&)-40, height(dlg&)-70)
    10. AddString(GridBox&,"10 | 20 | 30 | 40 | 1")
    11. AddString(GridBox&,"100 | 200 | 300 | 400 | 2")
    12. AddString(GridBox&,"1000 | 2000 | 3000 | 4000 | 3")
    13. AddString(GridBox&,"10000 | 20000 | 30000 | 40000 | 4")
    14. While 1
    15. Waitinput
    16. If %wmNotify
    17. MeinFensterProc
    18. EndIf
    19. Case %Key = 2 : Break
    20. Wend
    21. End
    Alles anzeigen


    Was ist jetzt der Unterschied ?
  • In der SubClassproc sollte so wenig wie möglich gemacht werden, das machst Du besser in der Hauptschleife oder extra Proceduren, so kannst Du auch das SubClassing vor dem Beenden wieder abschalten.

    Quellcode

    1. $H Messages.ph
    2. Subclassproc
    3. Declare line&, befehl%
    4. If SubClassMessage(GridBox&, 516)
    5. Set("WinProc", 0)
    6. SetMenuItem 2000
    7. ElseIf SubClassMessage(dlg&, ~wm_close)
    8. Set("WinProc", 0)
    9. SetMenuItem 3000
    10. EndIf
    11. EndProc
    12. Var dlg&=Create("Dialog",%hwnd,"",10,10,700,300)
    13. Var GridBox&=Create("GridBox", dlg&, "Spalte 1;2;140;Spalte 2;2;140;Spalte 3;2;140;Spalte 4;2;140;NR;0;100", 0, 20, 20, width(dlg&)-40, height(dlg&)-70)
    14. AddString(GridBox&,"10 | 20 | 30 | 40 | 1")
    15. AddString(GridBox&,"100 | 200 | 300 | 400 | 2")
    16. AddString(GridBox&,"1000 | 2000 | 3000 | 4000 | 3")
    17. AddString(GridBox&,"10000 | 20000 | 30000 | 40000 | 4")
    18. SubClass dlg&, 1
    19. SubClass GridBox&, 1
    20. While 1
    21. WaitInput
    22. If MenuItem(2000)
    23. Case GetCurSel(GridBox&) > -1 : MessageBox("Zeile Nr. : " + Str$(GetCurSel(GridBox&) + 1) + " gewählt !", "Info", 0)
    24. ElseIf MenuItem(3000)
    25. SubClass dlg&, 0
    26. SubClass GridBox&, 0
    27. DestroyWindow(dlg&)
    28. End
    29. EndIf
    30. EndWhile
    Alles anzeigen
  • Wenn man nur ein kleines Programm hat und keine Buttons
    usw. abfragt, kann man das Schließen-Kreuz (X) ja mit
    %Key = 2 oder ~wm_close abfragen.
    Ich habs unten im Code mal beim Subclassing gemacht :

    Quellcode

    1. $H Messages.ph
    2. SubClassProc
    3. Declare line&, befehl%
    4. If SubClassMessage(GridBox&, 516)
    5. line& = @GetCurSel(GridBox&)
    6. Case line& > -1 : MessageBox("Zeile Nr. : " + Str$(line& + 1) + "gewählt !", "Info", 0)
    7. Set("WinProc", 0)
    8. ElseIf SubClassMessage(dlg&, ~wm_close)
    9. Set("WinProc", 0)
    10. DestroyWindow(dlg&)
    11. End
    12. EndIf
    13. EndProc
    14. var dlg&=Create("Dialog",%hwnd,"",10,10,700,300)
    15. var GridBox&=Create("GridBox", dlg&, "Spalte 1;2;140;Spalte 2;2;140;Spalte 3;2;140;Spalte 4;2;140;NR;0;100", 0, 20, 20, width(dlg&)-40, height(dlg&)-70)
    16. AddString(GridBox&,"10 | 20 | 30 | 40 | 1")
    17. AddString(GridBox&,"100 | 200 | 300 | 400 | 2")
    18. AddString(GridBox&,"1000 | 2000 | 3000 | 4000 | 3")
    19. AddString(GridBox&,"10000 | 20000 | 30000 | 40000 | 4")
    20. SubClass dlg&, 1
    21. SubClass GridBox&, 1
    22. while 1
    23. waitinput
    24. wend
    25. 'SubClass dlg&, 0
    26. 'SubClass GridBox&, 0
    27. end
    Alles anzeigen


    Kann man das generell so machen ?
    Oder muß ich davon ausgehen, daß ich Windows irgendwann
    mal den Boden unter den Füßen wegziehe.
    Ich meine damit, ob mein Programm dann 'sauber' beendet wird,
    bzw. XProfan sich darum kümmert ?