Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Интернет: Образование, Работа и Бизнес" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Программирование на Delphi (выпуск 84)
Программирование на DELPHI
Выпуск #84 (18 июля 2008 г.)
Если Вы хотите где-либо разместить материалы, представленные на www.delphi.int.ru или в данной рассылке, свяжитесь, пожалуйста, с их автором или ведущим рассылки.
Delphi.int.ru Expert Последние новости
Архив: вопросы и ответы В архив попадают вопросы, срок действия которых истёк. Каждый заданный вопрос действителен в течение одной недели, т.е. ответы на него принимаются именно в этот период. В сегодняшнем выпуске опубликованы вопросы # 421 - 435. Вопросы, на которые не было дано ни одного ответа, не публикуются. Статистика по выпуску: Кол-во вопросов: 14 Вопрос # 421 Уважаемые Экперты Подскажите пожалуйста ! Приложение:
Ответ #1. Отвечает эксперт: Вадим К Print - это принтер?
Ответ #2. Отвечает эксперт: Новаковский Юрий Аврамович Здравствуйте, Алиев Шамсидин!
Вопрос # 422 Здравствуйте! Недавно дописывал класс и наткнулся на возможность использовать класс как список. Для удобства я прописал классу метод Assign. Теперь вопрос, почему в методе Assign допустима такая запись: Приложение:
Ответ #1. Отвечает эксперт: Матвеев Игорь Владимирович Здравствуйте, SMaks!
Ответ #2. Отвечает эксперт: min@y™ Секция private конечно доступна в методе СВОЕГО КЛАССА, ёмаё!
Вопрос # 423 Приветствую!!!Как в DBGrid-е колонки местами поменять.
Ответ #1. Отвечает эксперт: Николай Рубан Вам нужно описать такой тип:
Вопрос # 424 Здравствуйте.Я записал свою программу на DVD диск. Как мне сделать так, чтобы вставив в дисковод диск, программа шла автозапуском.
Ответ #1. Отвечает эксперт: Николай Рубан Вообще этот вопрос к программированию идет о посредственно. Но сделать это можно так. В корневой каталог при записи нужно записать файл autorun.inf, а в нем прописать такие строки:
Вопрос # 425 Дополнение к вопросу 424. ICON=autorun\Icon2.ico Почему Icon2, то есть для чего индекс 2. Какую этот индекс несёт функцию.
Ответ #1. Отвечает эксперт: Сергей Устинов Здравствуйте, Толков Геннадий Викторович!
Вопрос # 426 Уважаемые знатоки! Использую ADO для работы с БД формата mdb. На компьютере Access не установлен. Вопрос: как из программы написанной на Delphi выполнить сжатие БД?
Ответ #1. Отвечает эксперт: Вадим К http://delphiworld.narod.ru/base/compact_access_db.html
Вопрос # 427 Доброго всем времени суток.
Ответ #1. Отвечает эксперт: Вадим К >>названия полей ничего недадут т.к. это спец. сокращения
Вопрос # 429 Приветствую!!Как String перевести в PAnsiChar??
Ответ #1. Отвечает эксперт: Сергей Устинов Здравствуйте, KilkaMS! Приложение:
Вопрос # 431 Как в чужом прилржении нажать кнопку ToolBar?
Ответ #1. Отвечает эксперт: Вадим К ToolBar'ы бывают разные. Есть два варианта. Найти хендл тулбара и послать ему клик мышки с указание координат.
Вопрос # 432 Здравствуйте. Если возможно, подскажите (может быть ссылки, статьи и т.д.) как написать драйвер мыши.Спасибо.
Ответ #1. Отвечает эксперт: Матвеев Игорь Владимирович Здравствуйте, HotMan!
Ответ #2. Отвечает эксперт: Вадим К Не соглашусь с предудыущим экспертом. На Делфи это можно, но очень очень сложно, да и то, только на 3делфи и с большим бубном. Проще на VS C++ = он для этого предназначен. Ссылки о том, как написать простейший драйвер на делфи ищите на том же wasm.ru
Вопрос # 433 Тут у меня собеседование намечается. На вопрос, что будут спрашивать, сказали: Delphi, SQL, JavaScript. Так вот и вопрос: причём к Delphi JavaScript? Или я что-то упустил? (не люблю просто web-программирование, хотя уже с JavaScript ознакомился)
Ответ #1. Отвечает эксперт: Николай Рубан JavaScript к Delphi может носить весьма прямое отношение при написании CGI-скриптов, т.е. скриптов которые в дальнейшем прикрепляються к некому WEB-приложению.
Вопрос # 434 Всем Привет! Приложение:
Ответ #1. Отвечает эксперт: min@y™ C компонентами Indy я не работал, поэтому здесь помочь не могу. Однако, я, давно ещё, ради развлечения и убийства времени написал простенькую программку по закачиванию свежих креативов с udaff.com :). Вот ссылки:
Ответ #2. Отвечает эксперт: Вадим К Если вы с https начали качать, то может и не качать. Там ещё один компонент бросать надо.
Вопрос # 435 Здравствуйте! Много раз видел в векторных редакторах такую вещь: если накидать на канву много линий и выделить их все, то появиться область Rect, которую можно растягивать и сужать и т.п. Вопрос, что происходить с линиями, в момент когда тянещь за сторону выделенной области(Rect)??
Ответ #1. Отвечает эксперт: Матвеев Игорь Владимирович Здравствуйте, SMaks!
» Найти все предыдущие уроки можно на www.delphi.int.ru в разделе "Статьи". Последние 3 урока: Множества
ВведениеОт рассмотрения простых типов данных переходим к более сложным наборам данных. Следует вспомнить, что простые типы данных позволяют хранить одно-единственное значение в одной переменной. Структуры данных позволяют хранить сразу несколько значений, причём некоторые такие структуры теоретически вообще не имеют ограничения на количество значений - этот предел определяется лишь объёмом доступной памяти. Сегодня мы поговорим о множествах. Математическое понятие множестваВспомним, как определяется множество в математике. Множество - это конечный или бесконечный набор определённых объектов, мыслимый как единое целое. Множество характеризуется своими элементами, а элементы имеют лишь одно свойство - принадлежность к данному множеству. Таким образом, мы можем только сказать, принадлежит элемент данному множеству или не приналдежит. Порядок расположения элементов в множестве никакой роли не играет. Множества в DelphiПонятие множества в языке программирования несколько отличается от математического определения этого понятия, но смысл сохраняется. Основное отличие в том, что в программировании множество может содержать только конечное число элементов, т.е. не может состоять из бесконечного числа объектов. В математике же последнее допустимо. Например, мы можем определить множество натуральных чисел, которое бесконечно: N = {1, 2, 3, ...} Следует понимать, что множество не предназначено для хранения каких-либо значений (чисел, символов и т.д.) - оно лишь может дать нам ответ на вопрос: присутствует конкретный элемент в множестве или его там нет. Перейдём ближе к делу. Множество может быть построено на основе перечислимого типа данных (кто забыл - открываем предыдущий урок). Например, на основе символьного типа Char. По-английски множество называется set (набор) и именно этим словом описывается в Delphi: var A: set of Char; В данном примере мы объявили множество A на основе символьного типа Char. Запомните: множество не может состоять более чем из 255 элементов! Например, следующее описание: var N: set of Integer; приведёт к ошибке "Set base type out of range". Задание множеств В математике множество обычно записывается в виде фигурных скобок, в которых через запятую перечисляются элементы, принадлежащие множеству. В Delphi вместо фигурных скобок используются квадратные. Чтобы задать множество, мы можем воспользоваться операцией присваивания, где слева стоит переменная-множество, а справа - нужный нам набор. Например, в описанное выше множество A мы хотим поместить элементы-символы A, B, C, D. Тогда это запишется так: A:=['A','B','C','D']; Теперь множество A содержит 4 элемента. Если вспомнить, что тип данных Char упорядочен, то данную запись можно сократить следующим образом: A:=['A'..'D']; Мы просто указали диапазон значений, который должен находиться во множестве. Результаты одинаковый, но вторая запись короче и красивее. Допустимы, конечно же, комбинации диапазонов и отдельных значений: A:=['A','B','K'..'N','R','X'..'Z']; Помните, что множество - это виртуальный набор элементов: множество нельзя ввести с клавиатуры и точно так же нельзя вывести на экран. Поэтому добавление элементов во множество делается только программным путём. Безусловно, вы каким-либо образом можете связать элементы интерфейса программы и операцию добавления элементов во множество, но напрямую ввести множество нельзя. Аналогично, вы можете показать множество на экране с помощью каких-либо элементов (например, флажков TCheckBox), но само множество "в чистом виде" вывести нельзя. Операции над множествами В программировании, как и в математике, над множествами допустимы некоторые операции. Рассмотрим их. Находится ли элемент во множестве? Самая простая операция, для понятия смысла которой даже не нужно задумываться. Чтобы проверить, входит ли элемент во множество, следует использовать специальную конструкцию с оператором in. Слева от него указывается элемент, справа - множество. Результатом, как несложно догадаться, является логичное значение - истина или ложь. True - элемент принадлежит множеству, False - не принадлежит: var A: set of Char; {...} A:=['A'..'E','X']; if 'D' in A then ShowMessage('Элемент В находится во множестве A.'); Несложно проверить, что сообщение в данном случае появится на экране. Объединение множеств Если есть два множества, определённые на одном и том же типе данных, то их можно объединить и получить таким образом новое множество. Если изобразить множества в виде кругов, причём круги пересекаются в том случае, если у множеств есть одинаковые элементы, то объединение можно изобразить следующим образом: В словесном описании операция объединения - результирующее множество содержит все те элементы, которые есть хотя бы в одном из двух исходных множеств. Объединение записывается знаком плюс "+". Пример: var A,B,C: set of Char; {...} A:=['A','B','C']; B:=['X','Y','Z']; C:=A+B; //C = ['A','B','C','X','Y','Z'] Включение одного элемента во множество делается точно таким же образом, просто в этом случае включаемое множество содержит всего один элемент. Пересечение множеств Операция пересечения формирует множество только из тех элементов, которые одновременное присутствуют как в первом, так и во втором исходном множестве. Операция пересечения графически: Пересечение обозначается звёздочкой "*". Пример: var X,Y,Z: set of Byte; {...} X:=[1,2,3,4,5]; Y:=[4,5,6,7,8]; Z:=X*Y; //Z = [4,5] Разность множеств Операция вычитания удаляет из первого множества те элементы, которые есть во втором множестве: Пример: var X,Y,Z: set of Char; {...} X:=['A'..'D']; Y:=['D'..'F']; Z:=X-Y; //Z = ['A'..'C'] Следует обратить внимание, что порядок множеств в данном случае важен, т.е. X-Y и Y-X - это разные множества. Применение множествМножества находят широкое применение. С помощью множеств удобно задавать набор опций, каждая из которых либо включена, либо выключена. К примеру, поместите на форму кнопку (TButton), перейдите в инспектор объектов, разверните свойство Font (шрифт) и найдите свойство Style. Вот это свойство как раз и реализовано множеством. Во множестве 4 элемента: fsBold, fsItalic, fsUnderline и fsStrikeOut, каждый из которых отвечает за стиль шрифта. Принадлежность элементов ко множеству задаётся указанием значения True или False для каждого из этих пунктов. В строке "Style" находится описание данного множества. Попробуйте изменять стиль и посмотреть, как меняется описание множества Style. А теперь давайте сделаем простенький интерфейс для доступа к этому свойству. Пусть будет меняться стиль шрифта у этой кнопки (Button1). Поместим на форму 4 TCheckBox - для доступа ко всем значениям и дадим им соответствующие имена. Изменение стиля будем делать при нажатии на саму эту кнопку. Пример реализации: procedure TForm1.Button1Click(Sender: TObject); begin Button1.Font.Style:=[]; //Сделали множество пустым //Теперь смотрим состояния флажков и добавляем нужные стили if CheckBox1.Checked then Button1.Font.Style:=Button1.Font.Style+[fsBold]; if CheckBox2.Checked then Button1.Font.Style:=Button1.Font.Style+[fsItalic]; if CheckBox3.Checked then Button1.Font.Style:=Button1.Font.Style+[fsUnderline]; if CheckBox4.Checked then Button1.Font.Style:=Button1.Font.Style+[fsStrikeOut]; end; Чтобы не повторять везде одно и то же "Button1.Font.", эту часть кода можно, что называется, вынести за скобку при помощи специального оператора with. Ранее речь о нём не шла, однако этот оператор очень удобен. Смысл его прост: то, что вынесено вперёд, автоматически применяется ко всему, что находится внутри данного блока. В нашем случае будет так: procedure TForm1.Button1Click(Sender: TObject); begin with Button1.Font do begin Style:=[]; //Сделали множество пустым //Теперь смотрим состояния флажков и добавляем нужные стили if CheckBox1.Checked then Style:=Style+[fsBold]; if CheckBox2.Checked then Style:=Style+[fsItalic]; if CheckBox3.Checked then Style:=Style+[fsUnderline]; if CheckBox4.Checked then Style:=Style+[fsStrikeOut]; end end; Согласитесь, так гораздо удобнее. Используйте оператор with как можно чаще - с его помощью и код по объёму становится меньше и скорость работы увеличивается.
ЗаключениеСегодня мы познакомились с множествами - наборами элементов. С помощью множеств реализованы свойства многих компонент. Множества не дают возможности хранить какие-либо значения - они просто позволяют создавать наборы из значений перечислимых типов данных. Но во многих случаях использование множеств - лучший и самый быстрый способ хранения некоторого набора параметров. Оцените данный урок (1 - плохо, ..., 5 - отлично):
-1- -2- -3- -4- -5-. Комментарии в тексте письма приветствуются.
Самые популярные статьи на сайте: ∙ Как можно из Delphi отслеживать все события Windows? SynapseАвтор: Вадим К Содержание
ВступлениеЧасто, чтобы раскритиковать программистов на Delphi, используют простой и дешёвый трюк. Мол, мы, истинные программисты пишем весь код ручками, а вы, делфисты, набросали компонентов и всё. На самом деле весь код ручками пишут только фанатики и те, кому нечего делать. А нормальные программисты используют готовые библиотеки. Компоненты Delphi на самом деле тоже являются самыми настоящими библиотеками, просто написаны с учётом некоторых особенностей Delphi. Но доказывать это им бессмысленно – всё равно будут сопротивляться (чтобы они согласились?). Мы пойдём другим путём – будем использовать самую что не наесть библиотеку - и пусть медитируют себе. В качестве примера я представляю библиотеку Synapse (http://synapse.ararat.cz/doku.php). По возможностям эта библиотека соответствует популярным Indy, только стабильность у неё получше. К примеру, почту с вложениями отправлять/принимать или файлы по https качать на ней проще простого. А вот с Indy нужно хорошо помучаться. И главный плюс этой библиотеки – полностью бесплатна с удобной BSD лицензией - можно использовать в своих приложениях - как бесплатных, так и в коммерческих, без каких-то отчислений. Но автор абсолютно не против, если вы подкинете ему пару копеек. Установка библиотекиДля начала нужно скачать библиотеку с сайта. Или просто взять в прилагаемом к статье архиве. Теперь распакуем куда-нибудь во временный каталог. Создадим папку, где будет располагаться сама библиотека – у меня это обычно каталог C:\Program Files\CodeGear\Components\Synapse. То есть, я, не стесняясь, создаю каталог в каталоге Delphi, и ставлю туда свои библиотеки/компоненты. Хотя некоторые сочтут это идеологически неверным – можно создать каталог для библиотек и в любом другом месте, главное, чтобы его потом не удалили. Второе условие – чтобы путь содержал только латинские символы. Иначе бывают проблемы с некоторыми компонентами. Один из посетителей сайта www.delphi.int.ru делает оригинально - он хранит всё это прямо на рабочем столе. А потом ругается, мол, ничего не работает. Скопируем в новосозданную папку содержимое папки source\lib из распакованного архива. Остался последний шаг – объяснить Delphi, что у нас есть новая библиотека. Для этого просто нужно прописать каталоги для поиска. В случае с Delphi 2006-2007 это делается так:
Если же у вас Delphi 7 или младше, то нужно в меню Tools найти пункт Environment Options, а потом вкладку Library. Всё остальное - очень похоже. Так, библиотека установлена, пора написать что-то простенькое. Например, научимся скачивать страничку из интернета и отображать в Memo. Создаём новый проект, Ставим на форму Memo, растянем нормально и включим полосы прокрутки установкой свойства ScrollBars = ssBoth. Ставим на форму кнопку, кликая дважды по ней, создаём обработчик. Но перед написанием обработчика, надо добавить один юнит в список uses, а именно – httpsend. А теперь сам обработчик. Приготовились увидеть сверхсложный код? Вот он – одна строчка: HttpGetText('http://вашсайт.нет', Memo1.Lines); Не правда ли просто? Но на самом деле, лучше написать немного сложнее: if not HttpGetText('http://вашсайт.нет', Memo1.Lines) then ShowMessage('Не получилось скачать:('); Этот код нужен только для контроля ошибок, но это часто важно. Интересно, что если страничку не удастся скачать, то никаких ошибок не будет, просто функция возвратит false. Иногда очень удобно, особенно в потоках. Замечателен и следующий факт. Так как библиотека является лёгкой обёрткой над обычными сокетами, то это сказывается на размере выполняемого файла. Этот же пример, переписанный с использованием Indy весит на 30% больше – а это весомый аргумент (если быть точнее, то в цифрах два исполнимых файла у меня весили 404 и 530 кбайт). А посерьёзнее?А теперь усложним задачку. Предположим, надо скачать файл/страницу с ресурса, использующего SSL. В случае с Indy это сделать очень сложно. Точнее, написать приложение-то просто, но вот чтобы оно работало... Оно или требует библиотеки OpenSSL, или говорит, что найденные библиотеки не подходят. Решается проблема скачиванием "правильных версий библиотек". Но даже имея их, всё равно проблемы. Если какое-то приложение использовало "неверные библиотеки", то до перезагрузки компьютера работать ничего не будет. Или то грузится, то нет. Почему так – предположения есть, но не хочется разбираться. Есть дела поважней. Итак, что надо сделать для решения нашей "сложной" задачи? Первым долгом убедиться, что в системном каталоге есть файлы ssleay32.dll и libeay32.dll. (для тех, кто не нашёл, я в архиве приложил их). Рекомендуемая версия – не меньше 0.9.7. В архиве – 0.9.8.2. Если "загрязнять" системный каталог (C:\Windows\System32) не хотите, то можно просто рядом с приложением положить эти файлы. А теперь осталось сделать в нашей миниатюрной программе одно изменение – добавить в список uses файл ssl_openssl. И всё. Теперь можно скачивать как с http, так и с https. Библиотека сама разберётся со всем! Хочу пример сложнее!В качестве рабочего приложения хочу представить маленькую программу для получения whois информации. Whois сервер – это сервер, который по ip или имени домена выдаёт некоторую информацию о его принадлежности. Например, владельца, город/страну, где расположен сервер. Но для "повышения секретности" мы будем использовать сайт https://www.nic.ru/whois/, который может предоставлять эту информацию по SSL. Сам код смотрите в приложенном архиве. В этот раз я даже не использовал потоки – я не хотел усложнять пример. В коде интересны два момента. Первое – это "очистка" полученного результата от ненужного текста и "русификация". То есть, вместо непонятных английских слов подставлены русские. Второй момент – это выделение из содержимого скачанной странички нужной информации. В этот раз я обошёлся без регулярных выражений, хотя можно было и с ними. В целом, в коде нет ничего сверхсложного, и я не считаю нужным объяснять его. Просто посмотрите и всё поймете. Помните, что когда решение задачи начинает слишком усложняться – значит вы выбрали неверный способ решения, не более. Один мой знакомый, пытаясь скачать страничку по https, и промучавшись несколько дней, на моё предложение использовать Synapse, сказал: "Нет, хватит с меня, ещё одно. Лучше я напишу на чистых сокетах. Надоели эти поделки. Моё будет работать". Кстати, пишет он уже несколько недель :-) и ругает кривой Windows, который ему постоянно мешает. Но мы-то знаем, где правда. Разделы: Статьи | Компоненты | Plug-in's | Документация | Исходники | Программы | Игры | Изображения Уважаемые читатели! Отправляйте полезные компоненты/модули, исходники, собственные программы/игры, документацию - книги, учебники и они будут размещены на сайте.
Ведущий раздела: Bruder Правила общения со Службой Технической Поддержки (на правах юмора) 1. Если техник сказал, что придет прямо сейчас, выйдите из сети и отправляйтесь пить кофе. Для нас не проблема запомнить 2700 сетевых паролей. 2. Когда вы вызываете нас для переноски компьютера в другое место, убедитесь, что компьютер завален тысячью открыток, детских фотографий, мягких игрушек, высохших цветов, призов из тира и психологических тестов. У нас нет своей жизни, мы обожаем вникать в чужую. 3. Если вы получили от техника е-мейл особой важности, немедленно его удалите! Мы просто тестируем систему. 4. Ести техник ест на своем рабочем месте, выложите ему все свои проблемы и ждите немедленного ответа. Мы существуем только чтобы служить другим и всегда готовы подумать о починке компьютеров. 5. Если техник пьет воду в автомате или курит на лестнице, задайте ему компьютерный вопрос. Единственная причина, по которой мы вобще курим или пьем воду - это обслуживание пользователей без е-мейла или телефона. 6. Посылайте срочную почту ЗАГЛАВHЫМИ БУКВАМИ. Hаш почтовый сервер ее распознает и отправит быстрее всего! 7. Если вы звоните конкретному технику, а его автоответчик сообщает, что его не будет неделю, все равно запишите на него свою проблему, выждите ровно 24 часа и отправьте е-мейл прямо директору, потому что вам никто даже не перезвонил. Вы ведь вправе расчитывать на элементарную вежливость! 8. Если не работает ксерокс, вызывайте техника. Это ведь электронный прибор, разве нет? 9. Если у вас дома в телефоне нет гудка, позвоните в службу компьютерной поддержки. Мы можем это починить прямо из офиса. 10. Если что-то не так с вашим домашним компьютером, принесите его нам и поставьте технику прямо в кресло, без имени, телефона и описания проблемы. Мы просто обожаем загадки! 11. Если техник по телефону говорит вам какие кнопки надо нажимать, почитайте газету. Hа самом деле я не хочу, чтобы вы что-то делали. Мне просто нравится звук моего голоса. 12. Если мы собираемся вас инструктировать перед обновлением операционной системы, не беспокойтесь. Мы ведь никуда не денемся, когда это закончится! 13. Если ваш принтер не печатает, повторите попытку как минимум 20 раз. Задания на печать часто улетают прямо в космос. 14. Если после 20 попыток принтер все-же не печатает, отправьте это задание на остальные 68 принтеров по всему зданию. Один из них обязательно должен его напечатать! 15. Hикогда не пользуйтесь встроенными подсказками, они для дураков. 16. Если вы занимаетесь на вечерних компьютерных курсах, замените сетевые драйвера на своем и всех соседских компьютерах. Мы любим работать до 2:30 ночи, исправляя это. 17. Если техник чинит ваш компьютер около 13:00, обедайте прямо перед ним. Мы лучше работаем, когда у нас кружится голова. 18. Hикогда нас не благодарите. Мы любим это и нам за это платят! 19. Если техник спрашивает, не устанавливали вы новые программы на компьютер, - солгите. Это не его дело, что вы храните у себя! 20. Если провод мышки стукает по портрету вашей любимой собачки, приподнимите корпус компьютера с монитором и засуньте провод туда. Мышиный провод разрабатывался с учетом нагрузки в 2 тонны. 21. Если на клавиатуре не работает пробел, виновата новая почтовая программа. Клавиатура работает гораздо лучше, если под клавишами находится примерно пол-кило хлебных крошек, обрезанных ногтей и больших липких пятен от Кока-Колы. 22. Если вы увидели сообщение «Are you sure?» нажмите «Yes» как можно быстрее! Черт побери, если бы вы не были уверены, вы бы не делали этого, не так ли? 23. Спокойно произносите фразы типа «Я ничего не понимаю в этом компьютерном дерьме». Hас совершенно не волнует, что кто-то называет область нашей профессиональной деятельности дерьмом. 24. Если вам надо заменить катридж с тонером, вызывайте техника. Замена катриджа это черезвычайно сложная задача, и Хьюлетт-Паккард рекомендует, чтобы ее выполнял профессиональный инженер с ученой степенью доктора наук в области ядерной физики. 25. Если что-то с вашим компьютером, попросите секретаршу позвонить нам. Hам нравится разговаривать с третьими лицами, не имеющими о проблеме ни малейшего представления. 26. Если вы получили видеоролик размеров в 30 Мб, немедленно разошлите его каждому работнику фирмы. У нас полно места и процессорной мощности на почтовом сервере. 27. Даже не думайте разбивать большое печатное задание на части. Господь не даст кому-то еще втиснуться в очередь на печать. 28. Если вы столкнулись с техником в выходной день в гастрономе, задайте ему компьютерный вопрос. Мы работаем 24 часа в сутки 7 дней в неделю, даже в гастрономе в выходной день. 29. Если выш сын изучает компьютеры, пустите его в офис на выходные поработать на вашем компьютере. Мы будем на месте, когда из-за его пиратской копии Visual Basic 6.0 навернется ваша база в Access. 30. Если вы принесли ваш домашний no-name компьютер к нам для бесплатного ремонта, скажите насколько немедленно мы должны его исправить, чтобы ваши дети могли снова играть в DOOM. Мы займемся им в первую очередь. Ведь все знают, что все что мы делаем - это весь день бесцельно бродим по Интернету! Источник: bayanov.net :)) Присылайте компьютерные анекдоты, рассказы и истории по этой ссылке и они будут опубликованы в ближайших выпусках рассылки. WWW: http://www.delphi.int.ru/ E-mail: admin@delphi.int.ru; support@delphi.int.ru
Архив рассылки: http://subscribe.ru/archive/comp.soft.prog.delphifaq Ведущий рассылки: Ерёмин Андрей
|
В избранное | ||