Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Alle Wörter aus einem String in eine Listbox (https://www.delphipraxis.net/3293-alle-woerter-aus-einem-string-eine-listbox.html)

Pseudemys Nelsoni 5. Mär 2003 18:58

Zitat:

Was macht deine Variable Zeichen Die ist lokal deklariert und wird nicht benutzt. Doch, sie wird ja doch benutzt, aber Dein Nick nicht
die nick variable sollte den text enthalten, der nachher in die listbox geaddet wird.

ich teste dein code nochmal

danke für die hilfe ;)

gruss mario

Hansa 5. Mär 2003 19:04

Dann lass Dir den Nick noch vor dem letzten
Code:
end;
anzeigen :!: Im Moment wirst Du aber da wahrscheinlich gar nicht erst ankommen. Offensichtlich stimmt die Ende-Bedingung meiner Schleifen nicht. Und Tschüß.......

Pseudemys Nelsoni 6. Mär 2003 15:34

ich verstehs einfach nicht, bei:

Delphi-Quellcode:
procedure TForm1.IdIRC1Raw(Sender: TObject; AUser: TIdIRCUser; ACommand,
  AContent: String; var Suppress: Boolean);
var s: string;
begin
  SlAdmin := TStringList.Create;
  s := acontent;
  if acommand = '353' then
  begin
    Repeat
      Delete(s, 1, 1);
    Until s[1] = ':';
    Delete(s, 1, 1);
    Repeat
      while s[1] <> ' ' do
        Delete(s, 1, 1);
      Delete(s, 1, 1);
      if s[1] = '!' then
      begin
        SlAdmin.AddObject(Copy(s, 1, Pos(' ', s)), image13.Picture.Bitmap);
        Delete(s, 1, 1);
      end;
    until s = '';
  end;
end;
kommt immer n fehler "zugriffsverletzung auf 3523423" oder so

ist doch alles soweit richtig oder?

gruss mario

Hansa 6. Mär 2003 19:06

Dein Quelltext ist mir zu kompliziert. Damit käme ich nicht weiter. So geht das jetzt, sogar getestet. Mensch, habe mich bestimmt 5mal vertippt bei dem ersten Beispiel, sagt zumindets Delphi.

Code:
procedure TForm1.Button1Click(Sender: TObject);
VAR st : string;
begin
  st := 'ufc_user = #tiberiansun :ufc_user @nick1 @nick2 @nick3 @nick4';
  repeat
    delete (st,1,1)
  until st[1] = ':';  // jetzt nur noch Nicknamen
  delete (st,1,1);     // auch : löschen
  repeat
    ListBox1.Items.Add (copy (st,1,pos (' ',st)-1)); // Nick in Box
    WHILE (st [1] <> ' ') DO
      delete (st,1,1);
    delete (st,1,1);
showmessage (st);
  until st ='';
end;
Lass sowas mal laufen, dann wirst Du merken, daß am Schluß was nicht stimmt. Bei st muß noch ein Zeichen manipuliert werden. Welches :?: Auf diese Spur bringt Dich der Compiler. :mrgreen:

P.S.: ich meine das st am Anfang, nicht, daß Du an den anderen was rumfummelst :!:

Pseudemys Nelsoni 7. Mär 2003 00:07

funzt, danke schön :)

gruss mario

Hansa 7. Mär 2003 00:35

Zitat:

Zitat von silent
funzt, danke schön

Und wieso, bitte sehr ? Erkläre bitte den Haken an der Geschichte! Wo war der Fehler ? Das Thema hat jetzt fast 130 Aufrufe gehabt, oder warst Du das alleine ? Poste am besten mal den ganzen Code. Die Antworten kamen fast alleine von mir.

Pseudemys Nelsoni 7. Mär 2003 01:23

hatte den code extra nicht gepostet, da er unordentlich aussieht und sicher auch zu lang (kürzer krieg ichs halt nicht hin.

Delphi-Quellcode:
procedure TForm1.IdIRC1Raw(Sender: TObject; AUser: TIdIRCUser; ACommand,
  AContent: String; var Suppress: Boolean);
var s, s2: string;
begin
  SlAdmin := TStringList.Create;
  SlOp := TStringList.Create;
  SlHop := TStringList.Create;
  SlVoice := TStringList.Create;
  SlReg := TStringList.Create;
  SlAdmin.Sorted := true;
  SlOp.Sorted := true;
  SlHop.Sorted := true;
  SlVoice.Sorted := true;
  SlReg.Sorted := true;
  s := acontent;
  if acommand = '353' then
  begin
    Repeat
      Delete(s, 1, 1);
    Until s[1] = ':';
    Delete(s, 1, 1);
    Repeat
      if s[1] = '!' then
      begin
        Delete(s, 1, 1);
        SlAdmin.AddObject(Copy(s, 1, Pos(' ', s)), image13.Picture.Bitmap);
        i := i + 1;
        label1.Caption := 'Zur Zeit aktive Benutzer: ' + IntToStr(i);
      end
      else
      if s[1] = '@' then
      begin
        Delete(s, 1, 1);
        SlOp.AddObject(Copy(s, 1, Pos(' ', s)), image12.Picture.Bitmap);
        i := i + 1;
        label1.Caption := 'Zur Zeit aktive Benutzer: ' + IntToStr(i);
      end
      else
      if s[1] = '%' then
      begin
        Delete(s, 1, 1);
        SlHop.AddObject(Copy(s, 1, Pos(' ', s)), image14.Picture.Bitmap);
        i := i + 1;
        label1.Caption := 'Zur Zeit aktive Benutzer: ' + IntToStr(i);
      end
      else
        if s[1] = '+' then
      begin
        Delete(s, 1, 1);
        SlVoice.AddObject(Copy(s, 1, Pos(' ', s)), image15.Picture.Bitmap);
        i := i + 1;
        label1.Caption := 'Zur Zeit aktive Benutzer: ' + IntToStr(i);
      end
      else
        if (s[1] <> '!') OR (s[1] <> '@') OR (s[1] <> '%') OR (s[1] <> '+') then
        begin
          SlReg.AddObject(Copy(s, 1, Pos(' ', s)), image16.Picture.Bitmap);
          i := i + 1;
          label1.Caption := 'Zur Zeit aktive Benutzer: ' + IntToStr(i);
        end;
      while s[1] <> ' ' do
        Delete(s, 1, 1);
      Delete(s, 1, 1);
    until s = '';
    listbox1.Items.AddStrings(SlAdmin);
    listbox1.Items.AddStrings(SlOp);
    listbox1.Items.AddStrings(SlHop);
    listbox1.Items.AddStrings(SlVoice);
    listbox1.Items.AddStrings(SlReg);
  end;
end;
dein code ist da mit drin(sonst würds wohl noch nicht funzen *g*)
musste ihn nur bisschen verlängern für das ganze Op admin hop voice zeug :\

...jo ich weiss "wozu die stringslists", da ich die nicks nach bildern ordne und nicht nach alphabet ging das leider nicht anders(oder doch?) :)

nochmals danke ^^

gruss mario

Pseudemys Nelsoni 7. Mär 2003 17:20

ich glaub ich schaffe das nie sonen dummen chat (und denn noch mit den indy komponenten) fertig zu bekommen :(

Delphi-Quellcode:
procedure TForm1.IdIRC1Raw(Sender: TObject; AUser: TIdIRCUser; ACommand,
  AContent: String; var Suppress: Boolean);
var s, nick: string;
    i: integer;
begin
   SlAdmin := TStringList.Create;
  SlOp := TStringList.Create;
  SlHop := TStringList.Create;
  SlVoice := TStringList.Create;
  SlReg := TStringList.Create;
  SlAdmin.Sorted := true;
  SlOp.Sorted := true;
  SlHop.Sorted := true;
  SlVoice.Sorted := true;
  SlReg.Sorted := true;
  s := acontent;
  if acommand = '353' then
  begin
    Repeat
      Delete(s, 1, 1);
    Until s[1] = ':';
    Delete(s, 1, 1);
    Repeat
      if s[1] = '!' then
      begin
        Delete(s, 1, 1);
        SlAdmin.AddObject(Copy(s, 1, Pos(' ', s)), image13.Picture.Bitmap);
        i := i + 1;
        label1.Caption := 'Zur Zeit aktive Benutzer: ' + IntToStr(i);
      end
      else
      if s[1] = '@' then
      begin
        Delete(s, 1, 1);
        SlOp.AddObject(Copy(s, 1, Pos(' ', s)), image12.Picture.Bitmap);
        i := i + 1;
        label1.Caption := 'Zur Zeit aktive Benutzer: ' + IntToStr(i);
      end
      else
      if s[1] = '%' then
      begin
        Delete(s, 1, 1);
        SlHop.AddObject(Copy(s, 1, Pos(' ', s)), image14.Picture.Bitmap);
        i := i + 1;
        label1.Caption := 'Zur Zeit aktive Benutzer: ' + IntToStr(i);
      end
      else
        if s[1] = '+' then
      begin
        Delete(s, 1, 1);
        SlVoice.AddObject(Copy(s, 1, Pos(' ', s)), image15.Picture.Bitmap);
        i := i + 1;
        label1.Caption := 'Zur Zeit aktive Benutzer: ' + IntToStr(i);
      end
      else
        if (s[1] <> '!') OR (s[1] <> '@') OR (s[1] <> '%') OR (s[1] <> '+') then
        begin
          SlReg.AddObject(Copy(s, 1, Pos(' ', s)), image16.Picture.Bitmap);
          i := i + 1;
          label1.Caption := 'Zur Zeit aktive Benutzer: ' + IntToStr(i);
        end;
      while s[1] <> ' ' do
        Delete(s, 1, 1);
      Delete(s, 1, 1);
    until s = '';
    listbox1.Items.AddStrings(SlAdmin);
    listbox1.Items.AddStrings(SlOp);
    listbox1.Items.AddStrings(SlHop);
    listbox1.Items.AddStrings(SlVoice);
    listbox1.Items.AddStrings(SlReg);
  end; // BIS HIER HIN AUF DAS "ONNAMES" EREIGNIS
  if Copy(s, 14, 2) = '+a' then
  begin
    nick := s;
    delete(nick, 1, 16);
    SlAdmin.AddObject(nick, image13.Picture.Bitmap);
    for i := 0 to SlOP.IndexOf(nick) do
    begin
      if SlOp.IndexOf(nick) > 0 then
      SlOP.Delete(i);
    end;
    for i := 0 to SlHop.IndexOf(nick) do
    begin
      if SlOp.IndexOf(nick) > 0 then
      SlHop.Delete(i);
    end;
    for i := 0 to SlVoice.IndexOf(nick) do
    begin
      if SlOp.IndexOf(nick) > 0 then
      SlVoice.Delete(i);
    end;
    for i := 0 to SlOP.IndexOf(nick) do
    begin
      if SlReg.IndexOf(nick) > 0 then
      SlReg.Delete(i);
    end;
    listbox1.Clear;
    listbox1.Items.AddStrings(SlAdmin);
    listbox1.Items.AddStrings(SlOp);
    listbox1.Items.AddStrings(SlHop);
    listbox1.Items.AddStrings(SlVoice);
    listbox1.Items.AddStrings(SlReg);
    end;   // BIS HIER HIN AUF DAS "+a" EREIGNIS
  end;
end;
^^^^^^^^^^^^^^ das ist allein um bei "OnNames" die Nicks aus dem String "= #chan :nick nick2 nick3"(usw) auszulesen und sie in die Stringlists Sladmin, Slop usw einzufügen und von da aus in die Listbox.
ich meine das muss doch auch kürzer gehn für sone kleinigkeit..

gibts nicht irgendwie ne andere lösung? weil dadurch das es soviel ist (da unter soll noch code folgen) komm ich mit dem ganzen nichtmehr klar.
der code der auf das +a reagieren soll funzt z.b nicht richtig.

für jede hilfe dankbar

gruss mario

Hansa 7. Mär 2003 17:52

Das ist viel zu viel, für einen Fehler zu finden. Du mußt das Problem reduzieren und eingrenzen. Ich hab Dir doch gesagt, daß mein Beispeil geht, allerdings nur, sofern mit dem st noch etwas passiert :!:

Code:
 
st := 'ufc_user = #tiberiansun :ufc_user @nick1 @nick2 @nick3 @nick4';
@nick4 ist etwas anders als die anderen drei ! Auch nützt es nix, wenn Du schreist: "Mama, mein Programm geht nicht!" :mrgreen: Wo geht was micht ?

Pseudemys Nelsoni 7. Mär 2003 19:04

Also ich hatte mir das so vorgestellt, das ich bei dem Ereignis "OnRAW"(353(/names)), aus dem String "silent = #tiberiansun :!silent @Benny @Stoja @oXyGeN %sysop %stalin +NewbiLike" die nicks auslese, also alles nach dem ":". Die Nicks mit dem "!" vor dem Nick kommen in die Stringlist "SlAdmin", die mit "@" in die "SlOP"...das gleiche mit hop voice und regulären nicks. Danach kommen die Stringlists in die Listbox, erst admins dann ops dann hops dann voice dann reg.
btw: das erste zeichen jedes nicks muss weg, also der prefix, da ich ein bild stattdessen nehme


^^^^ das ist allein fürs chan joinen (also onnames)


Sagen wir mal jemand setzt den mode "+a", dann muss ich in dem String "#tiberiansun +a silent" gucken obs auch "+a" ist (kann ja auch +o -a etc sein), und schlisslich muss ich das letzte Wort(den nick) rausnehmen, ihn in die Stringlist "SlAdmin" packen und die anderen Stringlists "SlOP, SlHop, SlVoice, SlReg" überprüfen in welcher Stringlist der nick vor dem +a war und ihn daraus löschen. Wenn ich das hab Lösch ich die Listbox1 und füge wieder alle Stringlists in die Listbox1.

ist bisschen viel oder? :(

gruss mario


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:17 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz