Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2011, 01:13   #1
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию работа с почтой - почему listbox1 остается пустым?

1 форма
Код:
unit Unit2;

interface




uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,XPMan, StdCtrls, Registry, Buttons, IdMessage, IdAntiFreezeBase,
  IdAntiFreeze, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdMessageClient, IdSMTP, ExtCtrls,l_net, ComCtrls;

type
  TForm2 = class(TForm)
    Memo1: TMemo;
    ListBox1: TListBox;
    IdSMTP1: TIdSMTP;
    IdAntiFreeze1: TIdAntiFreeze;
    IdMessage1: TIdMessage;
    Timer1: TTimer;
    Panel1: TPanel;
    BitBtn1: TBitBtn;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    StatusBar1: TStatusBar;
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Memo1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Memo1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Memo1Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
     procedure max(var Msg: TMessage); message WM_SYSCOMMAND;
  public
         procedure Busy(Busy: boolean);


  end;

var
  Form2: TForm2;
  c,tim:boolean;
  Preobr:TStringStream;
  s,nick,ip:string;
  stat:integer;

implementation
uses unit1,unit3,unit4,unit5, Unit7;

    procedure TForm2.Busy(Busy: boolean);
begin
  if Busy then
    begin
      screen.cursor := crHourglass;
      statysbusy.visible:=true;
      statysbusy.Show;
    end
  else
    begin
      screen.cursor := crDefault;
      statysbusy.Hide;
    end;
end;




procedure CloseConnet;
begin

end;

{$R *.dfm}

//удалил что не по теме и чтоб влезло










procedure TForm2.FormCreate(Sender: TObject);
var reg:TRegistry;
    nick1:string;
begin
reg:=TRegIniFile.Create;
reg.OpenKey('Software',true);
    if (reg.KeyExists('Chat')=true) then
      begin
        reg.OpenKey('Chat',false);
          if (reg.ValueExists('nick')=true) then
            begin
              nick:=reg.ReadString('nick');
              nick1:=nick;
              InputQuery('×àò - Íèê', 'Ïðåäëîæåí íèê, èñïîëüçîâàâøèéñÿ â ïðîøëûé ðàç. Âû ìîæåòå èçìåíèòü íèê.', nick);
                if nick1<>nick then
                  begin
                    reg.WriteString('nick',nick);

                  end;
              end;
          end
          else if (reg.KeyExists('Chat')=false) then
            begin
              InputQuery('×àò - Íèê', 'Ââåäèòå ñâîé íèê', nick);
              reg.OpenKey('Chat',true);
              reg.WriteString('nick',nick);
              reg.Free;
            end;
reg.Free;

///////
c:=true;
stat:=0;
tim:=true;

end;

procedure TForm2.Timer1Timer(Sender: TObject);
begin
busy(true);
ip:=NET_GetExternalIP;

IdSMTP1.Host:='smtp.mail.ru';
IdSMTP1.Port:=2525;
IdSMTP1.Username:='***'; //çàïèñàòü â êëþ÷
IdSMTP1.Password:='***';

IdMessage1.Body.Text:=nick;
IdMessage1.From.Text:='**';
IdMessage1.Recipients.EMailAddresses:='**';
IdMessage1.Subject:=ip;


try
  IdSMTP1.Connect();
  sleep(5000);
  IdSMTP1.Send(IdMessage1);
  IdSMTP1.Disconnect;
  busy(false);
  timer1.Enabled:=false;
Except
  busy(false);
  timer1.Enabled:=false;
  application.MessageBox('Ïðîâåðüòå ïîäåëþ÷åíèå ê Èíòåðíåòó è ïåðåçàïóñòèòå ïðîãðàììó','Îøèáêà ïîäêëþ÷åíèÿ ê Èíòåðíåòó',0);
end;

list.visible:=true;
list.show;

end;

procedure TForm2.SpeedButton2Click(Sender: TObject);
begin
showmessage('Ìîé IP â ñåòè ÷àòà: '+ip);
end;



procedure TForm2.SpeedButton1Click(Sender: TObject);
begin
form2.BorderIcons:=form2.BorderIcons-[ biMaximize];
panel1.Visible:=false;
form2.Constraints.MaxHeight:=416;
form2.Constraints.MaxWidth:=604;
form2.Constraints.MinHeight:=416;
form2.Constraints.MinWidth:=604;
form2.Width:=604;
form2.Height:=416;
form2.Memo1.Width:=569;
form2.Memo1.Height:=120;
form2.Memo1.Top:=232;
/////




form2.ListBox1.Width:=569;
form2.ListBox1.Height:=217;



end;

procedure TForm2.FormShow(Sender: TObject);
begin
if tim=true then
  begin
    timer1.Enabled:=true;
    tim:=false;
  end;
end;

end.
spydark91 вне форума Ответить с цитированием
Старый 17.06.2011, 01:15   #2
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию

и вторая форма
Код:
unit Unit7;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdMessageClient, IdPOP3, StdCtrls, ExtCtrls, IdMessage, IdCoder,
  IdCoder3to4, IdCoderMIME;

type
  TList = class(TForm)
    ListBox1: TListBox;
    IdPOP31: TIdPOP3;
    IdMessage1: TIdMessage;
    IdDecoderMIME1: TIdDecoderMIME;
    procedure FormCreate(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;
type
  TMyThread = class(TThread)


  protected
    procedure Execute; override;
  end;


var
  List: TList;
  MyThread: TMyThread;
  stat:integer;
  spis:boolean;


implementation
uses unit2;

function KOI8_RToUTF16Char(const P: Char): WideChar;
begin
 case ord(P) of
  $80: result:= #$2500;  // BOX DRAWINGS LIGHT HORIZONTAL
  $81: result:= #$2502;  // BOX DRAWINGS LIGHT VERTICAL
  $82: result:= #$250c;  // BOX DRAWINGS LIGHT DOWN AND RIGHT
  $83: result:= #$2510;  // BOX DRAWINGS LIGHT DOWN AND LEFT
  $84: result:= #$2514;  // BOX DRAWINGS LIGHT UP AND RIGHT
  $85: result:= #$2518;  // BOX DRAWINGS LIGHT UP AND LEFT
  $86: result:= #$251c;  // BOX DRAWINGS LIGHT VERTICAL AND RIGHT
  $87: result:= #$2524;  // BOX DRAWINGS LIGHT VERTICAL AND LEFT
  $88: result:= #$252c;  // BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
  $89: result:= #$2534;  // BOX DRAWINGS LIGHT UP AND HORIZONTAL
  $8a: result:= #$253c;  // BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
  $8b: result:= #$2580;  // UPPER HALF BLOCK
  $8c: result:= #$2584;  // LOWER HALF BLOCK
  $8d: result:= #$2588;  // FULL BLOCK
  $8e: result:= #$258c;  // LEFT HALF BLOCK
  $8f: result:= #$2590;  // RIGHT HALF BLOCK
  $90: result:= #$2591;  // LIGHT SHADE
  $91: result:= #$2592;  // MEDIUM SHADE
  $92: result:= #$2593;  // DARK SHADE
  $93: result:= #$2320;  // TOP HALF INTEGRAL
  $94: result:= #$25a0;  // BLACK SQUARE
  $95: result:= #$2219;  // BULLET OPERATOR
  $96: result:= #$221a;  // SQUARE ROOT
  $97: result:= #$2248;  // ALMOST EQUAL TO
  $98: result:= #$2264;  // LESS-THAN OR EQUAL TO
  $99: result:= #$2265;  // GREATER-THAN OR EQUAL TO
  $9a: result:= #$00a0;  // NO-BREAK SPACE
  $9b: result:= #$2321;  // BOTTOM HALF INTEGRAL
  $9c: result:= #$00b0;  // DEGREE SIGN
  $9d: result:= #$00b2;  // SUPERSCRIPT TWO
  $9e: result:= #$00b7;  // MIDDLE DOT
  $9f: result:= #$00f7;  // DIVISION SIGN
  $a0: result:= #$2550;  // BOX DRAWINGS DOUBLE HORIZONTAL
  $a1: result:= #$2551;  // BOX DRAWINGS DOUBLE VERTICAL
  $a2: result:= #$2552;  // BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
  $a3: result:= #$0451;  // CYRILLIC SMALL LETTER IO
  $a4: result:= #$2553;  // BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
  $a5: result:= #$2554;  // BOX DRAWINGS DOUBLE DOWN AND RIGHT
  $a6: result:= #$2555;  // BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
  $a7: result:= #$2556;  // BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
  $a8: result:= #$2557;  // BOX DRAWINGS DOUBLE DOWN AND LEFT
  $a9: result:= #$2558;  // BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
  $aa: result:= #$2559;  // BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
  $ab: result:= #$255a;  // BOX DRAWINGS DOUBLE UP AND RIGHT
  $ac: result:= #$255b;  // BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
  $ad: result:= #$255c;  // BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
  $ae: result:= #$255d;  // BOX DRAWINGS DOUBLE UP AND LEFT
  $af: result:= #$255e;  // BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
  $b0: result:= #$255f;  // BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
  $b1: result:= #$2560;  // BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
  $b2: result:= #$2561;  // BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
  $b3: result:= #$0401;  // CYRILLIC CAPITAL LETTER IO
  $b4: result:= #$2562;  // BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
  $b5: result:= #$2563;  // BOX DRAWINGS DOUBLE VERTICAL AND LEFT
  $b6: result:= #$2564;  // BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
  $b7: result:= #$2565;  // BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
  $b8: result:= #$2566;  // BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
  $b9: result:= #$2567;  // BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
  $ba: result:= #$2568;  // BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
  $bb: result:= #$2569;  // BOX DRAWINGS DOUBLE UP AND HORIZONTAL
  $bc: result:= #$256a;  // BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
  $bd: result:= #$256b;  // BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
  $be: result:= #$256c;  // BOX DRAWINGS DOUBLE VERTICAL AND
spydark91 вне форума Ответить с цитированием
Старый 17.06.2011, 01:16   #3
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию

продолжаем 2 форму
Код:
HORIZONTAL
  $bf: result:= #$00a9;  // COPYRIGHT SIGN
  $c0: result:= #$044e;  // CYRILLIC SMALL LETTER YU
  $c1: result:= #$0430;  // CYRILLIC SMALL LETTER A
  $c2: result:= #$0431;  // CYRILLIC SMALL LETTER BE
  $c3: result:= #$0446;  // CYRILLIC SMALL LETTER TSE
  $c4: result:= #$0434;  // CYRILLIC SMALL LETTER DE
  $c5: result:= #$0435;  // CYRILLIC SMALL LETTER IE
  $c6: result:= #$0444;  // CYRILLIC SMALL LETTER EF
  $c7: result:= #$0433;  // CYRILLIC SMALL LETTER GHE
  $c8: result:= #$0445;  // CYRILLIC SMALL LETTER HA
  $c9: result:= #$0438;  // CYRILLIC SMALL LETTER I
  $ca: result:= #$0439;  // CYRILLIC SMALL LETTER SHORT I
  $cb: result:= #$043a;  // CYRILLIC SMALL LETTER KA
  $cc: result:= #$043b;  // CYRILLIC SMALL LETTER EL
  $cd: result:= #$043c;  // CYRILLIC SMALL LETTER EM
  $ce: result:= #$043d;  // CYRILLIC SMALL LETTER EN
  $cf: result:= #$043e;  // CYRILLIC SMALL LETTER O
  $d0: result:= #$043f;  // CYRILLIC SMALL LETTER PE
  $d1: result:= #$044f;  // CYRILLIC SMALL LETTER YA
  $d2: result:= #$0440;  // CYRILLIC SMALL LETTER ER
  $d3: result:= #$0441;  // CYRILLIC SMALL LETTER ES
  $d4: result:= #$0442;  // CYRILLIC SMALL LETTER TE
  $d5: result:= #$0443;  // CYRILLIC SMALL LETTER U
  $d6: result:= #$0436;  // CYRILLIC SMALL LETTER ZHE
  $d7: result:= #$0432;  // CYRILLIC SMALL LETTER VE
  $d8: result:= #$044c;  // CYRILLIC SMALL LETTER SOFT SIGN
  $d9: result:= #$044b;  // CYRILLIC SMALL LETTER YERU
  $da: result:= #$0437;  // CYRILLIC SMALL LETTER ZE
  $db: result:= #$0448;  // CYRILLIC SMALL LETTER SHA
  $dc: result:= #$044d;  // CYRILLIC SMALL LETTER E
  $dd: result:= #$0449;  // CYRILLIC SMALL LETTER SHCHA
  $de: result:= #$0447;  // CYRILLIC SMALL LETTER CHE
  $df: result:= #$044a;  // CYRILLIC SMALL LETTER HARD SIGN
  $e0: result:= #$042e;  // CYRILLIC CAPITAL LETTER YU
  $e1: result:= #$0410;  // CYRILLIC CAPITAL LETTER A
  $e2: result:= #$0411;  // CYRILLIC CAPITAL LETTER BE
  $e3: result:= #$0426;  // CYRILLIC CAPITAL LETTER TSE
  $e4: result:= #$0414;  // CYRILLIC CAPITAL LETTER DE
  $e5: result:= #$0415;  // CYRILLIC CAPITAL LETTER IE
  $e6: result:= #$0424;  // CYRILLIC CAPITAL LETTER EF
  $e7: result:= #$0413;  // CYRILLIC CAPITAL LETTER GHE
  $e8: result:= #$0425;  // CYRILLIC CAPITAL LETTER HA
  $e9: result:= #$0418;  // CYRILLIC CAPITAL LETTER I
  $ea: result:= #$0419;  // CYRILLIC CAPITAL LETTER SHORT I
  $eb: result:= #$041a;  // CYRILLIC CAPITAL LETTER KA
  $ec: result:= #$041b;  // CYRILLIC CAPITAL LETTER EL
  $ed: result:= #$041c;  // CYRILLIC CAPITAL LETTER EM
  $ee: result:= #$041d;  // CYRILLIC CAPITAL LETTER EN
  $ef: result:= #$041e;  // CYRILLIC CAPITAL LETTER O
  $f0: result:= #$041f;  // CYRILLIC CAPITAL LETTER PE
  $f1: result:= #$042f;  // CYRILLIC CAPITAL LETTER YA
  $f2: result:= #$0420;  // CYRILLIC CAPITAL LETTER ER
  $f3: result:= #$0421;  // CYRILLIC CAPITAL LETTER ES
  $f4: result:= #$0422;  // CYRILLIC CAPITAL LETTER TE
  $f5: result:= #$0423;  // CYRILLIC CAPITAL LETTER U
  $f6: result:= #$0416;  // CYRILLIC CAPITAL LETTER ZHE
  $f7: result:= #$0412;  // CYRILLIC CAPITAL LETTER VE
  $f8: result:= #$042c;  // CYRILLIC CAPITAL LETTER SOFT SIGN
  $f9: result:= #$042b;  // CYRILLIC CAPITAL LETTER YERU
  $fa: result:= #$0417;  // CYRILLIC CAPITAL LETTER ZE
  $fb: result:= #$0428;  // CYRILLIC CAPITAL LETTER SHA
  $fc: result:= #$042d;  // CYRILLIC CAPITAL LETTER E
  $fd: result:= #$0429;  // CYRILLIC CAPITAL LETTER SHCHA
  $fe: result:= #$0427;  // CYRILLIC CAPITAL LETTER CHE
  $ff: result:= #$042a;  // CYRILLIC CAPITAL LETTER HARD SIGN
  else result:=WideChar(ord(P));
 end;
end;

// converts an KOI8-R string into an UTF-16 wideString
// no special conversions (e.g. on line breaks) are done
function KOI8_RToUTF16Str(const s: string): WideString;
var
 i,j: integer;
begin
 j:= length(s);
 setLength(Result,j);
 for i:=1 to j do
  Result[i]:=KOI8_RToUTF16Char(s[i]);
end;

function DecodeStr(Text: string): string;
var
 Temp, Dec: string;
 P,P2:Integer;
begin
 Temp:=Text;
 Result:='';

 while pos('=?windows-1251?',Temp)>0 do
  begin
   P:=pos('=?windows-1251?',Temp);
   // P2:=pos('?=',Copy(Temp,P,Length(Temp)))+P;
   P2:=pos('?=',Temp);
   Dec:=Copy(Temp,p+17,P2-(P+17));
   Dec:=list.IdDecoderMIME1.DecodeString(Dec);
   Result:=Result+Copy(Temp,1,P-1)+Dec;
   Temp:=Copy(Temp,P2+2,length(Temp));
  end;
 Result:=Result+Temp;
 Temp:=Result;

 Result:='';
 while pos('=?koi8-r?',Temp)>0 do
  begin
   P:=pos('=?koi8-r?',Temp);
   P2:=pos('?=',Temp);
   Dec:=Copy(Temp,p+11,P2-(P+11));
   try
    if Dec<>''
    then Dec:=KOI8_RToUTF16Str(list.IdDecoderMIME1.DecodeString(Dec));
   except

   end;
   Result:=Result+Copy(Temp,1,P-1)+Dec;
   Temp:=Copy(Temp,P2+2,length(Temp));
  end;
 Result:=Result+Temp;
end;

{$R *.dfm}
spydark91 вне форума Ответить с цитированием
Старый 17.06.2011, 01:16   #4
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию

продолжаем 2 форму
Код:
procedure TMyThread.Execute;
var me,ii:integer;
begin
repeat
list.IdPOP31.Host:='pop.mail.ru';
list.IdPOP31.Port:=110;
list.IdPOP31.Username:='**';
list.IdPOP31.Password:='**';

list.IdMessage1.Clear;
list.listbox1.Clear;

Try
if spis then
  form2.Busy(true);
list.IdPOP31.Connect();
me:=list.IdPOP31.CheckMessages;
for ii:=1 to me do
  begin
    list.IdPOP31.Retrieve(me,list.IdMessage1);
      if DecodeStr(list.IdMessage1.Subject)<>unit2.ip then
        begin
          list.listbox1.Items.add('IP='+DecodeStr(list.IdMessage1.Subject));
        //÷åòà åùå
        end;
  end;


Except
     end;
sleep(30000);
until true;
end;

procedure TList.FormCreate(Sender: TObject);
begin
stat:=3;
spis:=true;
end;
end.
spydark91 вне форума Ответить с цитированием
Старый 17.06.2011, 01:17   #5
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию

и наконец то вопрос
почему listbox1 остается пустым?
(письмо на ящике точно есть)
spydark91 вне форума Ответить с цитированием
Старый 17.06.2011, 14:47   #6
art-programs
Пользователь
 
Регистрация: 04.07.2009
Сообщений: 61
По умолчанию

проверяйте выполняется ли условие
Код:
if DecodeStr(list.IdMessage1.Subject)<>unit2.ip then
+ косяк:
Код:
IdPOP31.Retrieve(me,list.IdMessage1);
там ii наверно должен быть?))
art-programs вне форума Ответить с цитированием
Старый 17.06.2011, 21:49   #7
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию

Цитата:
проверяйте выполняется ли условие
Код:

if DecodeStr(list.IdMessage1.Subject)< >unit2.ip then
всмысле?

Цитата:
IdPOP31.Retrieve(me,list.IdMessage1 );

там ii наверно должен быть?))
да,да.ii,исправил,но не работает
spydark91 вне форума Ответить с цитированием
Старый 18.06.2011, 15:54   #8
art-programs
Пользователь
 
Регистрация: 04.07.2009
Сообщений: 61
По умолчанию

листбокс пополняется при выполнении условия
Код:
if DecodeStr(list.IdMessage1.Subject)< >unit2.ip then
а вы уверенны что оно выполняется?
впишите рядом с
Код:
list.listbox1.Items.add('IP='+DecodeStr(list.IdMessage1.Subject));
что нибудь типа
Код:
showmeassage('1');
и ищите(вверх) где не выполняется условие, заходит ли программа в цикл
if (проверьте что возвращает list.IdPOP31.CheckMessages;)
потом цикл repeat until true; зачем?
зачем sleep на пол минуты?
ну и наконец где вы собственно поток-то вызываете?
art-programs вне форума Ответить с цитированием
Старый 19.06.2011, 15:30   #9
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию

поток я вызываю в отдельном окне,чтобы оно обновлялось каждые пол минкты(бновляло список сообщений из определенного ящика)
spydark91 вне форума Ответить с цитированием
Старый 19.06.2011, 15:33   #10
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию

я точно знаю что сообщение на адресе есть и не от меня
это не полный код конечно,не чтоб проверить идет
но он не работает
spydark91 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с почтой Karp_13 Работа с сетью в Delphi 1 24.06.2009 19:36
Ошибка с пустым полем и 30.00 в Double Bobrik Общие вопросы .NET 6 25.05.2009 12:06
Почему при установке винды остается 8мб? UknUser Свободное общение 6 28.01.2009 18:32
проблема с пустым edit'ом SMERSH Помощь студентам 2 15.09.2008 19:26
Проверка, является ли поле Memo пустым или нет. Ветас Помощь студентам 1 24.02.2008 12:47