Ĺadny brzuch
Witam. Piszę sobie bota irc w delphi.
I mam problem. Przy wchodzeniu na kanał, ludzie są dodawani do valuelisteditora [kanal] [osoba].
I to mi pasuje, bo przy wychodzeniu z kanału, tylko szukam po keyu nazwy kanału z którego wychodze i mi ładnie wywala użytkowników z danego kanału.
Wszystko ok gdy ktoś dochodzi do kanału, ładnie dodaje.
Ale jak zrobić żeby usuwał człowieka z tego valuelisteditora cłowieka po nicku?
Czyli jak ktoś odchodzi, to mam jedo nick i chcę żeby go usunęło z valuelisteditora.
Ma ktoś jakieś pomysły?
Tak to wszystko wygląda: http://img408.images...3/screenan3.jpg
function FindRowByValue(vle: TValueListEditor; value: String): integer;[color="#F8FCFF"] //by DJ ProG[/color] var i, t2: integer; t1, val: string; begin Result := -1; for i:=0 to vle.Strings.Count-1 do begin t1 := vle.Strings.Strings[ i ]; t2 := pos('=',t1); if (t2<>0) then begin val := copy(t1,t2+1,length(t1)-t2+1); if (val = value) then begin Result := i; break; end; end; end; end; procedure TForm1.Button1Click(Sender: TObject); const nick = 'super_user_nick'; begin while (FindRowByValue(ValueListEditor1,nick)<>-1) do ValueListEditor1.DeleteRow( FindRowByValue(ValueListEditor1,nick)+1 ); end;
Funkcja FindRowByValue zwraca pozycje pierwszego napotkanego wiersza, zawierającego szukaną wartość, licząc od 0. Jeśli jej nie będzie, zwracana będzie wartość -1.
Pętla while pokazana w przykładzie usuwa wszystkie linie, zawierające daną wartość.
Użytkownik DJ_ProG edytował ten post 22 luty 2007, 14:53
O, dzięki. Spoko.
Tylko jest jeden problem.
Da się tam jeszcze wcisnąc nazwę kanału? Bo jak ktoś jest na 2 kanałach to go z obu wywali :)
Heh, skoro tak, to można prościej ;)
var i:integer; const rName = 'nazwa_pokoju'; uName = 'nazwa_usera'; begin for i:=ValueListEditor1.Strings.Count-1 downto 0 do begin if (ValueListEditor1.Strings.Strings[ i ]=rName+'='+uName) then ValueListEditor1.DeleteRow(i+1); end; end;
Ale jeśli chcesz się pobawić, masz zmieniony mój powyższy kodzik :)
function FindRowByValue(vle: TValueListEditor; key, value: String): integer;[color="#F8FCFF"] //by DJ ProG[/color] var i, t2: integer; t1, kej, val: string; begin Result := -1; for i:=0 to vle.Strings.Count-1 do begin t1 := vle.Strings.Strings[ i ]; t2 := pos('=',t1); if (t2<>0) then begin kej := copy(t1,0,t2-1); val := copy(t1,t2+1,length(t1)-t2+1); if ((val = value) and (kej = key)) then begin Result := i; break; end; end; end; end;(a w wyłołaniu przed parametrem wartości daj parametr z kluczem ;))
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
I mam problem. Przy wchodzeniu na kanał, ludzie są dodawani do valuelisteditora [kanal] [osoba].
I to mi pasuje, bo przy wychodzeniu z kanału, tylko szukam po keyu nazwy kanału z którego wychodze i mi ładnie wywala użytkowników z danego kanału.
Wszystko ok gdy ktoś dochodzi do kanału, ładnie dodaje.
Ale jak zrobić żeby usuwał człowieka z tego valuelisteditora cłowieka po nicku?
Czyli jak ktoś odchodzi, to mam jedo nick i chcę żeby go usunęło z valuelisteditora.
Ma ktoś jakieś pomysły?
Tak to wszystko wygląda: http://img408.images...3/screenan3.jpg
function FindRowByValue(vle: TValueListEditor; value: String): integer;[color="#F8FCFF"] //by DJ ProG[/color] var i, t2: integer; t1, val: string; begin Result := -1; for i:=0 to vle.Strings.Count-1 do begin t1 := vle.Strings.Strings[ i ]; t2 := pos('=',t1); if (t2<>0) then begin val := copy(t1,t2+1,length(t1)-t2+1); if (val = value) then begin Result := i; break; end; end; end; end; procedure TForm1.Button1Click(Sender: TObject); const nick = 'super_user_nick'; begin while (FindRowByValue(ValueListEditor1,nick)<>-1) do ValueListEditor1.DeleteRow( FindRowByValue(ValueListEditor1,nick)+1 ); end;
Funkcja FindRowByValue zwraca pozycje pierwszego napotkanego wiersza, zawierającego szukaną wartość, licząc od 0. Jeśli jej nie będzie, zwracana będzie wartość -1.
Pętla while pokazana w przykładzie usuwa wszystkie linie, zawierające daną wartość.
Użytkownik DJ_ProG edytował ten post 22 luty 2007, 14:53
O, dzięki. Spoko.
Tylko jest jeden problem.
Da się tam jeszcze wcisnąc nazwę kanału? Bo jak ktoś jest na 2 kanałach to go z obu wywali :)
Heh, skoro tak, to można prościej ;)
var i:integer; const rName = 'nazwa_pokoju'; uName = 'nazwa_usera'; begin for i:=ValueListEditor1.Strings.Count-1 downto 0 do begin if (ValueListEditor1.Strings.Strings[ i ]=rName+'='+uName) then ValueListEditor1.DeleteRow(i+1); end; end;
Ale jeśli chcesz się pobawić, masz zmieniony mój powyższy kodzik :)
function FindRowByValue(vle: TValueListEditor; key, value: String): integer;[color="#F8FCFF"] //by DJ ProG[/color] var i, t2: integer; t1, kej, val: string; begin Result := -1; for i:=0 to vle.Strings.Count-1 do begin t1 := vle.Strings.Strings[ i ]; t2 := pos('=',t1); if (t2<>0) then begin kej := copy(t1,0,t2-1); val := copy(t1,t2+1,length(t1)-t2+1); if ((val = value) and (kej = key)) then begin Result := i; break; end; end; end; end;(a w wyłołaniu przed parametrem wartości daj parametr z kluczem ;))