SaveFileRequester bei abbruch wird programm beendet

Anfängerfragen zum Programmieren mit PureBasic.
icecrusher
Beiträge: 62
Registriert: 01.03.2008 05:43
Wohnort: Hamm
Kontaktdaten:

SaveFileRequester bei abbruch wird programm beendet

Beitrag von icecrusher »

Hi,

Ich habe folgendes problem:

wenn ich den saveFileRequester aufrufe, und auf abbrechen gehe, möchte ich , dass das programm nicht beendet wird, sondern einfach mit allen einstellungen weiterläuft, gibt es da irgendeine möglichkeit das gerade zu biegen??
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Hast warscheinlich ein fehler in dein Code. SaveFileRe... beendet von sich aus nicht das Programm

Code wäre hilfreich...
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
icecrusher
Beiträge: 62
Registriert: 01.03.2008 05:43
Wohnort: Hamm
Kontaktdaten:

Beitrag von icecrusher »

Code: Alles auswählen

make_config:
StandardFile$ = "C:\autoexec.cfg"
  
  Pattern$ = "Config (*.cfg)|*.cfg"
  Pattern = 0
  File$ = SaveFileRequester("Bitte Pfad zu cstrike\cfg angeben!!", StandardFile$, Pattern$, Pattern)
  
  If File$
   CreateFile(0,File$)
    WriteStringN(0, "//------------------------------------------------------------------------------------------------------------")
    WriteStringN(0, "//Autoexec.cfg generated with icecrushers Counter-Strike Source Configurator")
    WriteStringN(0, "//All Rights Reserved 2008 Copyright by icecrusher")
    WriteStringN(0, "//------------------------------------------------------------------------------------------------------------")
    WriteStringN(0, "")
    WriteStringN(0, "")
    WriteStringN(0,"cl_updaterate "+Chr(34)+StringField(GetGadgetText( #String_24) +Chr(34), k, ""))
    WriteStringN(0,"cl_cmdrate "+Chr(34)+StringField(GetGadgetText( #String_26) +Chr(34), k, ""))
    WriteStringN(0,"rate "+Chr(34)+StringField(GetGadgetText( #String_30) +Chr(34), k, ""))

If GetGadgetState(#CheckBox_10)
   WriteStringN(0,Chr(13)+Chr(10)+ "cl_righthand 0")
   Else
   WriteStringN(0,Chr(13)+Chr(10)+ "cl_righthand 1")
EndIf
  
If GetGadgetState(#Checkbox_11)
    WriteStringN(0, "net_graph 3")
    WriteStringN(0, "net_graphpos 2")
    Else
    WriteStringN(0, "net_graph 0")
EndIf

If GetGadgetState(#Checkbox_12)
    WriteStringN(0, "hud_fastswitch 1")
    Else
    WriteStringN(0, "hud_fastswitch 0")
EndIf

If GetGadgetState(#Checkbox_13)
    WriteStringN(0, "m_filter 1")
    Else
    WriteStringN(0, "m_filter 0")
EndIf

If GetGadgetState(#Checkbox_14)
    WriteStringN(0, "cl_dynamiccrosshair 0")
    Else
    WriteStringN(0, "cl_dynamiccrosshair 1")
EndIf

If GetGadgetState(#Checkbox_16)
    WriteStringN(0, "bind \ toggleconsole")
    WriteStringN(0, "con_enable 1")
    Else
    WriteStringN(0, "con_enable 0")
EndIf

If GetGadgetState(#Checkbox_18)
    WriteStringN(0, "fps_max 101")
    Else
    WriteStringN(0, "fps_max 60")
EndIf

If GetGadgetState(#Checkbox_20)
    WriteStringN(0, "violence_hgibs 1")
    WriteStringN(0, "violence_agibs 1")
    WriteStringN(0, "violence_hblood 1")
    WriteStringN(0, "violence_ablood 1")
    Else
    WriteStringN(0, "violence_hgibs 0")
    WriteStringN(0, "violence_agibs 0")
    WriteStringN(0, "violence_hblood 0")
    WriteStringN(0, "violence_ablood 0")
EndIf

If GetGadgetState(#Checkbox_28)
    WriteStringN(0, "cl_allowdownload 1")
    Else
    WriteStringN(0, "cl_allowdownload 0")
EndIf

If GetGadgetState(#Checkbox_36)
    WriteStringN(0, "r_3dsky 0")
    Else
    WriteStringN(0, "r_3dsky 1")
EndIf

If GetGadgetState(#Checkbox_37)
    WriteStringN(0, "r_renderoverlayfragment 0")
    Else
    WriteStringN(0, "r_renderoverlayfragment 1")
EndIf

If GetGadgetState(#Checkbox_38)
    WriteStringN(0, "r_dynamic 0")
    Else
    WriteStringN(0, "r_dynamic 1")
EndIf

If GetGadgetState(#Checkbox_39)
    WriteStringN(0, "r_shadows 0")
    Else
    WriteStringN(0, "r_shadows 1")
EndIf

If GetGadgetState(#Checkbox_40)
    WriteStringN(0, "r_worldlights 0.9")
    Else
    WriteStringN(0, "r_worldlights 1")
EndIf

If GetGadgetState(#Checkbox_41)
    WriteStringN(0, "r_cheapwaterend 1")
    WriteStringN(0, "r_cheatwaterstart 1")
    Else
    WriteStringN(0, "r_cheapwaterend 0")
    WriteStringN(0, "r_cheapwaterstart 0")
EndIf

If GetGadgetState(#Checkbox_42)
    WriteStringN(0, "r_mmx 1")
    WriteStringN(0, "r_sse 1")
    WriteStringN(0, "r_sse2 1")
    WriteStringN(0, "r3dnow 1")
    Else
    WriteStringN(0, "r_mmx 0")
    WriteStringN(0, "r_sse 0")
    WriteStringN(0, "r_sse2 0")
    WriteStringN(0, "r3dnow 0")
EndIf

If GetGadgetState(#Checkbox_43)
    WriteStringN(0, "mat_forcehardwaresync 0")
    Else
    WriteStringN(0, "mat_forcehardwaresync 1")
EndIf

If GetGadgetState(#Checkbox_44)
    WriteStringN(0, "mat_bumpmap 0")
    Else
    WriteStringN(0, "mat_bumpmap 1")
EndIf

If GetGadgetState(#Checkbox_45)
    WriteStringN(0, "mat_specular 0")
    Else
    WriteStringN(0, "mat_specular 1")
EndIf

If GetGadgetState(#Checkbox_46)
    WriteStringN(0, "mat_antialias 0")
    Else
    WriteStringN(0, "mat_antialias 1")
EndIf

If GetGadgetState(#Checkbox_47)
    WriteStringN(0, "mat_filterlightmaps 0")
    Else
    WriteStringN(0, "mat_filterlightmaps 1")
EndIf

If GetGadgetState(#Checkbox_48)
    WriteStringN(0, "mat_clipz 1")
    Else
    WriteStringN(0, "mat_clipz 0")
EndIf

If GetGadgetState(#Checkbox_49)
    WriteStringN(0, "mat_reducefillrate 1")
    Else
    WriteStringN(0, "mat_reducefillrate 0")
EndIf

If GetGadgetState(#Checkbox_50)
    WriteStringN(0, "mat_forceaniso 0")
    Else
    WriteStringN(0, "mat_forceaniso 1")
EndIf

If GetGadgetState(#Checkbox_51)
    WriteStringN(0, "mat_vsync 0")
    Else
    WriteStringN(0, "mat_vsync 1")
EndIf

If GetGadgetState(#Checkbox_52)
    WriteStringN(0, "mat_trilinear 1")
    Else
    WriteStringN(0, "mat_trilinear 0")
EndIf

If GetGadgetState(#Checkbox_53)
    WriteStringN(0, "cl_smooth 1")
    Else
    WriteStringN(0, "cl_smooth 0")
EndIf

If GetGadgetState(#Checkbox_54)
    WriteStringN(0, "cl_forcepreload 1")
    WriteStringN(0, "sv_forcepreload 1")
    Else
    WriteStringN(0, "cl_forcepreload 0")
    WriteStringN(0, "sv_forcepreload 0")
EndIf

If GetGadgetState(#Checkbox_55)
    WriteStringN(0, "cl_ejectbrass 0")
    Else
    WriteStringN(0, "cl_ejectbrass 1")
EndIf
If GetGadgetState(#Checkbox_55)
    WriteStringN(0, "rope_wind_dist 0")
    WriteStringN(0, "rope_smooth 0")
    WriteStringN(0, "rope_subdiv 0")
    Else
    WriteStringN(0, "rope_wind_dist 1")
    WriteStringN(0, "rope_smooth 1")
    WriteStringN(0, "rope_subdiv 1")
EndIf
WriteStringN(0, "")
WriteStringN(0, "")
WriteStringN(0, "//------------------------------------------------------------------------------------------------------------")
WriteStringN(0, "//End of Config file")
WriteStringN(0, "//------------------------------------------------------------------------------------------------------------")

MessageRequester("Config erfolgreich gespeichert!", "Ihre config wurde im folgendem Verzeichniss gespeichert:"+Chr(10)+File$, 0)

EndIf
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

SaveFileReq... liefert ein leerstring zurück bei abbruch.

Code: Alles auswählen

temp$ = SaveFileRequester("Save", "", "*.cfg", 0)
If temp$
  file$ = temp$
Else
  file$ = "default.cfg"
EndIf

Debug file$
FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
icecrusher
Beiträge: 62
Registriert: 01.03.2008 05:43
Wohnort: Hamm
Kontaktdaten:

Beitrag von icecrusher »

ok, danke :)


*edit* irgendwie komme ich darauf jetzt nicht ganz klar grrr
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> *edit* irgendwie komme ich darauf jetzt nicht ganz klar grrr
ohne deinen code jetzt zu lesen...

du hast die Abbruchbedingung des SaveFileRequesters nicht korrekt überprüft.
wie mk sagte, bei Abbruch kommt ein Leerstring zurück.
also musst du auf den Leerstring reagieren.

ob du stattdessen einen string mit dem inhalt "default.cfg" zurückgibst,
damit dein proggi ne default config lädt,
oder ob du nur so sicher zurückspringst, dass keine altwerte überschrieben werden,
und du an einer sinnvollen stelle dein proggi wiederaufnimmst, bleibt völlig dir überlassen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
icecrusher
Beiträge: 62
Registriert: 01.03.2008 05:43
Wohnort: Hamm
Kontaktdaten:

Beitrag von icecrusher »

Naja mein "tool" soll ja garnicht irgendwelche Daten auslesen, es soll nur welche speichern. Und ich bekomme es nicht hin, dass es nach abbruch weiterläuft.


Nach dem Speichern der Datei, da schließt es sich auch.. -.-
:(
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

icecrusher hat geschrieben:Naja mein "tool" soll ja garnicht irgendwelche Daten auslesen, es soll nur welche speichern. Und ich bekomme es nicht hin, dass es nach abbruch weiterläuft.
was soll Dein Programm denn bei 'Abbrechen' stattdessen machen?

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Das sieht mir stark nach einer Subroutine aus.
Ohne abschliessendes Return kommst du da nicht mehr zurück und dein Programm dürfte sich beenden.

Auch ein Grund, warum man Subroutinen eigentlich heutzutage nicht mehr verwendet.
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Schau dir mal die letzten Zeilen deines geposteten Codeschnipsels an. Da wird einfach in ne Datei reingeschrieben, die gar nicht geöffnet/erstellt ist, wenn beim SaveFileRequester vom Benutzer abgebrochen wurde.

Kein Wunder dass dein Programm dann abstürzt, das hättest du auch selber rausfinden können, wenn du es mal aus der IDE raus mit dem Debugger gestartest hättest (einfach Code in der IDE laden, nachschaun, ob der Debugger aktiviert ist, und F5 drücken).
Antworten