Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

СообЧА. Программирование на Delphi


Служба Рассылок Subscribe.Ru
<xHEAD>
<xTITLE>Subscribe.Ru :СообЧа программирование на дельфи !<x/TITLE>
<xMETA NAME="keywords" CONTENT="delphi vcl programming статьи исходники компоненты
compoents сометы дельфи">
<xMETA NAME="author" CONTENT="i@cooler.com.ua Ведущий рассылки: Залуский Антон
COOLer">
<x/HEAD>
<xBODY BGCOLOR=#FFCC66 LINK=#660000 ALINK=#000000 VLINK=#000000 TEXT=#000000>
<div align="center"><font size="+3"><xhtml> <xhead> <xmeta http-equiv="Content-Language"
content="ru">
  <xmeta http-equiv="Content-Type" content="text/html; charset=windows-1251">
  <xmeta name="GENERATOR" content="Microsoft FrontPage 4.0"> <xmeta name="ProgId"
content="FrontPage.Editor.Document">
  <xtitle><u><font size="+1" font color ="#73493C" face="Courier New, Courier,
mono"><b>&#153;</b></font></u><font color="#73493C"><b><font size="+1" face="Courier
New, Courier, mono"><xbody bgcolor="#C0C0C0"></font><font size="+1" font="undefined"
face="Courier New, Courier, mono"><u>&#151;Сообча<x/title>
  : программирование на дельфи<x/head> &#151;</u></font></b></font><b><font size="+1"
face="Courier New, Courier, mono">
  </font></b></font></div>
<div align="center"><font size="+1" face="Courier New, Courier, mono"><b> </b></font></div>
<hr>
<center>
  <table border=0 cellpadding=0 cellspacing=0 width=80%>
    <tr>
      <td align=center>
        <table border=1 cellpadding=0 cellspacing=0 width="331">
          <tr>
            <td height="111">
              <table border=0 cellpadding=3 cellspacing=0 width="325">
                <tr>
                  <td align="left" valign="top" bgcolor="#FFCC66" height="125">
                    <p align="center"><b><font color="#000000">Некому оформить
                      сайт ?<br>
                      Нужен красивый баннер ?<br>
                      Нет времени на обновление сайта?</font></b></p>
                    <p align="center"><marquee>Качественное оформление, работа
                      с самыми современными средствами, FLASH,CGI,JAVA</marquee>
                      <br>
                      <a href="mailto:pixel@novgorod.net"><b>Тогда вам сюда !!!!
                      </b></a><br>
                      <b>За 50$-100$ мы поможем</b>
                  </td>
                </tr>
              </table>
            </td>
          </tr>
        </table>
      </td>
    </tr>
  </table>
</center>
<HR NOSHADE>
<table border="0" width="97%" align="center">
  <tr>
    <td width="100%" bgcolor="#F9BC4D">
      <div align="center">
        <table border="0" width="93%" height="354" cellspacing="0" cellpadding="0"
align="center" bgcolor="#999999">
          <center>
            <tr>
              <td width="48%" height="19" bgcolor="#993300"><b><font color="#000000">-----
                (перед просмотром рассылку лучше сохранить)</font></b></td>
              <td width="52%" height="19" bgcolor="#993300">
                <div align="center"><u><b><a href="Mailto:Pixel@novgorod.net"><font
color="#000000">Design:Pixel</font></a></b></u></div>
              </td>
            </tr>
          </center>
          <tr>
            <center>
              <td width="48%" height="190" bgcolor="#FFCC66" valign="top" align="left">
                <p>&nbsp;</p>
                <p><b><u><a name="main">&nbsp;В этом выпуске:</a></u></b> </p>
                <ul>
                  <li><b><u><a href="#Дехшояйбмяс">Кодируем файл</a></u></b></li>
                  <li><b><u><a href="#Лмкгнесыяс губййем">FTP Сервер </a></u></b></li>
                  <li><b><u><a href="http://www.ozon.ru/index.cfm/partner=delphibos">;Книжки
                    и CD(читать иногда полезно, а можно и поиграться!)</a></u></b></li>
                </ul>

              </td>
            </center>
            <td width="52%" height="190" bgcolor="#FFCC66">
              <center>
                <p align="left"><b><font color="#000099">Фонд поддержки наших
                  проектов и рассылки</font>:</b><br>
                  <b><font color="#660000" size="2">Получатель</font></b>: ИНН
                  7707083893 Новгородское ОСБ № 8629<br>
                  <b><font size="2" color="#660000">Счет получателя</font>: </b>47422810343029900030<b><br>
                  <font size="2" color="#660000">Банк получателя</font></b><font
size="2" color="#FF0000">
                  </font>:Новгородское ОСБ № 8629 г.Великий Новгород 30101810100000000698<br>
                  <b>Бик</b> 044959698<br>
                </p>
                <table bgcolor="#000000" width="373">
                  <tbody>
                  <tr>
                    <td align="middle" bgColor="#993300"><font size="-1">Рассылки
                      <a href="http://subscribe.ru/"><b>Subscribe.Ru</b></a><b>;
                      это стильно удобно, и информативно!</b></font></td>
                  </tr>
                  <tr>
                    <td vAlign="center" align="left" bgColor="#FFCC66" height="61"><font
size="-1">
                      <input type="checkbox" CHECKED value="comp.soft.prog.soobcha"
name="grp">
                      СообЧа (СООБщество ЧАйников). Обмен опытом, вопросы, ответы.<br>
                      </font></td>
                  </tr>
                  <tr>
                    <td vAlign="center" align="middle" bgColor="#FFCC66" height="9">
                      <p><font size="-1">
                        <input type="text" style=""FONT-SIZE:" 9pt" name="email"
maxlen="100" size="20" value="Ваш e-mail">
                        <input style=""FONT-SIZE:" 9pt" type="submit" value="OK">
                        <br>
                        </font><font size="-2"><b>подпишись и подпиши друга!!!!</b></font></p>
                    </td>
                  </tr>
                  </tbody>
                </table>
                <p>&nbsp;Contact (Связь с Нами):
                <p style=""text-indent:" 0; word-spacing: 0; line-height: 100%;
margin: 0"><a href="mailto:Pixel@novgorod.net">Pixel@novgorod.net</a>
                  + <i><b>Subject:</b></i> (см ниже)
              </center>
              <p style=""text-indent:" 0; word-spacing: 0; line-height: 100%; margin:
0" align="left">&nbsp;
              <p style=""text-indent:" 0; word-spacing: 0; line-height: 100%; margin:
0" align="left"><b><font size="1">Vcl
                Haunting</font></b>
              <p style=""text-indent:" 0; word-spacing: 0; line-height: 100%; margin:
0" align="left"><font size="1"><b>&quot;Золотой
                Чайник&quot;</b> </font>
              <p style=""text-indent:" 0; word-spacing: 0; line-height: 100%; margin:
0" align="left"><font size="1"><b>Вопрос
                по дельфи N (N номер версии)</b> </font>
              <p style=""text-indent:" 0; word-spacing: 0; line-height: 100%; margin:
0" align="left"><font size="1"><b>Help!</b>
                </font>
              <p style=""text-indent:" 0; word-spacing: 0; line-height: 100%; margin:
0" align="left"><font size="1"><b>Реклама</b></font>
              <p style=""text-indent:" 0; word-spacing: 0; line-height: 100%; margin:
0" align="left"><font size="1"><b>Полезный
                линк</b></font>
              <center>
                <p style=""text-indent:" 0; word-spacing: 0; line-height: 100%;
margin: 0">&nbsp;
                <p style=""text-indent:" 0; word-spacing: 0; line-height: 100%;
margin: 0"><b><font color="#FF6633">Наш
                  сайт :</font> <a href="http://pixelsoft.narod.ru">pixelsoft.narod.ru</a></b>;
              </center>
            </td>
          </tr>
          <tr>
            <td colspan="2" height="2"> </td>
          </tr>
        </table>
      </div>
      <table border="0" width="93%" cellpadding="2" align="center" height="531">
        <tr>
          <td width="60%" bgcolor="#FF9900" height="29">
            <p align="center"><font size="4"><b>Новости СЕТИ</b></font>
          </td>
          <td width="40%" bgcolor="#FFCC66" height="29">
            <p align="right"><font color="#FFFFFF"><a href="#main"><b>К заголовку</b></a></font>
          </td>
        </tr>
        <tr valign="top" align="left" bgcolor="#FFCC66" bordercolor="#FF0000">
          <td colspan="2" height="490">
            <p align="left"><b>Книги по Дельфи которые ВЫ ОБЯЗАНЫ ПРОЧИТАТЬ...</b></p>
            <ul>
              <li><a href="http://www.ozon.ru/detail.cfm/ent=2&id=52724&partner=delphibos%20"><b>Б</b></a><a
href="http://www.ozon.ru/detail.cfm/ent=2&id=52724&partner=delphibos%20"><b>;азы
                данных и приложения в дельфи 6 </b></a>, спешите купить</li>
              <li><b><a href="http://www.ozon.ru/detail.cfm/ent=2&id=53040&partner=delphibos%20">Delphi
                6 : Наиболее полное руководство</a></b></li>
            </ul>
            <p align="left">Не столько учебник, сколько справочное пособие по
              наиболее используемым алгоритмам и командам...</p>
            <ul>
              <li><b><a href="http://www.ozon.ru/detail.cfm/ent=2&id=54781&partner=delphibos%20">;Дельфи
                6: Учебный курс</a></b></li>
            </ul>
            <p align="left">Пожалуй лучший учебник по дельфи 6 на сегодняшний
              день, вам даже не надо знать дельфи, чтобы начать ...</p>
            <ul>
              <li><b><a href="http://www.ozon.ru/detail.cfm/ent=2&id=19143&partner=delphibos%20">;Дельфи
                5: Руководство разработчика БД</a></b></li>
              <p>&nbsp;</p>
              <p><a href="http://www.ozon.ru/detail.cfm/ent=2&id=51691&partner=delphibos%20"><b>DirectX.
                Графика в проектах Delphi (+CD - ROM)</b></a><br>
                Лучшее пособие для тех кто решил связаться с DirectX, по слухам
                на CD помимо примеров есть DirectxSDK7.0 от Microsoft...</p>
              <p><a href="http://www.ozon.ru/detail.cfm/ent=2&id=44505&partner=delphibos%20"><b>;Среда
                программирования Delphi 5-6. Справочное пособие</b></a><br>
                Книга полностью описывает среду программирования Delphi, которая
                включает в себя полный набор визуальных инструментов для быстрой
                и профессиональной разработки приложений для различных операционных
                систем, кроме того рассмотрены проблемы перехода между этими
версиями
                дельфи.</p>
              <p> <b><font color="#FF0000"><a href="http://www.ozon.ru/detail.cfm/ent=2&id=55868&partner=delphibos%20">;Программирование
                в Delphi 6 (+ floppy дискета )</a> Чайникам рекомендуется!!!</font></b></p>
              <p>Книга содержит методические и справочные материалы по новой
версии
                системы визуального объектно-ориентированного программирования
                Delphi 6 и предшествующим версиям Delphi 5 и 4. Рассмотрены такие
                новые возможности Delphi, как кросс-платформенные приложения,
                технологии доступа к данным ADO, InterBase Express, dbExpress,
                компоненты — серверы СОМ, технологии распределенных приложений
                СОМ, CORBA, MIDAS, новая методика диспетчеризации действий...
              </p>
            </ul>
          </td>
        </tr>
      </table>
      <p>&nbsp;</p>
      <table border="0" width="93%" cellpadding="2" cellspacing="0" align="center">
        <tr>
          <td width="60%" bgcolor="#FF9900" valign="top">
            <p align="center"><a name="Дехшояйбмяс"><b><font color="#000000">Кодируем
              файл... </font></b></a>
          </td>
          <td width="40%" bgcolor="#FFCC66">
            <p align="right"><font color="#FFFFFF"><a href="#main"><b>К заголовку</b></a></font>
          </td>
        </tr>
        <tr valign="top" align="left" bgcolor="#FFCC66">
          <td colspan="2">
            <p>Скоро присвою себе название Research Lab , ей богу :)... Каждый
              день сижу и пытаюсь придумать что-нибудь необычное .<br>
              Вот эта штука может кодировать файлы, при том довольно сносно.
Скорость
              конечно желает лучшего 300-400 кб в сек (в зависимости от винта
              и проца). Для избежания геммороя я ипользовал ассемблер и сделал
              инвертирование битов со сдвигом на 3. Кодированный файл , для верности
              можно еще и поделить на два, тогда информацию будет трудно разшифровать(при
              условии что половина файла будет бесполезна, а другая кодированна
              другим алгоритмом).</p>
            <p>unit Unit2;</p>
            <p>interface</p>
            <p>uses windows,classes;<br>
              function code(FileName,outfile : string) : DWORD;<br>
              function decode(FileName,outfile : string) : DWORD;<br>
              implementation<br>
              uses unit1;</p>
            <p></p>
            <p><br>
              function code(FileName,outfile : string) : DWORD;<br>
              var<br>
              f,d1: file;<br>
              buf:dword;<br>
              ready:longint;<br>
              begin<br>
              // GetMem(buf,16384);<br>
              FileMode := 2;<br>
              assignfile(f,filename);<br>
              assignfile(d1,outfile);<br>
              reset(f,1) ;<br>
              rewrite(d1,1);<br>
              seek(f,0);<br>
              repeat<br>
              blockread(f,buf,1,ready);<br>
              asm<br>
              mov eax,buf<br>
              sub eax,3<br>
              not eax<br>
              mov buf,eax<br>
              end;<br>
              blockwrite(d1,buf,ready);<br>
              until ready=0;<br>
              closefile(d1);<br>
              closefile(f);</p>
            <p> end;</p>
            <p>/////////////<br>
              function decode(FileName,outfile : string) : DWORD;<br>
              var<br>
              f,d1: file;<br>
              buf:dword;<br>
              ready:longint;</p>
            <p>begin</p>
            <p>// GetMem(buf,16384);<br>
              FileMode := 2;<br>
              assignfile(f,filename);<br>
              assignfile(d1,outfile);<br>
              reset(f,1) ;<br>
              rewrite(d1,1);<br>
              seek(f,0);<br>
              repeat<br>
              blockread(f,buf,1,ready);<br>
              asm<br>
              mov eax,buf<br>
              not eax<br>
              add eax,3<br>
              mov buf,eax<br>
              end;<br>
              blockwrite(d1,buf,ready);<br>
              until ready=0;<br>
              closefile(d1);<br>
              closefile(f);<br>
            </p>
            <p>end;</p>
            <p>end.<br>
              <br>
              Собственно код получился небольшой и весьма оптимизированный.</p>
          </td>
        </tr>
      </table>
      <p style=""word-spacing:" 0; line-height: 100%; margin-top: 0; margin-bottom:
0">&nbsp;</p>
      <p style=""word-spacing:" 0; line-height: 100%; margin-top: 0; margin-bottom:
0">&nbsp;</p>
      <table border="0" width="93%" cellpadding="2" align="center">
        <tr>
          <td width="60%" bgcolor="#FF9900" height="2">
            <p align="center"><font size="4" color="#000000"><b><a name="Лмкгнесыяс
губййем">FTP
              сервер </a></b></font>
          </td>
          <td width="40%" bgcolor="#FFCC66" height="2">
            <p align="right"><font color="#FFFFFF"><a href="#main"><b>К заголовку</b></a></font>
          </td>
        </tr>
        <tr valign="top" align="left" bgcolor="#FFCC66">
          <td width="100%" colspan="2">
            <p>кусочек кода(98% , вырезан Aboutbox) программы SmallFTP server</p>
            <p>unit Main;</p>
            <p>interface</p>
            <p>uses<br>
              Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
              Dialogs,<br>
              StdCtrls, ComCtrls, ImgList, ToolWin, Menus, Buttons, FtpSrv,FtpSrvC,<br>
              Spin,FileCtrl, ExtCtrls,Winsock;</p>
            <p>type<br>
              TfrmMain = class(TForm)<br>
              StatusBar1: TStatusBar;<br>
              ImageList1: TImageList;<br>
              PageControl1: TPageControl;<br>
              TabSheet1: TTabSheet;<br>
              TabSheet2: TTabSheet;<br>
              ListView1: TListView;<br>
              RichEdit1: TRichEdit;<br>
              MainMenu1: TMainMenu;<br>
              PopupMenu1: TPopupMenu;<br>
              TabSheet3: TTabSheet;<br>
              TabSheet4: TTabSheet;<br>
              FtpServer1: TFtpServer;<br>
              Label4: TLabel;<br>
              txtBanner: TEdit;<br>
              SpinEdit1: TSpinEdit;<br>
              Label5: TLabel;<br>
              ImageList2: TImageList;<br>
              File1: TMenuItem;<br>
              StartFTP1: TMenuItem;<br>
              StopFTP1: TMenuItem;<br>
              N1: TMenuItem;<br>
              Exit1: TMenuItem;<br>
              Users1: TMenuItem;<br>
              Help1: TMenuItem;<br>
              About1: TMenuItem;<br>
              N2: TMenuItem;<br>
              Help2: TMenuItem;<br>
              BootUser2: TMenuItem;<br>
              ImageList3: TImageList;<br>
              ToolBar2: TToolBar;<br>
              ListView2: TListView;<br>
              ImageList4: TImageList;<br>
              ToolButton10: TToolButton;<br>
              ToolButton12: TToolButton;<br>
              ToolButton13: TToolButton;<br>
              ToolButton14: TToolButton;<br>
              Panel1: TPanel;<br>
              Label1: TLabel;<br>
              txtUser: TEdit;<br>
              Label2: TLabel;<br>
              txtPassword: TEdit;<br>
              Label3: TLabel;<br>
              txtRoot: TEdit;<br>
              BitBtn1: TBitBtn;<br>
              chkDelete: TCheckBox;<br>
              chkRename: TCheckBox;<br>
              chkDownload: TCheckBox;<br>
              chkUpload: TCheckBox;<br>
              Panel2: TPanel;<br>
              Timer1: TTimer;<br>
              BitBtn2: TBitBtn;<br>
              BitBtn3: TBitBtn;<br>
              ToolButton8: TToolButton;<br>
              ToolButton9: TToolButton;<br>
              BitBtn4: TBitBtn;<br>
              SpinEdit2: TSpinEdit;<br>
              Label6: TLabel;<br>
              ToolBar1: TToolBar;<br>
              ToolButton1: TToolButton;<br>
              ToolButton2: TToolButton;<br>
              ToolButton5: TToolButton;<br>
              ToolButton4: TToolButton;<br>
              ToolBar3: TToolBar;<br>
              ImageList5: TImageList;<br>
              ToolButton6: TToolButton;<br>
              ToolButton7: TToolButton;<br>
              SaveDialog1: TSaveDialog;<br>
              TheServer1: TMenuItem;<br>
              ActivityLog1: TMenuItem;<br>
              AllowedUsers1: TMenuItem;<br>
              ExtraOptions1: TMenuItem;<br>
              procedure ToolButton1Click(Sender: TObject);<br>
              procedure FtpServer1ChangeDirectory(Sender: TObject;<br>
              Client: TFtpCtrlSocket; Directory: TFtpString; var Allowed: Boolean);<br>
              procedure FtpServer1Authenticate(Sender: TObject;<br>
              Client: TFtpCtrlSocket; UserName, Password: TFtpString;<br>
              var Authenticated: Boolean);<br>
              procedure FtpServer1ValidateDele(Sender: TObject;<br>
              Client: TFtpCtrlSocket; var FilePath: TFtpString;<br>
              var Allowed: Boolean);<br>
              procedure FtpServer1ValidateGet(Sender: TObject;<br>
              Client: TFtpCtrlSocket; var FilePath: TFtpString;<br>
              var Allowed: Boolean);<br>
              procedure FtpServer1ValidatePut(Sender: TObject;<br>
              Client: TFtpCtrlSocket; var FilePath: TFtpString;<br>
              var Allowed: Boolean);<br>
              procedure FtpServer1ClientConnect(Sender: TObject;<br>
              Client: TFtpCtrlSocket; Error: Word);<br>
              procedure FtpServer1ClientDisconnect(Sender: TObject;<br>
              Client: TFtpCtrlSocket; Error: Word);<br>
              procedure FtpServer1ClientCommand(Sender: TObject;<br>
              Client: TFtpCtrlSocket; var Keyword, Params, Answer: TFtpString);<br>
              procedure FtpServer1Stop(Sender: TObject);<br>
              procedure FtpServer1Start(Sender: TObject);<br>
              procedure ToolButton2Click(Sender: TObject);<br>
              procedure FormClose(Sender: TObject; var Action: TCloseAction);<br>
              procedure ToolButton7Click(Sender: TObject);<br>
              function AddClient(sUser : String; sAction : String; sDir : String)
              : boolean;<br>
              procedure ModifyClient(sUser : String; sAction : String; sDir :
              String);<br>
              procedure RemoveClient(sUser : String);<br>
              function isClientThere(sUser : string): Boolean;<br>
              function isClient(sUser : String; sPass : String;Client: TFtpCtrlSocket):
              string;<br>
              procedure getClientpermissions(sUser : String);<br>
              procedure FormCreate(Sender: TObject);<br>
              procedure ToolButton4Click(Sender: TObject);<br>
              procedure TabSheet3Exit(Sender: TObject);<br>
              procedure TabSheet3Enter(Sender: TObject);<br>
              function getClientRootDir(sUser : string): String;<br>
              procedure Timer1Timer(Sender: TObject);<br>
              procedure BitBtn2Click(Sender: TObject);<br>
              procedure BitBtn3Click(Sender: TObject);<br>
              procedure ToolButton10Click(Sender: TObject);<br>
              procedure ToolButton13Click(Sender: TObject);<br>
              procedure ToolButton14Click(Sender: TObject);<br>
              procedure LoadUserList;<br>
              procedure SaveUserList;<br>
              procedure ListView2SelectItem(Sender: TObject; Item: TListItem;<br>
              Selected: Boolean);<br>
              procedure EditClient;<br>
              procedure BitBtn1Click(Sender: TObject);<br>
              procedure BitBtn4Click(Sender: TObject);<br>
              procedure ListView2MouseUp(Sender: TObject; Button: TMouseButton;<br>
              Shift: TShiftState; X, Y: Integer);<br>
              procedure bSaveUserList;<br>
              procedure ToolButton9Click(Sender: TObject);<br>
              procedure ToolButton6Click(Sender: TObject);<br>
              procedure TheServer1Click(Sender: TObject);<br>
              procedure ActivityLog1Click(Sender: TObject);<br>
              procedure AllowedUsers1Click(Sender: TObject);<br>
              procedure ExtraOptions1Click(Sender: TObject);<br>
              function IsAllowedTo(sUser : String; IAction : Integer) : Boolean;<br>
              procedure Help2Click(Sender: TObject);<br>
              procedure About1Click(Sender: TObject);<br>
              procedure Exit1Click(Sender: TObject);<br>
              private<br>
              { Private declarations }<br>
              public<br>
              { Public declarations }<br>
              end;</p>
            <p>var<br>
              frmMain: TfrmMain;<br>
              bConnected: Boolean;<br>
              UserFile: String;<br>
              cliDir: String;<br>
              implementation</p>
            <p>uses NewUser, Dir, About;</p>
            <p>{$R *.DFM}<br>
              function GetLocalIP : string;<br>
              // <br>
              // Return computerґs IP if you are connected in a network<br>
              // Declare Winsock in the uses clause <br>
              // <br>
              type <br>
              TaPInAddr = array [0..10] of PInAddr; <br>
              PaPInAddr = ^TaPInAddr; <br>
              var <br>
              phe : PHostEnt; <br>
              pptr : PaPInAddr; <br>
              Buffer : array [0..63] of char; <br>
              I : Integer; <br>
              GInitData : TWSADATA; <br>
              begin <br>
              WSAStartup($101, GInitData); <br>
              Result := ''; <br>
              GetHostName(Buffer, SizeOf(Buffer)); <br>
              phe :=GetHostByName(buffer); <br>
              if phe = nil then <br>
              begin <br>
              Exit; <br>
              end; <br>
              pptr := PaPInAddr(Phe^.h_addr_list); <br>
              I := 0; <br>
              while pptr^[I] &lt;&gt; nil do <br>
              begin <br>
              result:=StrPas(inet_ntoa(pptr^[I]^)); <br>
              Inc(I); <br>
              end; <br>
              WSACleanup; <br>
              end; <br>
              function bMakeBoolean(sStr : String): Boolean;<br>
              begin<br>
              if lowercase(sstr) = 'no' then<br>
              begin<br>
              bMakeBoolean := false;<br>
              end<br>
              else<br>
              begin<br>
              bMakeBoolean := true;<br>
              end;</p>
            <p>end;</p>
            <p>function bMakeString(bBool : Boolean): String;<br>
              begin<br>
              if bbool = false then<br>
              begin<br>
              bMakeString := 'No'<br>
              end<br>
              else<br>
              begin<br>
              bMakeString := 'Yes';<br>
              end;</p>
            <p>end;</p>
            <p>procedure Logit(sTXT : String);<br>
              begin<br>
              try<br>
              frmMain.RichEdit1.Lines.Insert(0,DateTimeToStr(Now) + ' - ' + stxt);<br>
              except<br>
              frmMain.RichEdit1.Lines.Clear;<br>
              frmMain.RichEdit1.Lines.Insert(0,DateTimeToStr(Now) + ' - ' + stxt);<br>
              end;</p>
            <p><br>
              end;</p>
            <p>function AppPath: String ;<br>
              //get the path of this file<br>
              begin<br>
              AppPath := ExtractFilePath(application.ExeName);<br>
              end;<br>
              function FileDelete(sFile :String):Boolean ;<br>
              begin<br>
              if FileExists(sFile) = True then<br>
              FileDelete := DeleteFile(sfile)<br>
              else<br>
              FileDelete := False;<br>
              end;<br>
              function DirDel(sPath : String):Boolean ;<br>
              begin<br>
              if DirectoryExists(sPath) = True then<br>
              DirDel := RemoveDir(sPath)<br>
              else<br>
              dirdel := false;<br>
              end;<br>
              function FileORDirDel(sPath : String; sFile : String): Boolean;<br>
              begin<br>
              if StrLen(pChar(sfile)) &gt;0 then<br>
              //it is a file<br>
              FileORDirDel := filedelete(spath + sfile)<br>
              else<br>
              //it is a dir<br>
              FileORDirDel := dirdel(spath);<br>
              end;<br>
              function FileORDirRNTO(sPath : String; sFile : String): Boolean;<br>
              Var<br>
              iPos : Integer;<br>
              begin<br>
              ipos := pos('.',sFile);<br>
              if ipos &gt; 0 then<br>
              //it is a file - handled by ftp<br>
              FileORDirRNTO := True<br>
              else<br>
              // it is a directory - manual rename c:\test\ / 222<br>
              if DirectoryExists(sPath) = True then<br>
              begin<br>
              FileORDirRNTO := MoveFile(pchar(spath),pchar(sfile));<br>
              end<br>
              else<br>
              begin<br>
              FileORDirRNTO := false;<br>
              end;</p>
            <p></p>
            <p>end;<br>
              function CheckStartDir(sDir : String):Boolean ;<br>
              begin<br>
              //make sure it is a dir<br>
              if sdir = '' then<br>
              CheckStartDir := false;</p>
            <p> //it is a dir, check it<br>
              if sdir &lt;&gt; '' then<br>
              begin<br>
              CheckStartDir := DirectoryExists(sdir);<br>
              end;<br>
              end;</p>
            <p>procedure FTPStart;<br>
              begin<br>
              frmmain.FtpServer1.Start;<br>
              Logit('FTP Started');<br>
              end;</p>
            <p>procedure FTPStop;<br>
              begin<br>
              if bConnected = true then<br>
              begin<br>
              if MessageDlg('Warning stoping the FTP server will disconnect any
              clients!' + chr(10) + 'Are you sure you want to stop the FTP server?',mtConfirmation,
              [mbYes, mbNo], 0) = mrYes then<br>
              begin<br>
              frmmain.FtpServer1.DisconnectAll;<br>
              frmmain.FtpServer1.Stop;<br>
              Logit('FTP Stopped');<br>
              end;<br>
              end;</p>
            <p>end;</p>
            <p>function GetLineEle(sTmp : String; Delimi1 : String; Delimi2 :
              String): String;<br>
              Var<br>
              Ipos :Integer;<br>
              Epos : Integer;<br>
              begin<br>
              try<br>
              ipos := pos(Delimi1,stmp);<br>
              if ipos = 0 then<br>
              begin<br>
              GetLineEle := '';<br>
              exit;<br>
              end;<br>
              epos := pos(Delimi2,stmp);<br>
              if epos = 0 then<br>
              begin<br>
              GetLineEle := '';<br>
              exit;<br>
              end;<br>
              ipos := ipos + Length(Delimi1);</p>
            <p>GetLineEle := copy(stmp,ipos ,epos - ipos);<br>
              except<br>
              GetLineEle := '';<br>
              end;<br>
              end;</p>
            <p>function QualifyDir(sDir : String):String ;<br>
              Var<br>
              Ipos :Integer;<br>
              TmpDir : String;<br>
              begin<br>
              ipos := StrLen(pchar(sdir));<br>
              tmpdir := copy(sdir,ipos,strlen(pchar(sdir)));<br>
              if tmpdir &lt;&gt; '\' then<br>
              QualifyDir := sdir + '\';<br>
              if tmpdir = '\' then<br>
              QualifyDir := sdir;<br>
              end;</p>
            <p>procedure TfrmMain.ToolButton1Click(Sender: TObject);<br>
              begin<br>
              ftpstart;<br>
              end;</p>
            <p>procedure TfrmMain.FtpServer1ChangeDirectory(Sender: TObject;<br>
              Client: TFtpCtrlSocket; Directory: TFtpString; var Allowed: Boolean);<br>
              begin<br>
              { It the right place to check if a user has access to a given directory
              }<br>
              { The example below disable C:\ access to non root user. }<br>
              //if (UpperCase(Client.UserName) &lt;&gt; 'ROOT') and<br>
              // (UpperCase(Client.Directory) = 'C:\') then<br>
              // Allowed := FALSE;</p>
            <p> if length(Client.Directory) &lt; length(client.HomeDir) then
begin<br>
              Allowed := FALSE;<br>
              exit;<br>
              end;<br>
              //logit(client.username + ' CD ' +<br>
              Allowed := TRUE;<br>
              end;</p>
            <p>procedure TfrmMain.FtpServer1Authenticate(Sender: TObject;<br>
              Client: TFtpCtrlSocket; UserName, Password: TFtpString;<br>
              var Authenticated: Boolean);<br>
              begin<br>
              //authorize client</p>
            <p><br>
              if isClientThere(UserName) = false then<br>
              begin<br>
              clidir := isClient(username,password,client);</p>
            <p> if clidir &lt;&gt; '' then<br>
              begin</p>
            <p> //add the client to the list<br>
              Authenticated := true;<br>
              client.HomeDir := clidir;<br>
              //client.FileName :='';<br>
              end;<br>
              end<br>
              else<br>
              begin</p>
            <p>//do not let them in multiple client error<br>
              Authenticated := false;<br>
              //client.Close;<br>
              end;<br>
              statusbar1.Panels[1].text := 'Number of Users: ' + inttostr(listview1.Items.count);<br>
              //Authenticated := True;<br>
              //client.HomeDir := 'd:\test\';<br>
              //client.FileName :='';<br>
              end;</p>
            <p>procedure TfrmMain.FtpServer1ValidateDele(Sender: TObject;<br>
              Client: TFtpCtrlSocket; var FilePath: TFtpString; var Allowed:
Boolean);<br>
              begin<br>
              {<br>
              if CheckBox5.Checked = FALSE then begin<br>
              allowed := FALSE;<br>
              end;<br>
              }<br>
              end;</p>
            <p>procedure TfrmMain.FtpServer1ValidateGet(Sender: TObject;<br>
              Client: TFtpCtrlSocket; var FilePath: TFtpString; var Allowed:
Boolean);<br>
              begin<br>
              {<br>
              if CheckBox5.Checked = FALSE then begin<br>
              allowed := FALSE;<br>
              end;<br>
              }<br>
              end;</p>
            <p>procedure TfrmMain.FtpServer1ValidatePut(Sender: TObject;<br>
              Client: TFtpCtrlSocket; var FilePath: TFtpString; var Allowed:
Boolean);<br>
              begin<br>
              {<br>
              if CheckBox5.Checked = FALSE then begin<br>
              allowed := FALSE;<br>
              end;<br>
              }<br>
              end;</p>
            <p>procedure TfrmMain.FtpServer1ClientConnect(Sender: TObject;<br>
              Client: TFtpCtrlSocket; Error: Word);<br>
              begin<br>
              //do the connection here<br>
              Logit(client.UserName + ' - ' + client.DataSocket.Addr + ' Connected');<br>
              end;</p>
            <p>procedure TfrmMain.FtpServer1ClientDisconnect(Sender: TObject;<br>
              Client: TFtpCtrlSocket; Error: Word);<br>
              begin<br>
              //do the disconnection here<br>
              RemoveClient(client.UserName);<br>
              statusbar1.Panels[1].text := 'Number of Users: ' + inttostr(listview1.Items.count);<br>
              Logit(client.UserName + ' - ' + client.DataSocket.Addr + ' Disconnected');<br>
              end;</p>
            <p>procedure TfrmMain.FtpServer1ClientCommand(Sender: TObject;<br>
              Client: TFtpCtrlSocket; var Keyword, Params, Answer: TFtpString);<br>
              var<br>
              hGood : Boolean;<br>
              SFD1 : String;<br>
              SFD2 : String;<br>
              begin<br>
              hgood:=False;</p>
            <p>{<br>
              We are looking for the following commands<br>
              PUT - upload<br>
              STOR - Upload<br>
              GET - download<br>
              RETR - download<br>
              DELE - delete<br>
              RNFR - rename from</p>
            <p>}<br>
              ModifyClient(client.username,Keyword,client.directory);<br>
              Logit(client.UserName + ' - ' + client.DataSocket.Addr + ' ' +
Keyword
              + ' ' + client.directory + params);<br>
              //DELE = delete<br>
              //if rename then begin<br>
              if (Keyword = 'PUT') or (Keyword = 'STOR') then<br>
              begin<br>
              if IsAllowedTo(client.username,2) = false then<br>
              begin<br>
              client.SendAnswer('501 - Not Allowed!');<br>
              exit;<br>
              end;<br>
              end;</p>
            <p>if (Keyword = 'GET') or (Keyword = 'RETR') then<br>
              begin<br>
              if IsAllowedTo(client.username,3) = false then<br>
              begin<br>
              client.SendAnswer('501 - Not Allowed!');<br>
              exit;<br>
              end;<br>
              end;</p>
            <p>//if rename then begin<br>
              //RNTO = rename from<br>
              if KeyWord ='RNFR' then<br>
              begin<br>
              if IsAllowedTo(client.username,4) = false then<br>
              begin<br>
              client.SendAnswer('501 - Not Allowed!');<br>
              exit;<br>
              end;<br>
              sfd1 := client.directory + params;</p>
            <p>end;<br>
              //RNTO = rename to<br>
              if Keyword = 'RNTO' then<br>
              begin<br>
              if IsAllowedTo(client.username,4) = false then<br>
              begin<br>
              client.SendAnswer('501 - Not Allowed!');<br>
              exit;<br>
              end;<br>
              sfd2 := client.directory + params;<br>
              hgood := FileORDirRNTO(sfd1,sfd2);<br>
              sfd1 := '';<br>
              sfd2 := '';<br>
              end;</p>
            <p>if Keyword = 'DELE' then<br>
              begin<br>
              if IsAllowedTo(client.username,5) = false then<br>
              begin<br>
              client.SendAnswer('501 - Not Allowed!');<br>
              exit;<br>
              end;<br>
              hgood := fileordirdel(client.Directory,params);<br>
              client.FileName :='';<br>
              client.Directory := '';<br>
              end;</p>
            <p>end;</p>
            <p>procedure TfrmMain.FtpServer1Stop(Sender: TObject);<br>
              begin<br>
              //ftp stop<br>
              toolbutton1.Enabled := true;<br>
              toolbutton2.Enabled := false;<br>
              startftp1.Enabled := true;<br>
              stopftp1.Enabled := false;<br>
              statusbar1.Panels[0].text := 'Ftp is OFF';<br>
              bConnected := false;<br>
              end;</p>
            <p>procedure TfrmMain.FtpServer1Start(Sender: TObject);<br>
              begin<br>
              //ftp start<br>
              toolbutton1.Enabled := false;<br>
              toolbutton2.Enabled := true;<br>
              startftp1.Enabled := false;<br>
              stopftp1.Enabled := true;<br>
              statusbar1.Panels[0].text := 'Ftp is ON';<br>
              bConnected := true;<br>
              end;</p>
            <p>procedure TfrmMain.ToolButton2Click(Sender: TObject);<br>
              begin<br>
              ftpstop;<br>
              end;</p>
            <p>procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);<br>
              begin<br>
              ftpstop;<br>
              end;</p>
            <p>procedure TfrmMain.ToolButton7Click(Sender: TObject);<br>
              begin<br>
              RichEdit1.Lines.Clear;<br>
              end;</p>
            <p>function TfrmMain.AddClient(sUser : String; sAction : String;
sDir
              : String) : boolean;<br>
              begin<br>
              //add a new client to the list</p>
            <p>end;<br>
              procedure TfrmMain.ModifyClient(sUser : String; sAction : String;
              sDir : String);<br>
              Var<br>
              I : Integer;<br>
              ListItem: TListItem;<br>
              begin<br>
              //remove an existing client<br>
              for i := 0 to listview1.items.count -1 do<br>
              begin<br>
              if lowercase(suser) = lowercase(listview1.items[i].caption) then<br>
              begin<br>
              ListItem := listview1.Items[i];<br>
              listitem.SubItems[0] := saction;<br>
              listitem.SubItems[1] := sdir;<br>
              exit;<br>
              end;<br>
              end;<br>
              end;</p>
            <p>procedure TfrmMain.RemoveClient(sUser : String);<br>
              Var<br>
              I : Integer;<br>
              begin<br>
              //remove an existing client<br>
              for i := 0 to listview1.items.count -1 do<br>
              begin<br>
              if lowercase(suser) = lowercase(listview1.items[i].caption) then<br>
              begin<br>
              listview1.Items.Delete(i);<br>
              exit;<br>
              end;<br>
              end;</p>
            <p>end;<br>
              function TfrmMain.isClientThere(sUser : String): Boolean ;<br>
              Var<br>
              I : Integer;<br>
              bTMP : Boolean;<br>
              begin<br>
              // is the user there in our list<br>
              if ListView1.Items.Count = 0 then<br>
              begin<br>
              isClientThere := false;<br>
              exit;<br>
              end;<br>
              for I := 0 to ListView1.Items.Count -1 do<br>
              begin<br>
              //check the suser against the list item<br>
              if lowercase(suser) = lowercase(ListView1.Items[i].Caption) then<br>
              begin<br>
              isClientThere := true;<br>
              exit;<br>
              end;</p>
            <p>isClientThere := false;</p>
            <p>end;</p>
            <p>end;<br>
              procedure TfrmMain.getClientpermissions(sUser : String);<br>
              begin<br>
              //get the client permissions</p>
            <p>end;</p>
            <p>function TfrmMain.isClient(sUser : String; sPass : String; Client:
              TFtpCtrlSocket): string ;<br>
              var<br>
              F: TextFile;<br>
              S: string;<br>
              zUser: String;<br>
              zPass: String;<br>
              zDir: String;<br>
              ListItem: TListItem;</p>
            <p> begin<br>
              //is it a valid client<br>
              AssignFile(F, UserFile); { File selected in dialog box }<br>
              Reset(F);<br>
              while not EOF(F) do<br>
              begin<br>
              Readln(F, S); { Read the first line out of the file }<br>
              zUser := getlineele(s,'&lt;user&gt;','&lt;/user&gt;');<br>
              zPass := getlineele(s,'&lt;password&gt;','&lt;/password&gt;');<br>
              if (lowercase(zuser) = lowercase(suser)) and (lowercase(zpass)
=
              lowercase(spass)) then<br>
              begin<br>
              //set the client permissions<br>
              zDir := getlineele(s,'&lt;root&gt;','&lt;/root&gt;');<br>
              if directoryexists(zDir) = false then<br>
              begin<br>
              CloseFile(F);<br>
              isClient := '';<br>
              end;<br>
              CloseFile(F);<br>
              //add it to the list<br>
              listitem := ListView1.Items.Add;<br>
              listitem.Caption := suser; //username<br>
              listitem.SubItems.Add('Logged In'); //action<br>
              listitem.SubItems.Add(zdir); //location<br>
              listitem.SubItems.Add(getlineele(s,'&lt;up&gt;','&lt;/up&gt;'));//upload<br>
              listitem.SubItems.Add(getlineele(s,'&lt;down&gt;','&lt;/down&gt;'));//download<br>
              listitem.SubItems.Add(getlineele(s,'&lt;rename&gt;','&lt;/rename&gt;'));//rename<br>
              listitem.SubItems.Add(getlineele(s,'&lt;delete&gt;','&lt;/delete&gt;'));//delete<br>
              //return from function<br>
              isClient := zdir;<br>
              //CloseFile(F);<br>
              exit;<br>
              end;<br>
              end;<br>
              CloseFile(F);<br>
              isClient := '';<br>
              end;</p>
            <p>procedure TfrmMain.FormCreate(Sender: TObject);<br>
              begin<br>
              bConnected := false;<br>
              UserFile := apppath + 'users.txt';<br>
              LoadUserList;<br>
              end;</p>
            <p>procedure TfrmMain.ToolButton4Click(Sender: TObject);<br>
              begin<br>
              if bConnected = true then<br>
              begin<br>
              if MessageDlg('Warning stoping the FTP server will disconnect any
              clients!' + chr(10) + 'Are you sure you want to stop the FTP server?',mtConfirmation,
              [mbYes, mbNo], 0) = mrYes then<br>
              begin<br>
              frmmain.FtpServer1.DisconnectAll;<br>
              //clear the list<br>
              listview1.Items.Clear;<br>
              Logit('All Users Booted');<br>
              end;<br>
              end;<br>
              end;</p>
            <p></p>
            <p>procedure TfrmMain.TabSheet3Exit(Sender: TObject);<br>
              begin<br>
              listview1.Items := listview2.Items;<br>
              listview2.Items.Clear;<br>
              end;</p>
            <p>procedure TfrmMain.TabSheet3Enter(Sender: TObject);<br>
              begin<br>
              listview2.Items := listview1.Items;<br>
              end;</p>
            <p>function TfrmMain.getClientRootDir(sUser : String): String;<br>
              Var<br>
              I : Integer;<br>
              ListItem: TListItem;<br>
              begin<br>
              for i := 0 to listview1.Items.count - 1 do<br>
              begin<br>
              ListItem := listview1.Items[i];<br>
              if lowercase(suser) = lowercase(ListItem.Caption) then<br>
              begin<br>
              getClientRootDir := listitem.SubItems[1];<br>
              exit;<br>
              end;<br>
              end;<br>
              getClientRootDir := '';</p>
            <p>end;</p>
            <p>procedure TfrmMain.Timer1Timer(Sender: TObject);<br>
              begin<br>
              Panel2.Caption := 'Local IP Addess: ' + GetLocalIP;<br>
              statusbar1.Panels[1].text := 'Number of Users: ' + inttostr(listview1.Items.count);<br>
              end;</p>
            <p>procedure TfrmMain.BitBtn2Click(Sender: TObject);<br>
              begin<br>
              if bConnected = true then<br>
              begin<br>
              showmessage('Please Stop FTP Server before applying these options.');<br>
              exit;<br>
              end;<br>
              FtpServer1.Banner := txtbanner.Text;<br>
              FtpServer1.MaxClients := SpinEdit1.Value;<br>
              FtpServer1.Port := inttostr(SpinEdit2.Value);<br>
              end;</p>
            <p>procedure TfrmMain.BitBtn3Click(Sender: TObject);<br>
              begin<br>
              if bConnected = true then<br>
              begin<br>
              showmessage('Please Stop FTP Server before applying these options.');<br>
              exit;<br>
              end;<br>
              txtbanner.Text := '220 Personal FTP Ready';<br>
              SpinEdit1.Value := 200;<br>
              SpinEdit2.Value := 21;<br>
              FtpServer1.Banner := txtbanner.Text;<br>
              FtpServer1.MaxClients := SpinEdit1.Value;<br>
              FtpServer1.Port := inttostr(SpinEdit2.Value);<br>
              end;</p>
            <p>procedure TfrmMain.ToolButton10Click(Sender: TObject);<br>
              begin<br>
              //dump the listview2 contents to the user file<br>
              bSaveUserList;<br>
              //TO DO - update all logged in clients<br>
              //Maybe I will do this in the next version?</p>
            <p>end;</p>
            <p>procedure TfrmMain.ToolButton13Click(Sender: TObject);<br>
              var<br>
              ListItem: TListItem;<br>
              I : Integer;<br>
              bTMP : Boolean;<br>
              begin<br>
              //add a user<br>
              frmnewuser.showmodal;<br>
              if frmnewuser.Execute = true then<br>
              begin<br>
              //make sure we are not adding a duplicate<br>
              for i := 0 to listview1.Items.Count -1 do<br>
              begin<br>
              ListItem := listview2.Items[i];<br>
              if lowercase(listitem.caption) = lowercase(frmnewuser.txtuser.text)
              then<br>
              begin<br>
              //duplicate found<br>
              showmessage('User Already Exists');<br>
              exit;<br>
              end;</p>
            <p>end;<br>
              //duplicate not found, add new user<br>
              ListItem := listview2.Items.Add;<br>
              ListItem.Caption := frmnewuser.txtuser.text;<br>
              listitem.SubItems.Add(frmnewuser.txtPassword.text); //password<br>
              listitem.SubItems.Add(frmnewuser.DirectoryListBox1.Directory);
//root
              dir<br>
              listitem.SubItems.Add(bmakestring(frmnewuser.chkUpload.checked));//upload<br>
              listitem.SubItems.Add(bmakestring(frmnewuser.chkdownload.checked));//download<br>
              listitem.SubItems.Add(bmakestring(frmnewuser.chkrename.checked));//rename<br>
              listitem.SubItems.Add(bmakestring(frmnewuser.chkdelete.checked));//delete<br>
              //reset the wizard<br>
              frmnewuser.txtUser.Text := 'Anonymous';<br>
              frmnewuser.txtPassword.Text := 'Guest';<br>
              frmnewuser.chkUpload.checked := false;<br>
              frmnewuser.chkdownload.checked := false;<br>
              frmnewuser.chkrename.checked := false;<br>
              frmnewuser.chkdelete.checked := false;<br>
              end;</p>
            <p>end;</p>
            <p>procedure TfrmMain.ToolButton14Click(Sender: TObject);<br>
              begin<br>
              //remove selected user<br>
              if listview2.SelCount &gt; 0 then<br>
              begin<br>
              listview2.Items.Delete(listview2.Selected.Index);<br>
              end;<br>
              end;</p>
            <p>procedure TfrmMain.LoadUserList();<br>
              var<br>
              F: TextFile;<br>
              S: string;<br>
              zTMP: String;<br>
              ListItem: TListItem;<br>
              begin<br>
              //load the user list into listview2<br>
              AssignFile(F, UserFile); { File selected in dialog box }<br>
              Reset(F);<br>
              //read the file line by line<br>
              while not EOF(F) do<br>
              begin<br>
              Readln(F, S); { Read the first line out of the file }<br>
              //add it to the list<br>
              listitem := ListView2.Items.Add;<br>
              listitem.Caption := getlineele(s,'&lt;user&gt;','&lt;/user&gt;');
              //username<br>
              listitem.SubItems.Add(getlineele(s,'&lt;password&gt;','&lt;/password&gt;'));
              //password<br>
              listitem.SubItems.Add(getlineele(s,'&lt;root&gt;','&lt;/root&gt;'));
              //root dir<br>
              listitem.SubItems.Add(getlineele(s,'&lt;up&gt;','&lt;/up&gt;'));//upload<br>
              listitem.SubItems.Add(getlineele(s,'&lt;down&gt;','&lt;/down&gt;'));//download<br>
              listitem.SubItems.Add(getlineele(s,'&lt;rename&gt;','&lt;/rename&gt;'));//rename<br>
              listitem.SubItems.Add(getlineele(s,'&lt;delete&gt;','&lt;/delete&gt;'));//delete<br>
              end;<br>
              CloseFile(F);<br>
              end;<br>
              procedure TfrmMain.SaveUserList();<br>
              begin<br>
              //save the user list from listview2</p>
            <p>end;<br>
              procedure TfrmMain.ListView2SelectItem(Sender: TObject; Item: TListItem;<br>
              Selected: Boolean);<br>
              begin<br>
              txtuser.Text := item.Caption;</p>
            <p>txtpassword.text := item.SubItems.Strings[0];<br>
              txtroot.text := item.SubItems.Strings[1];<br>
              chkupload.checked := bMakeBoolean(item.SubItems.Strings[2]); //upload<br>
              chkdownload.checked := bMakeBoolean(item.SubItems.Strings[3]);//download<br>
              chkrename.checked := bMakeBoolean(item.SubItems.Strings[4]);//rename<br>
              chkdelete.checked := bMakeBoolean(item.SubItems.Strings[5]);//delete</p>
            <p>end;<br>
              procedure TfrmMain.EditClient();<br>
              Var<br>
              ListItem: TListItem;<br>
              begin<br>
              //exit if none in list<br>
              if listview2.items.count = 0 then exit;<br>
              //exit if none selected<br>
              if listview2.SelCount = 0 then exit;<br>
              //set our listview item<br>
              ListItem := listview2.Selected;<br>
              if txtUser.text = '' then txtuser.text := 'Anonymous';<br>
              if txtpassword.text = '' then txtpassword.text := 'Guest';</p>
            <p><br>
              listitem.Caption := txtuser.text;<br>
              listitem.SubItems[0] := txtpassword.text; //password<br>
              listitem.SubItems[1] := txtroot.text; //root dir<br>
              listitem.SubItems[2] := bMakeString(chkupload.checked); //upload<br>
              listitem.SubItems[3] := bMakeString(chkdownload.checked);//download<br>
              listitem.SubItems[4] := bMakeString(chkrename.checked); //rename<br>
              listitem.SubItems[5] := bMakeString(chkdelete.checked); //delete<br>
              end;</p>
            <p>procedure TfrmMain.BitBtn1Click(Sender: TObject);<br>
              begin<br>
              //show the browse for dir dialog;<br>
              if directoryexists(txtroot.text) = true then<br>
              frmdir.DirectoryListBox1.Directory := txtroot.text;</p>
            <p>frmdir.showmodal;<br>
              if frmdir.Execute = true then<br>
              txtRoot.Text := frmdir.DirectoryListBox1.Directory;</p>
            <p>end;</p>
            <p>procedure TfrmMain.BitBtn4Click(Sender: TObject);<br>
              begin<br>
              editclient;<br>
              end;</p>
            <p>procedure TfrmMain.ListView2MouseUp(Sender: TObject; Button: TMouseButton;<br>
              Shift: TShiftState; X, Y: Integer);<br>
              begin<br>
              if listview2.SelCount = 0 then<br>
              begin<br>
              txtuser.Text := '';<br>
              txtpassword.text := '';<br>
              txtroot.Text := '';<br>
              chkupload.Checked := false;<br>
              chkdownload.Checked := false;<br>
              chkrename.checked := false;<br>
              chkdelete.checked := false;<br>
              end;<br>
              end;<br>
              procedure TfrmMain.bSaveUserList();<br>
              var<br>
              F: TextFile;<br>
              S: string;<br>
              ListItem: TListItem;<br>
              I : Integer;<br>
              begin<br>
              //save the user list from listview2<br>
              AssignFile(F, UserFile); { File selected in dialog box }<br>
              Rewrite(F);<br>
              for i := 0 to listview2.Items.Count -1 do<br>
              begin<br>
              ListItem := listview2.Items[i];<br>
              s := '&lt;user&gt;' + listitem.Caption + '&lt;/user&gt;';<br>
              s := s + '&lt;password&gt;' + listitem.SubItems.Strings[0] + '&lt;/password&gt;';<br>
              s := s + '&lt;root&gt;' + listitem.SubItems.Strings[1] + '&lt;/root&gt;';<br>
              s := s + '&lt;up&gt;' + listitem.SubItems.Strings[2] + '&lt;/up&gt;';<br>
              s := s + '&lt;down&gt;' + listitem.SubItems.Strings[3] + '&lt;/down&gt;';<br>
              s := s + '&lt;rename&gt;' + listitem.SubItems.Strings[4] + '&lt;/rename&gt;';<br>
              s := s + '&lt;delete&gt;' + listitem.SubItems.Strings[5] + '&lt;/delete&gt;';<br>
              Writeln(F, s);<br>
              end;</p>
            <p>CloseFile(F);<br>
              end;</p>
            <p>procedure TfrmMain.ToolButton9Click(Sender: TObject);<br>
              begin<br>
              //reload the list<br>
              listview2.Items.Clear;<br>
              LoadUserList;<br>
              if listview2.SelCount = 0 then<br>
              begin<br>
              txtuser.Text := '';<br>
              txtpassword.text := '';<br>
              txtroot.Text := '';<br>
              chkupload.Checked := false;<br>
              chkdownload.Checked := false;<br>
              chkrename.checked := false;<br>
              chkdelete.checked := false;<br>
              end;<br>
              end;</p>
            <p>procedure TfrmMain.ToolButton6Click(Sender: TObject);<br>
              begin<br>
              //save the log file as...<br>
              if savedialog1.Execute = true then<br>
              begin<br>
              RichEdit1.Lines.SaveToFile(savedialog1.filename);<br>
              end;</p>
            <p>end;</p>
            <p>procedure TfrmMain.TheServer1Click(Sender: TObject);<br>
              begin<br>
              PageControl1.ActivePage := tabsheet1;<br>
              end;</p>
            <p>procedure TfrmMain.ActivityLog1Click(Sender: TObject);<br>
              begin<br>
              PageControl1.ActivePage := tabsheet2;<br>
              end;</p>
            <p>procedure TfrmMain.AllowedUsers1Click(Sender: TObject);<br>
              begin<br>
              PageControl1.ActivePage := tabsheet3;<br>
              end;</p>
            <p>procedure TfrmMain.ExtraOptions1Click(Sender: TObject);<br>
              begin<br>
              PageControl1.ActivePage := tabsheet4;<br>
              end;<br>
              function TfrmMain.IsAllowedTo(sUser : String; IAction : Integer):
              Boolean;<br>
              Var<br>
              ListItem: TListItem;<br>
              I : Integer;<br>
              begin<br>
              //see if the client is allowed to do something<br>
              for i := 0 to listview1.Items.Count -1 do<br>
              begin<br>
              listitem := listview1.items[i];<br>
              //see if it is the client<br>
              if lowercase(suser) = lowercase(listitem.caption) then<br>
              begin<br>
              IsAllowedTo := bMakeBoolean(listitem.SubItems.Strings[IAction]);<br>
              exit;<br>
              end;<br>
              end;<br>
              //not found - return false just to be safe<br>
              IsAllowedTo := false;<br>
              end;</p>
            <p>procedure TfrmMain.Help2Click(Sender: TObject);<br>
              begin<br>
              showmessage('Sorry no Help File');<br>
              end;</p>
            <p>procedure TfrmMain.About1Click(Sender: TObject);<br>
              begin<br>
              frmabout.showmodal;<br>
              end;</p>
            <p>procedure TfrmMain.Exit1Click(Sender: TObject);<br>
              begin<br>
              close;<br>
              end;</p>
            <p>end.</p>
          </td>
        </tr>
      </table>
      <table border="0" width="93%" align="center">
        <tr>
          <td width="61%"><font face="Arial, Verdana" size="2"><a href="mailto:i@cooler.com.ua?subject=subscribe">Zaluskiy
            Anton</a>(<font color="blue"><a>COOLer</a></font><a><font color="#800000">)</font><font
color="#ff0000">&nbsp;&nbsp;и</font><font color="#800000">
            Khrapunov Kirill(Pixel)&nbsp;</font><font color="#ff0000"> </font><font
color="#000080">-
            ведущие проекта &nbsp;&nbsp;&nbsp;</font></a><font color="#000080"><a
target="_new" href="http://delphi.bos.ru/">&quot;Мир
            Delphi&quot;</a></font></font></td>
          <td width="39%" bgcolor="#FF9900"><font color="#000000" size="1">(C)
            Pixelsoftware(Pixel)&amp; Delphi 2000-2002(COOLer)</font></td>
        </tr>
        <tr bgcolor="#FFCC66" align="center">
          <td width="100%" colspan="2">
            <div align="center"><br>
              <br>
              <a href="http://www.ozon.ru/index.cfm/partner=delphibos"><img alt="Озон!"
src border="0"></a>
              <a target="_top" href="http://top.list.ru/jump?from=99400"><img
height="31" alt="TopList" src width="88" border="0"></a>
              <script language="javascript">
u="u597.93.spylog.com";d=document;nv=navigator;na=nv.appName;p=0;j="N";
d.cookie="b=b";c=0;bv=Math.round(parseFloat(nv.appVersion)*100);
if (d.cookie) c=1;n=(na.substring(0,2)=="Mi")?0:1;rn=Math.random();
z="p="+p+"&rn="+rn+"&c="+c;if (self!=top) {fr=1;} else {fr=0;}
sl="1.0";</script>
              <script language="javascript1.1">
pl="";sl="1.1";j = (navigator.javaEnabled()?"Y":"N");</script>
              <script language="javascript1.2">
sl="1.2";s=screen;px=(n==0)?s.colorDepth:s.pixelDepth;
z+="&wh="+s.width+'x'+s.height+"&px="+px;
</script>
              <script language="javascript1.3">
sl="1.3"</script>
              <script language="javascript">
y="";y+="<a href='http://"+u+"/cnt?f=3&p="+p+"&rn="+rn+";' target=_blank>";
y+="<img src='http://"+u+"/cnt?"+z+"&j="+j+"&sl="+sl+
"&r="+escape(d.referrer)+"&fr="+fr+"&pg="+escape(window.location.href);
y+="' border=0 width=88 height=31 alt='SpyLOG'>";
y+="</a>"; d.write(y);if(!n) { d.write("<"+"!--"); }//--></script>
              <a target="_blank" href="http://u597.93.spylog.com/cnt?f=3&amp;p=0&amp;rn=0.681382008475365"><img
height="31" alt="SpyLOG" src="http://u597.93.spylog.com/cnt?p=0&amp;rn=0.681382008475365&amp;c=1&amp;wh=1024x768&amp;px=16&amp;j=Y&amp;sl=1.3&amp;r=&amp;fr=0&amp;pg=file%3A///D%3A/upload/fresh.htm";
width="88" border="0"></a>
              <a target="_top" href="http://btn2.linkexchange.ru/users/058163/goto.map?bn=0"><img
height="60" alt="RLE Banner Network" src="http://btn2.linkexchange.ru/cgi-bin/rle.cgi?58163-bn=0?Rnd_Num";
width="120" border="0"></a>
            </div>
          </td>
        </tr>
      </table>
      <center>
        <table width="93%" border="0" align="center">
          <tbody>
          <tr bgcolor="#0000FF">
            <td vAlign="top" align="left" bgcolor="#FF9900"><a target="_top"
href="http://subscribe.ru/"><font color="#000000">http://subscribe.ru/</font></a><font
color="#000000"><br>
              E-mail: <a href="mailto:ask@subscribe.ru">ask@subscrib</a></font><font
color="#FFFFFF"><a href="mailto:ask@subscribe.ru">e.ru</a></font></td>
            <td vAlign="top" align="middle" bgcolor="#FF9900"><a target="_top"
href="http://subscribe.ru/member/unsub?grp=comp.soft.prog.delphi2000"><font color="#000000">Отписаться</font></a><font
color="#FFFFFF"><br>
              <a target="_top" href="http://link.subscribe.ru/noad">;Убрать рекламу</a></font></td>
            <td vAlign="top" align="right" bgcolor="#FF9900"><font color="#000000">Рейтингуется
              <a href="http://topmail.spylog.ru/">SpyLog</a></font></td>;
          </tr>
          </tbody>
        </table>
      </center>
      <img height="1" src width="1"><img height="1" src width="1" border="0">
      <p align="center"><font face="Arial, Arial, Helvetica"> <iframe src="http://b.abn.com.ua/abn.php?t=120&id=1335&r=1&m=1&";
width=120 height=60 frameborder=0 vspace=0 hspace=0
marginwidth=0 marginheight=0 scrolling=no> <a href="http://b.abn.com.ua/abnl.php?t=120&id=1335&r=1";
target=_blank><img
src="http://b.abn.com.ua/abni.php?t=120&id=1335&r=1"; alt="Another Banner Network"
height=60 width=120 border=0 ismap></a>
        </iframe> </font>
      <p align="center"> <iframe src="http://b.abn.com.ua/abn.php?t=&id=2722&r=1&m=1&";
width=468 height=60 frameborder=0
vspace=0 hspace=0 marginwidth=0 marginheight=0 scrolling=no> <a href="http://b.abn.com.ua/abnl.php?t=&id=2722&r=1";
target=_blank><img
src="http://b.abn.com.ua/abni.php?t=&id=2722&r=1"; alt="Another Banner Network"
height=60
width=468 border=0 ismap align="middle"></a> </iframe>
    </td>
  </tr>
</table>
<p align="center"><iframe src="http://rle3.rle.ru/cgi-bin/erle.cgi?sid=458?bt=1?pz=3?sz=/comp.soft.prog?rnd=404445162";
frameborder=0 vspace=0 hspace=0 width=468 height=60 marginwidth=0 marginheight=0
scrolling=no></iframe>
<x/BODY>
<x/HTML>
<script language="JavaScript" src="http://rle3.rle.ru/cgi-bin/erle.cgi?sid=458?bt=16?pz=0?sz=/comp.soft.prog?rnd=613217747"></script>;


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное