Procedure OnErrorMessage() Protected Fehler.s Fehler = "Fehler in Modul '" + GetErrorModuleName() + "' an Adresse " + RSet(Hex(GetErrorAddress()), 4, "0") + " in Zeile " + Str(GetErrorLineNR()) + ":" + Chr(13) + GetErrorDescription() MessageRequester("Fehler Nr. " + Str(GetErrorNumber()), Fehler) SetClipboardText("Fehler Nr. " + Str(GetErrorNumber()) + Chr(13) + Fehler) End EndProcedure OnErrorGosub(@OnErrorMessage()) XIncludeFile "TreeLinkedList.pb" ;{ TreeGadget with TreeLinkedList Structure TGwTLL ID.l *LL EndStructure Procedure TLL_SeekElement(*LL, Position) If Position <= -1 TreeLL(#TLL_FirstMain, *LL) Else TreeLL(#TLL_ResetAll, *LL) While TreeLL(#TLL_NextEx, *LL) And Position Position - 1 Wend EndIf EndProcedure Procedure.l TLL_TreeGadget(GadgetID.l, X.l, Y.l, Breite.l, Hoehe.l, Flags.l) Protected *TGwTLL.TGwTLL *TGwTLL = AllocateMemory(SizeOf(TGwTLL)) If *TGwTLL *TGwTLL\ID = TreeGadget(Gadget, X, Y, Breite, Hoehe, Flags) If Gadget <> #PB_Any : *TGwTLL\ID = Gadget : EndIf *TGwTLL\LL = TreeLL(#TLL_NewTreeLL, 4) ProcedureReturn *TGwTLL EndIf ProcedureReturn #False EndProcedure Procedure.l TLL_GetGadgetID(*TGwTLL.TGwTLL) If *TGwTLL ProcedureReturn *TGwTLL\ID EndIf EndProcedure Procedure.l TLL_AddGadgetItem(*TGwTLL.TGwTLL, Position.l, Text.s, ImageID) Protected a.l, *Text.STRING If *TGwTLL AddGadgetItem(*TGwTLL\ID, Position, Text) If Position <= -1 TreeLL(#TLL_LastMain, *TGwTLL\LL) Else TLL_SeekElement(*TGwTLL\LL, Position) EndIf *Text = TreeLL(#TLL_Add, *TGwTLL\LL) If *Text *Text\s = Text ProcedureReturn #True EndIf EndIf ProcedureReturn #False EndProcedure Procedure.l TLL_RemoveGadgetItem(*TGwTLL.TGwTLL, Position.l) If *TGwTLL And Position >= 0 RemoveGadgetItem(*TGwTLL\ID, Position) TLL_SeekElement(*TGwTLL\LL, Position) TreeLL(#TLL_Delete, *TGwTLL\LL) ProcedureReturn #True EndIf ProcedureReturn #False EndProcedure Procedure.l TLL_ClearGadgetItemList(*TGwTLL.TGwTLL) If *TGwTLL ClearGadgetItemList(*TGwTLL\ID) TreeLL(#TLL_AllDelete, *TGwTLL\LL) ProcedureReturn #True EndIf ProcedureReturn #False EndProcedure Procedure.l TLL_CountGadgetItems(*TGwTLL.TGwTLL) Protected Count.l If *TGwTLL Count = CountGadgetItems(*TGwTLL\ID) ProcedureReturn Count EndIf ProcedureReturn #False EndProcedure Procedure.l TLL_GetGadgetItemState(*TGwTLL.TGwTLL, Position.l) If *TGwTLL ProcedureReturn GetGadgetItemState(*TGwTLL\ID, Position) EndIf ProcedureReturn #False EndProcedure Procedure.l TLL_SetGadgetItemState(*TGwTLL.TGwTLL, Position.l, State.l) If *TGwTLL ProcedureReturn SetGadgetItemState(*TGwTLL\ID, Position, State) EndIf ProcedureReturn #False EndProcedure Procedure.s TLL_GetGadgetItemText(*TGwTLL.TGwTLL, Position.l) If *TGwTLL ProcedureReturn GetGadgetItemText(*TGwTLL\ID, Position, 0) EndIf EndProcedure Procedure.l TLL_SetGadgetItemText(*TGwTLL.TGwTLL, Position.l, Text.s) Protected *Text.STRING If *TGwTLL And Position >= 0 SetGadgetItemText(*TGwTLL\ID, Position, Text, 0) TLL_SeekElement(*TGwTLL, Position) *Text = TreeLL(#TLL_GetPointer, *TGwTLL) If *Text *Text\s = Text ProcedureReturn #True EndIf EndIf ProcedureReturn #False EndProcedure Procedure.l TLL_GetGadgetState(*TGwTLL.TGwTLL) If *TGwTLL ProcedureReturn GetGadgetState(*TGwTLL\ID) EndIf EndProcedure Procedure.l TLL_SetGadgetState(*TGwTLL.TGwTLL, State.l) If *TGwTLL ProcedureReturn SetGadgetState(*TGwTLL\ID, State.l) EndIf EndProcedure Procedure.s TLL_GetGadgetText(*TGwTLL.TGwTLL) If *TGwTLL ProcedureReturn GetGadgetText(*TGwTLL\ID) EndIf EndProcedure Procedure.s TLL_GetTLLText(*TGwTLL.TGwTLL) Protected Position.l, *Text.STRING If *TGwTLL Position = GetGadgetState(*TGwTLL\ID) If Position >= 0 TLL_SeekElement(*TGwTLL\LL, Position) *Text = TreeLL(#TLL_GetPointer, *TGwTLL\LL) If *Text ProcedureReturn *Text\s EndIf EndIf EndIf ProcedureReturn "" EndProcedure Procedure.l TLL_SetGadgetText(*TGwTLL.TGwTLL, Text.s) Protected Position.l, *Text.STRING If *TGwTLL Position = GetGadgetState(*TGwTLL\ID) If Position >= 0 SetGadgetText(*TGwTLL\ID, Text) TLL_SeekElement(*TGwTLL\LL, Position) *Text = TreeLL(#TLL_GetPointer, *TGwTLL\LL) *Text\s = Text EndIf EndIf EndProcedure Procedure.l TLL_OpenTreeGadgetNode(*TGwTLL.TGwTLL, Position.l) If *TGwTLL If Position <= -1 OpenTreeGadgetNode(*TGwTLL\ID) TreeLL(#TLL_LastMain, *TGwTLL\LL) TreeLL(#TLL_NewChild, *TGwTLL\LL) Else OpenTreeGadgetNode(*TGwTLL\ID, Position) TLL_SeekElement(*TGwTLL\LL, Position) TreeLL(#TLL_NewChild, *TGwTLL\LL) EndIf ProcedureReturn #True EndIf ProcedureReturn #False EndProcedure Procedure.l TLL_CloseTreeGadgetNode(*TGwTLL.TGwTLL, Position.l) If *TGwTLL If Position <= -1 CloseTreeGadgetNode(*TGwTLL\ID) Else CloseTreeGadgetNode(*TGwTLL\ID, Position) EndIf ProcedureReturn #True EndIf ProcedureReturn #False EndProcedure Procedure.l TLL_CountTreeGadgetNodeItems(*TGwTLL.TGwTLL, Position.l) If *TGwTLL ProcedureReturn CountTreeGadgetNodeItems(*TGwTLL\ID, Position.l) EndIf ProcedureReturn #False EndProcedure Procedure.l TLL_GadgetItemID(*TGwTLL.TGwTLL, Position.l) If *TGwTLL ProcedureReturn GadgetItemID(*TGwTLL\ID, Position) EndIf ProcedureReturn #False EndProcedure Procedure.l TLL_TreeGadgetItemNumber(*TGwTLL.TGwTLL, Position.l) If *TGwTLL ProcedureReturn TreeGadgetItemNumber(*TGwTLL\ID, Position) EndIf ProcedureReturn #False EndProcedure ;} Procedure.s RandomWord(Length.l) Protected As.s, Bs.s, Wort.s, a.l, modus.l, b.l, TmpS.s modus = 1 As = "aeiouy" Bs = "bcdfghjklmnpqrstvwxz" Wort = "" Repeat Select modus Case 1 b = 1 TmpS = As Case 2 b = Random(2) TmpS = Bs EndSelect For a = 1 To b Wort = Wort + Mid(TmpS, Random(Len(TmpS) - 1) + 1, 1) Next modus ! 3 Until Len(Wort) >= Length ProcedureReturn Left(Wort, Length) EndProcedure Procedure RandomTree(TGwTLL.l, Length.l) Protected Child.l, a.l TLL_ClearGadgetItemList(TGwTLL) While Length Select Random(2 * Length / (11 - Child)) Case 0: If Child < 10 : TLL_OpenTreeGadgetNode(TGwTLL, -1) : Child + 1 : EndIf Case 1: If Child > 0 : TLL_CloseTreeGadgetNode(TGwTLL, -1) : Child - 1 : EndIf EndSelect TLL_AddGadgetItem(TGwTLL, -1, RSet(Str(a), 3, "0") + " [" + Str(Child) + "] " + RandomWord(Random(20)), 0) a + 1 Length - 1 Wend While Child TLL_CloseTreeGadgetNode(TGwTLL, -1) Child - 1 Wend EndProcedure Procedure ShowAll(*TGwTLL.TGwTLL) Protected *Text.STRING TreeLL(#TLL_ResetAll, *TGwTLL\LL) While TreeLL(#TLL_NextEx, *TGwTLL\LL) *Text = TreeLL(#TLL_GetPointer, *TGwTLL\LL) If *Text Debug *Text\s b = Val(Left(*Text\s, 3)) EndIf Wend EndProcedure If OpenWindow(0, 0, 0, 300, 500, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, "TGwTLL-Test") If CreateGadgetList(WindowID(0)) TLL.l = TLL_TreeGadget(#PB_Any, 0, 0, 300, 480, #PB_Tree_AlwaysShowSelection) But1.l = ButtonGadget(#PB_Any, 0, 480, 150, 20, "Random") But2.l = ButtonGadget(#PB_Any, 150, 480, 150, 20, "Alle") Repeat Select WaitWindowEvent() Case #PB_EventCloseWindow Break Case #PB_EventGadget Select EventGadgetID() Case TLL_GetGadgetID(TLL) Select EventType() Case #PB_EventType_LeftDoubleClick Debug "TreeGadget: " + TLL_GetGadgetText(TLL) Debug "TreeLL: " + TLL_GetTLLText(TLL) EndSelect Case But1 RandomTree(TLL, 100) Case But2 ShowAll(TLL) EndSelect EndSelect ForEver EndIf CloseWindow(0) EndIf ; jaPBe Version=2.4.9.25 ; FoldLines=0012001B001D00270029002D002F003F00410049004B00520054005B005D0062 ; FoldLines=00640069006B006F0071007D007F008300850089008B008F0091009E00A000AB ; FoldLines=00AD00BB00BD00C700C900CE00D000D500D700DC00E000F600F80109010B0115 ; Build=0 ; Language=0x0000 Language Neutral ; FirstLine=48 ; CursorPosition=200 ; EnableAsm ; EnableOnError ; ExecutableFormat=Windows ; DontSaveDeclare ; EOF