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

Интернет для Delphi-программиста


Информационный Канал Subscribe.Ru

Интернет для Delphi программиста.

Выпуск : № 23


Здравствуйте уважаемые подписчики рассылки "Интернет для Delphi программиста". Данная рассылка предназначена для всех кого интересует Delphi, здесь будут выкладываться ссылки на различные ресурсы интернета так или иначе связанные с Delphi: книги, исходники, программы... Изучайте Delphi один из лучших языков программирования!!!


ЗАДАТЬ ВОПРОС :

Правила рассылки: 
1. Не присылайте ответов на вопросы типа "да, нет".  
2. Если отвечаешь на вопрос - то отвечай подробно с примерами (желательно с исходником примера).
3. Тема вопросов - программирование на Delphi.
Внимание авторам: - Я не указываю ваши адреса из-за спама, но кто хочет, чтобы его email был - пишите, иначе только имя.
Отправить вопрос


Новые вопросы.


Вопрос № 36 задаёт: Ярошук Юрий Ответить
Подскажите как из TMemo передать в Excel с полным оформлением по (столбикам и строкам)
Вопрос № 37 задаёт: Eugene Ответить
Надо сделать прогу-тест. У меня на форме несколько RadioButton'ов и Кнопка. Дан вопрос и 4 варианта ответов - один из них правильный ответ, 3 соотв. непр. (4 RadioButton'ов). Как сделать, чтобы когда я выбираю один из RadioButton'ов(правильный) и кликаю по кнопке, должно выйти сообщение "Правильно". Подскажите, как это осуществить?
Вопрос № 38 задаёт: Ирина Ответить
Здравствуйте! Как из одной ТБД в CompoBox высветить 2 поля и как их по выбору перенести в DBGrid (т.е. делаем выборку из справочника, высветив 2 его поля (наименование, цена) и заносим выбранные данные в формируемую БД)?
Вопрос № 39 задаёт: GOG Ответить
Всем приветы!!!
У меня тут нехилая задачка.
Вообщем так, имеется программа, которая была сделана на дедушке всех компьютеров ZX-Spectrum с интерпритатором Бейсика. Она полностью рабочая была на том компе.
Я хочу перенести ее в мой современный, но есть одно НО. В программе участок не реализуемый стандартными средствами в Delphi и VisualBasic.
Его задача, дать готовый результат вычисления, которое находится в символьной переменной. В оригинале это реализовывалось с помощью функции VAL(), аналог в Delphi и VisualBasic работает по иному, и возможности адаптировать его нет. Что делать?

Ответы.

Вопрос № 33 задаёт: Viterik Ответить
Всем Привет!!! У меня вопрос: В TMemo имеется текст, некоторые символы и слова ненужны, как программно их удалить?
Отвечает: SHKoder
function StrReplace(const Str, Str1, Str2: string): string;
// str - исходная строка
// str1 - подстрока, подлежащая замене
// str2 - заменяющая строка
var
P, L: Integer;
begin
Result := str;
L := Length(Str1);
repeat
P := Pos(Str1, Result);
// ищем подстроку
if P > 0 then
begin
Delete(Result, P, L);
// удаляем ее
Insert(Str2, Result, P); // вставляем новую
end;
until P = 0;
end;

думаю не обязательно быть гением чтобы разобраться :)
Отвечает: Семёнов Максим Анатольевич
Предлагаю такой вариант (проверено в D7 работает):
Вариант А

uses StrUtils;
.........................
procedure TForm1.Button1Click(Sender: TObject);
var
i,j: integer;
begin
for i:=0 to Memo1.lines.Count-1 do
for j:=0 to Memo2.Lines.Count-1 do
Memo1.Lines[i]:=AnsiReplaceText(Memo1.Lines[i],Memo2.Lines[j],'');
end;

function AnsiReplaceText(const AText, AFromText, AToText: string): string;

AnsiReplaceText функция возвращающая строку которая является результатом замены строки AFromText найденная в AText, строкой AToText, причем заменятся будет без влияния регистра символов (если необходимо case-sensitive замена используем вместо указанной функции ее аналог AnsiReplaceText). если строка которую ищем равна строке которой заменяем, то функция не произведет замены.

Memo1 - компонент в котором находится исходный текст
Memo2 - здесь пишутся слова (фразы) которые надо удалять из текста.
Button1 - кнопка запуска обработки по варианту А
Button2 - кнопка запуска обработки по модифицированному варианту А

модификация варианта А:

procedure TForm1.Button2Click(Sender: TObject);
var
j: integer;
begin
for j:=0 to Memo2.Lines.Count-1 do
Memo1.Lines.text:=AnsiReplaceText(Memo1.Lines.Text,Memo2.Lines[j],'');
end;

Эта модификация также работает, но я не пробовал с большими массивами строк в мемо - советую автору вопроса испробовать оба варианта и выбрать приемлемый по времени, скорости и пр.

Отвечает: Serg

Всё просто:
Компонент TMemo переносим на форму, и не смотрим что там внутри записано,а записано в параметре Lines = Memo1
Далее кидаем на форму компонент (клавиши)TButton1 и в его свойста пишем этот код

procedure TForm1.Button1Click(Sender: TObject);
begin

//==================================
Memo1.Lines[0] := '''; //это просто очищает 1дну строку
//==================================
//А если в цикле,то:
For i := 1 to 20 do //а это очищает 20 строк в TMemo,но эти строки должны быть уже записаны в
//свойства TMemo.Иначе Вас программа огорчит об ошибке.
begin
Memo1.Lines[i]:= ' ';

// Естественно,здесь могут быть проверки на пустые строки в компоненте TMemo.
// Но суть дела не меняет.
end;
end;

Программно так.

Или в ещё как нибудь.А главное,учите Delphi.

Отвечает: Мурник Роман
так можно убрать ненужный символ из мемо.

var s, s2: string;
I: integer;
begin
s:=memo1.text;
for I:=1 to length(s) do
if s[I]<>'ваш символ' then s2:=s2+s[I];
memo1.text:=s2;
end;

а вот так можно один символ заменить на другой:

var s, s2: string;
I: integer;
begin
s:=memo1.text;
for I:=1 to length(s) do
if s[I]='ваш символ' then s2:=s2+'на что заменить' else s2:=s2+s[I];
memo1.text:=s2;
end;

Вопрос № 34 задаёт: c.j.frost Ответить
Приветствую. Пытаюсь разобраться с компонентом TreeView, нужно, что бы он выводил структуру подкаталогов выбранного диска.
Отвечает: SHKoder
а почему нельзя использовать компоненты:
TDirectoryListBox,
TShellTreeView,
TShellListView ???
ведь они уже инициализированы под то что вам нужно :)
Отвечает: Сергей
Здоров всем программистам, вообщем попробуй вот что, TreeView. забрось - это лишняя головная боль! Вот! Залезь на панельку "Samples" и посмотри компонент ShellTreeView, а ещё может найдёшь на этой панельки много чего интересного!
Чё как, обращайся помогу чем смогу!
Отвечает: Крези.ru
Обратись к help в Delphi,там всё есть.Как в Греции.
Вопрос № 35 задаёт: Середюк И. А. Ответить
Подскажите, как в Дельфи 5 зделать, чтобы в RichEdit работал скролинг при прокрутке колесика мышки?
Опишите пожалуйста подробней!
Отвечает: SHKoder
object RichEdit1: TRichEdit
Left = 176
Top = 72
Width = 185
Height = 89
ScrollBars = ssBoth
TabOrder = 0
end
Отвечает: Крези.ru
Ну во первых нежно узнать,есть ли колесо у мыши.
А для этого нужно прочитать свойство "WheelPresent" глобального объекта "mouse".
А уже затем делать скроллинг текста.Но это уже другой вопрос,как прокрутить.
Учите Delphi Господа.
Отвечает: Андрей Ерёмин
Он итак работает. Проверьте свои драйвера на мышь.


Статья  Алгоритмы Сортировки. Автор: Delist. Сайт: http://www.noil.pri.ee/

Алгоритмы Сортировки.

Вопросы представления отсортированных данных всегда занимали умы программистов всех языков и концепций. За период развития программирования было разработано большое количество алгоритмов, способных из неупорядоченной кучи составить стройный ряд цифр.

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

Однако, следует отметить что изучение алгоритмов совсем не лёгкая задача, здесь требуется внимательное рассмотрение каждой строчки. Конечно если Вы воспользуетесь кнопками Ctrl+C и Ctrl+V Ваша программа не станет хуже работать, но на мой взгляд, нет ничего хуже когда программист сам до конца не понимает, как работает его программа.

Итак, начнём.

Сортировка выбором

И начнём мы с сортировки выбором. Хотя этот алгоритм и не является самым быстрым, но я решил начать с него потому что, на мой взгляд он наиболее прост для понимания. Суть алгоритма состоит в том, что бы в исходном массиве найти наименьший элемент, а затем поменять местами первый элемент в списке с найденным. После того, находиться наименьший их оставшихся и меняется со вторым элементом. И так до тех пор пока весь список не будет отсортирован.
Таким образом понадобиться N+(N-1)+(N-2)+...+1 или N*N проходов чтобы отсортировать список.

procedure SellectionSort(var a: array of integer; min,
max: Integer);
var
i, j, best_value, best_j: longint;
begin
for i:=min to max do begin
best_value:=a[i];
best_j:=i;
for j:=i+1 to max do begin
if a[j]<best_value then begin
best_value:=a[j];
best_j:=j;
end;
end;
a[best_j]:=a[i];
a[i]:=best_value;
end;
end;


Переменными min и mах можно ограничить область списка в которой, будет выполнена сортировка. Что бы отсортировать весь массив необходимо записать следующее
SellectionSort(a, 0, high(a));

Сортировка вставкой

Это тоже предельно простой для понимания алгоритм. Идея в том что бы создать новый массив, а затем последовательно вставлять в новый массив элементы из старого массива, чтобы созданный массив был всё время упорядоченным.

procedure InsertionSort(var a: array of integer; N: integer);
var
B: array[0..10000] of integer;
i, j: integer;
begin
for i:=0 to N do begin
j:=i;
while (j>1) and (B[j-1]>A[i]) do begin
B[j]:=B[j-1];
j:=j-1;
end;
B[j]:=A[i];
end;
for i:=0 to N do
A[i]:=b[i];
end;


Если внимательно посмотреть на реализацию алгоритма, то сразу же заметим что для его выполнения необходимо больше,, чем N*N проходов, поэтому в приложениях, где скорость выполнения кода критична, подобный алгоритм использовать не актуально.

Пузырьковая сортировка

Чаще всего используется для сортировки частично упорядоченных списков, так как именно для них скорость выполнения максимальна и может равняться O(N), где N количество элементов массива, а O время одного прохода через цикл. Этот алгоритм в исходном списке ищет пары цифр, которые следуют не по порядку и затем меняет их местами. Процесс повторяется до тех пор пока весь список не будет отсортированным. На рисунке изображен пример сортировки данным методом.

На рисунке можно проследить за перемещение элемента, который изначально был ниже чем после сортировки. Во время прохода цикла, элемент изменяет свою позицию на одну позицию ближе к своему конечному месту. На рисунке элемент двигается к вершине, как пузырёк воздуха к поверхности воды. Этот эффект и дал название алгоритму пузырьковой сортировке.


procedure BubbleSort(var a: array of integer; min, max: Integer);
var
i, j, tmp: integer;
begin
for i:=min to max do
for j:=min to max-i do
if A[j]>A[j+1] then
begin {Обмен элементов}
tmp:=A[j];
A[j]:=A[j+1];
A[j+1]:=tmp;
end;
end;


Быстрая сортировка.

При этом виде сортировке массив разбивается на две части, а затем рекурсивно вызывает сама себя для их сортировки. Притом элементы первой части меньше любого элемента второй части.
Рассмотрим данный вид сортировке на примере:
Если алгоритм вызывается для списка, который содержит нуль или один элемент, то подписок уже отсортирован и процедура заканчивается, в противном случае выбирается один элемент, относительно которого список разбивается на две части, в первый подписок идут элементы меньше выбранного, во второй больше. И затем, как уже было сказано, она рекурсивно вызывает сама себя для сортировки обои подсписков.

procedure QuickSort(var a: array of integer; min, max: Integer);
Var
i,j,mid, tmp : integer;
Begin
if min<max then begin
mid:=A[min];
i:=min-1;
j:=max+1;
while i<j do begin
repeat
i:=i+1;
until A[i]>=mid;
repeat
j:=j-1;
until A[j]<=mid;
if i<j then begin
tmp:=A[i];
A[i]:=A[j];
A[j]:=tmp;
end;
end;
QuickSort(a, min,j);
QuickSort(a, j+1,max);
end;
end;


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

Сортировка методом Шелла.

Ещё один метод сортировки - это сортировка методом Шелла.Основная идея этого алгоритма заключается в том, чтобы в начале ycтpанить массовый беспорядок в массиве, сравнивая далеко стоящие друг от друга элементы. Как видно, интервал между сравниваемыми элементами постепенно уменьшается до единицы. Это означает, что на поздних стадиях сортировка сводится просто к перестановкам соседних элементов (если, конечно, такие перестановки являются необходимыми).

procedure TForm1.SortShell(var a: array of real; N: Integer);
var
h:Variant;
c:Boolean;
g:Integer;
i:Integer;
j:Integer;
tmp:Real;
begin
h:=1;
g:=0;
repeat
h:=3*h+1
until (h>=n);
if (h>n) then begin
h:= h/3;
g:=h;
end;
n:=n-1;
repeat
i:=g;
repeat
j:=i-g;
c:=True;
repeat
if a[j]<=a[j+g] then begin
c:=False;
end
else begin
Tmp:=a[j];
a[j]:=a[j+g];
a[j+g]:=Tmp;
end;
j:=j-1
until not((j>=0)and(C));
i:=i+1
until not(i<=n);
h:=g;
h:=h/3;
g:=h;
until not(g>0);
end;


Заключение.
В данной статье была предпринята попытка объяснить наиболее часто применяемые алгоритмы сортировки. Однако рассказать о всех аспектах реализации различных алгоритмов в одной статье довольно сложно, и статья получается перенасыщенная информацией, поэтому я решил разбить её на две части и сейчас вторая уже готовиться к выходу. В ней планируется рассказать о более специфических алгоритмах, сортировке не только цифр, но и слов, как русского так и английского языка, а также об обратном процессе сортировки - перемешивания.

Удачи!

P.S. Замечания, пожелания и дополнения к этой статье просим оставлять на форуме. Исходный код программы, которая использует методы сортировки описанные в этой статье можно скачать здесь.


Компаненты  

AlphaEffects

Позволяет делать анимационные эффекты для любых форм с использованием прозрачности. Это не компонент, а модуль, поэтому не требует установки в Delphi. Достаточно вызвать только одну функцию и все готово. Включает в себя небольшую тележку (17 шт.) симпотных визуальных эффектов, которые украсят появление и исчезновение любого окна. Работает быстро и без тормозов. Работает в Windows2000 и выше

Picshow

Этот компонент позволяет создавать различные эффекты над картинками. Можно взять две картинки и создать красивый визуальный переход между ними. Таким образом, легким движением руки делаются презентации с переходами между кадрами в виде визуальных эффектов. Можно использовать компонент и как способ создания эффектов в графическом редакторе или аниматоре (GIF или AVI).


Справочник  

DRKB 2.3

Если описывать весь этот справочник, то не хватит и недели, поэтому лишь вкратце перечислю, то что было включено в этой версии.
1. Добавлено более 600 новых статей
2. Существенно переработаны и дополнены старые статьи, исправлено или заменено большое количество исходных кодов
3. Особое внимание уделено вопросам классификации, перекрёстным ссылкам, поиску и удалению дупликатов.
4. Масса мелких исправлений.
Размер: 9.6 мб - громадное количество статей с исходным кодом.
Но никакие описания, не заменят данный справочник


Исходники  

Программа для чата 2х человек.

Для соединения нужно ввести в опциях ip адрес того с кем нужно соединится и нажать "Применить и закрыть". Соединение произойдет автоматически после запуска программы на обоих компьютерах. Соединения не будет если ip адреса не установлены на обоих компьютерах, либо различаются каналы.
Поддерживаемые фичи:
  • передача речи
  • посылка файла в том числе и Drag&Drop
  • звуковой вызов ;-)
  • вызов в приват методом net send
  • смена цветовой схемы
  • полное сохранение настроек
  • автозапоминание введенных ip адресов
  • включаемая/отключаемая озвучка
  • встроенный пинг

Самораспространяющаяся программа в локальной сети

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

Идея следующая. Если создаем такую программу, которая при ее запуске создаст себе где-нибудь папку, скопирует себя туда и папку эту расшарит под привлекательным именем. Ну а какое имя самое привлекательное для студента? Конечно что-нибудь сексуальное, ну и имя программы должно быть заманчивым, причем с двойным расшерением и с иконкой от файла типа *.avi.

Текстовый редактор для ускорения ввода

Основная идея - это использование употребленных ранее слов, начинающихся с тех же букв что вводятся в данный момент.
Выбор осуществляется стрелками а подтверждение кнопкой Enter. При вводе слова список уменьшается так как меньшее количество слов начинается с введенных букв, перепроверка полного списка найденых слов в тексте осуществляется после нажатия пробела.

Joiner - соединение 2х файлов в один исполняемый

В инете полно программ для "склеивания", используют их частенько те кто хотят подсунуть троянчика или программу такого рода. Нужны они в общем в тех случаях когда необходимо "отвести глаза". Когда передо мной встала такая задача я не стал сразу писать свою прогу(а зря), а скачал популярные версии joiner'ов для тестов. Как оказалось Касперский неравнодушен к программам такого рода и монитор сразу же завижжал. Вот тогда и пришлось писать самому.

Проигрывание mp3 файлов с помощью mpegdll.dll

При разработке чатилки мне захотелось чтоб в программе была возможность передать голос, записанный с микрофона. Как передавать голос на лету я так и не разобрался и решил передавать mp3 файл, а на другом конце его воспроизводить. Покопавшись в инете я выяснил что когда дело касается ненапряжного воспроизведения люди используют библиотеку mpegdll.dll.

Программа для отправки сообщений методом net send

В системах линейки NT есть такая служба messenger, которая позволяет принимать собщения, посланные командой net send host/ip сообщение, например: net send 127.0.0.1 привет. Все как правило юзают командную строку. Когда приходит такое сообщение, то ip отправителя не показуется, а показуется имя машины. Это очень не удобно в распределенных сетях(например в сети моей общаги), так как показуется не полное доменное имя, а только имя машины, которое указано в настройках.

Программа для ожидания открытия некоторого порта на некотором хосте

Мой друг каждый день транслировал в сеть с тюрена канал MTV, телеков у нас небыло конечно а вот компы были, тока вот трансировал он не постоянно а то запускал то закрывал. Так возникла идея написать программу которая будет подавать сигнал при открытии и закрытии порта у некоего хоста.
Все что нам понадобится это компоненты TIdTCPClient и внешнаяя компонента для проигрывания звука из wav файла TWave.

Программа для блокировки запуска приложений

В списке тем на бакалавра на 4м курсе была такая тема: "Блокировка запуска приложений". Не долго думая я сел, порылкак как обычно в инете, почитал как это делать и написал то, что Вы видите на скриншоте.
В списке запрещенных задач указываем маски и нажимаем рубильник. Мгновенно после запуска приложения оно терминируется, если строка его заголовока входит в одну из масок в "черном списке".

Программа для скрывания приложений с рабочего стола и панели задач в трей

При возникновении в системе подозртельный процессов все как правило проверяют всякими утилитками реестр на предмет автозагружаемых программ. Все знают что именно там зачастую прописаны всякого рода трояны. Но не все знают где смотреть и не все знают что программы не проверяют многие места из которых можно запустить процесс или прилепить к какому-нибудь системному процессу dll'ку.

Автозагрузка из реестра, просмотр, редактирование списка.

При возникновении в системе подозртельный процессов все как правило проверяют всякими утилитками реестр на предмет автозагружаемых программ. Все знают что именно там зачастую прописаны всякого рода трояны. Но не все знают где смотреть и не все знают что программы не проверяют многие места из которых можно запустить процесс или прилепить к какому-нибудь системному процессу dll'ку.

Прозрачная форма

Программа реализации алгоритма Дейкстры - поиск минимального пути в неориентированом графе. Легкий но запутаный алгоритм. В программе реализована графическая интерпритация результата.
Лабораторная работа по Теории алгоритмов

Алгоритм Дейкстры

Программа реализации алгоритма Дейкстры - поиск минимального пути в неориентированом графе. Легкий но запутаный алгоритм. В программе реализована графическая интерпритация результата.
Лабораторная работа по Теории алгоритмов

Фракталы

Исходные коды программы которая создает фракталы, а имено "Дракон Хартера-Хейтуэя", "Дереве" и "Треугольник Серпинского". Описаниями фракталов изобилует интернет. Получаются очень красивые картины. Любуйтесь, и ждите новых фракталов...


Интересные и полезные сайты про Delphi:   Если Вы хотите, чтобы Ваш сайт был в этом разделе пишите.

http://www.noil.pri.ee/ - Здесь вы можете почитать статьи, скачать исходники и компаненты, пообщаться на форуме.


Немного юмора:  :))

Надпись на мониторе автомобильного компьютера под 
управлением Windows CE: "Прямо по курсу обнаружена старушка.
Нажмите на газ для сохранения её в виде обоев."


Если транслятор не обнаружил ни одной ошибки 
в вашей программе, то вам следует обратиться 
к системному программисту, он исправит ошибку 
в трансляторе.


Не родись красивой, а родись массивной - Windows.


Возлюбленная компьютерщика мурлычет ему на ушко:
- Любимый, ну когда, когда мы будем регистрироваться?
- А на хрена? Я щас и так взломаю...


Fatal Error.
Please, do NOT REPORT TO MICROSOFT!

(Перевод: Фатальная ошибка.
Пожалуйста, НЕ сообщайте в Майкрософт!)


Дружественная рассылка:

Рассылки Subscribe.Ru
Программирование на Delphi.
Всё о Delphi



Все кто хочет изучить Delphi и реально научиться писать свои программы, ЦПИ "Эверест" поможет Вам.
Всё, что Вам нужно это компьютер и доступ к интернету - для получения уроков.

10 причин в пользу платного обучения в ЦПИ "Эверест"…

1. Когда Вы платите деньги- появляется дополнительный стимул против лени: надо учиться, ведь деньги уже уплачены….
2. Учась платно, получаете удобный для Вас график работы.
3. Весь необходимый справочный материал Вы получите в свое время и на русском языке.
4. Используя интернет в качестве бесплатной библиотеки, Вы получаете все ее минусы:

  • трата времени на поиск необходимого материала (а это потерянные деньги и время). А у Вас есть лишние время и деньги?;
  • отсутствие гарантии, что Вы "осилите" данный материал, ведь пишут его, в основном, не педагоги- профессионалы, а программисты- профессионалы, а они пишут для таких же, как они. А Вы программист- профессионал?
  • отсутствие системности в скачиваемом материале (ведь человек, писавший для Вас материал, не знает, чем Вы владеете). А Вы обладаете системой знаний по Delphi?;

5. Стоимость обучения одного месяца в ЦПИ "Эверест" сравнима с ценой хорошей книги. Но часто ли Вам попадались книги, рассчитанные именно на Вас. Мы же работаем индивидуально.
6. Автор книги или магазин не несет никакой ответственности за то, поняли ли Вы материал или нет, мы же закрепляем за каждым курсантом преподавателя, курирующего Вас.
7. Освоив программирование в Delphi - Вы освоите:

  • основы настоящего программирования- структурного и процедурного программирования ;
  • систему работы с базами данных и SQL- запросами, а это одно из самых перспективных направлений в программировании;
  • язык программирования ObjectPascal, что позволит Вам легко перейти, при желании, на С или Паскаль;
  • работу с компьютерной графикой;
  • при желании - основы низкоуровневого программирования ( Ассемблер).

8. А это значит, что …Мы предлагаем получить "высшее образование" - профессию программиста всего за 1 год и 144 доллара, любой ВУЗ попросит в 3 раза больше за один только семестр.
9. Вы получаете самый практический курс в сети, поскольку теория дается только тогда, когда она действительно необходима…
10. Учиться у нас легко и просто. Весь материал доступен и простым людям, не имеющим никогда дел с программированием….


По всем вопросам обращайтесь ко мне.

Если вы встретили в интернете интересный сайт или статью, да и вообще, что угодно связанное с Delphi, поделитесь ссылкой.
Если можете написать статью связанную с Delphi - присылайте с радостью выложу.
Давайте поможем друг другу!  Архив рассылки.

Предложения, критику и пожелания пишите на e-mail.


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiinternet
Отписаться
Вспомнить пароль

В избранное