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

Программирование на Delphi

  Все выпуски  

Программирование на Delphi (выпуск 70)


Программирование на DELPHI
Выпуск #70 (26 мая 2007 г.)

Разделы сайта:

Delphi.int.ru

Новости сайта
Регистрация »
Файловый архив
Статьи
Компоненты
Plug-in's
Документация
Исходники
Изображения
Игры
Программы
Рассылки сайта
Дружеств. сайты

IRC-канал сайта:

Сервер: irc.tic-tac.ru
Порт: 6667
Канал: #delphiintru

Ждём Вас на нашем канале!

Доброго времени суток, уважаемые читатели!

Подведём результаты опроса, предложенного в прошлом выпуске:

Нужны ли интерактивные задачи в уроках?
Нужны
18
Не нужны
1
Всего:
19

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

Если Вы ещё не являетесь зарегистрированным пользователем www.delphi.int.ru, зарегистрируйтесь прямо сейчас! Регистрация »

Приятного чтения и до скорой встречи!

Статистика системы Delphi.int.ru Expert на 26.05.2007, 09:00:

Зарегистрированных экспертов: 88 (+3), из них в активном режиме 57 (+1).
Участниками задано вопросов: 598 (+30).
Всего отправлено ответов: 992 (+38).
Всего сообщений на форумах вопросов: 864 (+58).
Максимальное число разосланных в день писем: 608 (24.04.2007, +0).

Разделы рассылки:

» Авторское слово
» Обучение Delphi
» Delphi.int.ru Expert
» Статья по Delphi
» Файловый архив
» Юмор

Delphi.int.ru Expert - решите свою проблему, а также помогайте другим, став экспертом!

Количество читателей рассылки (26.05.2007, 09:00):
5449+1190+364= 7003 (+28)

Связь по e-mail:

admin@delphi.int.ru
expert@delphi.int.ru
info@delphi.int.ru

Если Вы хотите где-нибудь разместить материалы, представленные на www.delphi.int.ru или в данной рассылке, свяжитесь, пожалуйста, с автором или администратором.
Обучение Delphi

» Найти все предыдущие уроки можно на www.delphi.int.ru в разделе "Статьи".
Последние 3 урока:

6. Обзор свойств формы
7. Обзор палитры компонент: Standard, Additional
8. Pascal - первое знакомство

Pascal - базовые конструкции и переменные

Автор:
Ерёмин Андрей
Что для одного ошибка, для другого - исходные данные.
Номер урока:
9
 

Раздел описаний и раздел реализации

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

Конструкция begin .. end

Раздел реализации всегда располагается между ключевыми словами begin и end. Этот блок также называется телом (в данном случае - телом программы). begin указывает на то, что дальше идёт какой-то программный код, а end говорит о том, что блок кода закончился.

Каждому begin должен быть поставлен в соответствие определённый end!

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

Команды

Любые команды, т.е. строки кода должны как-то отделяться друг от друга, чтобы компьютер понял, что именно мы хотим запрограммировать. Практически во всех языках знаком разделения команд является точка с запятой (" ; "). Однако последняя команда в программе всегда должна заканчиваться точкой (" . "). Последней командой может быть только end, поэтому любая программа заканчивается на "end.", причём ставить эту точку обязательно.
Некоторые команды не требуют, что после них ставился разделитель ";". Пример такой команды - begin. Ставить точку с запятой после begin'а не нужно, хотя если поставить, то никакой ошибки это не вызовет.
Как правило, каждая команда пишется на отдельной строке. Однако никто не запрещает писать на одной строке несколько команд. Просто такой код гораздо проще прочитать.

Промежуточный итог

Итак, общая конструкция программы получается такой:

    {раздел описаний}

begin

  {раздел реализации}

end.

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

Это - общая конструкция программы, но программа может состоять и из нескольких блоков, каждый из которых выполняет какие-то функции и по смыслу не связан с остальными. Любой такой блок ограничивается всё той же конструкцией begin .. end. Это означает, что такие конструкции могут быть вложены друг в друга. Понятно, что end, встречающийся где-то в середине, заканчивается точкой с запятой, а не точкой.

{раздел описаний}

begin {начало раздела реализации}

begin
{блок 1}
end;

begin
{блок 2}
end;

begin
{блок 3}
end

end. {конец раздела реализации и конец программы}

Обратите внимание, что если несколько end'ов следуют подряд, то ставить между ними разделитель не нужно.

Объявление переменных

Итак, наконец-то мы знаем всё об общей структуре программного кода. Теперь перейдём к работе с переменными.

Итак, как уже было сказано выше, любая переменная для использования в программе должна быть описана и делается это в разделе описаний. Для описания (объявления) переменных существует ключевое слово VAR. Произошло оно от слова variable (переменная). Каждая переменная описывается следующим образом: сначала пишется её имя (идентификатор), затем ставится двоеточие и дальше указывается тип данных этой переменной.

var A: Integer;

В данном примере мы объявили переменную с именем A и задали для неё тип данных Integer. Типов данных существует очень много, а программистом могут быть созданы и свои собственные типы. Для начала нам потребуются простые типы:

Integer - целое число;
Real - вещественное (дробное число);
Boolean - логическое значение.

Теперь мы знаем, что объявленная нами переменная A может содержать какое-либо целое число.

Для вещественных чисел в языке разделителем целой и дробной части всегда служит точка (" . "). Однако речь идёт только о языке, т.е. в коде это должна быть точка. Когда числа будет вводить пользователь, то может возникнуть ситуация, когда разделителем будет не точка, а запятая. Что делать в данной ситуации, мы узнаем позже.

Наконец, логическое значение - это значение либо "истина" (True), либо "ложь" (False). С этими значениями мы уже сталкивались, когда изучали свойства объектов (например, свойство Visible отвечает за видимость объекта и принимает логическое значение - либо True, либо False).

Теперь разберёмся, как объявлять не одну переменную, а несколько. Итак:

Слово VAR достатоно написать один раз, независимо от количества объявляемых переменных.
Переменные одного типа могут быть объявлены в одной строке путём перечисления их имён через запятую.

Вот простой пример. Допустим, нам нужны 3 переменные, в которых мы планируем хранить длины сторон треугольника. Длины сторон не всегда являются целыми числами, поэтому типом данных будет Real. Можно объявить эти переменные так:

var A: Real;
var B: Real;
var C: Real;

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

Применив первое правило, запись несколько сократится:

var A: Real;
      B: Real;
      C: Real;

Но всё равно немного странно, ведь переменные одного типа! Окончательная запись:

var A, B, C: Real;

Отлично! Коротко и ясно. Именно так и следует объявлять переменные одного типа. Напомню, что всё это пишется в разделе описаний, т.е. выше слова begin.

Операции

Теперь рассмотрим операции, которые применимы к переменным, выражениям и т.п.
Самая главная операция - операция присваивания. Эта операция позволяет указать для переменной её значение. В разных языках присваивание делается немного по-разному. В Pascal присваивание осуществляется знаком "двоеточие, равно" ( := ). Слева указывается то, чему присваивается значение, а справа - само значение. Примеры:

A:=10;

K:=0.5;

F:=True;

В первом случае переменная A принимает значение 10, во втором - переменная K значение 0.5, а третьем - переменная F значение "истина".

Вообще, в языках программирования прижились два способа присваивания - через знак равенства (A = 10) и через :=, как в Pascal. В QBasic, например, дополнительно нужно указывать слово LET (LET A = 10).

Теперь коротко о математических операциях. Они стандартны: сложение - "+", вычитание - "-", умножение - "*", деление - "/". Обратите внимание, что деление во всех языках программирования записывается именно через косую черту. Никакого двоеточия!

Объявление констант

Константы объявляются аналогично переменным, но с небольшими отличиями:

Вместо ключевого слова VAR следует слово CONST (аналогично variable - var, сокращение от constant);
Тип данных указывать необязательно - компилятор автоматически распознаёт его (например, это может быть число, текст и т.д.);
Значение константы указывается после знака равенства.

Пример:

const g = 9.8;

Первая программа

Ну что ж, пришло время написать первую программу! В качестве примера, пусть это будет программа для нахождения среднего арифметического двух чисел. Поскольку с вводом данных мы ещё не знакомы, занесём данные в программу заранее. Нам важен программный код и результат. Итак, нам будет достаточно одной кнопки на форме (TButton). Дважды щёлкните по кнопке - появится редактор кода. А вот и наша заготовка для данного события (OnClick). Кстати, заготовки событий нужно создавать следующим образом: выделяем нужный объект, переходим в Инспектор Объектов и переключаемся на вкладку Events (события) и напротив названия нужного события делаем двойной щелчок. Открывается редактор кода с заготовкой обработчика события. При двойном щелчке по объекту создаётся обработчик для того события, которое назначено по умолчанию (как правило, это OnClick). Обратите внимание на полученную заготовку:

procedure TForm1.Button1Click(Sender: TObject);
begin

end;

Этот блок уже является частью программы. Именно здесь мы должны написать наш код, который будет выполняться при нажатии на кнопку. Для начала разберёмся, куда что писать. Раздел реализации виден невооружённым глазом - он между begin и end, которые у нас уже есть (удалять их ни в коем случае не нужно!). Ну а раздел описаний, как и положено, располагается до begin, но тем не менее после первой строки заготовки (procedure ...). Мы не должны уходить за пределы данного блока, ведь именно он связан с событием OnClick.

Ну а теперь за дело! Нам понадобятся 3 переменные: 2 исходных числа и переменная для среднего арифметического. Среднее арифметическое точно может быть дробным числом, а вот будут ли исходные числа целыми или вещественными - решать Вам. Предположим, что они будут целыми. Пишем в разделе описаний:

var A, B: Integer;
      S: Real;

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

A:=10;
B:=20;

Ну а дальше само вычисление:

S:=(A+B) / 2;

Как видите, ничего сложного. Всё очень похоже на то, как это можно сделать на бумаге.

Чтобы проверить результат, нам нужно полученное значение как-то отобразить на экране. С приёмами вывода данных мы пока что тоже не знакомы, поэтому придётся немного залезть вперёд. Итак, после строки вычисления значения S добавим следующую строку:

ShowMessage( FloatToStr(S) );

Что здесь происходит мы узнаем позже, когда будем знакомиться с приёмами ввода и вывода данных.

Ну а пока что сверим весь получившийся код. Должно получиться так:

procedure TForm1.Button1Click(Sender: TObject);
var A, B: Integer;
    S: Real;
begin
  A:=10;
  B:=20;
  S:=(A+B) / 2;
  ShowMessage(FloatToStr(S));
end;

Всё, запускаем программу (F9 для тех, кто подзабыл) и нажимаем на кнопку. Если всё верно, то мы увидим число 15, которое является средним арифметическим для чисел 10 и 20:

Результат работы программы
Результат работы программы

Заключение

Итак, сегодня мы написали свою первую программу, предварительно познакомившись с некоторыми конструкциями языка Pascal, способами объявления переменных и констант и операциями над ними.

Домашнее задание

Составить программу, которая вычисляет площадь круга заданного радиуса.

Оцените данный урок по пятибалльной шкале:
1 2 3 4 5
Комментарии и замечания приветствуются.

 

Delphi.int.ru Expert
(текущая версия системы: 1.68
последнее обновление: 08.05.2007)

Если Вы не являетесь зарегистрированным пользователем сайта, зарегистрируйтесь прямо сейчас! Регистрация »

Delphi.int.ru Expert - это автоматизированная система экспертной помощи, призванная помочь в решении проблем, возникающих как у начинающих, так и опытных программистов, а также способствующая обмену информации между участниками лично и публикации этой информации в массовых рассылках в дальнейшем. Система полностью автоматизирована и постоянно развивается и обновляется. Если у Вас есть какие-то либо вопросы или Вы столкнулись с какой-либо проблемой при программировании на Delphi/WinAPI - задайте свой вопрос и эксперты Вам помогут. Кроме того, Вы сами можете войти в состав экспертов и помогать другим.

Задать вопрос экспертам » | Справочное руководство » | Перейти в состав экспертов » | Эксперты системы »

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

* Администраторы сайта не корректируют сообщения и за наличие грамматических ошибок ответственности не несут.

Delphi.int.ru Expert  – вопросы и ответы (#226 - #245)
Вопрос № 226

Текст вопроса:

Здравствйте!
Как разместить на форме надпись-сслыку на сайт, чтобы при её нажатии открывался указаный ресурс.

Заранее спасибо

Автор вопроса: RedMask (статус: Посетитель)
Дата и время отправки вопроса: 27.12.2006, 10:51
Получено ответов на вопрос: 1
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


» Ответы на данный вопрос:

1. [Отвечает: Вадим К (статус: Высокий уровень), 27.12.2006, 11:18]:

Ниболее просто - в компонентах JVCL есть соответствующие компоненты. (HTLabel, к примеру)
а можно просто поставить label. Сделать синенького цвета (свойство Font), курсор поправить на нужный. В обработчик OnClick пишем следующее
ShellExecute(Handle, nil, 'http://www.site.ru', nil, nil, SW_SHOW);

Оценка за ответ: 5.
Комментарий: Спасибо!



Вопрос № 227

Текст вопроса:

Доброе время суток, господа программисты. Кто знает, где можно прочитать в инете про создание сайтов или страниц в Delphi, или где есть подобные книги. А если есть у кого в личной коллекции, то пришлите по:
"W._Random@tyt.by" Заренее благодарен.

Автор вопроса: Geron (статус: 1-ый класс)
Дата и время отправки вопроса: 27.12.2006, 12:28
Получено ответов на вопрос: 1
Сообщений в форуме вопроса: 3
Страница данного вопроса >>


» Ответы на данный вопрос:

1. [Отвечает: Вадим К (статус: Высокий уровень), 27.12.2006, 12:44]:

Вопрос достаточно размытый и не внятный. Непонятно, что конкретно хочеться. Но попробую.
Я понимаю, что человек хочет писать "скрипты" на делфи, а не на php или perl. Если это так, тогда во первых нам нужен веб сервер. Им может быть как Apache, IIS так и самописный. Но только под Windows. (хотя можно и под Linux на Kylix скомпилировать).
Во вторых, нам нужно написать скрипт. В общем виде это может быть обычное консольное приложение.
А можно воспользоваться всемы прелистями Делфи

В общем, читаем по приведённых ссылках
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=300
http://ru-board.com/new/article.php?sid=51
http://www.zahodi-ka.ru/stat/program/cgi_na_delphi.shtml
http://old.softerra.ru/review/program/17829/page1.html

Оценка за ответ: 5.



Вопрос № 228

Текст вопроса:

Здравствуйте!
Сразу несколько интересных вопросов экспертам по DBGrid'у!

1) Во-первых, в программе, которую я пишу таблица DBGrid имеет голубой фон(В XP)! Но когда я запускаю программу под WIN2000 все DBGrid'ы становятся серыми! Почему это? Как этого избежать?

2) Как подсветить текущую запись DBGrid'а(т.е. на котором стоит курсор) другим цветом? (DBGrid связан с IBTable или IBQuery, но это, наверное не важно?)

Заранее спасибо))

Автор вопроса: RedMask (статус: Посетитель)
Дата и время отправки вопроса: 28.12.2006, 09:06
Получено ответов на вопрос: 3
Сообщений в форуме вопроса: 1
Страница данного вопроса >>


» Ответы на данный вопрос:

1. [Отвечает: Помфюк Владимир Степанович (статус: 9-ый класс), 28.12.2006, 10:04]:

Здравствуйте, RedMask!
1)Свойствам типа TColor (Color, FixedColor, Font.Color) можна установить как в конкретный цвет (н.п.: clBlue), так и в системный (н.п.: cl3DLight). У Вас установлены системные цвета, и они будут менятся в зависимости от цветовой схемы Windows'a. Укажите "человеческий" цвет и Ваши гриды будут выглядеть везде одинаково.
2)Можно в свойстве Options указать dgRowSelect, но тогда grid станет read-only (не поредактируете запись непосредственно в нем). Другой выход - обрабатывать событие OnDrawColumnCell (тогда можно хоть каждую ячейку в свой цвет окрасить)

Оценка за ответ: 5.
Комментарий: Спасибо! Понял, почему такие косяки с цветами в 2000! исправляюсь))) А со вторым не очень понял! Точно нужна возможность редактирования прямо в таблице

2. [Отвечает: Alex Van Glukhman (статус: 7-ой класс), 28.12.2006, 12:26]:

Здравствуйте, RedMask!

В своё время я отказался от использования DBGrid - ввиду того что многие свойства наследуемые от TCustomDBGrid являются protected.
Самый идеальный вариант создать тип наследника TCustomDBGrid и обращаться к защищённым свойствам как DBGrid1 as MyCustomDBGrid. В результате открывается много возможностей к обработке именно строк сетки (В том числе и TCOLOR).
Для отображения одинаковых цветов в различных ОС используйте конкретные цвета а не системные например clBlue, а не clHighlight, или в формате RBG.
Удачи!!!

Оценка за ответ: 5.
Комментарий: Спасибо)) Теперь буду только так!

3. [Отвечает: Бубырь Александр Николаевич (статус: 4-ый класс), 29.12.2006, 00:52]:

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

Приложение:

Оценка за ответ: 4.
Комментарий: Я почти понял, только не совсем с условиями разобрался! Что они значат? Всякие там " if (QDocsRaznica.AsInteger>Dopusk)" и т.д.



Вопрос № 229

Текст вопроса:

Здравствуйте
И ещё один вопрос по DBGrid! У меня в DBGrid ReadOnly поставлен в False, и таблицу можно редактировать! Как сделать так, чтобы пользователь не мог заводить новую запись самостоятельно(у меня это делается программно по ряду причин)? DBGrid соединён с IBTable

Спасибо и извините, что я так много спрашиваю сегодня))) Учусь %)

Автор вопроса: RedMask (статус: Посетитель)
Дата и время отправки вопроса: 28.12.2006, 11:14
Получено ответов на вопрос: 2
Сообщений в форуме вопроса: 3
Страница данного вопроса >>


» Ответы на данный вопрос:

1. [Отвечает: Помфюк Владимир Степанович (статус: 9-ый класс), 28.12.2006, 11:38]:

Здравствуйте, RedMask!
Либо запретить редактирование вообще либо в IBTable обрбатывать AfterInsert и позволять вставку только при определенном условии (например проверять boolean-переменную, которой устанавливать true при входе в процедуру добавляния строки и false - при выходе из нее)

Оценка за ответ: 5.
Комментарий: Да, придётся ставить обработчик) Спасибо))

2. [Отвечает: Бубырь Александр Николаевич (статус: 4-ый класс), 29.12.2006, 00:55]:

В событиях BeforeInsert и BeforeDelete ставишь Abort; и все, это описано в хелпе самого Борланда (смотрать хелп по Abort).

Оценка за ответ: 5.
Комментарий: ВАУ, спасибо!!! То, что надо!



Вопрос № 230

Текст вопроса:

Работаю с MySQL через DBExpress в D7. Столкнулся двумя проблемами:
1. SQLConnection без проблем коннектится, но вот при попытке SQLConnection.Connected := false прога вылетает. Это с libmySQL.dll взятой из C:\mysql\lib\debug. После того, как libmySQL.dll взял из C:\mysql\lib\opt проблема вроде ушла... Хотя всё равно что-то не так...
2. Категорически не хочет работать абсолютно правильно написанный запрос с параметрами.
Есть какие-нить идеи? Я склониля к мнению, что DBExpress глючит. MySQL 3.22.21
З. Ы. MySQL - такой отстой

Автор вопроса: Ласковый 3лоумышленник (статус: 3-ий класс)
Дата и время отправки вопроса: 28.12.2006, 21:53
Получено ответов на вопрос: 1
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


» Ответы на данный вопрос:

1. [Отвечает: Alex Van Glukhman (статус: 7-ой класс), 28.12.2006, 23:11]:

Здравствуйте, 3лоумышленник!

Был уже где то в форумах такой вопрос. Глючит не DBExpress а драйвер MySQL который не прописан в ini файле dbxdrivers.ini. Проблема решается в указании libmySQL.dll. А Насчёт отстоя полностью согласен - не для программирования данная БД.

Оценка за ответ: 4.
Комментарий: Прописан, прописан. Так и я принудительно в свойствах SQLConnection её прописываю...



Вопрос № 231

Текст вопроса:

С некоторого времени заметил, что перестали корректно работать запросы в IB6.5-7/Firebird1.0.3 Причём только на
одном компе, на остальных всё ОК. Переустановки, в том числе ОС, результатов не дают. Разница компа с теми, на
которых всё работает, в железе - на него была установлена Dual DDR 2ГГб + Intel P4 HT 2.8 ГГц. Кто-нить с этим
сталкивался? Железо тестированное (память), рабочее. Сообщение об ошибке: "invalid request BLR at offset 43 function EXT _GENID is not defined module name or entrypoint coud not be found"

Автор вопроса: Ласковый 3лоумышленник (статус: 3-ий класс)
Дата и время отправки вопроса: 28.12.2006, 21:54
Получено ответов на вопрос: 2
Сообщений в форуме вопроса: 3
Страница данного вопроса >>


» Ответы на данный вопрос:

1. [Отвечает: Alex Van Glukhman (статус: 7-ой класс), 28.12.2006, 23:14]:

Здравствуйте, 3лоумышленник!

Перезапусти все сервисы IB и Firebird. И установи их на автозапуск.

Удачи

Оценка за ответ: 4.

2. [Отвечает: Бубырь Александр Николаевич (статус: 4-ый класс), 29.12.2006, 01:00]:

Проверить будут ли работать другие компы с этой базой (возможно поврежден файл) и попробовать сделать бэкап+ресторе. И вообще лучше перейти хотябы на Firebird 1.5

Оценка за ответ: 3.



Вопрос № 232

Текст вопроса:

Здравствуйте !
Не могу оформить печать на экране строк сетки данных aDBGrid type TDBGridEh (библиотека ehlib 4) различной высоты. В наборе данных есть поле, по значению которого можно установить aDBGrid.RowLines := 2; (или другое).
Написал, например, так:
unit ...
Grids, ...
...
type THackGrid = class(TCustomGrid);
...
aDBGrid.Options := aDBGrid.Options + [dgIndicator];
aDBGrid.OptionsEh := aDBGrid.OptionsEh + [dghFitRowHeightToText];
aDBGrid.RowSizingAllowed := true;
THackGrid(aDBGrid).RowHeights[0] := 58;
THackGrid(aDBGrid).RowHeights[1] := 96;
но эффекта не получил. Возможно ли стандартными средствами получить разную высоту строк сетки данных ?

Автор вопроса: Кашин Владимир Иванович (статус: Посетитель)
Дата и время отправки вопроса: 29.12.2006, 06:59
Получено ответов на вопрос: 0
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


» Ответы на данный вопрос:

К сожалению, ответов на данный вопрос не поступило...



Вопрос № 233

Текст вопроса:

У меня такая беда. Работал на компе и проверял параллельно вирусы на компе у меня файловая система NTFS . После проверки все нормально и я выключил комп. На следующий день я не смог запустить комп. Сообщает что нет файла с данными ....dll Подсоединил другой винчестер объёмом 10 гб. и поставил на нем Windows xp файловую систему FAT 32. при запуске нового винчестера он его увидел как 35 гб и определил файловую систему RAW, но не открывает и предлагает отформатировать., а на самом деле он объёмом 80 гб. я его снял и подсоединил к другому компу где файловая система FAT 32 он его обнаружил и открывает как родного и файловую систему увидел старую NTFS. подскажите что делать, а форматировать жалко много информации которую не хотелось бы потерять

Автор вопроса: Тихонов Алексей Сергеевич (статус: Посетитель)
Дата и время отправки вопроса: 29.12.2006, 08:29
Получено ответов на вопрос: 0
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


» Ответы на данный вопрос:

К сожалению, ответов на данный вопрос не поступило...



Вопрос № 234

Текст вопроса:

Уважаемые эксперты!
Подскажите пожалуйста, можно ли в программе отслеживать моменты подключения и отключения устройств flash-памяти?

Автор вопроса: Sunshine (статус: Посетитель)
Дата и время отправки вопроса: 02.01.2007, 10:04
Получено ответов на вопрос: 1
Сообщений в форуме вопроса: 10
Страница данного вопроса >>


» Ответы на данный вопрос:

1. [Отвечает: Ласковый 3лоумышленник (статус: 3-ий класс), 02.01.2007, 12:13]:

Здравствуйте, Sunshine!
Можно. Для этого требуется отлавливать сообщение системы WM_DEVICECHANGE. См. приложение, на всякий случай шлю демо-проект, сделан в D7, компильни его, запусти и попробуй вставить-удалить flash-drive

Приложение:

Оценка за ответ: 5.
Комментарий: Спасибо! Как раз то, что нужно.



Вопрос № 235

Текст вопроса:

Доброе время суток, господа программисты. Как програмно открыть "Сетевые подключения". Заранее благодарен.

Автор вопроса: Geron (статус: 1-ый класс)
Дата и время отправки вопроса: 02.01.2007, 13:19
Получено ответов на вопрос: 2
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


» Ответы на данный вопрос:

1. [Отвечает: Denisss (статус: 2-ой класс), 02.01.2007, 13:46]:

Здравствуйте, Geron!

Под Windows XP это можно сделать так:
WinExec('ncpa.cpl', SW_SHOWNORMAL);

Удачи!
С Новым Годом!

2. [Отвечает: Игорь Данилевич (статус: 3-ий класс), 02.01.2007, 20:09]:

Здравствуйте, Geron!

можно и по-другому:

uses ShellAPI;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(0,'open','rundll32.exe','shell32,Control_RunDLL ncpa.cpl',nil,sw_show);
end;

см. также о rundll32
http://kerberos666.narod.ru/faq/rundll.htm

Оценка за ответ: 5.



Вопрос № 236

Текст вопроса:

Доброе время суток, господа программисты. Как програмно оключиться от интернета. Заранее благодарен.

Автор вопроса: Geron (статус: 1-ый класс)
Дата и время отправки вопроса: 02.01.2007, 13:20
Получено ответов на вопрос: 1
Сообщений в форуме вопроса: 1
Страница данного вопроса >>


» Ответы на данный вопрос:

1. [Отвечает: Вадим К (статус: Высокий уровень), 02.01.2007, 20:30]:

Здравствуйте, Geron!
Предлагаю метод "в лоб". Для подключения/отключения можно использовать консольную команду rasdial. для отключения нужно выполнить комманду rasdial <имя подключения> /disconnect
подробней о комманде - rasdial /?



Вопрос № 237

Текст вопроса:

Несколько лет назад стартовал перспективный проект Kylix. Кто-нить знает, какова его судьба сегодня?

Автор вопроса: Ласковый 3лоумышленник (статус: 3-ий класс)
Дата и время отправки вопроса: 02.01.2007, 23:35
Получено ответов на вопрос: 1
Сообщений в форуме вопроса: 1
Страница данного вопроса >>


» Ответы на данный вопрос:

1. [Отвечает: Виталий Лещенко (статус: 3-ий класс), 03.01.2007, 18:46]:

Здравствуйте, Ласковый 3лоумышленник!

Проект Kylix заморожен...
но это еще ничего не значит... его могут как и Билдер расскопать, помыть и снова вупустить...



Вопрос № 238

Текст вопроса:

Всех с новым годом !!! Подскажите как сделать и запускать в проге Help(справку по пользованию программой). Заранее спасибо.

Автор вопроса: Илья Бабаков (статус: Посетитель)
Дата и время отправки вопроса: 03.01.2007, 09:05
Получено ответов на вопрос: 3
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


» Ответы на данный вопрос:

1. [Отвечает: Бубырь Александр Николаевич (статус: 4-ый класс), 03.01.2007, 11:46]:

Есть два основных вида нелп-файлов *.hlp и *.chm.
Первый является родным для Delphi, но на данный момент считается устаревшим.
При использовании второго я вызывал его следующей командой:
if Key=VK_F1 then ShowHelp('::/требуемая_страница.htm');//Это обработчик OnKeyDown в окне на нажатие F1

А это сама процедура вызова:
Procedure ShowHelp(HelpPageName:String);
Begin
WinExec(PChar('hh.exe '+HelpFileName+HelpPageName),SW_Show);
End;

Где HelpFileName - имя CHM файла
Успехов.

Оценка за ответ: 3.

2. [Отвечает: Ласковый 3лоумышленник (статус: 3-ий класс), 03.01.2007, 12:05]:

Здравствуйте, Илья Бабаков!
*.hlp ни разу не пользовался, поэтому отсылаю к В. Фаронов "Delphi 5 Учебный курс".
Для создания chm-справки могу присоветовать следующее: создаёте, например в Word'е страницы справки и сохраняете их как веб-страницы *.htm. Затем с помощью программы htm2chm компилируете их в *.chm-справку. Кроме способа вызова, предложенного предыдущим экспертом, можно воспользоваться:
uses
ShellApi;
...
s := 'ваш файл справки';
ShellExecute(Handle,nil,PChar(s),nil,nil,SW_SHOWNORMAL);

Оценка за ответ: 2.

3. [Отвечает: Матвеев Игорь Владимирович (статус: Средний уровень), 04.01.2007, 02:27]:

Здравствуйте, Илья Бабаков!
Вам все советуют перейти на *.chm, хотя *.hlp, как мне кажется, еще не отжил свое. *.hlp справка открывается ощутимо быстрее *.chm и, в тоже время, в *.hlp можно реализовать многое - поиск, ключевые слова, переходы, рисунки, таблицы, даже кнопки.
Проблема в том, что *.hlp справку сложнее писать, но можно воспользоваться удобной программой от нашего соотечественника Евгения Иванова - Help Development Studio - с ее помощью процесс создания *.hlp справки упрощается в разы.

Раньше программа была бесплатной и имела русский интерфейс - эту версию (1.4beta) я закачал для Вас суда: http://expert.delphi.int.ru/download_36.
Новая версия 1.92 - позволяет создавать также и *.chm справку, но имеет английский интерфейс (русского я не нашел на сайте) и платная. Вот ссылка: http://www.divcomsoft.com/download/hdssetup.zip.

Оценка за ответ: 5.



Вопрос № 239

Текст вопроса:

Доброе время суток, господа программисты. Как програмно разорвать соединение с интернета.(Я уже задавал такой вопрос но ответа не работующего не получил) Заранее благодарен.

Автор вопроса: Geron (статус: 1-ый класс)
Дата и время отправки вопроса: 04.01.2007, 15:14
Получено ответов на вопрос: 0
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


» Ответы на данный вопрос:

К сожалению, ответов на данный вопрос не поступило...



Вопрос № 240

Текст вопроса:

Доброе время суток, господа программисты. Как програмно разорвать соединение с интернета.(Я уже задавал такой вопрос но ответа не работующего не получил) Заранее благодарен.

Автор вопроса: Geron (статус: 1-ый класс)
Дата и время отправки вопроса: 04.01.2007, 15:14
Получено ответов на вопрос: 0
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


» Ответы на данный вопрос:

К сожалению, ответов на данный вопрос не поступило...



Вопрос № 241

Текст вопроса:

Доброго времени суток.
Подскажите можно ли из базы данных вытащить все данные из определенного столбца и разместить их в ComboBox.
Заранее спасибо!!!

Автор вопроса: Илья Бабаков (статус: Посетитель)
Дата и время отправки вопроса: 04.01.2007, 21:59
Получено ответов на вопрос: 1
Сообщений в форуме вопроса: 4
Страница данного вопроса >>


» Ответы на данный вопрос:

1. [Отвечает: Alex Van Glukhman (статус: 7-ой класс), 05.01.2007, 11:25]:

Здравствуйте, Илья Бабаков!

Естественно столбца БД есть property Fields.
1 столбец - Fields[0] и т.д.
код выглядит следующим образом:

ComboBox.Clear;
Table1.first;
while not eof do
begin
ComboBox.Items.Add(Table1.Fields[0].AsString);
Table1.Next;
end;

удачи!



Вопрос № 242

Текст вопроса:

Привет,уважаемые эксперты! Вопрос: как можно создать отчет в Rave или в Quick Report из любого внешнего файла dbf, который открыт через диалог(OpenDialog).Киньте,пожалуйста,пример(исходничек).Заранее спасибо

Автор вопроса: Нахушев Азамат Владимирович (статус: Посетитель)
Дата и время отправки вопроса: 05.01.2007, 18:50
Получено ответов на вопрос: 0
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


» Ответы на данный вопрос:

К сожалению, ответов на данный вопрос не поступило...



Вопрос № 243

Текст вопроса:

Как мне в Memo1 вместо фона вставить любую картинку.

Автор вопроса: Толков Геннадий Викторович (статус: Посетитель)
Дата и время отправки вопроса: 06.01.2007, 01:00
Получено ответов на вопрос: 1
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


» Ответы на данный вопрос:

1. [Отвечает: Ласковый 3лоумышленник (статус: 3-ий класс), 06.01.2007, 16:04]:

Здравствуйте, Толков Геннадий Викторович!
Для рисования на поверхности TMemo необходимо создать создать собственный компонент, наследованный от TMemo и переопределить в нём рисование. Примерно так:

type
TMyMemo = class(TMemo)
protected
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
end;

А теперь добавьте реализацию этой процедуры:

procedure TMyMemo.WMPaint(var Message: TWMPaint);
var
MCanvas: TControlCanvas;
DrawBounds : TRect;
Begin
inherited;
MCanvas:=TControlCanvas.Create;
DrawBounds := ClientRect; // Работаем с временной записью TRect.
Try
MCanvas.Control:=Self;
With MCanvas do
Begin
Brush.Color := clBtnFace;
FrameRect( DrawBounds );
InflateRect( DrawBounds, -1, -1);
FrameRect( DrawBounds );
FillRect ( DrawBounds );
MoveTo ( 33, 0 );
Brush.Color := clWhite;
LineTo ( 33, ClientHeight );
PaintImages;
end;
finally
MCanvas.Free;
End;
end;

Процедура PaintImages рисует картинки на канвасе Memo.

procedure TMyMemo.PaintImages;
var
MCanvas: TControlCanvas;
DrawBounds : TRect;
i, j : Integer;
OriginalRegion : HRGN;
ControlDC : HDC;
begin
MCanvas:=TControlCanvas.Create;
DrawBounds := ClientRect; // Работаем с временной записью TRect.
try
MCanvas.Control:=Self;
ControlDC := GetDC ( Handle );
MCanvas.Draw(0, 1, Application.Icon);
finally
MCanvas.Free;
end;
end;

Теперь мы имеем собственноручно нарисованный memo.

Оценка за ответ: 5.
Комментарий: Большое спасибо



Вопрос № 244

Текст вопроса:

Помогите, пожалуйста, сменить папку проектов в Delphi 2005 (по умолчанию-Borland Studio Projects). Изменял реестр, Tools.Options.EnvironmentVariables, свойства ярлыка - ничего не помогло.

Автор вопроса: Иван (статус: Посетитель)
Дата и время отправки вопроса: 06.01.2007, 14:46
Получено ответов на вопрос: 1
Сообщений в форуме вопроса: 3
Страница данного вопроса >>


» Ответы на данный вопрос:

1. [Отвечает: Вадим К (статус: Высокий уровень), 06.01.2007, 18:53]:

Здравствуйте, Иван!
А точно там меняли (Tools.Options.EnvironmentVariables, параметр BDSPROJECTSDIR)

Но есть один момент. Чтобы поменять параметры глобально, что вы пытаетесь сделать, то нужно закрыть все файлы и проекты в Делфи. Иначе, скорее всего все изменения будут применени к текущему проекту.



Вопрос № 245

Текст вопроса:

Пишу что-то типа
Label1.Font.Color:={X};
Что нужно написать вместо Х, вернее в какой системе цветов его надо писать?
Например я хочу задать цвет 7FFF00 в BgColor.

З.ы.
Извините, если кому-то покажется вопрос слишком глупым. Я только начинаю...

Автор вопроса: Pokemonchyk (статус: Посетитель)
Дата и время отправки вопроса: 07.01.2007, 02:33
Получено ответов на вопрос: 3
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


» Ответы на данный вопрос:

1. [Отвечает: Ласковый 3лоумышленник (статус: 3-ий класс), 07.01.2007, 02:40]:

Здравствуйте, Pokemonchyk!
Label1.Font.Color := $7FFF00;

Оценка за ответ: 5.

2. [Отвечает: Dron (статус: Средний уровень), 07.01.2007, 08:36]:

Здравствуйте, Pokemonchyk!
Цвет можно задавать различными способами. Приведу простые примеры.
1) HEX-значение: в Вашем случае правильно писать так: Label1.Font.Color:=$0000FF7F;
2) Можно использовать установленные константы цветов, увидеть которые Вы можете в списке значений свойства Color какого-либо компонента (или формы). Label1.Font.Color:=clRed;
3) Можно задать значение цвета по трём составляющим - R,G,B - для этого есть соответствующая функция RGB(): Label1.Font.Color:=RGB(128,0,255);
В дополнение скажу, что любой цвет можно обратно разделить на красную, зелёную и синюю составляющие - с помощью функций GetRValue(), GetGValue() и GetBValue().
Желаю удачи!

Оценка за ответ: 5.

3. [Отвечает: Евгений Козаченко (статус: 2-ой класс), 07.01.2007, 11:53]:

Здравствуйте, Pokemonchyk!
В добавление к ответу Dron'а:
Label1.Font.Color:=TColor(n);
Где n - целое число

Оценка за ответ: 1.




Статьи  >>

Бегущая строка

Автор: Ерёмин Андрей

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

Простая бегущая строка своими руками

Что из себя представляет бегущая строка? Эта область, где "проезжает" текст. Чтобы создать эффект движущегося текста, нужно либо передвигать сам текст, либо последовательно вырезать из него фрагменты и изменять их с течением времени. Попробуем оба способа.

1. Движущийся компонент.

Это самый простой по реализации способ. Возьмём обычный TLabel, поместим в него нужный нам текст (свойство Caption). Также необходимо задать чёткий размер (ширину) компонента. Проще всего оставить свойство AutoSize в значении True. В результате при изменении текста ширина компонента будет автоматически изменяться. Чтобы изменять положение компонента воспользуемся таймером (компонент TTimer со страницы System). Зададим интервал срабатывания таймера в 50 мс (свойство Interval). Теперь создадим обработчик события OnTimer. Определимся, что должно происходить: во-первых, мы должны изменить расположение компонента на форме, а во-вторых - нужно проверять, не уехал ли наш текст за границы экрана и, если это произошло, переместить его на противоположный край окна. Пусть направление текста будет справа-налево. Тогда обработчик будет примерно таким:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Label1.Left:=Label1.Left-1;
  if Label1.Left+Label1.Width < 0 then
    Label1.Left:=Self.Width;
end;

Запустим программу и посмотрим, что получилось. Действительно, текст движется справа-налево, но есть один неприятный момент: когда текст полностью скрывается за левой границей окна, он перемещается за правую границу, чтобы его не было видно (иначе он просто внезапно появится), но у окна появляется горизонтальная полоса прокрутки! Решение очень простое: установить у формы свойство AutoScroll в False и полосы прокрутки больше не будет. Есть ещё один недостаток: компонент мерцает при движении.

2. Разрезаем текст.

Этот способ кардинально отличается от первого. Здесь мы не будем двигать наш компонент, а просто будем изменять его текст. Чтобы реализовать такую бегущую строку нам потребуется дополнительный буфер, где будет храниться весь текст, т.к. свойство Caption будет постоянно меняться и хранить текст там мы не сможем. Итак, объявим глобальную переменную:

var
  Form1: TForm1;
  MarqueeText: String;

Также нам потребуется текущая позиция бегущей строки. Это будет порядковый номер символа в тексте. Дополнительной переменной заводить не будем - воспользуемся свойством Tag нашего TLabel. Добавим ещё один таймер (Timer2) с интервалом 150 мс, и кнопку для запуска бегущей строки. Таймер изначально выключим (Enabled = False). При нажатии на кнопку будем задавать текст бегущей строки, начальную позицию, а также будем запускать таймер:

procedure TForm1.Button1Click(Sender: TObject);
begin
  MarqueeText:='Бегущая строка своими руками.';
  Label2.Tag:=0;
  Timer2.Enabled:=True;
end;

Теперь настроим TLabel. Во-первых, если текст движется справа-налево, значит он должен быть выровнен по правому краю: устанавливаем Alignment у TLabel в taRightJustify. Во-вторых, если размер надписи будет изменяться автоматически, бегущей строки не получится - размер будет просто расти и вся надпись будет видна. Установим AutoSize в False, но ширину надписи сделаем побольше (хотя бы 200 пикселей). На самом деле, делать это не обязательно, если немного изменить алгоритм (см. ниже). Наконец, обработчик таймера. Здесь мы будем вырезать из текста фрагмент с первого символа до текущей позиции, а саму позицию будем каждый раз увеличивать на единицу:

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  Label2.Caption:=Copy(MarqueeText,1,Label2.Tag);
  Label2.Tag:=Label2.Tag+1;
end;

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

Теперь вернёмся к размеру надписи. Ограничивать размер не обязательно, если программно ограничить длину вырезаемого фрагмента. В данном примере длина фрагмента растёт, пока он не станет равным всей строке. Давайте ограничим фрагмент 5-ю символами:

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  if Label2.Tag > 5 then
    Label2.Caption:=Copy(MarqueeText,Label2.Tag,5)
  else
    Label2.Caption:=Copy(MarqueeText,1,Label2.Tag);
  Label2.Tag:=Label2.Tag+1;
end;

Теперь и размер задавать вручную не обязательно - всё равно больше 5 символов в один момент времени на бегущей строке не будет.

Что мы ещё не ушли? Бегущая строка пройдёт всего один раз, а нам нужно, чтобы она пробегала снова и снова. Нет проблем - в конец обработчика таймера добавим возврат на начальное положение:

  if Label2.Tag > Length(MarqueeText) then
    Label2.Tag:=0;

Но появляется один нехороший "глюк": сначала строка бежит, а когда доходит до конца, то буквы исчезают по одной, каждый раз сдвигаясь вправо. Этот момент обращает на себя внимание. Чтобы от него избавиться, нужно к строке дополнительно добавить несколько пробелов (в частности, столько, сколько символов в один момент видно на экране, т.е. 5) - тогда эти пробелы будут считаться символами, но они будут невидны. Подключим в uses модуль StrUtils и воспользуемся маленькой, но крайне полезной функцией - DupeString. Функция принимает два параметра - строку и число, а результатом является комбинация указанного числа таких строк. Например, DupeString('-',10) выдаст "----------". Слегка изменим строку присвоения текста бегущей строке (процедура нажатия кнопки):

MarqueeText:='Бегущая строка своими руками.'+DupeString(' ',5);

Ну вот, теперь совсем другое дело - настоящая бегущая строка! Однако её недостаток - отсутствие плавности. Символы появляются строго по одному, а не плавно выезжают. Стандартными способами "откусить" часть символа, к сожалению, нельзя :-)

Бросаем велосипеды

На самом деле, за нас уже потрудились программисты Microsoft и создали неплохую бегущую строку, которую мы можем использовать в своём приложении. Единственное условие - в системе должен быть установлен Microsoft Office, так как библиотека, о которой речь пойдёт ниже, входит в его состав, но не входит в состав Windows.

Установка

Компонент TMarquee - бегущая строка
  1. Открываем окно Project » Import Type Library...
  2. Находим в списке Marquee OLE Control Module.
  3. Нажимаем Install..., указываем пакет для установки, затем нажимаем Compile и модуль устанавливается.
  4. Объект TMarquee появится на странице палитры компонент, которая была выбрана в окне установки (по умолчанию ActiveX). Значок объекта - буквы A и B в жёлтой рамке.

Работа с TMarquee

Работать с данным компонентом довольно просто. Для начала разместите его на форме. Бегущая строка сразу активируется даже в design-time. В run-time она выглядит точно также. Фактически, настройка бегущей строки сводится лишь к изменению свойств компонента - просто рассмотрим назначение каждого из них.

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

  • Scroll - Обычная прокрутка (когда текст полностью скрывается за границей, он появляется с другой стороны);
  • Slide - аналог Scroll, но при достижении края бегущая строка остановится;
  • Alternate - "пинг-понг" (когда текст доходит до края, направление движения меняется на обратное).

MarqueeBgColor - цвет фона бегущей строки в формате #RRGGBB.

MarqueeDirection - направление движения (Left / Right соответственно).

MarqueeDisplayText - текст бегущей строки.

MarqueeHeight, MarqueeWidth - высота и ширина бегущей строки.

MarqueeLoop - количество проходов бегущей строки (Infinite - бесконечно).

MarqueeScrollAmount - количество пикселей, на которое сдвигается текст при изменении состояния.

MarqueeScrollDelay - интервал времени между сменой состояний (в миллисекундах).

Все остальные свойства стандартны.

Компонент имеет несколько стандартных событий, но специальных, к сожалению, не предусмотрено.

Заключение

Как видите, бегущую строку можно создать вручную, а можно использовать готовую. Помимо TMarquee от Microsoft существуют и сторонние компоненты, реализующие бегущую строку. Например, в JediVCL есть такой компонент. Бегущая строка позволяет привлечь внимание пользователя к определённым элементам, однако злоупотреблять этим не стоит.

Вы можете отправить свои статьи по адресу info@delphi.int.ru и они будут опубликованы в ближайших выпусках рассылки и на сайте.


Файловый архив  >>

Разделы: Статьи | Компоненты | Plug-in's | Документация | Исходники | Программы | Игры | Изображения

Уважаемые читатели! Отправляйте полезные компоненты/модули, интересные исходники, собственные программы/игры и мы разместим их на сайте. Отправить можно здесь »

Название
Описание
Раздел
Объём
Ссылки

Билл Гейтс - Дорога в будущее


Билл Гейтс (Bill Gates), глава корпорации Microsoft, на страницах этой книги размышляет об удивительных возможностях и непростых проблемах наступающего информационного века. Он раскрывает перед читателем свое видение будущего, рассказывает об основах информатики, развитии мировой компьютерной индустрии, о влиянии вычислительной техники на все стороны жизни общества, в том числе на бизнес и образование. В книге уделяется много внимания прошлому, настоящему и будущему глобальной информационной сети Internet. Читатели узнают и о знаменитом доме Билла Гейтса, куда он переехал в конце 1996 года.
318 Кб

Гуйдо Гайбелс - Использование ассемблера в Delphi


Отличная книга про использование ассемблера (переведена на русский язык).
56 Кб

Курс уроков по Delphi


Неплохой учебник из 30 уроков по Delphi. Довольно старый ('99), но тем не менее всё изложенное актуально и на данный момент.
750 Кб

Джон Варли - Нажмите 'ВВОД'


Довольно интересная книга. Перевод А. Корженевского.
82 Кб

Aprop


Программа, переводящая число в сумму прописью (например, "456" в "четыреста пятьдесят шесть"). Поддерживаются разряды до квадриллиона включительно.
* исправлены некоторые ошибки
3 Кб
 
Всего новых файлов: 4  
1.2 Мб
 

Если у Вас есть книги по Delphi (в электронном виде, разумеется) или другая полезная документация - сообщите и её можно будет разместить на сайте.

Отправить файл »   

Юмор

Ведущий раздела: Bruder

Хроники компьютерного маняька (часть I)

...Пишу на бумаге. Совсем отвык. Мог ли представить, что в 13 лет буду вести дневник, как Робинзон Крузо на необитаемом острове.
Меня предали. Сказали, что поедем покупать новую мышь от Intel, а на самом деле засунули в машину и отправили к деду с бабкой в деревню... Я уже подозревал такое развитие событий. Однажды папик сказал мне, что при моей увлеченности компьютером мне пора познакомиться с новым доктором. Hа что я резонно ответил, что у меня уже стоит версия 4.33 и мне нового не надо, разве что обновить вирусную библиотеку... Hо папик меня не понял, я не понял его... и вот расплачиваюсь... Оказалось, что доктор (живой) в моей карточке в диагнозе (пришлось слазить на сервер поликлиники, там у них простой PGP с ключом в 2048 байт) написал: полное месячное воздержание от новейших информационных технологий. Вот тут я и прокопался - думал, что на месяц откладывается апгрейд моего компа...

6.07.
Когда мне по дороге в деревню сказали, что доктор прописал месячное воздержание от работы на моем компьютере, то я потерял сознание. Привели в чувство, поднеся к носу тюбик с термопастой для приклейки кулеров на процессоры. Когда пришел в себя, то спросил, какой компьютер стоит у деда и какова пропускная способность его телефонной линии? Папик пробурчал что-то насчет того, что для меня вполне достаточная. "А как же школа", - говорю, со слабой надеждой, что меня вернут четверть закончить. "А уже лето, - отвечают. - Видишь, сынок, как ты перетрудился, даже и не заметил". Говорю: "Заметишь тут, никакие могу свою операционку дописать". В общем, "приехали"... Высадили меня в дедовом дворе, папик тут же дал по газам, и когда я отчихался от поднятой пыли, то понял, что попал в ситуацию покруче, чем в "HALF-LIFE" но последнем уровне. Тут же был атакован различными биороботами. И пока рука машинально пыталась нащупать в пространстве джойстик, я кричал деду: "При крой меня!". Потом он меня успокоил, что эти объекты живые полностью и на этом уровне реальности неагрессивны. Что же, позже изучу поподробнее. Когда наберусь смелости выйти во двор.
7.07.
Пока ищу у деда в доме компьютер. А он говорит, что нет такого. Hо ведь не может быть, чтобы человек в 2006-м году мог прожить без него. Пока ничего не нашел, хоть искал старательно, как артефакт бессмертия в Маgic&Mayhem. Бабка устроила своп на весь вечер, болтала о всех наших родственниках, кого могла вспомнить. Спрашивала, какие новости у нас? Я ей сказал, что купил винт на 200 гектаров. Она согласилась – 200 гектаров это вполне прилично, только обрабатывать тяжело.
8.07.
Так вот, Интернета у них в деревне нет. Когда я спросил у деда, какого провайдера он предпочитает, тот ответил, что в молодости еще кое на что был способен, но сейчас уже для такого староват, и чтобы я при бабке таких слов вслух не произносил. "Да как же жить без Сети!" - говорю. "Это точно, - согласился вдруг деда. - Без сетки жить тяжело. Рыбки ведь хочется. Только инспекция донимает." Сплошное непонимание, конфликт версий, о чем это он?
9.07.
Компьютера у деда не оказалось! Он не может представить, зачем он ему в деревне? Пытался описать ему преимущества Интернета, но он постоянно путал его с интернатом и все возмущался, что у моих предков совсем нет времени воспитывать ребенка. Это я ребенок?! Да я уже два года как бетатестер у Майкрософта. Впрочем, из моих дополнительных пояснений дед тоже ничего не понял.
10.07.
Прожил пять дней без Интернета. Понимаю, что такое истинные страдания. Решился предпринять первую вылазку во двор. Оказалось, что встретил меня во дворе в первый день не Зерг из BROOD WAR а индюк. Впрочем, внешне разница невелика.
Обхожу его стороной.
11.07.
Вчера в приступе ностальгии написал на сарае INTEL FOREVER. Сегодня днем эту надпись бодала корова. Спросил бабку, в чем дело? Она (бабуля) ответила, чтобы я перестал писать всякие глупости. Через некоторое время, поразмыслив, понял: моя бабка предпочитает AMD! Hадо будет провести разъяснительную работу.
13.07.
Кажется, дед что-то темнит, и у него где-то компьютер все же припрятан. Понял после того, как он проговорился, что у него в доме есть мыши. Тогда я попытался намеками выспросить подробности, какие они: беспроводные, двухклавишные, с прокруткой? А он ответил, что точно, проводов нет, а что шустрые, так это да, не поймаешь... Сказал, потом покажет. Хорошо бы, чтобы это оказались Майкрософтовские мыши. Захватил бы парочку к себе в город.
14.07.
Видел дедовых мышей. Отчаяние мое велико. Да, я на необитаемом острове...
Вдобавок сегодня меня клюнул петух. Я ему дал плюс. Еще раз такое сделает и отключу на фиг. С удивлением обнаружил, что, в отличие от мультфильмов, ни слова не могу понять из той информации, что обмениваются коровы и птицы.
Кодировка? Или врет телевидение?
15.07.
Я вспомнил, как не хотел учить бейсик в школе, как доставал учителя насчет легкости и удобства ассемблера... И вот неужели мне теперь расплата за это?
Виноват: где же вы, мои LOCATE и INPUT`ы? Согласен и на вас!
16.07.
Видел дедового домашнего быка. Зверюга. Обзывать такое животное домашним, все равно, что Майкрософт делить - никакой пользы, один обман. Hазвал его Целероном. Вообще решил, если уж попал в Unreal`ный для себя мир, то хоть визуально внешне попытаюсь подстроить его под себя. Вырезал вот ножиком на деревянной скамейке во дворе контуры клавиатуры, а бабка говорит "ерундой занимаюсь". Присмотрелся, действительно, функциональных клавиш у меня вырезано только десять. Как же это я?!
18.07.
Сегодня предупредил деда: "Дед, у вас в яблоках много Worms. Они вам всю сетку побьют. Hе успел поставить антивирус? Последний Касперский весьма хорош". А он говорит: "Вовремя ты ко мне, внучек, попал". Что он имел в виду? Подумаю позже.
Потом вывел меня дед в огород - поглядеть вдаль. Hу, думаю, где-то я все это видел... И вспомнил - это же типичный Вгусе 3D! Hу, конечно, не так круто, но кое-какие холмы и один лесок отрендерены весьма добросовестно... И картинка, как на крутом GeForce256 с хорошими OpenGL драйверами и тройной буферизацией... А рябь на воде в пруду и камыши отражаются, как при включенном Reflectance Blur. "Похоже, дед?" - говорю. А он смотрит на меня, молчит и вздыхает... Еще бы, так и живет всю жизнь без компьютера. А потом от компьютерной неполноценности у деда произошел срыв. Когда я сказал, что вода в пруду прозрачна, как корпус у iMAC'a, он вдруг, схватил крапиву... Это чудовищное растение действует, как враждебная магия в Might&Magic. В общем, сейчас пишу дневник стоя.

Прислал: Aleksey P. Kharitinov

:))

Присылайте компьютерные анекдоты, рассказы и истории по этой ссылке и они будут опубликованы в ближайших выпусках рассылки.
Ведущий рассылки, Ерёмин Андрей.

В избранное