Forum | | | | - Seite 1 - |
| Peter Gückstock | Hallo,
habe ein Problem beim beenden eines Programms Das Programm wird über einen Button normal beendet und ist auch vom Bildschirm verschwunden. Im Taskmanager läuf der prozess aber weiter, d.h. der Interpreter bleibt aktiv. Auch die EXE des Programms verhält sich so. Habt Ihr einen Tip zur Fehlersuche oder eine Idee was soetwas verursachen kann? Habe schon 2 Tage mit Grübeln verloren.
vielen Dank |
| | | | |
| | | | - Seite 2 - |
| | | Klar das mag auch scheinbar helfen, bleibt aber Fusch der an anderer Stelle wieder zum Vorschein kommen kann.
Ist aber Wurscht, wenn es denn ausreiche... |
| | | | |
| | Peter Gückstock | Hallo,
Ich habe jetzt nur mal den Hauptteil angehängt. Unter VISTA und XProfan 11 (mit dem neusten Update von Roland) bleibt der Prozess nach dem beenden des Programms bestehen und unetr Windows XP und XProfan 10 stürzt XProfan nach dem Beenden des Programms ab Echt zum Verzweifeln, denn alle anderen Programme funktionieren.
Hilfe,Hilfe.... KompilierenMarkierenSeparieren $I PROFALT.INC
$I SKControl.inc
$I Listview_Funktionen.inc
$I WFMCAL.INC
declare image#,string#,h1&,h2&,h3&,h4&,h5&,h6&
Buttons
declare Feiertage&,DateButton1&,DateButton2&,ladenals&,speichernals&,Jubilar&,info&,adress&
declare adresse%,Jubilar%,ende&,beenden&,progende%
declare Text%
Dialoge_Controlls
declare MonthCal1&,Jubibox%,listview_Jubi&,Adressbox&
Farben für Kalender
declare bg&,txt&,titlebg&,titletext&,calcol&,month&
für DLL
declare skDll&,lvdll&
skDll& = UseDll("SKControl.dll")
lvdll& = usedll("Listview.dll")
SKCtrl_InitDll()
=======================Hauptprogramm============================================
SetTrueColor 1
WindowStyle 16
WindowTitle "PGM Terminplaner lite Version alfa 0.1"
Window 100,100-900,600
cls RGB(210,210,210)
SetDialogFont 1
UseFont "Batang",10,0,0,0,0
startPaint %Hwnd
Usebrush 1,RGB(160,160,160)
RoundRect 4,8-878,52;10,10
endpaint
---------------Buttons-----------------------------------------------
dim image#,255
dim string#,255
string image#,0 = @add$(GetDir$("@"),"\feier.rle")
string string#,0 = ""
Feiertage& = SKCtrl_CreateClrImageButton(%Hwnd,image#,string#,0,0,RGB(110,40,20),RGB(234,234,234),540,10,40,40,%hInstance)
Create("Tooltip",%HWnd,Feiertage&,"Die Feiertage werden berechnet!")
string image#,0 = @add$(GetDir$("@"),"\ok.rle")
string string#,0 = "laden "
DateButton1& = SKCtrl_CreateClrImageButton(%Hwnd,image#,string#,0,0,RGB(110,40,20),RGB(160,160,160),10,10,110,40,%hInstance)
string image#,0 = @add$(GetDir$("@"),"\ok.rle")
string string#,0 = "sichern"
DateButton2& = SKCtrl_CreateClrImageButton(%Hwnd,image#,string#,0,0,RGB(110,40,20),RGB(160,160,160),120,10,115,40,%hInstance)
string image#,0 = @add$(GetDir$("@"),"\laden.rle")
string string#,0 = ""
ladenals& = SKCtrl_CreateClrImageButton(%Hwnd,image#,string#,0,0,RGB(110,40,20),RGB(234,234,234),300,10,40,40,%hInstance)
h1&=Create("Tooltip",%HWnd,ladenals&,"Datei manuell laden!")
string image#,0 = @add$(GetDir$("@"),"\speichern.rle")
string string#,0 = ""
speichernals& = SKCtrl_CreateClrImageButton(%Hwnd,image#,string#,0,0,RGB(110,40,20),RGB(234,234,234),340,10,40,40,%hInstance)
h2&=Create("Tooltip",%HWnd,speichernals&,"Datei speichern als..!")
string image#,0 = @add$(GetDir$("@"),"\fett.rle")
string string#,0 = ""
Jubilar& = SKCtrl_CreateClrImageButton(%Hwnd,image#,string#,0,0,RGB(110,40,20),RGB(234,234,234),400,10,40,40,%hInstance)
string image#,0 = @add$(GetDir$("@"),"\help.rle")
string string#,0 = ""
info& = SKCtrl_CreateClrImageButton(%Hwnd,image#,string#,0,0,RGB(110,40,20),RGB(234,234,234),440,10,40,40,%hInstance)
string image#,0 = @add$(GetDir$("@"),"\lupe.rle")
string string#,0 = ""
adress& = SKCtrl_CreateClrImageButton(%Hwnd,image#,string#,0,0,RGB(110,40,20),RGB(234,234,234),480,10,40,40,%hInstance)
h5&=Create("Tooltip",%HWnd,speichernals&,"Adresse suchen!")
jubilar%=@Create("Button",%Hwnd,"Jubiläen eintragen",5,550,150,20)
adresse%=@Create("Button",%Hwnd,"Adressen eintragen",155,550,150,20)
string image#,0 = @add$(GetDir$("@"),"\ende.rle")
string string#,0 = ""
ende& = SKCtrl_CreateClrImageButton(%Hwnd,image#,string#,0,0,RGB(110,40,20),RGB(234,234,234),830,10,40,40,%hInstance)
h6&=Create("Tooltip",%HWnd,ende&,"Das Programm wird beendet!")
SetStyle h1&,$0000040 Style für ToolTips
SetStyle h2&,$0000040
SetStyle h3&,$0000040
SetStyle h4&,$0000040
SetStyle h5&,$0000040
SetStyle h6&,$0000040
----CONTROLS--------------------
text% = Create("RichEdit",%HWnd,"",300,90,550,350)
SendMessage(text%,$0443,0,rgb(200,200,180))
Let MonthCal1&=Control("SysMonthCal32","",$54800005,10,60,220,175,%hwnd,0,%hinstance,$0)
Jubibox%=@Create("ListBox", %Hwnd, 1, 10, 250, 220, 150)
listview_Jubi&=CreateListview(%Hwnd,%hinstance,0,Rgb(255,255,255),-1,$31)
InsertColumn listview_Jubi&,"Monat",100,0
InsertColumn listview_Jubi&,"Tag",50,0
InsertColumn listview_Jubi&,"Name",220,0
InsertColumn listview_Jubi&,"Text",380,0
AutoSortListview listview_Jubi&,2,2,2,2
Adressbox&=CreateListview(%Hwnd,%hinstance,0,Rgb(255,255,255),-1,$31)
InsertColumn Adressbox&,"Name",160,0
InsertColumn Adressbox&,"Vorname",120,0
InsertColumn Adressbox&,"Firma",180,0
InsertColumn Adressbox&,"Strasse",150,0
InsertColumn Adressbox&,"Postleizzahl",80,0
InsertColumn Adressbox&,"Ort",180,0
InsertColumn Adressbox&,"Telefon",120,0
InsertColumn Adressbox&,"Mobil",120,0
InsertColumn Adressbox&,"E-Mail",190,0
ShowListView(Adressbox&,4,450,878,80)
InitMessages(%Hwnd)
-------------- Farben für Kalender --------------------------------------------------
bg&= rgb(255,255,0)
txt&=rgb(0,0,0)
titlebg&= rgb(255,0,241)Farbe für Titelzeile, Wochentage und Wochenzahlen
titletext&= rgb(255,255,0)Titelfarbe des Monatsnamens
calcol&= rgb(255,255,255) Farbe des Fensters
month&= rgb(192,192,192)
setmccolors(monthcal1&,bg&,txt&,titlebg&,titletext&,calcol&,month&)
----------- Steuerung der Aktionen --------------------------------
WhileNot ende&=1
WaitInput
------------------------------------------------------------------------
If GetFocus(Jubilar%)
jubi
endif
------------------------------------------------------------------------
If GetFocus(adresse%)
Adressen
endif
-------------------------------------------------------------------------
If GetFocus(DateButton1&) Aufruf Dialog zum Laden/Speichern
Dim DateTimePick#,20
DTP_GETSYSTEMTIME(MonthCal1&,DateTimePick#)
Let Meldung$ = Str$(word(DateTimePick#,6));".";Str$(word(DateTimePick#,2));".";Str$(word(DateTimePick#,0))
Monat$= Str$(word(DateTimePick#,2))
Dispose DateTimePick#
Eintrag_laden
Endif
-------------------------------------------------------------------------------
If GetFocus(DateButton2&) Aufruf Dialog zum Laden/Speichern
Dim DateTimePick#,20
DTP_GETSYSTEMTIME(MonthCal1&,DateTimePick#)
Let Meldung$ = Str$(word(DateTimePick#,6));".";Str$(word(DateTimePick#,2));".";Str$(word(DateTimePick#,0))
Dispose DateTimePick#
Eintrag_speichern
Endif
------------------------------------------------------------------------------
if getfocus(beenden&)
@destroywindow(Feiertagdialog&)
endif
-------------------------------------------------------------------------------
if getfocus(speichernals&)
datei_speichernals
endif
---------------------------------------------------------------------------------
if getfocus(ladenals&)
Datei_LadenAls
endif
---------------------------------------------------------------------------------
if getfocus(Feiertage&)
Feiertage
endif
----------------------------------------------------------------------------------
if getfocus(Jubilar&)
jubi_manuell
endif
-------------------------------------------------------------------------------------
IF GETFOCUS(Info&)
info
endif
-------------------------------------------------------------------------------------
IF GETFOCUS(adress&)
suchen
endif
--------------------------------------------------------------------------------------
If getfocus(ende&)
progende%=@Messagebox("Soll das Programm ohne speichern beendet werden?","ACHTUNG",308)
if progende%=6
@destroywindow(Aktionsdialog&)
ende&=1
endif
endif
----------------------------------------------------------------------------------------
endwhile
freedll lvdll&
freedll skdll&
dispose image#
dispose string#
end
|
| | | | |
| | | Du musst schon alle notwendigen Dateien anhängen, z.B. in einer ZIP-Datei, damit es möglichst jeder testen kann - wenn Du das willst.
Ich habe z.B. weder die Includes noch DLLs dafür.
Da die SKControl.dll und Listview.dll "läuft" wäre die erste Frage an die jeweiligen Autoren: Eigene Threads?
Wenn jeweils ja, dann kann man beide DLLs so nicht nutzen, ohne den Hauptthread des XProfan in Gefahr zu bringen. (Abstürze, Fehlermeldungen, ...) |
| | | | |
| | Frank Abbing | Die Listview.dll erzeugt keine Threads.
Mir ist aufgefallen, im Code wird ein InitMessages(%Hwnd) benutzt, aber kein CloseMessages(%Hwnd). Da hier beide Dlls wohl das Hauptfenster subclassen, ist auch die Reihenfolge der Dlls beim Abschalten des Subclassings einzuhalten. Die sicherste Methode ist aber in jedem Fall, das Hauptfenster zu zerstören. Damit wird die gesubclasste WindowProc auf jeden Fall entfernt, und der externe Code wird nicht mehr ausgeführt, der u. U. den Absturz erzeugt. Das hat mit Fusch rein gar nichts zu tun. |
| | | | |
| | | Gebe Fank recht Gehe in meiner Beendigungsprocedur so vor:
PROC Beenden Delete Object..... alle Fonts usw... CloseMessages(die jeweilige Fenster-Variabel) schreibt die Hilfe der LISTVIEW.DLL vor Destroywindow(%HWnd) - damit wird alles zerstört EE%=1 ...abhängig von der Schleife im Programm - wenn EE% vorher 0 war END Rückfall in alte Basic-Zeiten aus purer Gewohnheit ENDPROC
Das ist nur ein Beispiel und sieht von Programm zu Programm anders aus. Allerdings wird mit dieser Art des Beenden auch anstanslos beendet. Ende ;) |
| | | | |
| | E.T. | Hab eben mal ein älteres Prog von mir rausgesucht, welches die SKControl.dll nutzt. Auch diese Dll erzeugt (bei mir ) wärend des Programm-Ablaufs keine eigenen Threads. |
| | | Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 17.11.2008 ▲ |
| |
| | | Ok, dann können wir bei der skcontrol vielleicht von Timern ausgehen, was keine Probleme machen sollte, besonders wenn die Timer per subClassing abgefragt werden.
Die sicherste Methode ist aber in jedem Fall, das Hauptfenster zu zerstören. Damit wird die gesubclasste WindowProc auf jeden Fall entfernt, und der externe Code wird nicht mehr ausgeführt, der u. U. den Absturz erzeugt.
Das ist so einfach nur falsch - ist mir aber Wurstegal wenn damit eine Lösung gefunden wurde, die (nicht) funktioniert. |
| | | | |
| | Frank Abbing | iF
Ok, dann können wir bei der skcontrol vielleicht von Timern ausgehen, was keine Probleme machen sollte, besonders wenn die Timer per subClassing abgefragt werden. iFDie sicherste Methode ist aber in jedem Fall, das Hauptfenster zu zerstören. Damit wird die gesubclasste WindowProc auf jeden Fall entfernt, und der externe Code wird nicht mehr ausgeführt, der u. U. den Absturz erzeugt. Das ist so einfach nur falsch - ist mir aber Wurstegal wenn damit eine Lösung gefunden wurde, die (nicht) funktioniert.
iF
Damit wird die gesubclasste WindowProc auf jeden Fall entfernt, und der externe Code wird nicht mehr ausgeführt, der u. U. den Absturz erzeugt.
Es ist falsch, dass die Aussage falsch ist. Ich lasse mich aber gerne umstimmen, sobald du das Gegenteil bewiesen hast. |
| | | | |
| | | Nunu, komische Formel |
| | | | |
| | E.T. | Also, es ist falsch, da die Aussage falsch ist ??
Sollten den, wenn ich mein (X)Profan-Prog (ordentlich) beende, eigentlich alle Threads, welche mein Prog erzeugt, auch mit beendet werden ??
Wenn ich Word, Excel oder Paintshop oder sonst irgendwelches Programm beende, muß ich doch auch nicht nachschauen, ob noch was davon läuft.
Und wenn ich meinem XProfan-Prog sage: ENDE!! (in Form von END), dann gehe ich davon aus, das auch wirklich alles beendet wird !! |
| | | Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 18.11.2008 ▲ |
| |
| | | Schau mal was bei ExitProcess [...] alles passiert, anders als bei [...] welches Verhalten Du ja eher beschreibst. End macht wohl ExitProcess. |
| | | | |
| | Peter Gückstock | Hallo Profaner,
vielen Dank für die Tipps, ich glaube ,dass ich den Fehler gefunden habe. Da ich mit den $H windows.ph,$H structs.ph,$H messages.ph,$H commctrl.ph und $H shellapi.ph arbeite, habe ich beim beenden "OnApplicationExit" vergessen. Jetzt funktioniert alles.
Gruß Peter |
| | | | |
|
AntwortenThemenoptionen | 13.520 Betrachtungen |
ThemeninformationenDieses Thema hat 9 Teilnehmer: |