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

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

  Все выпуски  

Программирование на DELPHI в вопросах и ответах #4


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

Программирование на Delphi в вопросах и ответах.


Здравствуйте, уважаемые читатели! Перед вами выпуск №4 от 26.11.04.

Итак, четвёртый выпуск рассылки "Программирование на Delphi - Вопросы и Ответы". Сразу извиняюсь за то, что предыдущий выпуск был разослан трижды. Произошло некоторое недоразумение и больше такого не случится. Насчёт вопросов и ответов - происходит тоже странная вещь. Очень прошу всех присылать ответы на вопросы. Кроме того, начиная с этого выпуска, в рассылке будут публиковаться различные статьи по Delphi. Вы можете присылать свои статьи по адресу delphi-faq@list.ru с темой 'Clause' (без кавычек), и они обязательно будут опубликованы. Также очень интересно узнать, чем вам рассылка не нравится. Просто за последнюю неделю отписались 2 человека. Не много, конечно, но нужно решить, что именно не так. Пожалуйста, выскажите своё мнение, щёлкнув по данной ссылке и отправив письмо. Также прошу всех принять участие в опросе, какие именно программы вы создаёте. Пожалуйста, выберите нужный вариант ответа на вопрос и отправьте письмо.

ВНИМАНИЕ! Особенно к V.Binkovskiy@sys4tec.com!! Смотрите правила рассылки!! Присылать больгие файлы, такие как были присланы (порядка 800 Кб) - строго запрещено!! Поэтому обращаюсь к вам (да и ко всем остальным - на будущее) - напишите в своём ответе просто то, что у вас это (файлы) есть. Человек, задавший вопрос, сам свяжется с вами и вы ему их перешлёте. Очень прошу всех, и особенно вас, чтобы такого больше не повторялось! К нарушителям будут применяться меры наказания в качестве добавления e-mail'а в список заблокированных пользователей ("чёрный" список).

Программы какого направления вы создаёте?

>>> Для работы с текстом
>>> Мультимедийные приложения
>>> Приложения, основанные на WinAPI (интегрирующиеся с операционной системой)
>>> Системные утилиты
>>> Программы другого типа (пожалуйста, укажите, какие именно)

Также вы можете выбрать несколько вариантов ответа, но выбирайте те, что действительно "преобладают" над другими.

Очень прошу проголосовать всех читателей рассылки.

Правила нашей рассылки:
1. Не присылайте ответов на вопросы вроде "да я не знаю" или "да/нет". Такие ответы не публикуются.
2. Вопросы, не касающиеся Delphi, не принимаются (для этого существуют другие рассылки).
3. Запрещено присылать вложенные файлы! Автор вопроса сам свяжется с вами!
4. Письма с "неправильной" темой не публикуются!


Статья по Delphi.

Создание непрямоугольных форм в Delphi.

Немного о непрямоугольных формах... Кажется, весь мир сошёл с ума по таким формам; все форумы пестрят вопросами на эту тему :) Есть ли сложности при создании непрямоугольной формы? Нет... Почти... Дело в том, что задать внешний вид формы можно, вызвав всего лишь одну функцию SetWindowsRgn.

SetWindowsRgn(Form1.Handle, True);

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

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

Для создания регионов существуют такие функции (с очевидным назначением), как CreateRectRgn, CreateEllipticRgn, CreatePolygonRgn и несколько других. Объединять регионы между собой можно при помощи функции CombineRgn.

На этом теоретическая часть могла бы быть закончена, если бы не одно "но"... Это "но" я процитирую отдельно... :)

Но ведь чаще всего непрямоугольную форму требуется построить на базе растровой картинки, задав для неё прозрачный цвет! Как быть?

Это правда. Насколько мне известно, Windows не умеет этого делать, то есть в ней нет функции CreateBitmapRgn. Тем не менее, можно создавать и такие регионы. Для этого необходимо пробежаться по всей картинке сверху вниз, в каждой строчке найти непрозрачные области и сделать из них прямоугольные регионы (эти прямоугольники будут высотой в 1 пиксель). Затем мы объединяем эти регионы — и, вуаля — вот он, искомый регион!

Готов поспорить, вы думаете, что это слишком сложно... :) Проверяем...

function BitmapToRegion(Bitmap: TBitmap; TransColor: TColor): HRGN;
var
X, Y: Integer;
XStart: Integer;
begin
Result := 0;
with Bitmap do
for Y := 0 to Height - 1 do
begin
X := 0;
while X < Width do
begin
// Пропускаем прозрачные точки
while (X < Width) and (Canvas.Pixels[X, Y] = TransColor) do
Inc(X);
if X >= Width then
Break;
XStart := X;
// Пропускаем непрозрачные точки
while (X < Width) and (Canvas.Pixels[X, Y] <> TransColor) do
Inc(X);
// Создаём новый прямоугольный регион и добавляем его к
// региону всей картинки
if Result = 0 then
Result := CreateRectRgn(XStart, Y, X, Y + 1)
else
CombineRgn(Result, Result,
CreateRectRgn(XStart, Y, X, Y + 1), RGN_OR);
end;
end;
end;

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

type
TFormMain = class(TForm)
private
{ Private declarations }
procedure WMLButtonDown(var Msg: TMessage); message WM_LBUTTONDOWN;
public
{ Public declarations }
end;

Строка, которую нужно добавить, выделена красным цветом. В разделе реализации эта функция выглядит так:

procedure TFormMain.WMLButtonDown(var Msg: TMessage);
begin
Perform(WM_NCLBUTTONDOWN, HTCAPTION, Msg.LParam);
end;

Форма посылает самой себе сообщение WM_NCLBUTTONDOWN с wParam равным HTCAPTION, то есть эмулирует ситуацию, когда пользователь нажимает левую кнопку мыши на заголовке формы. После этого форму можно спокойно перемещать за всю её область.

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

Присылайте свои статьи по адресу delphi-faq@list.ru с темой 'Clause' (без кавычек), и они будут опубликованы в ближайших выпусках рассылки. Большая просьба: статью оформляйте в -txt или -doc формате и используйте -zip или -rar сжатие (без самораспаковки).


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

5. Здравствуйте! Хотел бы задать вопрос: как в Delphi сделать ХР стиль? Заранее благодарю. Константин. [Ответить].

6. Меня интересует информация по поводу обращения с функциями "Сase key of". И еще работа с массивами и компонентом StringGrid??? Напишите поподробнее. Спасибо... [Ответить].

Вопросы, ждущие ответа:

2. Как выделить отдельные строки TListView разным цветом, как в некоторых программах, например Download Master? [Ответить].

4. Возникла следующая задача. При запуске программы нужно запомнить текущие параметры экрана (разрешение, частоту обновления), изменить на нужные, а при выходе вернуть всё обратно. Разрешение, вроде бы, меняется довольно легко (но уже не помню как). А вот как быть с частотой я не знаю. Помогите всё это получить, изменить, а потом восстановить.. [Ответить].


Поступившие ответы:

3. (Библиотеки rtl70.bpl и vcl70.bpl для Delphi). [Отвечает: Виталий]. Пользуй... //Автор вопроса, пожалуйста, свяжитесь с ответчиком для пересылки библиотек самостоятельно. Ещё раз напоминаю: присылать вложенные файлы строго запрещено!


Друзья:

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

http://infomania2004.webhost.ru/ - Этот сайт создан для того, чтобы вы могли получить интересующую вас информацию с минимальными затратами сил и времени. Если вы не нашли здесь нужной информации, вы можете оставить заявку на ее поиск. Как только информация будет найдена, она появится на сайте, а вам сообщат об этом.
http://www.nod33.narod.ru/ - Программы, приколы, песни и т. д. - сайт для всех!
http://www.basic.webhost.ru/ - Программирование на языках Basic и Visual Basic.

Код баннера:

<A HREF="http://www.delphi-faq.fatal.ru/" TARGET="_blank">
<IMG SRC="http://www.delphi-faq.fatal.ru/images/delphi.gif" ALT="Программирование на DELPHI в вопросах и ответах" WIDTH=100 HEIGHT=40 BORDER=0></A>


Юмор:

Детям младше 18 смотреть на то, как ставят Windows 95, категорически запрещено.

Три способа, которыми советские программисты достают программное обеспечение: воровство, грабеж и обмен награбленным.

Гарри Каспаров наконец-то выиграл у компьютера, и с 2 очками и 3 жизнями перешел на следующий уровень!

Умер Билл Гейтс и попал на небо к Богу:
- Заслуги твои велики так, что можешь сам выбрать в Ад или в Рай. Посмотри сам.
Пошел Билли в Рай: там литавры играют, нектар пьют. Скучно ему стало. Пошел в Ад. Там вино рекой, девочки:
- Hу все, я решил. Я иду в Ад.
- Ты хорошо подумал? Hазад дороги нет.
- Да.
Открывается люк и Билли проваливается в Ад. Прямо в котел и черти давай его пиками колоть.
- Как же так! Я тут совсем не это видел!
- ТАК ЭТО БЫЛА ДЕМОВЕРСИЯ!

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

Присылайте свои "компьютерные" анекдоты по этой ссылке: delphi-faq@list.ru и они обязательно будут опубликованы!


Товарищи программисты! Проявляйте свою активность. Давайте помогать друг другу!
Если вы не нашли ответа на свой вопрос, не отчаивайтесь! Ведь количество подписчиков постоянно растёт и, наверняка, найдётся тот человек, который поможет вам!
На сегодня всё. До встречи через неделю!

Сайт рассылки: http://www.delphi-faq.fatal.ru E-mail: Delphi-FAQ@list.ru


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphifaq
Отписаться

В избранное