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

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

  Все выпуски  

Программирование на DELPHI v3-7


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

Программирование на Delphi
подписчиков: +8500

Goldfaq.ru - Российский Delphi-Портал

Привет, дельфяне. И опять выпуска не было довольно долгое время, в общем, как всегда:) Да и вопросов\ответов почти нет... плохо, но ладно, хватит о грусном. И так, у меня к вам вопрос: Как вы относитесь к появлению в этой рассылке немнего юмора? А также новостей. Мне кажется, что не помешало бы. А вам? Ответы прошу сюда: Angel@GoldFAQ.ru

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

Кто ещё не зарегистрировался на нашем форуме, просим пройти сюда: http://www.goldfaq.ru/newbb-index.html - спешите занять рульные ники ;) И помните, на форуме вы можете получить ответ намного быстрее, чем через рассылку...

Delphi-Статьи

Автор: Angel
Сайт: Http://www.GoldFAQ.ru
E-Mail
:
Angel@GoldFAQ.ru

Borland села в лужу или первое знакомство с Delphi 8

Я тут на днях купил диск petrosoft'a(DVD) "Программирование для всех".Купил я этот диск, только потому, что на нём есть Delphi 8.0 Architect Edition + Update1

Ну думаю что там Borland'овци наворотили. Установил. Запустил. первое впечатление было ошеломительным, потому как я сразу и не понял "что есть что":)

Можете сами посмотреть на интерфейс Delphi 8.Смотреть(1024х768,JPEG,128kb)

Интерфейс действительно сильно изменился.(всё хоть и продуманно, но до ужаса не привычно:( и стало очень сильно напоминать VB.net) даже палитра компонентов теперь не висит сверху, а находится справа и стала более похожа на инспектор объектов. Плохо только, что нельзя её обратно прилепить:( 

Изменения коснулись и редактора кода с редактором форм. теперь они - одно целое. переключаться между ними можно либо с помощью клавиши F12, либо выбирать как вкладки.

К большому моему сожалению интерфейс изменился не в лучшую сторону:(

Ну да ладно, хватить о интерфейсе! Приступим к рассмотрению новых возможностей, недостатков и фишек:) Эту статью я пишу на первом порыве, поэтому я ещё не узнал всех новых фишек дельфи 8. Но о самых "заметных" сейчас вам расскажу!

"Они чё, прикалываются что ли?" Это первая фраза произнесённая мной, когда я увидел сколько весит "пустая" форма на VCL. !!!Целых 1,28мб!!! Хотя в прошлой версии дельфи такая форма весила всего ~300-400кб, => разница почти в целый метр:((( Но самое интересное, это то, что если сжать это прогу WinRAR'ом, то размер архива равен ~353kb...

Зато в новой версии наконец-то появилась возможность писать программы на .net , но для их запуска на машине пользавателя, обязательно должен быть установлен  MS .Net Framework, который весит ~60MB:((((!!!

Ещё я заметил, что  UPX и AsPack не могут сжимать программы скомпленые в Delphi 8;(

Пропал компонент XpManifest и теперь, чтобы добиться красивых контролов в WinXP, нужно самому добавлять XPMan в список uses.

Наверное самая удобная функция, которая появилась в редакторе кода, это возможность свернуть любую секцию, процедуру, и т.д, нажав на минус возле этой секции.

Borland убрала САМУЮ лучшую фишку дельфи - VCL+win32 и теперь запуск Win32 функций напрямую стал невозможен. С этим связан огромный гимор при разработки программ:(

Восьмая версия дельфи совсем затормозилась!:( Загрузка на Cel2000;Ram 256mb около 25сек!

Заключение.

В этой статье, конечно, не рассмотрены все новшества Delphi 8. Но и по тому, что приведено здесь можно сказать, что борланд сама села в грязную лужу и нас туда потянула:( Но как уже было замечено множеством людей, у борладцев хорошо получаются  только нечётные версии продуктов, а 8- число нечётное. Возможно положение вещей в Delphi 9 исправится, но косяк под именем Delphi 8 не замазать ни чем!

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

 


Автор: Angel
Сайт: Http://www.GoldFAQ.ru
E-Mail
:
Angel@GoldFAQ.ru

Регионы или формы нестандартного вида

Ну что, надоели уже прямоугольные формы? Знаю, что надоели:) Поэтому и хочу посвятить непосвященных в тайну познания функции SetWindowRgn

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

Начнём. Сперва немного теории, а затем практика.

Функция SetWindowRgn предназначена для того, чтобы задать регион(HRgn) для формы, т.е вместо стандартной прямоугольной формы можно сделать круглую, в форме эллипса, и т.д.

Параметров у этой функции всего три:

1)hWnd-Handle окна, чью форму мы собрались менять

2)hRgn-регион(об этом чуть ниже)

3)bRedraw-bollean перерисовывать форму или нет

Теперь о втором параметре более подробно:

Регион-это то, как будет выглядеть форма. Для создания региона существуют следующие функции:

 function CreateEllipticRgn(X1, Y1, X2, Y2: Integer): HRgn;

Создаёт эллиптическую область, ограниченную указанным прямоугольником

Параметры:
X1, Y1: Верхний левый угол прямоугольника
X2, Y2: Верхний правый угол прямоугольника


 function CreateEllipticRgnIndirect(var ARect: TRect): HRgn;

Создаёт эллиптическую область, ограниченную прямоугольником, указаным в ARect

Параметры:

Arect:TRect, содержащий верхний левый и правый нижний угол ограничивающего прямоугольника.


 function CreatePolygonRgn(var Points; Count, PolyFillMode: Integer): HRgn;

Создаёт многоугольную область

Параметры:

Points: Массив TPoint, содержащий вершины многоугольника

Count: Число точек в TPoint

PolyFillMode:Режим для заполнения области.


function CreatePolyPolygonRgn(var Points; var PolyCounts, Counts, PolyFillMode: Integer): HRgn;
 

Создаёт область из ряда возможно перекрывающихся многоугольников

Параметры:

Points: Массив TPoint, содержащий вершины многоугольника

PolyCounts: Целочисленный массив, где каждый соответственный элемент определяет число точек в каждом многоугольнике в Points

Count: Размер PolyCounts

PolyFillMode:Режим для заполнения области.


 function CreateRectRgnIndirect(var ARect: TRect): HRgn;
 

Создаёт прямоугольную область ограниченную ARect

Параметры:

ARect: TRect, содержащий правый верхний в левый нижний углы области.


CreateRoundRectRgn(X1, Y1, X2, Y2, X3, Y3: Integer): HRgn;

 

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

Параметры:

X1, Y1: Верхний левый угол области.

X2, Y2: Правый нижний угол области

X3: Ширина эллипса для закругления углов

Y3: Высота эллипса для закругления углов


Представьте, что у вас в руках лист бумаги. Представили? А теперь представьте, что этот лист бумаги и есть форма. Так вот, суть в том, что вы не можете вырезать кусок так, чтобы его край заходил за край листа и выл виден. так и в виртуальном варианте листа, невозможно нарастить поверхность за пределами формы, т.к она не будет видна!

Что ж, с теорией немного разобрались, теперь осталось показать, как всё это работает.

Далее идёт исходный код юнита1, который преобразит форму на ваших глазах из уродливого прямоугольника в прямоугольник с закруглёнными углами:))) При этом у формы не будет заголовка(Caption) и её можно будет таскать за любое место на ней;)

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
procedure WMNCHITTEST(var m:TWMNCHITTEST); message WM_NCHITTEST;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMNCHITTEST(var m:TWMNCHITTEST);
begin
inherited;
if M.Result=htClient then
M.Result:=htCaption
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
With Form1 do
begin
BorderStyle:=bsNone;
Width:=300;
Height:=300;
Position:=poDesktopCenter;
Color:=clBackground
end;
SetWindowRgn(handle,CreateRoundRectRgn(0,0,300,300,100,100),False);
end;

end.

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

Скачать

 

НОВЫЕ ОТВЕТЫ

Ответов нет:(

НОВЫЕ ВОПРОСЫ

Вопрос #6 от Евгений Р.

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

Неожиданно интересные ответы нашел в Вашей рассылке.Может быть и мне кто сможет помочь:
У наследников класса tObject есть метод MethodAddress, который добросовестно определяет наличие метода у объекта и возвращает его адрес (если метод описан в разделе Published):
pProc:=obj.MethodAddress(procName);
Воспользоваться полученным адресом можно только из ассемблера:
asm
mov eax, [obj]
mov edx,[p1]
mov ecx,[p2]
call pProc;
End;
Параметры p1 и p2 - ссылки на параметры процедуры.
Разобраться с этим смог просматривая генерируемый код в отладчике.
Ондако не разобрался: как быть, если у процедуры более 2-х параметров, если параметры размером >4 (например double),
как получить результат функции, можно-ли гдето найти список методов объекта, их параметры.
Зараннее благодарен,
Евгений Рачек.

ОТВЕТИТЬ


Вопрос #7 от Voronin N.A.

Здравствуйте

Есть вопрос ни как ни могу решить.
В базе данных имеется поле типа int (цифровое).
В поле Edit.text вводятся номера по которым нужно отфильтровать данные (по
этому единственному полю в базе).

Вид ввода в Edit.Text такой (как в Ворде выбор
страниц для печати)
Пример 2,5,6-10,15 должно поучиться что то типа
'поле = '+'2'+' and '+'поле = '+'5'+' and '+'поле >= '+'6'+' and '+
'поле <= '+'10'+' and '+'поле = '+'15';

Кто знает хотя бы примерно напишите.
Извините за "закорючка" в обратном адресе спам надоел невозможно
подставте "@".

С уважением,
Voronin N. vornik(закорючка)mail.kz

ОТВЕТИТЬ

Ведущий рассылки:  Angel        GoldFaq.ru Team     15 - ый выпуск


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться

В избранное