Seite 1 von 3

Frage Gadgets

Verfasst: 30.03.2014 20:08
von schleicher
Esrt einmal hallo an alle. Ich bin noch Anfäner in Purebasic und habe da auch gleich eine Frage.
Ich möchte ein Menü für meine bestehenden cmd-Scripte machen.
Die Menüoberfläche ist auch schon fertig mit Compiler. Nun meine Fragen. Wie bekomme ich das hin, das jedes Gadget ein
Errorlevel mit Nummer des Gadget zurückgibt, was ich dann wieder mit meinen cmd-Scripten verknüpfen kann.
Am besten wäre es sogar, wenn ich den Text der Gadgets nachträglich per cmd eintagen kann. Dann könnte ich das Menü vielseitiger anwenden. Wie müsste dann die Syntaxzeile des Compilers aussehen?
:?:

Re: Frage Gadgets

Verfasst: 30.03.2014 20:18
von NicTheQuick
Ähm... So ganz hab ich noch nicht verstanden, was du bisher getan hast und was du genau vorhast. Du hast ein Menü und Gadgets. Und bei den Gadgets willst du irgendwelche Errorlevel erhalten? Was soll das sein und wie stellst du dir das vor? Gadgets geben keine Errors zurück, die generieren höchstens Events.

Und was ist die Syntaxzeile des Compilers?
Und was bedeutet "Die Menüoberfläche ist auch schon fertig mit Compiler"? Der Satz macht so leider für mich gar keinen Sinn.

Am besten fängst du so an, dass du das genauer erklärst und das dann vor allem auch mit den richtigen Begriffen. Und dann wäre es vermutlich praktisch, wenn du uns deinen bisherigen Code zeigst und dazu sagst wo du die Fehler vermutest bzw. wo du gerne was eingebaut hättest.

Re: Frage Gadgets

Verfasst: 30.03.2014 20:54
von SBond
so ganz verstehe ich dich auch nicht.

aber eventuell hilft dir das:

Code: Alles auswählen

OpenWindow	(0, 0, 0, 800, 600, "CMD-Ausgabe", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(1, 0, 0, 800, 600)

Ausgabe_Roh$ 		= ""
Ausgabe_Fehlercode$	= ""
Ausgabe_Convert$ 	= ""

Programm = RunProgram("C:\Test.cmd","", "C:\", #PB_Program_Open | #PB_Program_Read | #PB_Program_Write| #PB_Program_Hide | #PB_Program_Error)

Repeat
    
	If Programm  
		If AvailableProgramOutput(Programm)
			Ausgabe_Roh$ 		= ReadProgramString(Programm)	; CMD-Ausgabe auslesen
			Ausgabe_Fehlercode$	= ReadProgramError(Programm)
			
			; ggf. Fehlercode anzeigen
			If Ausgabe_Fehlercode$ <> ""
				Debug Ausgabe_Fehlercode$
			EndIf
			
 			OemToChar_(Ausgabe_Roh$, Ausgabe_Convert$)	; Zeichensatz konvertieren (für die korrekte Darstellung von Umlauten)
     		AddGadgetItem(1, -1, Ausgabe_Convert$)		; Ergebnis in EditorGadget darstellen
		EndIf
		
	EndIf
	
	
; 	If ProgramRunning(Programm) = 0
; 		Debug ProgramExitCode(Programm)
; 	EndIf
	

Until WaitWindowEvent(10) = #PB_Event_CloseWindow		

CloseProgram(Programm)

Batch-Datei:

Code: Alles auswählen

@echo off
cls
echo Ich suche nach Fehler im Dateisystem....
echo.
chkdsk C:
exit

Gruß,
SBond

Re: Frage Gadgets

Verfasst: 31.03.2014 10:43
von schleicher
[quote="SBond"]

Danke für den Tip. In deinem Beispiel zeigst du mir, wie ich die cmd`s direkt ansprechen kann. Das ist zwar nicht genau das was ich gesucht habe, aber einfacher für mich. Das macht den Compiler überflüssig. Ich teste das mal.

Re: Frage Gadgets

Verfasst: 31.03.2014 11:28
von schleicher
Ich habe das mal getestet, aber ich bekomme die Verbindung zu dem Editorgadget von SBond nicht hin Hier mal mein bestehender Code

Code: Alles auswählen

CreateImage(0,210,30)
StartDrawing(ImageOutput(0))
  For x = 0 To 20
  For y = 0 To 29
    Plot(x,y, RGB(x,y,x*y))
  Next
  Next
  DrawText(32,6,"Einstellungen und Extras")
StopDrawing()

CreateImage(1,110,30)
StartDrawing(ImageOutput(1))
  For x = 0 To 20
  For y = 0 To 29
    Plot(x,y, RGB(x,y,x*y))
  Next
  Next
  DrawText(36,6,"Zubehör")
StopDrawing()


Procedure SetImage(iMenu, iID, ico)
  ExtractIconEx_("shell32.dll", ico, 0, @iIcon, 1)
  im=CreateImage(#PB_Any, 32, 32)
  StartDrawing(ImageOutput(im))
     Box(0, 0, 32, 32, GetSysColor_(#COLOR_MENU))
     DrawImage(iIcon, 0, 0, 32, 32)
  StopDrawing()
  SetMenuItemBitmaps_(iMenu,iID,#MF_BYPOSITION,ImageID(im),0)
  DestroyIcon_(iIcon)
EndProcedure
OpenWindow(0, 0, 0, 600, 320, "Hilfsprogramme Receiver",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
SetWindowColor(0,$615710)
ButtonGadget(4, 10,10, 380, 60, "Programm1", #PB_Button_MultiLine)
ButtonGadget(5, 10,80, 380, 60, "Programm2", #PB_Button_MultiLine)
ButtonGadget(6, 10,150, 380, 60, "Programm3", #PB_Button_MultiLine)
ButtonGadget(7, 10,220, 380, 60, "Programm4", #PB_Button_MultiLine)
ButtonGadget(8, 10,390, 380, 60, "Programm5", #PB_Button_MultiLine)
ContainerGadget(0,0,270,400,30,#PB_Container_Single)
#backcolor = $7F8611
ButtonImageGadget(1,2,0,220,30,ImageID(0))
ButtonImageGadget(2,220,0,110,30,ImageID(1))

hMenu = CreatePopupMenu(0)
MenuItem(0, "Test1")
MenuItem(1, "Test2")
sMenu = OpenSubMenu("Extras")
MenuItem(2, "Test3")
MenuItem(3, "Test4")
MenuItem(4, "Test5")
MenuItem(5, "Test6")

SetImage(hMenu, 0, 18)
SetImage(hMenu, 1, 130)
SetImage(hMenu, 2, 194)
SetImage(sMenu, 0, 18)
SetImage(sMenu, 1, 111)
SetImage(sMenu, 2, 241)
SetImage(sMenu, 3, 32)

hMenu = CreatePopupMenu(1)
MenuItem(0, "test7")
MenuItem(1, "test8")
sMenu = OpenSubMenu("Einstellungen")
MenuItem(2, "test9")
MenuItem(3, "test10")
MenuItem(4, "test11")
MenuItem(5, "test12")

SetImage(hMenu, 0, 18)
SetImage(hMenu, 1, 130)
SetImage(hMenu, 2, 194)
SetImage(sMenu, 0, 18)
SetImage(sMenu, 1, 111)
SetImage(sMenu, 2, 241)
SetImage(sMenu, 3, 32)

Repeat
    Select WaitWindowEvent()
      Case #PB_Event_SizeWindow
           ResizeGadget(0,-2,WindowHeight(0)- 32,WindowWidth(0)+4,32)
           
      Case #PB_Event_Gadget
        Select EventGadget()
         Case 1
            DisplayPopupMenu(0, WindowID(0),WindowX(0)+GadgetX(0)+12, WindowY(0)+WindowHeight(0) - 120)           
         Case 2
            DisplayPopupMenu(1, WindowID(0),WindowX(0)+GadgetX(0)+230, WindowY(0)+WindowHeight(0) - 120)     
        EndSelect         

      
      Case #PB_Event_CloseWindow
        Quit = 1
       
    EndSelect
Until Quit = 1
Wie verbinde ich nun jedes der Buttongadgets und die Menuitems mit einer CMD-Ausgabe ?

Re: Frage Gadgets

Verfasst: 31.03.2014 15:36
von SBond
schau mal ob dir das hilft :)

achja: damit die ausgelesenen Daten korrekt angezeigt werden, muss das Programm im ASCII-Modus kompiliert werden.
(im Unicode-Format siehst du nur irgendwelche chinesischen Zeichen ;) )

Code: Alles auswählen

Declare SetImage(iMenu, iID, ico)

Enumeration
	#GUI
	#Button_1
	#Button_2
	#Button_3
	#Button_4
	#Button_5
	#ButtonImageGadget_1
	#ButtonImageGadget_2
	#EditorGadget_1
EndEnumeration


CreateImage(0,210,30)
StartDrawing(ImageOutput(0))
For x = 0 To 20
	For y = 0 To 29
		Plot(x,y, RGB(x,y,x*y))
	Next
Next
DrawText(32,6,"Einstellungen und Extras")
StopDrawing()

CreateImage(1,110,30)
StartDrawing(ImageOutput(1))
For x = 0 To 20
	For y = 0 To 29
		Plot(x,y, RGB(x,y,x*y))
	Next
Next
DrawText(36,6,"Zubehör")
StopDrawing()



OpenWindow(#GUI, 0, 0, 810, 320, "Hilfsprogramme Receiver",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
SetWindowColor(#GUI,$615710)
ButtonGadget(#Button_1, 10,10, 380, 60, "Programm1", #PB_Button_MultiLine)
ButtonGadget(#Button_2, 10,80, 380, 60, "Programm2", #PB_Button_MultiLine)
ButtonGadget(#Button_3, 10,150, 380, 60, "Programm3", #PB_Button_MultiLine)
ButtonGadget(#Button_4, 10,220, 380, 60, "Programm4", #PB_Button_MultiLine)
ButtonGadget(#Button_5, 10,390, 380, 60, "Programm5", #PB_Button_MultiLine)

EditorGadget(#EditorGadget_1, 400, 10, 400, 270)

ContainerGadget(0,0,270,400,30,#PB_Container_Single)
	#backcolor = $7F8611
	ButtonImageGadget(#ButtonImageGadget_1,2,0,220,30,ImageID(0))
	ButtonImageGadget(#ButtonImageGadget_2,220,0,110,30,ImageID(1))
CloseGadgetList()

hMenu = CreatePopupMenu(0)
MenuItem(0, "Test1")
MenuItem(1, "Test2")
sMenu = OpenSubMenu("Extras")
MenuItem(2, "Test3")
MenuItem(3, "Test4")
MenuItem(4, "Test5")
MenuItem(5, "Test6")

SetImage(hMenu, 0, 18)
SetImage(hMenu, 1, 130)
SetImage(hMenu, 2, 194)
SetImage(sMenu, 0, 18)
SetImage(sMenu, 1, 111)
SetImage(sMenu, 2, 241)
SetImage(sMenu, 3, 32)

hMenu = CreatePopupMenu(1)
MenuItem(0, "test7")
MenuItem(1, "test8")
sMenu = OpenSubMenu("Einstellungen")
MenuItem(2, "test9")
MenuItem(3, "test10")
MenuItem(4, "test11")
MenuItem(5, "test12")

SetImage(hMenu, 0, 18)
SetImage(hMenu, 1, 130)
SetImage(hMenu, 2, 194)
SetImage(sMenu, 0, 18)
SetImage(sMenu, 1, 111)
SetImage(sMenu, 2, 241)
SetImage(sMenu, 3, 32)

Global Programm
Global Ausgabe$ = ""
Global Ausgabe_Fehlercode$  = ""

Repeat
	Select WaitWindowEvent(10) ;damit das Editogadget aktualisiert wird
	Case #PB_Event_SizeWindow
		ResizeGadget(0,-2,WindowHeight(0)- 32,WindowWidth(0)+4,32)
		
	Case #PB_Event_Gadget
		Select EventGadget()
		Case #ButtonImageGadget_1
			DisplayPopupMenu(0, WindowID(0),WindowX(0)+GadgetX(0)+12, WindowY(0)+WindowHeight(0) - 120)           
		Case #ButtonImageGadget_2
			DisplayPopupMenu(1, WindowID(0),WindowX(0)+GadgetX(0)+230, WindowY(0)+WindowHeight(0) - 120)  
			
		Case #Button_1
			ClearGadgetItems(#EditorGadget_1) 
			Programm = RunProgram("C:\Test.cmd","", "C:\", #PB_Program_Open | #PB_Program_Read | #PB_Program_Write| #PB_Program_Hide | #PB_Program_Error)
			
		Case #Button_2
			ClearGadgetItems(#EditorGadget_1) 
			Programm = RunProgram("C:\Test2.cmd","", "C:\", #PB_Program_Open | #PB_Program_Read | #PB_Program_Write| #PB_Program_Hide | #PB_Program_Error)
			
		EndSelect         
	
		
	Case #PB_Event_CloseWindow
		Quit = 1
		
	EndSelect
	
	
	If IsProgram(Programm)
		If ProgramRunning(Programm)
			DisableGadget(#Button_1, #True)
			DisableGadget(#Button_2, #True)
			DisableGadget(#Button_3, #True)
			DisableGadget(#Button_4, #True)
			DisableGadget(#Button_5, #True)
			
			If AvailableProgramOutput(Programm)
				Ausgabe$ = ReadProgramString(Programm)
				Ausgabe_Fehlercode$ = ReadProgramError(Programm)
				AddGadgetItem(#EditorGadget_1, -1, Ausgabe$)      ; Ergebnis in EditorGadget darstellen
			EndIf
			
		Else
			DisableGadget(#Button_1, #False)
			DisableGadget(#Button_2, #False)
			DisableGadget(#Button_3, #False)
			DisableGadget(#Button_4, #False)
			DisableGadget(#Button_5, #False)
			AddGadgetItem(#EditorGadget_1, -1, "-----------------------------------------------------")
			
			;ggf. eine Fehlermeldung ausgeben, sofern es eine gab
			If Ausgabe_Fehlercode$ <> ""
				AddGadgetItem(#EditorGadget_1, -1, "Fehlermeldungen: " + Ausgabe_Fehlercode$)
			EndIf
			
			;Exitcode ausgeben
			AddGadgetItem(#EditorGadget_1, -1, "Exitcode: " + Str(ProgramExitCode(Programm)))
			Programm = 0
		EndIf
	EndIf	
	

Until Quit = 1




Procedure SetImage(iMenu, iID, ico)
	ExtractIconEx_("shell32.dll", ico, 0, @iIcon, 1)
	im=CreateImage(#PB_Any, 32, 32)
	StartDrawing(ImageOutput(im))
	Box(0, 0, 32, 32, GetSysColor_(#COLOR_MENU))
	DrawImage(iIcon, 0, 0, 32, 32)
	StopDrawing()
	SetMenuItemBitmaps_(iMenu,iID,#MF_BYPOSITION,ImageID(im),0)
	DestroyIcon_(iIcon)
EndProcedure

Re: Frage Gadgets

Verfasst: 31.03.2014 16:29
von schleicher
:allright: Danke funktioniert bestens !!! Und wie mache ich, das die Untermenüs auch auf CMD-Scripte anspringen ? In meinem Code mit Test1 bis Test12) Wenn ich das noch weiß, dann bin ich glücklich.

Re: Frage Gadgets

Verfasst: 31.03.2014 16:34
von SBond
ich denke so müsste es gehen....

Code: Alles auswählen

Declare SetImage(iMenu, iID, ico)

Enumeration
   #GUI
   #Button_1
   #Button_2
   #Button_3
   #Button_4
   #Button_5
   #ButtonImageGadget_1
   #ButtonImageGadget_2
   #EditorGadget_1
EndEnumeration


CreateImage(0,210,30)
StartDrawing(ImageOutput(0))
For x = 0 To 20
   For y = 0 To 29
      Plot(x,y, RGB(x,y,x*y))
   Next
Next
DrawText(32,6,"Einstellungen und Extras")
StopDrawing()

CreateImage(1,110,30)
StartDrawing(ImageOutput(1))
For x = 0 To 20
   For y = 0 To 29
      Plot(x,y, RGB(x,y,x*y))
   Next
Next
DrawText(36,6,"Zubehör")
StopDrawing()



OpenWindow(#GUI, 0, 0, 810, 320, "Hilfsprogramme Receiver",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
SetWindowColor(#GUI,$615710)
ButtonGadget(#Button_1, 10,10, 380, 60, "Programm1", #PB_Button_MultiLine)
ButtonGadget(#Button_2, 10,80, 380, 60, "Programm2", #PB_Button_MultiLine)
ButtonGadget(#Button_3, 10,150, 380, 60, "Programm3", #PB_Button_MultiLine)
ButtonGadget(#Button_4, 10,220, 380, 60, "Programm4", #PB_Button_MultiLine)
ButtonGadget(#Button_5, 10,390, 380, 60, "Programm5", #PB_Button_MultiLine)

EditorGadget(#EditorGadget_1, 400, 10, 400, 270)

ContainerGadget(0,0,270,400,30,#PB_Container_Single)
   #backcolor = $7F8611
   ButtonImageGadget(#ButtonImageGadget_1,2,0,220,30,ImageID(0))
   ButtonImageGadget(#ButtonImageGadget_2,220,0,110,30,ImageID(1))
CloseGadgetList()

hMenu = CreatePopupMenu(0)
MenuItem(0, "Test1")
MenuItem(1, "Test2")
sMenu = OpenSubMenu("Extras")
MenuItem(2, "Test3")
MenuItem(3, "Test4")
MenuItem(4, "Test5")
MenuItem(5, "Test6")

SetImage(hMenu, 0, 18)
SetImage(hMenu, 1, 130)
SetImage(hMenu, 2, 194)
SetImage(sMenu, 0, 18)
SetImage(sMenu, 1, 111)
SetImage(sMenu, 2, 241)
SetImage(sMenu, 3, 32)

hMenu = CreatePopupMenu(1)
MenuItem(0, "test7")
MenuItem(1, "test8")
sMenu = OpenSubMenu("Einstellungen")
MenuItem(2, "test9")
MenuItem(3, "test10")
MenuItem(4, "test11")
MenuItem(5, "test12")

SetImage(hMenu, 0, 18)
SetImage(hMenu, 1, 130)
SetImage(hMenu, 2, 194)
SetImage(sMenu, 0, 18)
SetImage(sMenu, 1, 111)
SetImage(sMenu, 2, 241)
SetImage(sMenu, 3, 32)

Global Programm
Global Ausgabe$ = ""
Global Ausgabe_Fehlercode$  = ""

Repeat
   Select WaitWindowEvent(10) ;damit das Editogadget aktualisiert wird
   Case #PB_Event_SizeWindow
      ResizeGadget(0,-2,WindowHeight(0)- 32,WindowWidth(0)+4,32)
      
  Case #PB_Event_Menu
  	Select EventMenu()
  		
  	Case 0 ; Menüeintrag: "Test1"
         ClearGadgetItems(#EditorGadget_1)
         Programm = RunProgram("C:\Test.cmd","", "C:\", #PB_Program_Open | #PB_Program_Read | #PB_Program_Write| #PB_Program_Hide | #PB_Program_Error)
         
  	Case 1 ; Menüeintrag: "Test2"
  		; ...
  		
  	Case 2 ; Menüeintrag: "Test3"
  		; ...
  		
  	Case 3 ; Menüeintrag: "Test4"
  		; ...
  		
  	EndSelect
  	
  	
  	
   Case #PB_Event_Gadget
   	Select EventGadget()
   		
      Case #ButtonImageGadget_1
         DisplayPopupMenu(0, WindowID(0),WindowX(0)+GadgetX(0)+12, WindowY(0)+WindowHeight(0) - 120)           
      Case #ButtonImageGadget_2
     	
         DisplayPopupMenu(1, WindowID(0),WindowX(0)+GadgetX(0)+230, WindowY(0)+WindowHeight(0) - 120) 
         
      Case #Button_1
         ClearGadgetItems(#EditorGadget_1)
         Programm = RunProgram("C:\Test.cmd","", "C:\", #PB_Program_Open | #PB_Program_Read | #PB_Program_Write| #PB_Program_Hide | #PB_Program_Error)
         
      Case #Button_2
         ClearGadgetItems(#EditorGadget_1)
         Programm = RunProgram("C:\Test2.cmd","", "C:\", #PB_Program_Open | #PB_Program_Read | #PB_Program_Write| #PB_Program_Hide | #PB_Program_Error)
         
      EndSelect         
   
      
   Case #PB_Event_CloseWindow
      Quit = 1
      
   EndSelect
   
   
   If IsProgram(Programm)
      If ProgramRunning(Programm)
         DisableGadget(#Button_1, #True)
         DisableGadget(#Button_2, #True)
         DisableGadget(#Button_3, #True)
         DisableGadget(#Button_4, #True)
         DisableGadget(#Button_5, #True)
         
         If AvailableProgramOutput(Programm)
            Ausgabe$ = ReadProgramString(Programm)
            Ausgabe_Fehlercode$ = ReadProgramError(Programm)
            AddGadgetItem(#EditorGadget_1, -1, Ausgabe$)      ; Ergebnis in EditorGadget darstellen
         EndIf
         
      Else
         DisableGadget(#Button_1, #False)
         DisableGadget(#Button_2, #False)
         DisableGadget(#Button_3, #False)
         DisableGadget(#Button_4, #False)
         DisableGadget(#Button_5, #False)
         AddGadgetItem(#EditorGadget_1, -1, "-----------------------------------------------------")
         
         ;ggf. eine Fehlermeldung ausgeben, sofern es eine gab
         If Ausgabe_Fehlercode$ <> ""
            AddGadgetItem(#EditorGadget_1, -1, "Fehlermeldungen: " + Ausgabe_Fehlercode$)
         EndIf
         
         ;Exitcode ausgeben
         AddGadgetItem(#EditorGadget_1, -1, "Exitcode: " + Str(ProgramExitCode(Programm)))
         Programm = 0
      EndIf
   EndIf   
   

Until Quit = 1




Procedure SetImage(iMenu, iID, ico)
   ExtractIconEx_("shell32.dll", ico, 0, @iIcon, 1)
   im=CreateImage(#PB_Any, 32, 32)
   StartDrawing(ImageOutput(im))
   Box(0, 0, 32, 32, GetSysColor_(#COLOR_MENU))
   DrawImage(iIcon, 0, 0, 32, 32)
   StopDrawing()
   SetMenuItemBitmaps_(iMenu,iID,#MF_BYPOSITION,ImageID(im),0)
   DestroyIcon_(iIcon)
EndProcedure

Gruß,
SBond

Re: Frage Gadgets

Verfasst: 31.03.2014 16:40
von schleicher
Ja funktioniert. Besten Dank

Re: Frage Gadgets

Verfasst: 31.03.2014 21:15
von schleicher
Ich muss doch noch einmal fragen. Ich würde gern mit den Buttons 1-5 (Buttongadget) keine CMD mit Rückgabe im editorgadget aufrufen, sondern weitere Fenster,um Untermenüs zu öffnen (erstes schließt sich und neues öffnet sich) Dabei müsste das 2.Fenster ein Button "Zurück zum Hauptmenü" erhalten (schön wäre dieser im Containergadget unten rechts)