Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Befehle erstellen (https://www.delphipraxis.net/105648-befehle-erstellen.html)

k4ni 26. Dez 2007 22:41


Befehle erstellen
 
Hey,

Ich bin schon eine zeit lang am überlegen wie, z.b mIRC oder xchat (oder andere irc clienten) diese befehle erkennen.
z.B. "/kick k4ni lalalala" das würde dann den kick befehl erkennen, nach dem ersten leerzeichen den Nicknamen wen es kicken soll und nach dem nächsten leerzeichen den grund.
Doch wie hält es diese aussagen auseinander?
Wie könnt ich was selber mache, da ich ya zurzeit an einem chat programm arbeite?

Ich hab es zurzeit nur etwa so:
Delphi-Quellcode:
if Msg.Text = '/kick '+Nickname then ... .. ..
Danke :)

fLaSh11 26. Dez 2007 22:51

Re: Befehle erstellen
 
schau dir mal die Funktion Delphi-Referenz durchsuchenCopy an

himitsu 26. Dez 2007 23:04

Re: Befehle erstellen
 
du mußt praktisch nur prüfen ob der Text mit dem Befehl beginnt und das nach dem Befehl als Befehlsparameter (z.B. den Namen) ansehn.

if copy(Msg.Text, 1, 6) = '/kick ' then begin
name := copy(Msg.Text, 7, ...)
...
end

Dax 26. Dez 2007 23:10

Re: Befehle erstellen
 
SplitSplit und Delphi-Referenz durchsuchenTrim sind ebenfalls deine Freunde ;)

fLaSh11 26. Dez 2007 23:12

Re: Befehle erstellen
 
Zitat:

Zitat von himitsu
if copy(Msg.Text, 1, 6) = '/kick ' then begin
name := copy(Msg.Text, 7, ...)
...
end

Nicht zu empfehlen... was ist, wenn der Befehl einmal lauten sollte "/abrakadabra" dann ist nichts mehr mit Copy(Text, 1, 6). 8)

Wenn dann lieber so:

Delphi-Quellcode:
if s[1] = '/' then // Prüfen, ob Befehl!
  begin
    befehl := Copy(s, 2, Pos(' ', s) - 1); //dynamisch den Befehl abfragen
    if befehl = 'kick' then
      user := Copy(s, Pos(' ', s) + 1, Length(s)); //wenn Befehl "kick" dann schauen, welchen User
  end;
Das mit dem dynamischen Überprüfen solltest du dir zu Gemüte führen... versteht man nicht auf Anhieb :zwinker:

Dax 26. Dez 2007 23:19

Re: Befehle erstellen
 
' /kick k4ni' ist aber auch ein Befehl ;)

k4ni 26. Dez 2007 23:29

Re: Befehle erstellen
 
Zitat:

Zitat von fLaSh11
Delphi-Quellcode:
if s[1] = '/' then // Prüfen, ob Befehl!
  begin
    befehl := Copy(s, 2, Pos(' ', s) - 1); //dynamisch den Befehl abfragen
    if befehl = 'kick' then
      user := Copy(s, Pos(' ', s) + 1, Length(s)); //wenn Befehl "kick" dann schauen, welchen User
  end;
Das mit dem dynamischen Überprüfen solltest du dir zu Gemüte führen... versteht man nicht auf Anhieb :zwinker:

Also beim erstenmal hinschauen dacht ich mir "omg..." aber jetz blick ich das alles :) Danke,

Also sollte das 'k4ni" anzeigen wenn in Msg.Text "/kick k4ni" eingeb, oder nicht?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
befehl, user, s: string;
begin
S := Msg.Text;
if s[1] = '/' then // Prüfen, ob Befehl!
  begin
    befehl := Copy(s, 2, Pos(' ', s) - 1); //dynamisch den Befehl abfragen
    if befehl = 'kick' then
      user := Copy(s, Pos(' ', s) + 1, Length(s)); //wenn Befehl "kick" dann schauen, welchen User
  end;
  ShowMessage(user);
 end;
Tut es aber nicht :(

Dax 26. Dez 2007 23:34

Re: Befehle erstellen
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
befehl, user, s: string;
const befehlOffset = 2; // erstes zeichen eines befehls
begin
S := Msg.Text;
if s[1] = '/' then // Prüfen, ob Befehl!
  begin
    befehl := Copy(s, befehlOffset, Pos(' ', s) - befehlOffset); //dynamisch den Befehl abfragen
    if befehl = 'kick' then
      user := Copy(s, Pos(' ', s) + 1, Length(s)); //wenn Befehl "kick" dann schauen, welchen User
  end;
  ShowMessage(user);
end;

TonyR 26. Dez 2007 23:40

Re: Befehle erstellen
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
befehl, user, s: string;
begin
S := '/kick k4ni'; //oder eben MSG.text
if s[1] = '/' then // Prüfen, ob Befehl!
  begin
    befehl := Copy(s, 2, Pos(' ', s) - 2); //DA IST JETZ NE 2 STATT NER 1
    if befehl = 'kick' then
      user := Copy(s, Pos(' ', s) + 1, Length(s)); //wenn Befehl "kick" dann schauen, welchen User
  end;
  // ShowMessage('#'+befehl+'#'); hatte ich nur zum debuggen genutzt
  ShowMessage(user);
end;

k4ni 27. Dez 2007 00:08

Re: Befehle erstellen
 
Danke!
Doch ich will ya noch einen grund angeben.
Also etwa so:
Syntax: /kick <name> <reason>
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
befehl, user, s, reason: string;
begin
S := MSG.text;
if s[1] = '/' then // Prüfen, ob Befehl!
  begin
    befehl := Copy(s, 2, Pos(' ', s) - 2); //DA IST JETZ NE 2 STATT NER 1
    if befehl = 'kick' then
      user := Copy(s, Pos(' ', s) + 1, Length(s));
      reason := Copy(s, Pos(user, s) + 1, Length(s));
  end;
  ShowMessage(user+' wurde gekickt, reason: '+reason);
end;
Doch ich kann Ja das ende des namens nichtmehr mit der länge des Strings festlegen weil es jetzt ja weitergeht.
Und die position des reasons fest zu stellen geht glaub auch nicht so wie ich das hab..


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:32 Uhr.
Seite 1 von 2  1 2      

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