LanguageRequester

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

LanguageRequester

Beitrag von Scarabol »

Hallo Leute,

ich hab einen kleinen LanguageRequester geschrieben, der aus einer Datei eine Liste mit Sprachen lädt. Die Liste kann natürlich individuell bearbeitet werden und die Funktion gibt einen Long Wert zurück der als Sprachencode angesehen wird und ebenfalls in der Liste eingetragen wird.

Vielleicht kanns jemand brauchen
Scarabol

hier der Code

Code: Alles auswählen

Procedure.l LanguageRequester(LanguageFile$, DefaultLangCode)
  Protected LangWin.l
  Protected Text.l
  Protected List.l
  Protected But.l
  Protected Event.l
  Protected EventGadget.l
  Structure Lang
    name.s
    code.l
    title.s
    text.s
  EndStructure
  NewList Lang.Lang()
  If OpenPreferences(LanguageFile$)
    ExaminePreferenceGroups()
    While NextPreferenceGroup()
      AddElement(Lang())
        Lang()\Name = PreferenceGroupName()
        Lang()\Code = ReadPreferenceLong("code", -1)
        Lang()\title = ReadPreferenceString("title", "Select language")
        Lang()\text = ReadPreferenceString("text", "Select your language")
    Wend
  EndIf
  LangWin = OpenWindow(#PB_Any, 0, 0, 300, 120, "Language Requester", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  CreateGadgetList(WindowID(LangWin))
    Text = TextGadget(#PB_Any, 10, 10, 280, 20, "Select your language:")
    List = ComboBoxGadget(#PB_Any, 30, 35, 240, 300)
    Frame3DGadget(#PB_Any, 104, 74, 92, 27, "", #PB_Frame3D_Flat)
    But = ButtonGadget(#PB_Any, 105, 75, 90, 25, "Ok")
    ForEach Lang()
      AddGadgetItem(List, -1, Lang()\Name)
      If Lang()\Code = DefaultLangCode
        SetWindowTitle(LangWin, Lang()\Title)
        SetGadgetText(Text, Lang()\Text)
        SetGadgetState(List, ListIndex(Lang()))
      EndIf
    Next
    SelectElement(Lang(), GetGadgetState(List))
    AddKeyboardShortcut(LangWin, #PB_Shortcut_Return, 1)
  Repeat
    Event = WaitWindowEvent()
    If Event = #PB_Event_CloseWindow
      CloseWindow(LangWin)
      ProcedureReturn 0
    ElseIf Event = #PB_Event_Gadget
      EventGadget = EventGadget()
      If EventGadget = List
        SelectElement(Lang(), GetGadgetState(List))
        SetWindowTitle(LangWin, Lang()\Title)
        SetGadgetText(Text, Lang()\Text)
        SetGadgetState(List, ListIndex(Lang()))
      ElseIf EventGadget = But
        CloseWindow(LangWin)
        ProcedureReturn Lang()\code
      EndIf
    ElseIf Event = #PB_Event_Menu And EventMenu() = 1
      CloseWindow(LangWin)
      ProcedureReturn Lang()\code
    EndIf
  ForEver
EndProcedure

Debug LanguageRequester("language.lang", 10)
hier die "language.lang" für das Beispiel

Code: Alles auswählen

[Deutsch]
Code = 10
Title = Sprachauswahl
Text = Wählen Sie ihre Sprache
[English]
Code = 11
Title = Select language
Text = Select your language
[Fracais]
Code = 12
Title = test
Text = test
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP