Seite 2 von 3

Verfasst: 20.12.2005 21:31
von sen-me
aber wie soll ich da shier bitteschön mit rückgabe wert machen

Code: Alles auswählen

Global a
Procedure Sing()
 a+1
 AddElement(daten())
 daten()=a
 If a<>10 : Sing() : EndIf
EndProcedure
Sing()

Verfasst: 21.12.2005 09:35
von HeX0R
So z.B.:

Code: Alles auswählen

Global a 
Procedure Sing()
 ;Hier z.B. auf einen AbbruchButton testen:

 If WindowEvent() = #PB_Event_Gadget And EventGadgetID() = #DEIN_ABBRUCH_BUTTON
   ProcedureReturn #True
 EndIf
 
 a+1 
 AddElement(daten()) 
 daten()=a 
 If a<>10
   If Sing() = #True
   	 ProcedureReturn 1
 	 EndIf
 EndIf
 ProcedureReturn 0

EndProcedure 
Sing()

Verfasst: 21.12.2005 16:22
von sen-me
jagut das problem ist das ich es aus einer toolbar steuer, wenn ich auf toolbar button start gehe, bleibt dieser eingedrückt (ich wollt ihn aber disablen -.-)

und der stop toolbarbutton kommt erst gar nicht O.o

Verfasst: 21.12.2005 20:48
von HeX0R
Ich bin mir ziemlich sicher, dass du mein Beispiel nicht wirklich verinnerlicht hast.
Das eingebaute WindowEvent() hat nämlich auch den netten Nebeneffekt dein Fenster am Leben zu erhalten, weil es immer brav anstehende Events aus der Queue schaufelt (allerdings eher unbeaufsichtigt, was aber nicht Teil der Aufgabenstellung war).

Also kann es eigentlich gar nicht sein, dass der Button eingedrückt bleibt.

Verfasst: 22.12.2005 12:41
von sen-me
ich hab im normalen program

Code: Alles auswählen

repeat
eventid=windowevent()
if eventid=#pb_eventmenu
 select eventmenuid()
  case 1 : searchfile(path)
 endselect
endif
until eventid=#pb_eventwindowclose

Verfasst: 22.12.2005 13:42
von HeX0R
Die Schleife ist ja ganz nett, aber hier sehe ich beim besten Willen nicht, wie dein geschilderter Effekt zustande kommen soll.
Nummer5 hat geschrieben:Ich brauche mehr Input
z.B. deine TATSÄCHLICHE searchfile() Procedure.
Ausserdem dachte ich, du wolltest den Button disablen ? Wieso seh ich dann in deiner Schleife nix davon ?

Verfasst: 22.12.2005 16:40
von sen-me
ok ich schneid mal was raus

Code: Alles auswählen

Procedure SearchFile(Folder.s)
 Protected Search.s,Type.b,result.b
 Static DirID.l
 If ExamineDirectory(DirID,Folder,"")
  DirID+1
  Repeat
   Type=NextDirectoryEntry()
   If Type : Search=Trim(DirectoryEntryName()) : EndIf
   If Type=2
    If Search<>"." And Search<>".."
     result=IsEmpty(Folder+Search+"\")
     UseDirectory(DirID-1)
     If result=0
      Search=Folder+Search+"\"
      StatusBarText(0,1,"Durchsucht: "+Search)
      SearchFile(Search)
      UseDirectory(DirID-1)
     ElseIf result=1
      AddElement(files())
      files()\path=Folder
      files()\name=Search+" (Ordner)"
     EndIf
    EndIf
   ElseIf Type=1
    If DirectoryEntrySize()=0
     AddElement(files())
     files()\path=Folder
     files()\name=Search+" (Datei)"
    EndIf
   EndIf
  Until Type=0 Or stop=1
  DirID-1
 EndIf
EndProcedure

Code: Alles auswählen

toolbar=CreateToolBar(0,WindowID())
If toolbar=0
 Error("Konnte das Programm nicht initialisieren!",1,10)
EndIf
ImageList_Destroy_(SendMessage_(toolbar,1073,0,0))
imgl=ImageList_Create_(32,32,#ILC_COLOR8|#ILC_MASK,0,1)
SendMessage_(toolbar,1072,0,imgl)
ToolBarImageButton(0,UseImage(0))
ToolBarImageButton(1,UseImage(1))
ToolBarSeparator()
ToolBarImageButton(2,UseImage(2))
ToolBarImageButton(3,UseImage(3))
DisableToolBarButton(0,1)
DisableToolBarButton(1,1)
status=CreateStatusBar(0,WindowID())
If status=0
 Error("Konnte das Programm nicht initialisieren!",1,10)
EndIf
AddStatusBarField(100)
AddStatusBarField(500)
Dim Tooltext.s(4)
Tooltext(0)="Starte Suche"
Tooltext(1)="Stoppe Suche"
Tooltext(3)="Version-Info"
Tooltext(4)="Hilfe"
ToolBarToolTip(0,Tooltext(0))
ToolBarToolTip(1,Tooltext(1))
ToolBarToolTip(2,Tooltext(3))
ToolBarToolTip(3,Tooltext(4))

Code: Alles auswählen

Repeat
 EventID=WindowEvent()
 If EventID=0
  hot=SendMessage_(toolbar,1095,0,0)
  If hot<>oldhot
   oldhot=hot
   If hot=-1 : StatusBarText(0,0,"") : Else : StatusBarText(0,0,Tooltext(hot)) : EndIf
  EndIf
  Delay(5)
 ElseIf EventID=#PB_EventMenu
  Select EventMenuID()
   Case 0
    DisableToolBarButton(1,0)
    DisableToolBarButton(0,1)
    ClearList(files())
    ClearGadgetItemList(2)
    stat.w=0
    stop=0
    SearchFile(result)
    StatusBarText(0,1,"Bereit")
    ResetList(files())
    ForEach files()
     AddGadgetItem(2,stat,files()\name+Chr(10)+files()\path)
     SetGadgetItemState(2,stat,#PB_ListIcon_Checked)
     stat+1
    Next
    DisableToolBarButton(0,0)
   Case 1
    stat.w=0
    ClearList(files())
    ClearGadgetItemList(2)
    stop=1
  EndSelect
 EndIf
Until EventID=#PB_EventCloseWindow
Ende()

Verfasst: 22.12.2005 17:19
von HeX0R
Genau so hab ichs mir vorgestellt!
Ich hab also gegen ne Wand geredet, oder wo ist denn das von mir vorgeschlagene WindowEvent() in deiner SearchRoutine ?

Hier die Routine extra für dich (auch wenn ich #PB_Any benutzt hätte anstatt dieser statischen Variable):

Code: Alles auswählen

Procedure.l SearchFile(Folder.s)
 Protected Search.s,Type.b,result.b
 Static DirID.l
 If ExamineDirectory(DirID,Folder,"")
  DirID+1
  Repeat
   Type=NextDirectoryEntry()
   If Type : Search=Trim(DirectoryEntryName()) : EndIf
   
   ;NEW
   If WindowEvent() = #PB_EventMenu And EventMenuID() = 1
     ProcedureReturn 1
   EndIf
   ;NEW END
   
   If Type=2
    If Search<>"." And Search<>".."
     result=IsEmpty(Folder+Search+"\")
     UseDirectory(DirID-1)
     If result=0
      Search=Folder+Search+"\"
      StatusBarText(0,1,"Durchsucht: "+Search)
      
      ;CHANGED
      If SearchFile(Search)
      	ProcedureReturn 1
	    EndIf
    	;CHANGED END
	    
      UseDirectory(DirID-1)
     ElseIf result=1
      AddElement(files())
      files()\path=Folder
      files()\name=Search+" (Ordner)"
     EndIf
    EndIf
   ElseIf Type=1
    If DirectoryEntrySize()=0
     AddElement(files())
     files()\path=Folder
     files()\name=Search+" (Datei)"
    EndIf
   EndIf
  Until Type=0 Or stop=1
  DirID-1
 EndIf
 
 ;NEW
 ProcedureReturn 0
 ;NEW END
 
EndProcedure
Dann musst nur noch in deiner Hauptschleife abchecken, ob die Procedure 1 zurückgibt und entsprechend deine List löschen.

Verfasst: 22.12.2005 17:36
von sen-me
aber sie wird doch aufgerufen, und wenn ichw a szurück gebe, ohne stop zu drücken gehts ja nich :roll:

Verfasst: 22.12.2005 18:57
von HeX0R
/:->
*mit nächstem der irre genug ist mich hier abzulösen abklatsch*