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

Verfasst: 22.12.2005 18:57
von HeX0R

*mit nächstem der irre genug ist mich hier abzulösen abklatsch*