Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];

Вниз

Распознование Текста с сканера!   Найти похожие ветки 

 
pavels777   (2006-11-12 22:39) [0]

Уважаемые друзья!
Мне задали сделать программу которая распознаёт буквы, отсканированные с плохого листа бумаги.
Функцию очистки от шума я сделал. а вот сравнение с шаблоном в масиве сделать не получаеться :(
Я делал по сравнению количества чёрных пикселей, но ето приводит к неправильному результату!
Помогите пожалуйста!!


 
Palladin ©   (2006-11-12 22:41) [1]

девствительно... вот уж в орешник так в орешник...

ему задали сделать программу... фигасе... да еще с плохого листа бумаги... и то правда... контрольная работа для школьника...


 
pavels777   (2006-11-12 22:44) [2]

Ребята а может поможите?


 
pavels777   (2006-11-12 22:44) [3]

Ребята а может поможите?


 
DrPass ©   (2006-11-12 22:46) [4]


> pavels777   (12.11.06 22:44) [3]

Мы бы с радостью, да вот одна заминка - мой знакомый как раз занимался распознаванием букв в изображении... он эту работу делал четыре года, и получил за нее звание кандидата технических наук. У тебя есть столько времени?


 
Percent   (2006-11-12 22:48) [5]

Функцию очистки от шума я сделал

Это похвально. Какими алгоритмами ты пользовался?

Я делал по сравнению количества чёрных пикселей, но ето приводит к неправильному результату!

Ты неправильно написал программу.

Помогите пожалуйста!!

Чем тебе помочь?


 
pavels777   (2006-11-12 22:50) [6]

очистка от шумов (слабый цвет или другой цвет:)
begin
for y := 0 to Image1.Picture.Bitmap.Height - 1 do
for x := 0 to Image1.Picture.Bitmap.Width-1 do begin
 Color := image1.Canvas.Pixels[x,y];
if Color > $00878787
 then
 image1.Canvas.Pixels[x,y]:=$00FFFFFF;
  if Color < $00878787
 then
 image1.Canvas.Pixels[x,y]:=$00000000;

 end;


 
Ketmar ©   (2006-11-12 22:52) [7]

мда. если это -- очистка от шумов, то я точно танцую лучше Майи Плисецкой.


 
Kolan ©   (2006-11-12 22:53) [8]

Можешь использовать простейший алгоритм шаблона, но для букв врядли получится. Нейроннаня сеть - вариант 2...


 
pavels777   (2006-11-12 22:54) [9]

:)
но ето приметивная очистка. для перебора с шаблонами букв наверно подойдёт,


 
Palladin ©   (2006-11-12 22:55) [10]


> [6] pavels777

поможем... обязательно поможем понять, что даже простейшее определение примитивов стоит дипломной работы... если не больше... а то что ты там привел по поводу шумов это это знаешь... как уборка в квартире при помощи бульдозера...


 
Percent   (2006-11-12 22:56) [11]

Если у сканера шумы распределяются по такому закону, то в топку его, этот сканер.


 
Kolan ©   (2006-11-12 22:57) [12]

Нет если буквы, то шаблон лучьше не брать ошибаться будет он для чисел годится. Начни с выделения букв для этого можно использовать "проход фронтом". Те есть строка на картинке:

 абв

Идешь как-бы фронтом просматривая пикселы и находишь буквы...
Распознавание букв шаг 2


 
pavels777   (2006-11-12 22:59) [13]

Я тут кое что нашол

{&#194; &#253;&#242;&#238;&#233; &#247;&#224;&#241;&#242;&#232; &#232; &#239;&#240;&#238;&#232;&#241;&#245;&#238;&#228;&#232;&#242; &#240;&#224;&#241;&#239;&#238;&#231;&#237;&#224;&#226;&#224;&#237;&#232;&#229;}
{*}  repeat
{&#206;&#225;&#237;&#243;&#235;&#255;&#229;&#236; &#226;&#241;&#229; &#236;&#224;&#241;&#241;&#232;&#226;&#251;}
{*}  for i:=0 to 9 do
{*}  begin
{*}  dig[i]:=0;
{*}  s[i]:=0;
{*}  pos_x[i]:=0;
{*}  pos_y[i]:=0;
{*}  end;
{*}  for x:=dx to dx+mask_width-1 do
{*}  for y:=0 to 9 do  {&#206;&#239;&#240;&#229;&#228;&#229;&#235;&#229;&#237;&#237;&#224;&#255; &#238;&#225;&#235;&#224;&#241;&#242;&#252; &#237;&#224; &#234;&#224;&#240;&#242;&#232;&#237;&#234;&#229;}
{*}  begin
{*}  for i:=0 to 9 do s[i]:=0;
{*}  for x_:=0 to mask_width-1 do
{*}  for y_:=0 to mask_height-1 do  {&#193;&#229;&#240;&#229;&#236; &#239;&#238; &#238;&#247;&#229;&#240;&#229;&#228;&#232; &#226;&#241;&#229; &#242;&#238;&#247;&#234;&#232; &#232;&#231; &#236;&#224;&#241;&#234;&#232;}
{*}  begin
{*}  for i:=0 to 9 do begin   {&#207;&#238;&#228;&#241;&#242;&#224;&#226;&#235;&#255;&#229;&#236; &#226;&#241;&#229; &#236;&#224;&#241;&#234;&#232; &#239;&#238; &#238;&#247;&#229;&#240;&#229;&#228;&#232;}
{*}  if (pic[x_+x,y_+y]=masks[i][x_,y_])
{*}  and (masks[i][x_,y_]=1) then s[i]:=s[i]+1; {&#207;&#240;&#232; &#241;&#238;&#226;&#239;&#224;&#228;&#229;&#237;&#232;&#232; &#243;&#226;&#229;&#235;&#232;&#247;&#232;&#226;&#224;&#229;&#236; &#253;&#235;&#229;&#236;&#229;&#237;&#242; &#236;&#224;&#241;&#241;&#232;&#226;&#224; &#237;&#224; 1    }
{&#199;&#224;&#239;&#238;&#236;&#232;&#237;&#224;&#229;&#236; &#236;&#224;&#234;&#241;&#232;&#236;&#224;&#235;&#252;&#237;&#238;&#229; &#247;&#232;&#241;&#235;&#238; &#241;&#238;&#226;&#239;&#224;&#226;&#248;&#232;&#245; &#242;&#238;&#247;&#229;&#234; &#228;&#235;&#255; &#234;&#238;&#237;&#234;&#240;&#229;&#242;&#237;&#238;&#233; &#236;&#224;&#241;&#234;&#232;                                 }
{*}  if s[i]>dig[i] then  begin dig[i]:=s[i];pos_x[i]:=x;pos_y[i]:=y; end;
{*}  end;
{*}  end;
{*}  end;
{*}  max:=getmax(dig); {&#192; &#227;&#228;&#229; &#230;&#229; &#243; &#237;&#224;&#241; &#241;&#238;&#226;&#239;&#224;&#235;&#238; &#235;&#243;&#247;&#248;&#229; &#226;&#241;&#229;&#245;?                                          }
{C&#235;&#229;&#228;&#243;&#254;&#249;&#232;&#229; &#241;&#242;&#240;&#238;&#234;&#232; &#228;&#238; &#234;&#238;&#236;&#236;&#229;&#237;&#242;&#224;&#240;&#232;&#255; "!" &#236;&#238;&#230;&#237;&#238; &#226;&#251;&#234;&#232;&#237;&#243;&#242;&#252;                                                 }
{&#199;&#228;&#229;&#241;&#252; &#228;&#235;&#255; &#239;&#238;&#237;&#242;&#224; &#240;&#232;&#241;&#243;&#254;&#242;&#241;&#255; &#246;&#232;&#244;&#240;&#251; &#239;&#238; &#236;&#224;&#241;&#234;&#224;&#236;, &#226; &#242;&#229;&#245; &#239;&#238;&#231;&#232;&#246;&#232;&#255;&#245;, &#227;&#228;&#229; &#238;&#237;&#232; &#225;&#251;&#235;&#232; &#237;&#224; &#234;&#224;&#240;&#242;&#232;&#237;&#234;&#224;&#245;                }
{*}  for x:=dx to dx+fig_width do
{*}  for y:=0 to pic_height-1 do
{*}  image_out.Picture.Bitmap.Canvas.Pixels[x,y]:=clblack;
{*}  for x:=0 to mask_width-1 do
{*}  for y:=0 to mask_height-1 do
{*}  if masks[max][x,y]=1 then
{*}  image_out.Picture.Bitmap.Canvas.Pixels[x+pos_x[max],y+pos_y[max]]:=$00AAFFAA;
{!}
{&#199;&#224;&#239;&#238;&#236;&#232;&#237;&#224;&#229;&#236; &#241;&#224;&#236;&#243;&#254; &#236;&#229;&#237;&#252;&#248;&#243;&#254; &#226;&#229;&#240;&#238;&#255;&#242;&#237;&#238;&#241;&#242;&#252; &#241;&#238;&#226;&#239;&#224;&#228;&#229;&#237;&#232;&#255;                                                    }
{*}  if round(100*dig[max]/masks_pix[max])<prob then prob:=round(100*dig[max]/masks_pix[max]);
{*}  label1.Caption:=Label1.Caption+inttostr(max);
{*}  dx:=dx+fig_width; {&#209;&#228;&#226;&#232;&#227;&#224;&#229;&#236;&#241;&#255; &#226;&#239;&#240;&#224;&#226;&#238; &#228;&#235;&#255; &#241;&#235;&#229;&#228;&#243;&#249;&#229;&#233; &#246;&#232;&#244;&#240;&#251;}
{*}  until dx>=pic_width;


 
Gydvin ©   (2006-11-12 23:00) [14]

Как думаешь, fineReader наверное, профаны писали? И даже у них распознание с "плохого" листа толком не идет. Тем более там не только распознание по шаблону, а также есть встроенный словарь слов. С которым при сомнительном распознавание слов идет сравнение.


 
Percent   (2006-11-12 23:00) [15]

Kolan ©

Коля, давай ты будешь излагать только то, в чем ты совершенно уверен в теории и на практике.
В противном случае, давай, ты не будешь сбивать людей с толку, эти люди и сами собьются...


 
pavels777   (2006-11-12 23:03) [16]

извеняюсь :)
{В этой части и происходит распознавание}
{*}  repeat
{Обнуляем все массивы}
{*}  for i:=0 to 9 do
{*}  begin
{*}  dig[i]:=0;
{*}  s[i]:=0;
{*}  pos_x[i]:=0;
{*}  pos_y[i]:=0;
{*}  end;
{*}  for x:=dx to dx+mask_width-1 do
{*}  for y:=0 to 9 do  {Определенная область на картинке}
{*}  begin
{*}  for i:=0 to 9 do s[i]:=0;
{*}  for x_:=0 to mask_width-1 do
{*}  for y_:=0 to mask_height-1 do  {Берем по очереди все точки из маски}
{*}  begin
{*}  for i:=0 to 9 do begin   {Подставляем все маски по очереди}
{*}  if (pic[x_+x,y_+y]=masks[i][x_,y_])
{*}  and (masks[i][x_,y_]=1) then s[i]:=s[i]+1; {При совпадении увеличиваем элемент массива на 1    }
{Запоминаем максимальное число совпавших точек для конкретной маски                                 }
{*}  if s[i]>dig[i] then  begin dig[i]:=s[i];pos_x[i]:=x;pos_y[i]:=y; end;
{*}  end;
{*}  end;
{*}  end;
{*}  max:=getmax(dig); {А где же у нас совпало лучше всех?                                          }
{Cледующие строки до комментария "!" можно выкинуть                                                 }
{Здесь для понта рисуются цифры по маскам, в тех позициях, где они были на картинках                }
{*}  for x:=dx to dx+fig_width do
{*}  for y:=0 to pic_height-1 do
{*}  image_out.Picture.Bitmap.Canvas.Pixels[x,y]:=clblack;
{*}  for x:=0 to mask_width-1 do
{*}  for y:=0 to mask_height-1 do
{*}  if masks[max][x,y]=1 then
{*}  image_out.Picture.Bitmap.Canvas.Pixels[x+pos_x[max],y+pos_y[max]]:=$00AAFFAA;
{!}
{Запоминаем самую меньшую вероятность совпадения                                                    }
{*}  if round(100*dig[max]/masks_pix[max])<prob then prob:=round(100*dig[max]/masks_pix[max]);
{*}  label1.Caption:=Label1.Caption+inttostr(max);
{*}  dx:=dx+fig_width; {Сдвигаемся вправо для следущей цифры}
{*}  until dx>=pic_width;


 
Percent   (2006-11-12 23:04) [17]

pavels777
Я тут кое что нашол


Сидят мужики, ловят рыбу. Подваливает ёжик:
- Мужики, у вас изолента есть?
- Нет...
Ёжик уходит, через час возвращается:
- Мужики, я вам изоленту принес!
(С) Анекдот

То есть, зачем ты это тут выложил? Это твой код? Что он должен делать? Что он делает неправильно? Где, по твоему, ошибка?


 
Palladin ©   (2006-11-12 23:05) [18]

:)))


> [15] Percent  


Уже сбились, бо уверены что за две минуты могут сдвинуть гору, только бы подсказали как, а там уж они сами как нибудь... и ведь не переубедить...


 
Ketmar ©   (2006-11-12 23:14) [19]

>[16] pavels777 12-Nov-2006, 23:03
>извеняюсь :)
>{В этой части и происходит распознавание}
это тебя кто-то жестоко обманул.


 
KilkennyCat ©   (2006-11-12 23:17) [20]

Не, ну конкретно для конкретного плоо листа распознаватель, довольно-таки идеальный, за пару дней написать не проблема. Только экономически не выгодно :)


 
pavels777   (2006-11-12 23:17) [21]

ок привожу полный код!

procedure TForm1.Button1Click(Sender: TObject);
begin
{Запускаем диалог и открываем картинку                                                              }
{*}  If OpenPicture.Execute then Image_IN.Picture.LoadFromFile(OpenPicture.FileName);
{---------------------------------------------------------------------------------------------------}
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
OpenPicture.InitialDir:=ExtractFilePath(Application.Exename)+"TESTPICTURES";
end;

procedure TForm1.Button2Click(Sender: TObject);
const mask_height=10; {Высота маски}
     mask_width=8;   {Ширина маски}
     pic_height=20;  {Высота картинки}
     pic_width=48;   {Ширина картинки}
     fig_width=round(pic_width/3); {Третья часть картинки (для трех цифр)}
type mask=array[0..mask_width-1,0..mask_height-1] of byte; {Тип массива для маски}
var masks:array[0..9] of mask; {Массив масок}
   masks_pix:array[0..9] of integer; {Массив для хранения кол-ва белых пикселей для каждой маски}
   pic:array[0..pic_width-1,0..pic_height-1] of byte; {Массив для картинки}
   i,x,y,x_,y_,dx,max,prob:integer;
   dig,s,pos_x,pos_y:array[0..9] of byte; {вспомогательные массивы}
{Функция определения номера максимально совпавшей маски                                             }
{*}  function Getmax(dig:array of byte):byte;
{dig - число совпавших точек для каждой маски                                                       }
{*}  var i,i_:byte;
{*}  a,b:real;
{*}  begin
{*}  a:=0;
{*}  i:=0;
{*}  for i_:=0 to 9 do
{*}  begin
{Вычисляем вероятность совпадения                                                                   }
{*}  b:=dig[i_]/masks_pix[i_];
{*}  if a<b then
{*}  begin
{*}  a:=b;
{*}  i:=i_;
{*}  end;
{*}  end;
{*}  result:=i;
{*}  end;
{---------------------------------------------------------------------------------------------------}

begin
{Загружаем маски в массивы                                                                          }
{*}  for i:=0 to 9 do
{*}  begin
{*}  masks_pix[i]:=0;
{*}  Temp.Picture.LoadFromFile(ExtractFilePath(Application.Exename)+"MASKS\"+InttoStr(i)+".bmp");
{*}  for x:=0 to mask_width-1 do
{*}  for y:=0 to mask_height-1 do
{*}  if Temp.Canvas.Pixels[x,y]=clwhite then
{*}  begin
{*}  masks[i][x,y]:=1;
{*}  masks_pix[i]:=masks_pix[i]+1;
{*}  end
{*}  else masks[i][x,y]:=0;
{*}  end;
{---------------------------------------------------------------------------------------------------}

{Загружаем картинку в массив                                                                        }
{*}  for x:=0 to pic_width-1 do
{*}  for y:=0 to pic_height-1 do
{*}  begin
{*}  if  Image_IN.Canvas.Pixels[x,y]=clwhite then pic[x,y]:=1 else pic[x,y]:=0;
{*}  end;
{---------------------------------------------------------------------------------------------------}

{Подготовка Image_OUT}
{*}  Image_OUT.Picture.Bitmap.Width:=pic_width;
{*}  Image_OUT.Picture.Bitmap.Height:=pic_height;
{---------------------------------------------------------------------------------------------------}

{Очищаем картинку от мусора                                                                         }
{Мусор в данном случае - точки того же цвета, что и цифры                                           }
{*}  for x:=0 to pic_width-1 do
{*}  for y:=0 to pic_height-1 do
{*}  if pic[x,y]=1 then
{*}  begin
{*}  x_:=x;
{*}  y_:=y;
{*}  if x<=-1 then x_:=1;
{*}  if y<=-1 then y_:=1;
{Если нет соседних точек или точка лежит на краях картинки то убираем ее                            }
{Здесь может быть и какой-нибудь другой признак: различие по цвету, например                        }
{*}  if (pic[x_+1,y_]<>1) and   (pic[x_-1,y_]<>1) and
{*}  (pic[x_,y_+1]<>1) and  (pic[x_,y_-1]<>1) and
{*}  (pic[x_+1,y_+1]<>1) and  (pic[x_-1,y_-1]<>1) and
{*}  (pic[x_-1,y_+1]<>1) and (pic[x_+1,y_-1]<>1) then
{*}  pic[x_,y_]:=0;
{*}  end;
{---------------------------------------------------------------------------------------------------}
dx:=0;      {Смещение по горизонтали}
prob:=100; {Начальное значение вероятности успешного распознавания(в %)}
label1.Caption:="";
{В этой части и происходит распознавание}
{*}  repeat
{Обнуляем все массивы}
{*}  for i:=0 to 9 do
{*}  begin
{*}  dig[i]:=0;
{*}  s[i]:=0;
{*}  pos_x[i]:=0;
{*}  pos_y[i]:=0;
{*}  end;
{*}  for x:=dx to dx+mask_width-1 do
{*}  for y:=0 to 9 do  {Определенная область на картинке}
{*}  begin
{*}  for i:=0 to 9 do s[i]:=0;
{*}  for x_:=0 to mask_width-1 do
{*}  for y_:=0 to mask_height-1 do  {Берем по очереди все точки из маски}
{*}  begin
{*}  for i:=0 to 9 do begin   {Подставляем все маски по очереди}
{*}  if (pic[x_+x,y_+y]=masks[i][x_,y_])
{*}  and (masks[i][x_,y_]=1) then s[i]:=s[i]+1; {При совпадении увеличиваем элемент массива на 1    }
{Запоминаем максимальное число совпавших точек для конкретной маски                                 }
{*}  if s[i]>dig[i] then  begin dig[i]:=s[i];pos_x[i]:=x;pos_y[i]:=y; end;
{*}  end;
{*}  end;
{*}  end;
{*}  max:=getmax(dig); {А где же у нас совпало лучше всех?                                          }
{Cледующие строки до комментария "!" можно выкинуть                                                 }
{Здесь для понта рисуются цифры по маскам, в тех позициях, где они были на картинках                }
{*}  for x:=dx to dx+fig_width do
{*}  for y:=0 to pic_height-1 do
{*}  image_out.Picture.Bitmap.Canvas.Pixels[x,y]:=clblack;
{*}  for x:=0 to mask_width-1 do
{*}  for y:=0 to mask_height-1 do
{*}  if masks[max][x,y]=1 then
{*}  image_out.Picture.Bitmap.Canvas.Pixels[x+pos_x[max],y+pos_y[max]]:=$00AAFFAA;
{!}
{Запоминаем самую меньшую вероятность совпадения                                                    }
{*}  if round(100*dig[max]/masks_pix[max])<prob then prob:=round(100*dig[max]/masks_pix[max]);
{*}  label1.Caption:=Label1.Caption+inttostr(max);
{*}  dx:=dx+fig_width; {Сдвигаемся вправо для следущей цифры}
{*}  until dx>=pic_width;
{---------------------------------------------------------------------------------------------------}
label1.Caption:=Label1.Caption+" ("+inttostr(prob)+"%)";
end;



 
Palladin ©   (2006-11-12 23:19) [22]


> ок привожу полный код!

кому? [17] читал?


 
KilkennyCat ©   (2006-11-12 23:21) [23]

нехилые вложенные циклы...


> Здесь для понта рисуются


файнриадер и прочие - вы уволены! вот она - суперо-пуперо-распознавалка!


 
KilkennyCat ©   (2006-11-12 23:23) [24]

Очистка от мусора выполнена по алгоритму игры "Life" :))


 
Palladin ©   (2006-11-12 23:29) [25]


> Очистка от мусора выполнена по алгоритму игры "Life"

%))


 
Gydvin ©   (2006-11-12 23:31) [26]

Если интересно, у Керка или Подгорецкого выложен пример распознования цифр


 
Ketmar ©   (2006-11-12 23:35) [27]

мда. а ведь и я когда-то был таким же молодым и горячим...


 
KilkennyCat ©   (2006-11-12 23:39) [28]

> [26] Gydvin ©   (12.11.06 23:31)

Вау! Керк и Подгорецкий - одно и тоже лицо, оказывается! Теперь все ясно...
:)


> [27] Ketmar ©   (12.11.06 23:35)


А теперь ты старый и холодный :)


 
Gydvin ©   (2006-11-12 23:41) [29]


> KilkennyCat ©   (12.11.06 23:39) [28]
>
> > [26] Gydvin ©   (12.11.06 23:31)
>
> Вау! Керк и Подгорецкий - одно и тоже лицо, оказывается!
>  Теперь все ясно...
> :)

Почему? Волшебное слово - ИЛИ


 
KilkennyCat ©   (2006-11-12 23:42) [30]

> [29] Gydvin ©   (12.11.06 23:41)

вот именно.


 
Palladin ©   (2006-11-12 23:42) [31]

угу... лет 10-12 назад... когда все казалось очевидным... но подобный срез значений я уж никак чисткой шумов не называл... )


 
Gydvin ©   (2006-11-12 23:43) [32]


> > KilkennyCat ©   (12.11.06 23:39) [28]

Можно иногда полностью читать сообщение))


 
Gydvin ©   (2006-11-12 23:44) [33]


> KilkennyCat ©   (12.11.06 23:42) [30]
>
> > [29] Gydvin ©   (12.11.06 23:41)
>
> вот именно.

Ну и....

> Gydvin ©   (12.11.06 23:31) [26]

Читаем заново )))


 
KilkennyCat ©   (2006-11-12 23:44) [34]

> [31] Palladin ©   (12.11.06 23:42)

гы... я в то время пришел к выводу, что можно сделать аналоговый распознаватель :) устройство, типа аналогового ксерокса плюс печатная машинка.


 
Palladin ©   (2006-11-12 23:47) [35]

это типа если оцифровать голоса двух человек и вычислить среднестатистическую разницу циферек, то можно синтезировать голос одного в голос другого...

:)))


 
Palladin ©   (2006-11-12 23:48) [36]


> голоса двух человек

произносящих соответственно одну и туже фразу :)


 
Anatoly Podgoretsky ©   (2006-11-12 23:48) [37]

> KilkennyCat  (12.11.2006 23:39:28)  [28]

Так нас уже трое оказывается, ты Кетмаря забыл


 
Gydvin ©   (2006-11-12 23:51) [38]

Чет я не понял, в каком месте начинать смеяться..... где я сказал не так


 
KilkennyCat ©   (2006-11-12 23:53) [39]

> [37] Anatoly Podgoretsky ©   (12.11.06 23:48)

точно... эх, хорошо вам вместе, нескучно...


 
Palladin ©   (2006-11-12 23:55) [40]


> [38] Gydvin ©

ни в каком... народ частично ушел в детство...



Страницы: 1 2 3 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.144 c
6-1152261039
Alexey_
2006-07-07 12:30
2006.12.03
Задержка при подключении через сокетные компоненты


15-1163486604
MasterOK
2006-11-14 09:43
2006.12.03
А где Ega23?


15-1163707107
oxffff
2006-11-16 22:58
2006.12.03
Какое будущее у языка Object Pascal?


15-1163497281
s_t_d
2006-11-14 12:41
2006.12.03
Проблема с платой Intel D-945 PLRN


2-1163685869
Новый_Юзер
2006-11-16 17:04
2006.12.03
Drag n Drop в TreeView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский