Seite 1 von 1

AddGadgetItem

Verfasst: 29.11.2012 17:42
von kunstlust
Hallo,

gibt es eine einfache Methode, bei AddGadgetItem zu prüfen, das der Eintrag nur einmal vorhanden ist?

Danke für Tips

Re: AddGadgetItem

Verfasst: 29.11.2012 17:45
von Kiffi
mehr Infos bitte! Für welches Gadget beispielsweise...

Grüße ... Kiffi

Re: AddGadgetItem

Verfasst: 29.11.2012 18:00
von kunstlust
Kiffi hat geschrieben:mehr Infos bitte! Für welches Gadget beispielsweise...

Grüße ... Kiffi
Hallo Kiffi,

es handelt sich um eine ComboBox in der IP Adressen eingetragen werden und ich möchte gerne Dubletten vermeiden.
Die IPs werden danach direkte aus dem Gadget in eine Prefs geschrieben. In AutoIt gab es die Möglichkeit dies per Array zu lösen, indem ich aus dem Array alle Einträge in ein andere Kopiere, dies aber keine Dubletten enthält.
Ich denke das ich wohl eine Funktion für die Prefs brauche, oder gibt es eine andere Lösung?

Gruß Lars

Re: AddGadgetItem

Verfasst: 29.11.2012 18:13
von ts-soft
Mal unabhängig von Deiner Frage, wäre die Kombination von IPAddressGadget und ListView
nicht sinnvoller? Benötigt zwar mehr Platz, vermeidet aber ungültige Eingaben, was Du
sonst auch noch selber händeln müsstest.

AddGadgetItem

Verfasst: 29.11.2012 18:41
von kunstlust
ts-soft hat geschrieben:Mal unabhängig von Deiner Frage, wäre die Kombination von IPAddressGadget und ListView
nicht sinnvoller? Benötigt zwar mehr Platz, vermeidet aber ungültige Eingaben, was Du
sonst auch noch selber händeln müsstest.
Weil eben auch ein DNS-Name möglich ist, so ist es entstanden. Sollte die Ip nicht vorhanden sein, wird dieser Fehler später abgefangen.

Re: AddGadgetItem

Verfasst: 29.11.2012 18:42
von NicTheQuick
Ich hab hier mal eine Funktion gebastelt, die dir ein String-Array alphabetisch sortiert und gleichzeitig Dubletten entfernt. Ohne alphabetische Sortierung ist es komplizierter zu programmieren. Deswegen habe ich jetzt die einfachere Version gewählt.

Code: Alles auswählen

Dim values.s(20)

Procedure.i makeUnique(Array values.s(1))
	Protected i.i, n.i = ArraySize(values())
	Protected offset.i
	
	SortArray(values(), #PB_Sort_Ascending)
	
	For i = 1 To n
		If values(i) = values(i - 1 - offset)
			offset + 1
		Else
			values(i - offset) = values(i)
		EndIf
	Next
	ReDim values(n - offset)
	ProcedureReturn offset
EndProcedure

For i = 0 To ArraySize(values())
	values(i) = RSet(Str(Random(4) * 2), 3, "0")
	Debug values(i)
Next

makeUnique(values())

Debug "FERTIG"
For i = 0 To ArraySize(values())
	Debug values(i)
Next

AddGadgetItem

Verfasst: 29.11.2012 18:52
von kunstlust
@NicTheQuick

Das mit dem Array schaut Super aus, ich danke die sehr für deine Hilfe. Die Kunst ist eben doch die Logik und da tue ich mich doch manchmal schwer. Ich verstehe aber, was du gemacht hast, ich habe also noch Hoffnung.... Danke

Re: AddGadgetItem

Verfasst: 29.11.2012 18:59
von Kiffi
ansonsten hätte ich hier noch eine Windows-only Lösung:

Code: Alles auswählen

Procedure AddComboBoxItem(ComboBoxGadget, Text.s)
  
  If SendMessage_(GadgetID(ComboBoxGadget), #CB_FINDSTRING, -1, @Text) = -1
    AddGadgetItem(ComboBoxGadget, -1, Text)
  Else
    Debug Text + " schon vorhanden"
  EndIf
  
EndProcedure


If OpenWindow(0, 0, 0, 270, 180, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ComboBoxGadget(0, 10, 40, 250, -1)
  
  AddComboBoxItem(0, "hallo1")
  AddComboBoxItem(0, "hallo2")
  AddComboBoxItem(0, "hallo3")
  AddComboBoxItem(0, "hallo1") ; der hier ist schon vorhanden und wird nicht eingetragen
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  
EndIf
Grüße ... Kiffi

Re: AddGadgetItem

Verfasst: 29.11.2012 20:14
von kunstlust
Danke Kiffi, das ist supereinfach und schnell eingebaut :bounce:

Gruß Lars