![]() |
Anzeige:
|
|
|||||||
| Anregungen & Bugreports Für Vorschläge an den Autor Roland und neue XProfan-Versionen |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.089
|
Für Listboxen, Choiceboxen & Co sollte es eine schnelle Möglichkeit geben, doppelte Einträge zu entfernen. Hierbei sollte man wählen können, ob die Klein/Großschreibung beachtet werden soll oder nicht, und ob der Suchtext einem ganzen Eintrag entsprechen soll, oder nur einem Teil davon.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. Geändert von Frabbing (17.01.2010 um 00:15 Uhr) |
|
|
|
|
|
|
#2 (Direktlink) | |
|
MoRoGeP-Träger 2011
![]() Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.875
|
@Frank
So wäre mein Anfang - wenn ich wieder Zeit habe, mache ich weiter Zitat:
__________________
Gruss, horst Computer werden kleiner und kleiner, bald verschwinden sie völlig. (Ephraim Kishon 1924-2005) http://www.web-treffpunkt.de |
|
|
|
|
|
|
#3 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
|
Das klappt aber nur bei sortierten Listen!
__________________
XProfan-Profi (XProfan X2+XPIA) http://jacdelad.bplaced.net http://jacdelad.square7.ch |
|
|
|
|
|
#4 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
|
Du hast den Code nicht getestet! Ich auch nicht, aber probier ihn mal aus. Er müsste einen Fehler erzeugen, weil anz% größer ist als die Anzahl der Einträge, wenn ein Eintrag gelöscht wird. :P
__________________
XProfan-Profi (XProfan X2+XPIA) http://jacdelad.bplaced.net http://jacdelad.square7.ch |
|
|
|
|
|
#5 (Direktlink) | |
|
MoRoGeP-Träger 2011
![]() Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.875
|
@Jac
Selber testen macht schlau ! Zitat:
Wenn möglich, nicht soviel API ! Es geht auch mit XProfan - wie gesagt, habe keine Zeit im Moment Aber ich werde "dem Schwein schon schlachten
__________________
Gruss, horst Computer werden kleiner und kleiner, bald verschwinden sie völlig. (Ephraim Kishon 1924-2005) http://www.web-treffpunkt.de |
|
|
|
|
|
|
|
#6 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
|
Wenn man es aber mal lögisch überdenkt kann die Schleife nicht bis zu Ende geführt werden, wenn Eintrgeäge gelöscht werden, da GetCount(list&) dann weniger ist. Besser wäre:
Code:
DECLARE list1&
DECLARE anz%,I%
DECLARE txt$,txt1$
PROC DATEN01 'anstelle dieser Daten kann alles andere eingeladen werden
CLEARLIST
ADDSTRING(list1&,"1. Zeile")
ADDSTRING(list1&,"2. Zeile")
ADDSTRING(list1&,"3. Zeile")
ADDSTRING(list1&,"4. Zeile")
ADDSTRING(list1&,"5. Zeile")
ADDSTRING(list1&,"5. Zeile") 'die Zeile ist doppelt
ADDSTRING(list1&,"6. Zeile")
ADDSTRING(list1&,"7. Zeile")
ADDSTRING(list1&,"8. Zeile")
ADDSTRING(list1&,"9. Zeile")
ADDSTRING(list1&,"0. Zeile")
ENDPROC
CLS
list1&=CREATE("LISTBOX",%HWnd,"",100,20,200,300)
DATEN01
'anz%=GETCOUNT(list1&)
'WHILENOT I% = anz%
whileloop Getcount(list1&)-2,0,-1
txt$=GETSTRING$(list1&,&Loop)
txt1$=GETSTRING$(list1&,(&Loop+1))
CASE txt1$=txt$: DELETESTRING(list1&,&Loop)
ENDWHILE
WAITINPUT
Jac
__________________
XProfan-Profi (XProfan X2+XPIA) http://jacdelad.bplaced.net http://jacdelad.square7.ch |
|
|
|
|
|
#7 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.776
|
Mmmh...
Code:
'##################################################################################### '######### Code von AHT ######### '######### Gepostet für http://www.paules-pc-forum.de ######### '##################################################################################### declare ListBox& WindowStyle 31 + 512 WindowTitle "Doppelte Listboxeinträge löschen" Window 0, 0 - 640, 440 UserMessages $10 ListBox&=Create("ListBox", %HWND, "", 20, 20, 580, 330) Addstring(ListBox&, "Test 1") Addstring(ListBox&, "Test 2") Addstring(ListBox&, "Test 3") Addstring(ListBox&, "Test 1") Addstring(ListBox&, "Test 1") Addstring(ListBox&, "Test 4") Addstring(ListBox&, "Test 1") Addstring(ListBox&, "Test 1") Addstring(ListBox&, "Test 5") Addstring(ListBox&, "Test 1") Addstring(ListBox&, "Test 1") Addstring(ListBox&, "Test 1") Addstring(ListBox&, "Test 2") Addstring(ListBox&, "Test 3") Addstring(ListBox&, "Test 1") Addstring(ListBox&, "Test 1") Addstring(ListBox&, "Test 4") Addstring(ListBox&, "Test 1") Addstring(ListBox&, "Test 11") Addstring(ListBox&, "Test 1") Addstring(ListBox&, "Test 5") Addstring(ListBox&, "Test 1") Addstring(ListBox&, "Test 1") Sleep 2000 Delete_Listox_Doubles(ListBox&) While %Umessage <> $10 Waitinput wend Proc Delete_Listox_Doubles Parameters LBox& Declare LBOXCounter&, LBOXString$, FoundLB& clear LBOXCounter& While LBOXCounter& < (GetCount(LBox&) - 1) LBOXString$=GetString$(LBox&, LBOXCounter&) FoundLB& = SendMessage(LBox&, $18F, LBOXCounter&, addr(LBOXString$)) While FoundLB& <> LBOXCounter& IF (LBOXString$ = GetString$(LBox&, FoundLB&)) and (LBOXCounter& <> FoundLB&) DeleteString(LBox&,FoundLB&) FoundLB& = SendMessage(LBox&, $18F, int(FoundLB& - 1), addr(LBOXString$)) else FoundLB& = SendMessage(LBox&, $18F, FoundLB&, addr(LBOXString$)) endif EndWhile LBOXCounter& = LBOXCounter& + 1 EndWhile Return endproc
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT |
|
|
|
|
|
#8 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Wie wäre es denn wenn man gar nicht erst einträgt was schon da ist, dann muss man es auch nicht mehr austragen
Code:
DECLARE list1&
Proc AddStringListe
Parameters Liste&,S$
If SendMessage(Liste&,$01A2,-1,Addr(S$)) = -1' LB_FINDSTRINGEXACT
ADDSTRING(Liste&,S$)
Endif
Endproc
PROC DATEN01 'anstelle dieser Daten kann alles andere eingeladen werden
CLEARLIST
ADDSTRINGListe(list1&,"1. Zeile")
ADDSTRINGListe(list1&,"2. Zeile")
ADDSTRINGListe(list1&,"3. Zeile")
ADDSTRINGListe(list1&,"4. Zeile")
ADDSTRINGListe(list1&,"5. Zeile")
ADDSTRINGListe(list1&,"5. Zeile") 'die Zeile ist doppelt
ADDSTRINGListe(list1&,"6. Zeile")
ADDSTRINGListe(list1&,"6. Zeile") ' diese auch
ADDSTRINGListe(list1&,"7. Zeile")
ADDSTRINGListe(list1&,"8. Zeile")
ADDSTRINGListe(list1&,"9. Zeile")
ADDSTRINGListe(list1&,"0. Zeile")
ENDPROC
CLS
list1&=CREATE("LISTBOX",%HWnd,"",100,20,200,300)
DATEN01
WAITINPUT
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher |
|
|
|
|
|
#9 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.776
|
...gemein, du hast dich nicht an die Fragestellung gehalten
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT |
|
|
|
|
|
#10 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Stimmt. Und so geht es mit genauerer Prüfung Code:
DECLARE list1&
Proc AddStringListe
Parameters Liste&,S$,Zeile&,Comp$
Zeile& = SendMessage(Liste&,$01A2,-1,Addr(S$))' LB_FINDSTRINGEXACT
If Zeile& = -1
ADDSTRING(Liste&,S$)
else
Comp$ = GetString$(Liste&,Zeile&)
If External("kernel32.dll","lstrcmp",Addr(Comp$),Addr(S$)) <> 0
ADDSTRING(Liste&,S$)
Endif
Endif
Endproc
PROC DATEN01 'anstelle dieser Daten kann alles andere eingeladen werden
CLEARLIST
ADDSTRINGListe(list1&,"1. Zeile")
ADDSTRINGListe(list1&,"2. Zeile")
ADDSTRINGListe(list1&,"3. Zeile")
ADDSTRINGListe(list1&,"4. Zeile")
ADDSTRINGListe(list1&,"5. Zeile")
ADDSTRINGListe(list1&,"5. Zeile") 'die Zeile ist doppelt
ADDSTRINGListe(list1&,"6. Zeile")
ADDSTRINGListe(list1&,"6. zeile") ' diese nicht !
ADDSTRINGListe(list1&,"7. Zeile")
ADDSTRINGListe(list1&,"8. Zeile")
ADDSTRINGListe(list1&,"9. Zeile")
ADDSTRINGListe(list1&,"0. Zeile")
ENDPROC
CLS
list1&=CREATE("LISTBOX",%HWnd,"",100,20,200,300)
DATEN01
WAITINPUT
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher |
|
|
|
|
|
|
#11 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.776
|
Warum musst du das genauer prüfen?
Ich glaube, deine erste Prozedur war schon so in Ordnung...
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT Geändert von AHT (17.01.2010 um 14:47 Uhr) |
|
|
|
|
|
#12 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Nein, da wurde nicht auf Gross- Kleinschreibung geprüft.
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher |
|
|
|
|
|
#13 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
|
Also soviel ich weiß ist die Groß und Kleinschreibung bei LB_FINDSTRINGEXACT egal.
The search is not case sensitive, so this string can contain *** combination of uppercase and lowercase letters. Aber um bei der Fragestellung zu bleiben denke ich der Code von Andreas etwas abgewandelt dürfte die schnellste Methode sein. Code:
DECLARE list1&
Proc AddStringListe
Parameters Liste&,S$
If SendMessage(Liste&,$01A2,-1,Addr(S$)) = -1' LB_FINDSTRINGEXACT
ADDSTRING(Liste&,S$)
Endif
Endproc
PROC DATEN01 'anstelle dieser Daten kann alles andere eingeladen werden
CLEARLIST
ADDSTRING(list1&,"1. Zeile")
ADDSTRING(list1&,"2. Zeile")
ADDSTRING(list1&,"3. Zeile")
ADDSTRING(list1&,"4. Zeile")
ADDSTRING(list1&,"5. Zeile")
ADDSTRING(list1&,"5. Zeile") 'die Zeile ist doppelt
ADDSTRING(list1&,"6. Zeile")
ADDSTRING(list1&,"6. Zeile") ' diese auch
ADDSTRING(list1&,"7. Zeile")
ADDSTRING(list1&,"8. Zeile")
ADDSTRING(list1&,"9. Zeile")
ADDSTRING(list1&,"0. Zeile")
ENDPROC
CLS
list1&=CREATE("LISTBOX",%HWnd,"",100,20,200,300)
DATEN01()
Print "Taste für Start"
waitinput
clearlist
movehandletolist(list1&)
clearlist list1&
whileloop 0,%getcount
AddStringListe(list1&,listboxitem$(&loop))
endwhile
WAITINPUT
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai. http://dieterzornow.gmxhome.de |
|
|
|
|
|
#14 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.776
|
Ahhh - ist mir nicht aufgefallen, danke!
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT |
|
|
|
|
|
#15 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.089
|
Klar, meine Lösung ist ja ähnlich. Nur eben dauern diese Schleifen von der Ausführung her lange (bei vielen Einträgen), sodass eine native Lösung wünschenswert wäre. Ein DeleteDouble$(...) für Listbox/GridBox/Choicebox/Edit wäre doch klasse.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| suche programm möglichst freeware, um doppelte MP3 entfernen | DonChilla | Software - Allgemein | 8 | 29.05.2007 21:21 |
| Doppelte Einträge im Kontextmenü | Christian Bommers | Windows 95/98/ME/2000/NT | 3 | 17.06.2005 22:47 |
| doppelte Dateien entfernen | Jupp | Software - Allgemein | 8 | 28.03.2005 01:21 |
| Software-einträge entfernen!? | Bond | Allgemein | 2 | 11.01.2005 13:26 |
| Aufräumen doppelte Dateien finden und entfernen | Claudia. | Software - Allgemein | 2 | 07.12.2004 13:40 |