Tool friert ein, nach verlassen von Schleife in Thread
Re: Tool friert ein, nach verlassen von Schleife in Thread
Achtung!
Die Do... Befehle dürfen nur aus einen Thread verwendet werden.
Also die Funktion CreateScreenshot() Einmal für Threads kopieren und umschreiben.
P.S. Bastel gerade noch ein paar Befehle dazu, DoMessageRequester, etc
Die Do... Befehle dürfen nur aus einen Thread verwendet werden.
Also die Funktion CreateScreenshot() Einmal für Threads kopieren und umschreiben.
P.S. Bastel gerade noch ein paar Befehle dazu, DoMessageRequester, etc
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Re: Tool friert ein, nach verlassen von Schleife in Thread
Habe noch mal mein Modul ThreadToGUI mit Requester erweitert.
Link: http://www.purebasic.fr/german/viewtopi ... =8&t=29728
Im dem Zuge habe ich erst mal Deine Windows Version mit den Modul erweitert.
Edit Läuft schon mal grob unter Linux. SysTray geht nicht
Habe ein paar Sachen zum testen ausgeklammert
Link: http://www.purebasic.fr/german/viewtopi ... =8&t=29728
Im dem Zuge habe ich erst mal Deine Windows Version mit den Modul erweitert.
Edit Läuft schon mal grob unter Linux. SysTray geht nicht
Code: Alles auswählen
;-Top
IncludeFile "Modul_ThreadToGUI.pb"
Enumeration #PB_Event_FirstCustomValue
#My_Event_ThreadToGUI
EndEnumeration
UseModule ThreadToGUI
Enumeration
#MainWin
#CloseB
#MinimizeB
#PNG
#BMP
#JPG
#TrackBar
#TrayOption
#MessageB
#OpenFolderAfterSave
#AskForName
#UseDate
#SetDefFolder
#DefFolderText
#TrayIcon
#IMG
#Sound
#AUTO
#AUTOAsk
EndEnumeration
own$=GetCurrentDirectory()
If 0; CountString(own$,"\") < 2
MessageRequester(" Put me","in a Folder and start me again")
End
EndIf
If 0;FileSize(own$+"TrayIcon.ico") < 1500
MessageRequester(" Tray","icon (TrayIcon.ico) not found")
End
EndIf
Global config_valid
Global sndwork
Global stop_supervise
Global supervise_run
Procedure CreateScreenshot()
pic = GetClipboardImage(#PB_Any)
If IsImage(pic)
If GetGadgetState(#AUTOAsk)
If supervise_run
If MessageRequester(" INFO","Detected Image in Clipboard"+Chr(13)+Chr(13)+"Auto Create Image ? (if you click NO, the Data in the Clipboard will be erased to)",#PB_MessageRequester_YesNo) = #PB_MessageRequester_No
ClearClipboard()
ProcedureReturn
EndIf
EndIf
EndIf
If GetGadgetState(#PNG)
fpattern$="png | *.png" : ext$=".png" : format=1
EndIf
If GetGadgetState(#BMP)
fpattern$="bmp | *.bmp" : ext$=".bmp" : format=2
EndIf
If GetGadgetState(#JPG)
fpattern$="jpg | *.jpg" : ext$=".jpg" : format=3
EndIf
If GetGadgetState(#AskForName)
fname$ = SaveFileRequester("Save",GetGadgetText(#DefFolderText),fpattern$,0)
If fname$
fp$=GetPathPart(fname$) : ff$=GetFilePart(fname$)
If FileSize(fname$) > 0
If MessageRequester(" Overwrite",fname$,#PB_MessageRequester_YesNo) = #PB_MessageRequester_No
ClearClipboard()
ProcedureReturn
EndIf
EndIf
fname$=RemoveString(fname$,ext$,#PB_String_NoCase)
fname$=fname$+ext$
Else
ClearClipboard()
ProcedureReturn
EndIf
Else
ff$=FormatDate("%yyyy-%mm-%dd -- %hh-%ii-%ss", Date())
default_output$=GetGadgetText(#DefFolderText)
If FileSize(default_output$) = -1
default_output$=GetHomeDirectory()
SetGadgetText(#DefFolderText,default_output$)
MessageRequester(" Error","Default Folder don´t exist, saved Image @ "+default_output$)
ProcedureReturn
EndIf
fname$=default_output$+ff$+ext$ : fp$=default_output$
EndIf
If format=1
SaveImage(pic,fname$,#PB_ImagePlugin_PNG)
ElseIf format=2
SaveImage(pic,fname$,#PB_ImagePlugin_BMP,#Null,DesktopDepth(0))
ElseIf format=3
SaveImage(pic,fname$,#PB_ImagePlugin_JPEG,GetGadgetState(#TrackBar)+1)
EndIf
ClearClipboard()
ff$=GetFilePart(fname$)
If GetGadgetState(#MessageB)
MessageRequester(" OK","Saved as "+ff$+Chr(13)+Chr(13)+"@ "+fp$)
Else
If sndwork
PlaySound(#Sound)
EndIf
EndIf
If GetGadgetState(#OpenFolderAfterSave)
RunProgram("explorer.exe",Chr(34)+fp$+Chr(34),"")
EndIf
EndIf
EndProcedure
Procedure ThreadCreateScreenshot()
pic = DoGetClipboardImage(#PB_Any)
If IsImage(pic)
If GetGadgetState(#AUTOAsk)
If supervise_run
If DoMessageRequester(" INFO","Detected Image in Clipboard"+Chr(13)+Chr(13)+"Auto Create Image ? (if you click NO, the Data in the Clipboard will be erased to)",#PB_MessageRequester_YesNo) = #PB_MessageRequester_No
DoClearClipboard()
ProcedureReturn
EndIf
EndIf
EndIf
If GetGadgetState(#PNG)
fpattern$="png | *.png" : ext$=".png" : format=1
EndIf
If GetGadgetState(#BMP)
fpattern$="bmp | *.bmp" : ext$=".bmp" : format=2
EndIf
If GetGadgetState(#JPG)
fpattern$="jpg | *.jpg" : ext$=".jpg" : format=3
EndIf
If GetGadgetState(#AskForName)
fname$ = DoSaveFileRequester("Threaded Save",GetGadgetText(#DefFolderText),fpattern$,0)
If fname$
fp$=GetPathPart(fname$) : ff$=GetFilePart(fname$)
If FileSize(fname$) > 0
If DoMessageRequester(" Overwrite",fname$,#PB_MessageRequester_YesNo) = #PB_MessageRequester_No
DoClearClipboard()
ProcedureReturn
EndIf
EndIf
fname$=RemoveString(fname$,ext$,#PB_String_NoCase)
fname$=fname$+ext$
Else
DoClearClipboard()
ProcedureReturn
EndIf
Else
ff$=FormatDate("%yyyy-%mm-%dd -- %hh-%ii-%ss", Date())
default_output$=GetGadgetText(#DefFolderText)
If FileSize(default_output$) = -1
default_output$=GetHomeDirectory()
DoSetGadgetText(#DefFolderText,default_output$)
DoMessageRequester(" Error","Default Folder don´t exist, saved Image @ "+default_output$)
ProcedureReturn
EndIf
fname$=default_output$+ff$+ext$ : fp$=default_output$
EndIf
If format=1
SaveImage(pic,fname$,#PB_ImagePlugin_PNG)
ElseIf format=2
SaveImage(pic,fname$,#PB_ImagePlugin_BMP,#Null,DesktopDepth(0))
ElseIf format=3
SaveImage(pic,fname$,#PB_ImagePlugin_JPEG,GetGadgetState(#TrackBar)+1)
EndIf
DoClearClipboard()
ff$=GetFilePart(fname$)
If GetGadgetState(#MessageB)
DoMessageRequester(" OK","Saved as "+ff$+Chr(13)+Chr(13)+"@ "+fp$)
Else
If sndwork
PlaySound(#Sound)
EndIf
EndIf
If GetGadgetState(#OpenFolderAfterSave)
RunProgram("explorer.exe",Chr(34)+fp$+Chr(34),"")
EndIf
EndIf
EndProcedure
Procedure SaveActiveSettings(Close)
If CreatePreferences(own$+"TurboImageGrabber.ini")
WritePreferenceString("key","a/3j@kn30N*b3<$k#ja!l3k9L")
xxx=GetGadgetState(#TrayOption)
WritePreferenceLong("tray start",xxx)
xxx$=GetGadgetText(#DefFolderText)
WritePreferenceString("default output",xxx$)
If GetGadgetState(#PNG)
WritePreferenceString("default format","0")
EndIf
If GetGadgetState(#BMP)
WritePreferenceString("default format","1")
EndIf
If GetGadgetState(#JPG)
WritePreferenceString("default format","2")
EndIf
If GetGadgetState(#AUTO)
WritePreferenceString("supervise","1")
EndIf
If GetGadgetState(#AUTOAsk)
WritePreferenceString("supervise_ask","1")
EndIf
xxx=GetGadgetState(#TrackBar)
WritePreferenceLong("jpg compression",xxx)
xxx=GetGadgetState(#OpenFolderAfterSave)
WritePreferenceLong("open target",xxx)
xxx=GetGadgetState(#MessageB)
WritePreferenceLong("save message",xxx)
xxx=GetGadgetState(#AskForName)
WritePreferenceLong("save as user input",xxx)
ClosePreferences()
If Close
;End
EndIf
Else
If Close
If MessageRequester(" Error","Can´t Create/Save Preference File (maybe no System Right's)"+Chr(13)+Chr(13)+"Still close Turbo Image Grabber ?",#PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
;End
EndIf
Else
MessageRequester(" Error","Can´t Create/Save Preference File (maybe no System Right's)")
EndIf
EndIf
EndProcedure
Procedure WatchForClipBoardImage(bla)
supervise_run=1
Repeat
If stop_supervise
Break
EndIf
Delay(20)
ThreadCreateScreenshot()
ForEver
supervise_run=0
EndProcedure
Procedure InitSettings()
If config_valid = 0
SetGadgetState(#PNG,1)
SetGadgetState(#MessageB,1)
SetGadgetState(#AskForName,1)
default_output$=GetUserDirectory(#PB_Directory_Documents)
SetGadgetText(#DefFolderText,default_output$)
Else
default_output$ = ReadPreferenceString("default output",GetUserDirectory(#PB_Directory_Documents))
If FileSize(default_output$) = -2
SetGadgetText(#DefFolderText,default_output$)
Else
default_output$=GetUserDirectory(#PB_Directory_Documents)
SetGadgetText(#DefFolderText,default_output$)
EndIf
default_format = ReadPreferenceLong("default format",0)
If default_format < 0 Or default_format > 2
SetGadgetState(#PNG,1)
Else
If default_format = 0
SetGadgetState(#PNG,1)
ElseIf default_format = 1
SetGadgetState(#BMP,1)
ElseIf default_format = 2
SetGadgetState(#JPG,1)
EndIf
EndIf
jpg_compression = ReadPreferenceLong("jpg compression",7)
If jpg_compression < 0 Or jpg_compression > 10
jpg_compression=7
EndIf
SetGadgetState(#TrackBar,jpg_compression)
save_message = ReadPreferenceLong("save message",0)
If save_message < 0 Or save_message > 1
SetGadgetState(#MessageB,0)
Else
SetGadgetState(#MessageB,save_message)
EndIf
open_target = ReadPreferenceLong("open target",0)
If open_target < 0 Or open_target > 1
SetGadgetState(#OpenFolderAfterSave,0)
Else
SetGadgetState(#OpenFolderAfterSave,open_target)
EndIf
save_as_user_input = ReadPreferenceLong("save as user input",1)
If save_as_user_input < 0 Or save_as_user_input > 1
SetGadgetState(#AskForName,1)
Else
If save_as_user_input
SetGadgetState(#AskForName,1)
Else
SetGadgetState(#AskForName,0)
SetGadgetState(#UseDate,1)
EndIf
EndIf
If ReadPreferenceLong("supervise_ask",0)
SetGadgetState(#AUTOAsk,1)
EndIf
If ReadPreferenceLong("supervise",0)
SetGadgetState(#AUTO,1)
CreateThread(@WatchForClipBoardImage(),0)
EndIf
EndIf
ClosePreferences()
EndProcedure
If FileSize(own$+"TurboImageGrabber.ini") = -1
CreateDef=1 : default_output$=GetUserDirectory(#PB_Directory_Documents)
Else
If OpenPreferences(own$+"TurboImageGrabber.ini")
ini_key$ = ReadPreferenceString("key","")
ini_key_chk = FindString(ini_key$,"a/3j@kn30N*b3<$k#ja!l3k9L",1)
If ini_key_chk
config_valid=1
Else
MessageRequester(" No","valid Turbo Image Grabber ini File found")
config_valid=0
EndIf
EndIf
EndIf
#window_kon1=#PB_Window_ScreenCentered|#PB_Window_SystemMenu
#window_kon2=#PB_Window_Invisible|#PB_Window_ScreenCentered|#PB_Window_SystemMenu
Title$=" Turbo Image Grabber"
bla=309
If config_valid = 0
OpenWindow(#MainWin, 100, 150, 255,bla,Title$,#window_kon1)
Else
open_in_tray = ReadPreferenceLong("tray start",0)
If open_in_tray < 0 Or open_in_tray > 1
OpenWindow(#MainWin, 100, 150, 255,bla,Title$,#window_kon1)
Else
If open_in_tray = 0
OpenWindow(#MainWin, 100, 150, 255,bla,Title$,#window_kon1)
ElseIf open_in_tray = 1
OpenWindow(#MainWin, 100, 150, 255,bla,Title$,#window_kon2)
EndIf
EndIf
EndIf
;AddSysTrayIcon(#TrayIcon,WindowID(#MainWin), LoadImage(#IMG, own$+"TrayIcon.ico"))
AddSysTrayIcon(#TrayIcon,WindowID(#MainWin), CreateImage(#IMG, 16, 16, 32, $0000FF)); LoadImage(#IMG, own$+"TrayIcon.ico"))
UseJPEGImageEncoder() : UsePNGImageEncoder()
If InitSound()
UseOGGSoundDecoder()
If LoadSound(#Sound,own$+"krapkrap.ogg")
sndwork=1
EndIf
EndIf
ButtonGadget(#CloseB,195,10,50,60,"Close Turbo Image Grabber",#PB_Button_MultiLine)
ButtonGadget(#MinimizeB,130,10,50,60,"Minimize Turbo Image Grabber",#PB_Button_MultiLine)
OptionGadget(#PNG,10,10,80,20,"Save as png")
OptionGadget(#BMP,10,30,85,20,"Save as bmp")
OptionGadget(#JPG,10,50,80,20,"Save as jpg")
TrackBarGadget(#TrackBar,5,81,245,10,0,10,#PB_TrackBar_Ticks)
SetGadgetState(#TrackBar,7)
CheckBoxGadget(#TrayOption,10,100,80,20,"Open in Tray")
If open_in_tray = 1
SetGadgetState(#TrayOption,1)
EndIf
CheckBoxGadget(#MessageB,10,120,115,20,"Message after Save")
SetGadgetState(#MessageB,1)
CheckBoxGadget(#OpenFolderAfterSave,10,140,170,20,"Open Target folder after Saving")
CheckBoxGadget(#AskForName,10,160,110,20,"Ask for Save Name")
SetGadgetState(#AskForName,1)
CheckBoxGadget(#UseDate,10,180,165,20,"Use Date+Time as File Names")
ButtonGadget(#SetDefFolder,10,206,235,20,"Set Standard Output Folder")
StringGadget(#DefFolderText,10,235,235,20,default_output$,#PB_String_ReadOnly)
CheckBoxGadget(#AUTO,10,260,215,20,"Auto Create Image | Supervise Clipboard")
CheckBoxGadget(#AUTOAsk,10,280,225,20,"Ask before Auto Create @ Supervise Mode")
If CreateDef
SaveActiveSettings(0) : InitSettings()
Else
InitSettings()
EndIf
ExamineDesktops()
ThreadToGUI::BindEventGUI(#My_Event_ThreadToGUI)
Repeat
WindowEvent = WaitWindowEvent() : EventGadget = EventGadget()
If WindowEvent = #PB_Event_SysTray
If EventType() = #PB_EventType_LeftClick
CreateScreenshot() : SaveActiveSettings(0)
EndIf
If EventType() = #PB_EventType_LeftDoubleClick
HideWindow(#MainWin,0) : SetActiveWindow(#MainWin) : SaveActiveSettings(0)
EndIf
If EventType() = #PB_EventType_RightDoubleClick
If MessageRequester(" Close Turbo Image Grabber","Are you sure ?",#PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
SaveActiveSettings(1)
Break
EndIf
EndIf
EndIf
If WindowEvent = #PB_Event_Gadget
If EventGadget = #CloseB
If MessageRequester(" Close Turbo Image Grabber","Are you sure ?",#PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
SaveActiveSettings(1)
Break
EndIf
EndIf
If EventGadget = #MinimizeB
CreateScreenshot() : HideWindow(#MainWin,1) : SaveActiveSettings(0)
EndIf
If EventGadget = #AskForName
If GetGadgetState(#AskForName)
SetGadgetState(#AskForName,1) : SetGadgetState(#UseDate,0)
Else
SetGadgetState(#AskForName,0) : SetGadgetState(#UseDate,1)
EndIf
EndIf
If EventGadget = #UseDate
If GetGadgetState(#UseDate)
SetGadgetState(#UseDate,1) : SetGadgetState(#AskForName,0)
Else
SetGadgetState(#UseDate,0) : SetGadgetState(#AskForName,1)
EndIf
EndIf
If EventGadget = #AUTO
If GetGadgetState(#AUTO)
stop_supervise=0
CreateThread(@WatchForClipBoardImage(),0) : SetGadgetState(#AUTO,1)
Else
SetGadgetState(#AUTO,0) : stop_supervise=1
EndIf
EndIf
If EventGadget = #SetDefFolder
If FileSize(default_output$) <> -2
default_output$=GetUserDirectory(#PB_Directory_Documents)
EndIf
default_output$=PathRequester("Choose Default Output Path",default_output$)
If default_output$
SetGadgetText(#DefFolderText,default_output$)
SaveActiveSettings(0)
EndIf
EndIf
EndIf
If WindowEvent = #PB_Event_CloseWindow
CreateScreenShot()
HideWindow(#MainWin,1)
SaveActiveSettings(0)
EndIf
ForEver
Debug "Ende"
Zuletzt geändert von mk-soft am 28.06.2017 00:26, insgesamt 1-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
- GlassJoe
- Beiträge: 108
- Registriert: 11.06.2017 20:25
- Computerausstattung: 2 x AMD Phenom II x4 945,2x Dell Latitude X300, Dell Latitude D410, Hp Compaq NC4400
Re: Tool friert ein, nach verlassen von Schleife in Thread
Hab den Code genommen den du zuvor geposted hattest (und dazu die aktuellste Modul Version von dir) also bevormk-soft hat geschrieben:Habe noch mal mein Modul ThreadToGUI mit Requester erweitert.
Link: http://www.purebasic.fr/german/viewtopi ... =8&t=29728
Im dem Zuge habe ich erst mal Deine Windows Version mit den Modul erweitert.
Edit Läuft schon mal grob unter Linux. SysTray geht nichtHabe ein paar Sachen zum testen ausgeklammertCode: Alles auswählen
;-Top IncludeFile "Modul_ThreadToGUI.pb" Enumeration #PB_Event_FirstCustomValue #My_Event_ThreadToGUI EndEnumeration UseModule ThreadToGUI Enumeration #MainWin #CloseB #MinimizeB #PNG #BMP #JPG #TrackBar #TrayOption #MessageB #OpenFolderAfterSave #AskForName #UseDate #SetDefFolder #DefFolderText #TrayIcon #IMG #Sound #AUTO #AUTOAsk EndEnumeration own$=GetCurrentDirectory() If 0; CountString(own$,"\") < 2 MessageRequester(" Put me","in a Folder and start me again") End EndIf If 0;FileSize(own$+"TrayIcon.ico") < 1500 MessageRequester(" Tray","icon (TrayIcon.ico) not found") End EndIf Global config_valid Global sndwork Global stop_supervise Global supervise_run Procedure CreateScreenshot() pic = GetClipboardImage(#PB_Any) If IsImage(pic) If GetGadgetState(#AUTOAsk) If supervise_run If MessageRequester(" INFO","Detected Image in Clipboard"+Chr(13)+Chr(13)+"Auto Create Image ? (if you click NO, the Data in the Clipboard will be erased to)",#PB_MessageRequester_YesNo) = #PB_MessageRequester_No ClearClipboard() ProcedureReturn EndIf EndIf EndIf If GetGadgetState(#PNG) fpattern$="png | *.png" : ext$=".png" : format=1 EndIf If GetGadgetState(#BMP) fpattern$="bmp | *.bmp" : ext$=".bmp" : format=2 EndIf If GetGadgetState(#JPG) fpattern$="jpg | *.jpg" : ext$=".jpg" : format=3 EndIf If GetGadgetState(#AskForName) fname$ = SaveFileRequester("Save",GetGadgetText(#DefFolderText),fpattern$,0) If fname$ fp$=GetPathPart(fname$) : ff$=GetFilePart(fname$) If FileSize(fname$) > 0 If MessageRequester(" Overwrite",fname$,#PB_MessageRequester_YesNo) = #PB_MessageRequester_No ClearClipboard() ProcedureReturn EndIf EndIf fname$=RemoveString(fname$,ext$,#PB_String_NoCase) fname$=fname$+ext$ Else ClearClipboard() ProcedureReturn EndIf Else ff$=FormatDate("%yyyy-%mm-%dd -- %hh-%ii-%ss", Date()) default_output$=GetGadgetText(#DefFolderText) If FileSize(default_output$) = -1 default_output$=GetHomeDirectory() SetGadgetText(#DefFolderText,default_output$) MessageRequester(" Error","Default Folder don´t exist, saved Image @ "+default_output$) ProcedureReturn EndIf fname$=default_output$+ff$+ext$ : fp$=default_output$ EndIf If format=1 SaveImage(pic,fname$,#PB_ImagePlugin_PNG) ElseIf format=2 SaveImage(pic,fname$,#PB_ImagePlugin_BMP,#Null,DesktopDepth(0)) ElseIf format=3 SaveImage(pic,fname$,#PB_ImagePlugin_JPEG,GetGadgetState(#TrackBar)+1) EndIf ClearClipboard() ff$=GetFilePart(fname$) If GetGadgetState(#MessageB) MessageRequester(" OK","Saved as "+ff$+Chr(13)+Chr(13)+"@ "+fp$) Else If sndwork PlaySound(#Sound) EndIf EndIf If GetGadgetState(#OpenFolderAfterSave) RunProgram("explorer.exe",Chr(34)+fp$+Chr(34),"") EndIf EndIf EndProcedure Procedure ThreadCreateScreenshot() pic = DoGetClipboardImage(#PB_Any) If IsImage(pic) If GetGadgetState(#AUTOAsk) If supervise_run If DoMessageRequester(" INFO","Detected Image in Clipboard"+Chr(13)+Chr(13)+"Auto Create Image ? (if you click NO, the Data in the Clipboard will be erased to)",#PB_MessageRequester_YesNo) = #PB_MessageRequester_No DoClearClipboard() ProcedureReturn EndIf EndIf EndIf If GetGadgetState(#PNG) fpattern$="png | *.png" : ext$=".png" : format=1 EndIf If GetGadgetState(#BMP) fpattern$="bmp | *.bmp" : ext$=".bmp" : format=2 EndIf If GetGadgetState(#JPG) fpattern$="jpg | *.jpg" : ext$=".jpg" : format=3 EndIf If GetGadgetState(#AskForName) fname$ = DoSaveFileRequester("Threaded Save",GetGadgetText(#DefFolderText),fpattern$,0) If fname$ fp$=GetPathPart(fname$) : ff$=GetFilePart(fname$) If FileSize(fname$) > 0 If DoMessageRequester(" Overwrite",fname$,#PB_MessageRequester_YesNo) = #PB_MessageRequester_No DoClearClipboard() ProcedureReturn EndIf EndIf fname$=RemoveString(fname$,ext$,#PB_String_NoCase) fname$=fname$+ext$ Else DoClearClipboard() ProcedureReturn EndIf Else ff$=FormatDate("%yyyy-%mm-%dd -- %hh-%ii-%ss", Date()) default_output$=GetGadgetText(#DefFolderText) If FileSize(default_output$) = -1 default_output$=GetHomeDirectory() DoSetGadgetText(#DefFolderText,default_output$) DoMessageRequester(" Error","Default Folder don´t exist, saved Image @ "+default_output$) ProcedureReturn EndIf fname$=default_output$+ff$+ext$ : fp$=default_output$ EndIf If format=1 SaveImage(pic,fname$,#PB_ImagePlugin_PNG) ElseIf format=2 SaveImage(pic,fname$,#PB_ImagePlugin_BMP,#Null,DesktopDepth(0)) ElseIf format=3 SaveImage(pic,fname$,#PB_ImagePlugin_JPEG,GetGadgetState(#TrackBar)+1) EndIf DoClearClipboard() ff$=GetFilePart(fname$) If GetGadgetState(#MessageB) DoMessageRequester(" OK","Saved as "+ff$+Chr(13)+Chr(13)+"@ "+fp$) Else If sndwork PlaySound(#Sound) EndIf EndIf If GetGadgetState(#OpenFolderAfterSave) RunProgram("explorer.exe",Chr(34)+fp$+Chr(34),"") EndIf EndIf EndProcedure Procedure SaveActiveSettings(Close) If CreatePreferences(own$+"TurboImageGrabber.ini") WritePreferenceString("key","a/3j@kn30N*b3<$k#ja!l3k9L") xxx=GetGadgetState(#TrayOption) WritePreferenceLong("tray start",xxx) xxx$=GetGadgetText(#DefFolderText) WritePreferenceString("default output",xxx$) If GetGadgetState(#PNG) WritePreferenceString("default format","0") EndIf If GetGadgetState(#BMP) WritePreferenceString("default format","1") EndIf If GetGadgetState(#JPG) WritePreferenceString("default format","2") EndIf If GetGadgetState(#AUTO) WritePreferenceString("supervise","1") EndIf If GetGadgetState(#AUTOAsk) WritePreferenceString("supervise_ask","1") EndIf xxx=GetGadgetState(#TrackBar) WritePreferenceLong("jpg compression",xxx) xxx=GetGadgetState(#OpenFolderAfterSave) WritePreferenceLong("open target",xxx) xxx=GetGadgetState(#MessageB) WritePreferenceLong("save message",xxx) xxx=GetGadgetState(#AskForName) WritePreferenceLong("save as user input",xxx) ClosePreferences() If Close End EndIf Else If Close If MessageRequester(" Error","Can´t Create/Save Preference File (maybe no System Right's)"+Chr(13)+Chr(13)+"Still close Turbo Image Grabber ?",#PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes End EndIf Else MessageRequester(" Error","Can´t Create/Save Preference File (maybe no System Right's)") EndIf EndIf EndProcedure Procedure WatchForClipBoardImage(bla) supervise_run=1 Repeat If stop_supervise Break EndIf Delay(20) ThreadCreateScreenshot() ForEver supervise_run=0 EndProcedure Procedure InitSettings() If config_valid = 0 SetGadgetState(#PNG,1) SetGadgetState(#MessageB,1) SetGadgetState(#AskForName,1) default_output$=GetUserDirectory(#PB_Directory_Documents) SetGadgetText(#DefFolderText,default_output$) Else default_output$ = ReadPreferenceString("default output",GetUserDirectory(#PB_Directory_Documents)) If FileSize(default_output$) = -2 SetGadgetText(#DefFolderText,default_output$) Else default_output$=GetUserDirectory(#PB_Directory_Documents) SetGadgetText(#DefFolderText,default_output$) EndIf default_format = ReadPreferenceLong("default format",0) If default_format < 0 Or default_format > 2 SetGadgetState(#PNG,1) Else If default_format = 0 SetGadgetState(#PNG,1) ElseIf default_format = 1 SetGadgetState(#BMP,1) ElseIf default_format = 2 SetGadgetState(#JPG,1) EndIf EndIf jpg_compression = ReadPreferenceLong("jpg compression",7) If jpg_compression < 0 Or jpg_compression > 10 jpg_compression=7 EndIf SetGadgetState(#TrackBar,jpg_compression) save_message = ReadPreferenceLong("save message",0) If save_message < 0 Or save_message > 1 SetGadgetState(#MessageB,0) Else SetGadgetState(#MessageB,save_message) EndIf open_target = ReadPreferenceLong("open target",0) If open_target < 0 Or open_target > 1 SetGadgetState(#OpenFolderAfterSave,0) Else SetGadgetState(#OpenFolderAfterSave,open_target) EndIf save_as_user_input = ReadPreferenceLong("save as user input",1) If save_as_user_input < 0 Or save_as_user_input > 1 SetGadgetState(#AskForName,1) Else If save_as_user_input SetGadgetState(#AskForName,1) Else SetGadgetState(#AskForName,0) SetGadgetState(#UseDate,1) EndIf EndIf If ReadPreferenceLong("supervise_ask",0) SetGadgetState(#AUTOAsk,1) EndIf If ReadPreferenceLong("supervise",0) SetGadgetState(#AUTO,1) CreateThread(@WatchForClipBoardImage(),0) EndIf EndIf ClosePreferences() EndProcedure If FileSize(own$+"TurboImageGrabber.ini") = -1 CreateDef=1 : default_output$=GetUserDirectory(#PB_Directory_Documents) Else If OpenPreferences(own$+"TurboImageGrabber.ini") ini_key$ = ReadPreferenceString("key","") ini_key_chk = FindString(ini_key$,"a/3j@kn30N*b3<$k#ja!l3k9L",1) If ini_key_chk config_valid=1 Else MessageRequester(" No","valid Turbo Image Grabber ini File found") config_valid=0 EndIf EndIf EndIf #window_kon1=#PB_Window_ScreenCentered|#PB_Window_SystemMenu #window_kon2=#PB_Window_Invisible|#PB_Window_ScreenCentered|#PB_Window_SystemMenu Title$=" Turbo Image Grabber" bla=309 If config_valid = 0 OpenWindow(#MainWin, 100, 150, 255,bla,Title$,#window_kon1) Else open_in_tray = ReadPreferenceLong("tray start",0) If open_in_tray < 0 Or open_in_tray > 1 OpenWindow(#MainWin, 100, 150, 255,bla,Title$,#window_kon1) Else If open_in_tray = 0 OpenWindow(#MainWin, 100, 150, 255,bla,Title$,#window_kon1) ElseIf open_in_tray = 1 OpenWindow(#MainWin, 100, 150, 255,bla,Title$,#window_kon2) EndIf EndIf EndIf ;AddSysTrayIcon(#TrayIcon,WindowID(#MainWin), LoadImage(#IMG, own$+"TrayIcon.ico")) AddSysTrayIcon(#TrayIcon,WindowID(#MainWin), CreateImage(#IMG, 16, 16, 32, $0000FF)); LoadImage(#IMG, own$+"TrayIcon.ico")) UseJPEGImageEncoder() : UsePNGImageEncoder() If InitSound() UseOGGSoundDecoder() If LoadSound(#Sound,own$+"krapkrap.ogg") sndwork=1 EndIf EndIf ButtonGadget(#CloseB,195,10,50,60,"Close Turbo Image Grabber",#PB_Button_MultiLine) ButtonGadget(#MinimizeB,130,10,50,60,"Minimize Turbo Image Grabber",#PB_Button_MultiLine) OptionGadget(#PNG,10,10,80,20,"Save as png") OptionGadget(#BMP,10,30,85,20,"Save as bmp") OptionGadget(#JPG,10,50,80,20,"Save as jpg") TrackBarGadget(#TrackBar,5,81,245,10,0,10,#PB_TrackBar_Ticks) SetGadgetState(#TrackBar,7) CheckBoxGadget(#TrayOption,10,100,80,20,"Open in Tray") If open_in_tray = 1 SetGadgetState(#TrayOption,1) EndIf CheckBoxGadget(#MessageB,10,120,115,20,"Message after Save") SetGadgetState(#MessageB,1) CheckBoxGadget(#OpenFolderAfterSave,10,140,170,20,"Open Target folder after Saving") CheckBoxGadget(#AskForName,10,160,110,20,"Ask for Save Name") SetGadgetState(#AskForName,1) CheckBoxGadget(#UseDate,10,180,165,20,"Use Date+Time as File Names") ButtonGadget(#SetDefFolder,10,206,235,20,"Set Standard Output Folder") StringGadget(#DefFolderText,10,235,235,20,default_output$,#PB_String_ReadOnly) CheckBoxGadget(#AUTO,10,260,215,20,"Auto Create Image | Supervise Clipboard") CheckBoxGadget(#AUTOAsk,10,280,225,20,"Ask before Auto Create @ Supervise Mode") If CreateDef SaveActiveSettings(0) : InitSettings() Else InitSettings() EndIf ExamineDesktops() ThreadToGUI::BindEventGUI(#My_Event_ThreadToGUI) Repeat WindowEvent = WaitWindowEvent() : EventGadget = EventGadget() If WindowEvent = #PB_Event_SysTray If EventType() = #PB_EventType_LeftClick CreateScreenshot() : SaveActiveSettings(0) EndIf If EventType() = #PB_EventType_LeftDoubleClick HideWindow(#MainWin,0) : SetActiveWindow(#MainWin) : SaveActiveSettings(0) EndIf If EventType() = #PB_EventType_RightDoubleClick If MessageRequester(" Close Turbo Image Grabber","Are you sure ?",#PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes SaveActiveSettings(1) EndIf EndIf EndIf If WindowEvent = #PB_Event_Gadget If EventGadget = #CloseB If MessageRequester(" Close Turbo Image Grabber","Are you sure ?",#PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes SaveActiveSettings(1) EndIf EndIf If EventGadget = #MinimizeB CreateScreenshot() : HideWindow(#MainWin,1) : SaveActiveSettings(0) EndIf If EventGadget = #AskForName If GetGadgetState(#AskForName) SetGadgetState(#AskForName,1) : SetGadgetState(#UseDate,0) Else SetGadgetState(#AskForName,0) : SetGadgetState(#UseDate,1) EndIf EndIf If EventGadget = #UseDate If GetGadgetState(#UseDate) SetGadgetState(#UseDate,1) : SetGadgetState(#AskForName,0) Else SetGadgetState(#UseDate,0) : SetGadgetState(#AskForName,1) EndIf EndIf If EventGadget = #AUTO If GetGadgetState(#AUTO) stop_supervise=0 CreateThread(@WatchForClipBoardImage(),0) : SetGadgetState(#AUTO,1) Else SetGadgetState(#AUTO,0) : stop_supervise=1 EndIf EndIf If EventGadget = #SetDefFolder If FileSize(default_output$) <> -2 default_output$=GetUserDirectory(#PB_Directory_Documents) EndIf default_output$=PathRequester("Choose Default Output Path",default_output$) If default_output$ SetGadgetText(#DefFolderText,default_output$) SaveActiveSettings(0) EndIf EndIf EndIf If WindowEvent = #PB_Event_CloseWindow CreateScreenShot() HideWindow(#MainWin,1) SaveActiveSettings(0) EndIf ForEver
und bevorEdit Läuft schon mal grob unter Linux. SysTray geht nicht
Und den soweit an Linux angepasst gehabt (c:\ durch ~/ ersetzt, Fenster Breite deutlich breiter gemacht, weil irgendwie die Buttons riesig sind und nicht reinpassen)Habe ein paar Sachen zum testen ausgeklammert
Alles lief gut, auch im Tray, aber der Debugger gibt eine Warnung raus wenn der SuperVise Thread läuft, und dann was im Clipboard ist.
Debugger gibt Line 381 von Modul_ThreadToGui.pb
als Fehlerquelle aus
Code: Alles auswählen
\Result = MessageRequester(\Text, \Text2, \Param1)
Trotz Warnmeldung erscheint der ThreadedSaveRequester, mann speichert und direkt danach kommt ein Fehler der sich auf Zeile 80 von meinem Code bezieht, dann Zeile 129 von meinem Code, und es erscheint noch mal der normale SaveFileRequester, danach kommt 381.
EDIT:
Also dein Code funzt, es kommt nur erst 385 danach 381.
Das 2 x der SaveFileRequester vorkamm, und auch mein Code aus Zeile 80 & 129 ausführt wurde, lag daran das alles durcheinander gekommen ist, weil im Hintergrund das Tool noch mal lief (hab es vergessen gehabt auszuschalten )
EDIT 2:
Hab es trotz der Meldungen in Zeile 381 & 385 compiliert und erfolgreich unter Linux gestestet
alles geht, nur der Ram Verbrauch unter Linux ist immer noch utopisch.
Zuletzt geändert von GlassJoe am 28.06.2017 00:37, insgesamt 1-mal geändert.
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
Re: Tool friert ein, nach verlassen von Schleife in Thread
Noch einmal das Modul aktualisieren. (v1.13)
Bei DoMessageRequester war der letzte Parameter noch nicht Optional...
Bei DoMessageRequester war der letzte Parameter noch nicht Optional...
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
- GlassJoe
- Beiträge: 108
- Registriert: 11.06.2017 20:25
- Computerausstattung: 2 x AMD Phenom II x4 945,2x Dell Latitude X300, Dell Latitude D410, Hp Compaq NC4400
Re: Tool friert ein, nach verlassen von Schleife in Thread
Also es funzt unter Linux, im Thread mit Tray (hab eine executable basteln lassen und die dann ausgeführt) alles in Ordnung, nur schmeist der Editor immer ne Meldung raus das irgenwas mit Zeile 385 & 381 wäre.mk-soft hat geschrieben:Noch einmal das Modul aktualisieren. (v1.13)
Bei DoMessageRequester war der letzte Parameter noch nicht Optional...
Aber wie gesagt es funzt einwandfrei der Editor meckert nur sehr gerne wie ich sehe, z.B regt der sich auf weil die ogg datei in Zeile 433 nicht gefunden wird, ich weiss jetzt nicht wie es unter dem normalen Windoof PB Editor ist, aber unter japbe wäre sowas egal.
Code: Alles auswählen
If InitSound()
UseOGGSoundDecoder()
If LoadSound(#Sound,own$+"krapkrap.ogg")
sndwork=1
EndIf
EndIf
EDIT:
jaPBe ignoriert es auch nicht meckert auch rum weil die Datei nicht gefunden wird wenn ich die ogg Datei umbenenne......dabei ist es durch eigentlich Wurscht ob die Datei jetzt gefunden wird oder nicht, schliesslich steht da ja
If Loadsound
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
Re: Tool friert ein, nach verlassen von Schleife in Thread
Es reicht auch alles 100ms 'Delay(100)' das Clipboard abzufragen.
Wichtig ist auch das erst der Thread beendet wird vorm schliessen des Fensters und beenden der Event-Schleife, da sonst der Thread hängen bleibt.
Warum:
Der Thread sendet über PostEvent eine Anfrage an den Mainscope und wartet auf eine Anwort 'Semaphore'.
Die Anfrage wird aber erst bei einen Aufruf von WaitWindowEvent() verarbeitet.
Schau dir mal PostEvent und BindEvent in der Hilfe an.
P.S. Neue Version von ThreadToGUI online. (v1.14)
Wichtig ist auch das erst der Thread beendet wird vorm schliessen des Fensters und beenden der Event-Schleife, da sonst der Thread hängen bleibt.
Warum:
Der Thread sendet über PostEvent eine Anfrage an den Mainscope und wartet auf eine Anwort 'Semaphore'.
Die Anfrage wird aber erst bei einen Aufruf von WaitWindowEvent() verarbeitet.
Schau dir mal PostEvent und BindEvent in der Hilfe an.
P.S. Neue Version von ThreadToGUI online. (v1.14)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
- GlassJoe
- Beiträge: 108
- Registriert: 11.06.2017 20:25
- Computerausstattung: 2 x AMD Phenom II x4 945,2x Dell Latitude X300, Dell Latitude D410, Hp Compaq NC4400
Re: Tool friert ein, nach verlassen von Schleife in Thread
Aber ist es nicht so das Threads abgetötet werden wenn das Main Prog schon zu ist ?mk-soft hat geschrieben:Es reicht auch alles 100ms 'Delay(100)' das Clipboard abzufragen.
Wichtig ist auch das erst der Thread beendet wird vorm schliessen des Fensters und beenden der Event-Schleife, da sonst der Thread hängen bleibt.
Warum:
Der Thread sendet über PostEvent eine Anfrage an den Mainscope und wartet auf eine Anwort 'Semaphore'.
Die Anfrage wird aber erst bei einen Aufruf von WaitWindowEvent() verarbeitet.
Schau dir mal PostEvent und BindEvent in der Hilfe an.
P.S. Neue Version von ThreadToGUI online. (v1.14)
Dachte immer das wäre so.
Yop werde mir das reinziehen ist bestimmt nützlich, ich muss sehr oft mit Events die an andere Fenster gesendet werden arbeiten, und hasse ToolWindows (weil die bescheuerten Dinger so unflexibel sind, und nicht als eigenes Ding in der Taskleiste erscheinen)
Was ich noch anmerklen wollte der Ram Verbrauch unter Linux ist doch nicht
23/57MB !
So steht es nur in den Task Zeilen vom Taskmanager, wenn ich das Tool schliesse steht oben rechts im LXTask Taskmanager auf einmal 99 MB von 768 benutzt, wenn es läuft steht dort 103 MB von 768 benutzt.
Also alles OK, bis auf die verwirrende Anzeige der lxde & xfce Taskmanager
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
Re: Tool friert ein, nach verlassen von Schleife in Thread
Ist so. Aber beendet man so schmutzig ein Programm?Aber ist es nicht so das Threads abgetötet werden wenn das Main Prog schon zu ist ?
Dachte immer das wäre so.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Re: Tool friert ein, nach verlassen von Schleife in Thread
Warum nicht ?mk-soft hat geschrieben:Zitat:
Aber ist es nicht so das Threads abgetötet werden wenn das Main Prog schon zu ist ?
Dachte immer das wäre so.
Ist so. Aber beendet man so schmutzig ein Programm?
Man macht doch sonst nur nochmal das selbe.
Es ist doch gut, wenn PureBasic das schon für dich macht.
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
Re: Tool friert ein, nach verlassen von Schleife in Thread
Da sollte man sich schon Gedanken machen.
Es wird einfach irgendwo im Ablauf des Threads abgebrochen. Je nach dem was man macht kann es zu unerwarteten ergebnis führen.
Datei nur zur hälfte gesichert, Bilder nicht bis zum ende bearbeitet, Datenbanken inkonsistent, etc.
Es wird einfach irgendwo im Ablauf des Threads abgebrochen. Je nach dem was man macht kann es zu unerwarteten ergebnis führen.
Datei nur zur hälfte gesichert, Bilder nicht bis zum ende bearbeitet, Datenbanken inkonsistent, etc.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive