procedure TForm1. IdIRCServer1CommandPrivMsg(Thread: TIdPeerThread; Parm1, Parm2: String); var i, j :Integer; baglanti, baglanti2 :BaglantiBilgisi; begin Memo1. Lines. Add('privmsg '+parm1+';'+parm2); baglanti:=Pointer ; if copy(parm1,1,1)='#' then //mesaj odayaysa begin for i:=1 to 10 do begin if oda<i> . OdaAdi=parm1 then begin //odadaki diğer kullanıcılara mesaj gönder for j:=0 to oda<i> . Nickler. Count-1 do begin baglanti2:=Pointer ; if baglanti2. Nick<>Baglanti. Nick then //kendisine gönderme TIdPeerThread(Baglanti2. Thread). Connection. WriteLn(':'+Baglanti. Nick+'!'+Baglanti. UserName+'@'+Baglanti. DNS+' PROVMSG '+parm1+' '+parm2); end; end; end; end else //mesaj nickeyse begin for i:=0 to baglantilar. Count-1 do begin baglanti2 :=Pointer ; if baglanti2. Nick=parm1 then TIdPeerThread(Baglanti2. Thread). Connection. WriteLn(':'+Baglanti. Nick+'!'+Baglanti. UserName+'@'+Baglanti. DNS+' PRIVMSG '+parm1+' '+parm2); end; end; end; procedure TForm1. IdIRCServer1CommandList(Thread: TIdPeerThread; Parm1, Parm2: String); var i :Integer; Baglanti :BaglantiBilgisi; begin baglanti:=Pointer ; Thread. Connection. WriteLn(':'+Baglanti. ServerName+' 331 '+Baglanti. Nick+' Channel :User Name'); for i:=1 to 10 do if oda<i> . OdaAdi<>'-1' then Thread. Connection. WriteLn(':'+Baglanti. ServerName+' 322 '+baglanti. Nick+' '+oda<i> . OdaAdi+' '+IntToStr ; Thread. Connection. WriteLn(':'+Baglanti. ServerName+' 323 '+baglanti. Nick+' :End of /LIST'); Memo1. Lines. Add('list '+parm1+';'+parm2); end; procedure TForm1. IdIRCServer1CommandWhoIs(Thread: TIdPeerThread; Parm1, Parm2: String); var i, j, k :Integer; baglanti, baglanti2, baglanti3 :BaglantiBilgisi; odalar :String; begin Memo1. Lines. Add('whois '+parm1+';'+parm2); baglanti3:=Pointer ; odalar:=''; for k:=0 to baglantilar. Count-1 do begin baglanti :=Pointer ; if baglanti. Nick=parm1 then //whois istenen nick buysa begin //hangi odalarda olduğunu bul for i:=1 to 10 do begin if oda<i> . OdaAdi<>'-1' then //bu oda açıksa begin for j:=0 to oda<i> . Nickler. Count-1 do begin baglanti2:=Pointer ; if baglanti2. Nick=baglanti. Nick then //bu odada varsa odalar:=odalar+' '+oda<i> . OdaAdi; end; end; end; TIdPeerThread(baglanti3. Thread). Connection. WriteLn(':'+Baglanti. ServerName+' 311 '+Baglanti. UserName+' '+Baglanti. Nick+' '+Baglanti. UserName+'@'+Baglanti. DNS); TIdPeerThread(baglanti3. Thread). Connection. WriteLn(':'+Baglanti. ServerName+' 319 '+Baglanti. UserName+' '+Baglanti. Nick+':'+odalar); TIdPeerThread(baglanti3. Thread). Connection. WriteLn(':'+Baglanti. ServerName+' 312 '+Baglanti. UserName+' '+Baglanti. Nick+' '+Baglanti. ServerName); TIdPeerThread(baglanti3. Thread). Connection. WriteLn(':'+Baglanti. ServerName+' 318 '+Baglanti. UserName+' '+Baglanti. Nick+' :End of WHOIS list.'); break; end; end; end; procedure TForm1. IdIRCServer1CommandTime ; var baglanti:BaglantiBilgisi; begin Memo1. Lines. Add ; Baglanti:=Pointer ; TIdPeerThread . Connection. WriteLn(':'+Baglanti. ServerName+' 391 '+Baglanti. Nick+' '+Baglanti. ServerName+' :'+DateTimeToStr(Now ; end; procedure TForm1. IdIRCServer1CommandUserHost ; var baglanti, baglanti2 :BaglantiBilgisi; k :Integer; begin Memo1. Lines. Add ; Baglanti:=Pointer ; for k:=0 to Baglantilar. Count-1 do begin baglanti2:=Pointer ; if baglanti2. Nick=parm then //hostu istenen nick buysa begin TIdPeerThread . Connection. WriteLn(':'+Baglanti2. Nick+'=+'+Baglanti2. DNS); break; end; end; end; procedure TForm1. IdIRCServer1CommandVersion ; var baglanti :BaglantiBilgisi; begin Memo1. Lines. Add ; Baglanti:=Pointer ; TIdPeerThread . Connection. WriteLn(':'+Baglanti. ServerName+' 351 '+Baglanti. Nick+' Heavy IRC Server 1.0'); end; end. Arkadaşlar bunu şahsen denemedim ama deneyip buraya yorumlarını yazanlar olursa sevinirim. bende çok basit haliyle yapmıştım fakat kanallara filan girilemiyordu. Saygılar...

teşekkür ederim peki algoritmayla ilgili bir döküman falan bulamazmıyım?...

LOGİC ben ısrarla C ögrenmek istiyorum ama senin sayende delphi de ögrencez alt yapı hiç olmadıgı için senin yazdıklarından bir şey anlamam diye bakmıyorum bile ama bunları C diline nasıl çevirebiliriz...

//1 memo 2 listbox bir de Indy server sekmesindeki ircserver compenti koyun unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPServer, IdIrcServer, StdCtrls; type TForm1 = class Memo1: TMemo; ListBox1: TListBox; bi: TListBox; IdIRCServer1: TIdIRCServer; procedure FormCreate ; procedure FormClose ; procedure IdIRCServer1Connect ; procedure IdIRCServer1CommandUser ; procedure IdIRCServer1CommandNick(Thread: TIdPeerThread; Parm1, Parm2: String); procedure IdIRCServer1CommandJoin(Thread: TIdPeerThread; Parm1, Parm2: String); procedure IdIRCServer1CommandPart ; procedure IdIRCServer1CommandQuit ; procedure IdIRCServer1CommandPrivMsg(Thread: TIdPeerThread; Parm1, Parm2: String); procedure IdIRCServer1CommandList(Thread: TIdPeerThread; Parm1, Parm2: String); procedure IdIRCServer1CommandWhoIs(Thread: TIdPeerThread; Parm1, Parm2: String); procedure IdIRCServer1CommandTime ; procedure IdIRCServer1CommandUserHost ; procedure IdIRCServer1CommandVersion ; private public end; type BaglantiBilgisi =class DNS, UserName, Nick, ServerName, RealName :String; BaglantiNo :Integer; Thread ointer; end; type Odalar =record OdaAdi :String; KullaniciSayisi:Integer; Nickler :TList; end; var Form1: TForm1; Baglantilar :TList; Oda :Array of Odalar; implementation procedure TForm1. FormCreate ; var i:Integer; begin IdIRCServer1. DefaultPort:=6667; IdIRCServer1. Active :=True; for i:=1 to 10 do begin oda<i> . OdaAdi:='-1'; oda<i> . Nickler:=TList. Create; end; Baglantilar:=TList. Create; end; procedure TForm1. FormClose ; var i:Integer; begin for i:=1 to 10 do oda<i> . Nickler. Free; Baglantilar. Free; end; procedure TForm1. IdIRCServer1Connect ; var Baglanti:BaglantiBilgisi; begin Memo1. Lines. Add ; Baglanti :=BaglantiBilgisi. Create; //Baglanti. DNS :=AThread. Connection. Binding. PeerIP; Baglanti. UserName :='-'; Baglanti. BaglantiNo:=ListBox1. Items. Count; Baglanti. Thread :=AThread; AThread. Data :=Baglanti; Baglantilar. Add ; AThread. Connection. WriteLn ; end; procedure TForm1. IdIRCServer1CommandUser ; var baglanti:BaglantiBilgisi; begin Baglanti:=Pointer ; Memo1. Lines. Add ; Thread. Connection. WriteLn ; Thread. Connection. WriteLn ; Thread. Connection. WriteLn ; Thread. Connection. WriteLn ; Baglanti. UserName :=UserName; Baglanti. ServerName:=ServerName; Baglanti. RealName :=RealName; end; procedure TForm1. IdIRCServer1CommandNick(Thread: TIdPeerThread; Parm1, Parm2: String); var baglanti, baglanti2 :BaglantiBilgisi; nick :String; begin baglanti:=Pointer ; nick :=Parm1; Memo1. Lines. Add('CommandNick '+parm1+', '+parm2); if copy(nick,1,1)=':' then //nick değişme işlemiyse nick:=copy(parm1,2,100); //nickin 2. harfinden sonrasını al if ListBox1. Items. IndexOf >=0 then //nick kullanımdaysa Thread. Connection. WriteLn(':'+Baglanti. ServerName+' 433 '+Baglanti. Nick+' '+nick+' kullanımda. Başka bir nick seçin') else begin if copy(parm1,1,1)=':' then //nick değiştirme işlemiyse begin ListBox1. Items :=nick; Thread. Connection. WriteLn ; baglanti2 :=Pointer ; baglanti2. Nick:=nick; end else begin ListBox1. Items. Add ; Thread. Connection. WriteLn ; baglanti2 :=Pointer ; baglanti2. Nick:=nick; end; end; end; procedure TForm1. IdIRCServer1CommandJoin(Thread: TIdPeerThread; Parm1, Parm2: String); var i, j :Integer; baglanti, baglanti2:BaglantiBilgisi; nicks :String; odavar, odaacildi :Boolean; // list :TList; begin Baglanti:=Pointer ; Memo1. Lines. Add('commandjoin '+parm1+','+parm2); odavar:=false; for i:=1 to 10 do begin if oda<i> . OdaAdi=parm1 then begin odavar:=true; oda<i> . KullaniciSayisi:=oda<i> . KullaniciSayisi+1; oda<i> . Nickler. Add ; Thread. Connection. WriteLn(':'+Baglanti. Nick+'!'+Baglanti. UserName+'@'+Baglanti. DNS+' JOIN :'+parm1); nicks:=''; //odadaki nickleri bul for j:=0 to oda<i> . Nickler. Count-1 do begin baglanti2:=Pointer ; nicks :=nicks+' '+baglanti2. nick; end; //odadaki nickleri gönder Thread. Connection. WriteLn(':'+Baglanti. ServerName+' 353 '+Baglanti. Nick+' = '+parm1+' :'+nicks); Thread. Connection. WriteLn(':'+Baglanti. ServerName+' 366 '+Baglanti. Nick+' '+parm1+' :End of /NAMES list.'); //odadaki diğer kullanıcılara bu girişi haber ver for j:=0 to oda<i> . Nickler. Count-1 do begin baglanti2:=Pointer ; TIdPeerThread(Baglanti2. Thread). Connection. WriteLn(':'+Baglanti. Nick+'!'+Baglanti. UserName+'@'+Baglanti. DNS+' JOIN :'+parm1); end; break; end; end; odaacildi:=false; if not odavar then begin for i:=1 to 10 do begin if oda<i> . OdaAdi='-1' then //yeni oda begin oda<i> . OdaAdi:=parm1; odaacildi:=true; oda<i> . KullaniciSayisi:=1; oda<i> . Nickler. Add ; Thread. Connection. WriteLn(':'+baglanti. Nick+'!'+baglanti. UserName+'@'+baglanti. DNS+' JOIN :'+parm1); Thread. Connection. WriteLn(':'+baglanti. ServerName+' 353 '+baglanti. Nick+' = '+parm1+' '+baglanti. Nick); Thread. Connection. WriteLn(':'+Baglanti. ServerName+' 366 '+baglanti. Nick+' '+parm1+' :End of NAMES list.'); ListBox2. Items. Add(parm1); break; end; end; end; if not odaacildi then Thread. Connection. WriteLn('En fazla 10 oda açılabilir.'); end; procedure TForm1. IdIRCServer1CommandPart ; var i, j :Integer; baglanti, baglanti2 :BaglantiBilgisi; begin Memo1. Lines. Add ; Baglanti :=Pointer ; for i:=1 to 10 do begin if oda<i> . OdaAdi = parm then begin oda<i> . KullaniciSayisi:=oda<i> . KullaniciSayisi-1; if oda<i> . KullaniciSayisi=0 then //kimse kalmadıysa begin ListBox2. Items. Delete(ListBox2. Items. IndexOf ; oda<i> . OdaAdi:='-1'; end; //odadaki diğer kullanıcılara bu çıkışı haber ver for j:=0 to oda<i> . Nickler. Count-1 do begin baglanti2:=Pointer ; TIdPeerThread(Baglanti2. Thread). Connection. WriteLn ; end; oda<i> . Nickler. Remove ; end; end; end; procedure TForm1. IdIRCServer1CommandQuit ; var i, j, k :Integer; Baglanti, Baglanti2 :BaglantiBilgisi; begin Memo1. Lines. Add ; baglanti :=Pointer ; Baglantilar. Remove ; Thread. Connection. Disconnect; //bağlı olduğu odalara çıkışını bildir. for i:=1 to 10 do begin if oda<i> . OdaAdi<>'-1' then begin for k:=0 to oda<i> . Nickler. Count-1 do begin if k=oda<i> . Nickler. Count then break; baglanti2:=Pointer ; if baglanti2. Nick=baglanti. Nick then //bu odada varsa begin oda<i> . KullaniciSayisi:=oda<i> . KullaniciSayisi-1; oda<i> . Nickler. Remove ; if oda<i> . KullaniciSayisi=0 then //kimse kalmadıysa begin ListBox2. Items. Delete(ListBox2. Items. IndexOf ; oda<i> . OdaAdi:='-1'; end; //odadaki diğer kullanıcılara çıkışı haber ver if oda<i> . KullaniciSayisi>0 then for j:=0 to oda<i> . Nickler. Count-1 do begin baglanti2:=Pointer ; TIdPeerThread(Baglanti2. Thread). Connection. WriteLn ; end; end; end; end; end; ListBox1. Items. Delete(ListBox1. Items. IndexOf ; Baglanti. Free; Thread. Data:=nil; end;

arkadaşım aslına bakarsan programcılık mantığını bildikten sonra. yani algoritmayı bildikten sonra dil öğrenmek kolaydır. hepsinde mantık aynıdır değişen birşey yoktur. sadece kullanılan komutların isimleri farklıdır. onun için bence önce algoritmayı öğren yani mantığı. sonrası kolay dil dediğin komutların isimleri zaten başka birşey değil. Kolay gelsin

arkadaşım esasında algoritma ile ilgili internette birçok döküman mevcut google sayesinde istemediğin kadarına ulaşabilirsin. ayrıca bilgisayar programcılığı bölümü 1. sınıfı 1. dönemi konusu olduğu için kitapçılarda vb. yerlerde de kitaplarını bulabilirsin.