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

RusFAQ.ru: Программирование на Delphi


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

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 272
от 22.10.2005, 16:27

Администратор:Калашников О.А.
В рассылке:Подписчиков: 258, Экспертов: 46
В номере:Вопросов: 3, Ответов: 11


Вопрос № 27798: Здравствуйте ! 1. Как узнать время выполнения кода программы с точность до миллисекунд? 2. Как сделать стрелочные часы? 3. Как в Richedit'е подстветить текст и вставить картинку(ipg, bmp, gif)? 2. Как работать с API функциями? 3....
Вопрос № 27810: Здравствуйте, эксперты! Я хотел бы спросить пример какого нить многопоточного интернет приложения. Допустим, какой нить многопоточный сканер портов или что-нибудь подобное....
Вопрос № 27820: Уважаемые эксперты! Имеется описание алгоритма в формате имя вершины, множество ее связей с другими вершинами(см. приложение). Хотелось бы увидеть процедуру поиска всех путей между операторными вершинами. Операторные имеют имя y1..y10 условные x1..x1...

Вопрос № 27.798
Здравствуйте !
1. Как узнать время выполнения кода программы с точность до миллисекунд?
2. Как сделать стрелочные часы?
3. Как в Richedit'е подстветить текст и вставить картинку(ipg, bmp, gif)?
2. Как работать с API функциями?
3. Как создать не стандартную форму, в виде ромба с дырками?
4. Как создать свой компонент(label, timer и т.п.)?
Отправлен: 16.10.2005, 19:07
Вопрос задал: 007Makc (статус: Посетитель)
Всего ответов: 9
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Ерёмин Андрей
Здравствуйте, 007Makc!
1) С помощью стандартных функций Date(), Time(), Now() и др. этого сделать нельзя. Однако можно с помощью API-функции GetTickCount(). Она возвращает количество миллисекунд, прошедших с момента запуска Windows. Соответственно, нужно разделить это большое число на 1000 - получится кол-во секунд, затем ещё на 60 - это минуты, потом ещё раз на 60 - это часы. Таким образом мы получим время, прошедшее с момента запуска системы в разных единицах. После этого узнаём текущее время с помощью Now() и вычисляем разницу. Но! Это при условии, что нужно _текущее_ время, а не время, которое ушло на выполнение кода. Если требуется узнать время, за которое выполнился код, следует до его начала запомнить значение GetTickCount(), а после выполнения снова запросить. Разность этих чисел и будет числом миллисекунд, которое ушло на выполнение кода.
2) Воспользуйтесь компонентом TJvAnalogClock из пакета JediVCL. Настраивать можно практически всё.
3) Воспользуйтесь пакетом SynEdit.
2(?)) Обычно. Их не нужно объявлять. Просто подключите модуль Windows.pas в Uses (по умолчанию он всегда подключён) и используйте нужные функции.
3(?)) Опять-таки, JediVCL поможет. На вкладке JvForms есть компонент TJvTransparentForm. С помощью него можно создать форму по любой маске. Маска задаётся bitmap'ом, поэтому сделать (нарисоваnm) можно всё, что угодно.
4(?)) Расписать процесс создания собственного компонента в нескольких строках нельзя. На это уйдут десятки страниц. Кроме того, неясно, какой именно компонент вы хотите создать. Ну а для начала - File - New - Other... - Component.

P.S. Было бы неплохо, если бы все эти вопросы вы задали по-отдельности.
---------
Бог создал мир за семь дней и до сих пор система работает, не требуя перезагрузки, потому что у него не было необходимости поддерживать совместимость с предыдущими версиями...
Ответ отправил: Ерёмин Андрей (статус: Специалист)
Отправлен: 16.10.2005, 19:43

Отвечает: D.M.
Здравствуйте, 007Makc!
3. Как создать не стандартную форму, в виде ромба с дырками?

Для этого надо создать регион, например, из какого-то рисунка и присвоить его форме.....
Bmp картинка находится в imgBckGround....
В приложении функция создания региона....
Цвет верхнего левого пикселя будет прозрачным.....

BorderStyle := bsNone;

ClientWidth := imgBckGround.Picture.Bitmap.Width;

ClientHeight := imgBckGround.Picture.Bitmap.Height;

windowRgn := CreateRgnFromBitmap(imgBckGround.Picture.Bitmap);

SetWindowRgn(Handle, WindowRgn, True);

Приложение:

---------
Зёзики руллллят :)

Ответ отправил: D.M. (статус: 1-ый класс)
Отправлен: 16.10.2005, 20:33

Отвечает: sir henry
Здравствуйте, 007Makc!
1. Например, с помощью ассемблерной команды RDTSC читать время перед началом выполнения кода и после окончания, а потом вычислить разность. Значение 64-х разрядное, поэтому самое точное, точнее не бывает.
Если достаточна точность в 10 милисек, то подойдет функция, то подойдет функция WinAPI GetTickCount.
2. Поместить на форму компоненты TImage, TTimer и по сигналу таймера, каждую секунду перерисовывать секундную стрелку с помощью функции LineTO(). Минутную и часовую, соответственно, каждую минуту и каждый час.
3. Изменение цвета текста:
RichEdit1.SelAttributes.Color:=Нужный_Вам_цвет;
В стандартном компоненте это невозможно. Ищите клоны, например из библиотеки RxLib.
2. С API функциями работаете так-же как и с Дельфийскими, т.е. употребляете их следуя синтаксису и здравому смыслу. :)
3. Если именно ромба, то надо с помощью функции
CreatePolygonRgn(const Points; nPoints, FillMode: integer): HRGN;
создать регион в виде ромба, потом с помощью
CreateEllipticRgn (Left,Top,Right,Bottom: integer) : HRGN;
создаем регион для дырки, потом объеденяем два региона
CombineRgn( Dest, Source1, Source2: HRGN; mode: integer): integer;
потом, на основе созданого региона перерисовываем окно
SetWindowRgn(hWnd: THandle; Rgn: HRGN; RDraw: boolean): integer;
4. Если нужно просто добавить какие-то недостающие свойства к стандартному компоненту, то можно просто наследовать его:
TMyLabel = class(TLabel)
published
property New; {Добавляете новое свойство}
End;
Если создаете нечто принципиально новое, то тут Вам трудно что-либо посоветовать, т.к. то что нужно в этом компоненте Вы выбираете сами. Если это визуальный компонент, то обязательно должна присутствовать функция регистрации компонента, чтобы увидеть его в палитре Дельфийских компонентов:
interface
TMyComponent = class
{Далее будет описание свойств этого компонента}
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Samples', [TNkEdit]);
end;
end.

Ваш компонент зарегистрируется на закладке "Samples".
Невизуальный компонент (IMHO) в регистрации не особо нуждается, просто в разделе USES подключаете его модуль.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 16.10.2005, 20:34

Отвечает: Master135
Здравствуйте, 007Makc!
http://delphi.int.ru, а точнее
2)Справочник по функциям WinAPI с подробным описанием каждой функции.
http://www.delphi.int.ru/download.php?id=106
3)http://delphi.int.ru/download.php?id=32 Создание непрямоугольных форм в Delphi.
Также для форм есть прога Регионы, не помню где брал, но в нете есть, создаешь с ее помощью форму, а она создает код на Делфи
Ответ отправил: Master135 (статус: 9-ый класс)
Отправлен: 17.10.2005, 02:17

Отвечает: Татьяна
Здравствуйте, 007Makc!
1. На мой взгляд точнее всего использовать функцию getTickCount - отсчитывает тики процессора в мс. Например запомнить значение в начале программы, а потом сравнить со значением в конце.
---------
Нет ничего невозможного!!!
Ответ отправила: Татьяна (статус: 5-ый класс)
Отправлен: 17.10.2005, 11:06

Отвечает: Whisper
Здравствуйте, 007Makc!
ой как много
1) с использованием таймера
2) нарисовать и двигать
3) свойсво font от символа до символа
) про форму, вообщето предлагается нарисовать стандартную и обрезать, почти в каждом учебнике есть примеры
4) описать его как класс
---------
все тленно
Ответ отправила: Whisper (статус: 1-ый класс)
Отправлен: 17.10.2005, 11:27

Отвечает: Romodos
Здравствуйте, 007Makc!
1)Пишете time:=gettickgcount в начале программы,
а в конце time:=gettickcount-time;

2)Надо просто перерисовывать каждую секунду стрелку, например ихспользуя
form1.canvas.line(x1,y1,x2,y2);
Остальное надо самому придумать

3)не знаю

4)Странный вопрос - также как и остальными. Чем они, собственно, отличаются?!

5)Используйте API функции
CreateEllipticRgn, CreateRectRgn, CreatePolygonRgn, CreateRoundRectRgn, CombineRgn.
У меня на на сайте http://romodos.narod.ru/delphi.html есть целы хелпак по этой теме

6)type newcomp=class(Tcomponent)
В дельфийской справке есть подробное описание

А вобще, надо самому некоторые вопросы решать, а не использовать чужие мозги

---------
FAQ me off!
Ответ отправил: Romodos (статус: Студент)
Отправлен: 17.10.2005, 15:21

Отвечает: Denisss
Здравствуйте, 007Makc!
1. Запомнить значение функции GetTickCount при запуске программы и, когда нужно узнать сколько запущена программа в мс, то просто рассчитать разницу с новым значением.
2. Что значит "как сделать" - Вы хотите самостоятельно сделать компоненту или же собираетесь использовать готовую компоненту? Если предпочитаете готовое, то в наборе JEDI VCL есть достаточно компонент, в том числе и часы (аналоговые).
3. В стандартном RichEdit вставить изображение нельзя. Используйте RichEdit из рабора RxLib (возможно и в JEDI VCL есть такой же) - там же прилагается и пример. Для выделения (сделать жирным, поменять цвет) используйте свойство RichEdit1.SelAttributes
2(4). WinAPI функции используются также, как и обычные функции Delphi с единственным отличием: их использование немного более громоздкое, следует следить за версией Windows. Если Вам нужны конкретные примеры, то просто посмотрите как в Delphi реализованы функции получения текущего времени, доступа к файлам и др. - многие из них реализованы на WinAPI функциях. (кроме того, есть такие функции, которые Вы может быть используете и даже не задумываетесь, что они являются WinAPI функциями, например, функция GetTickCount).
3(5). Самый простой способ - создать двух-цветную картинку в виде ромба с дырками, устанавливаете на форму с TImage и устанавливаете в него Вашу картинку. Далее присваиваете свойства формы TransparentColor = True и TransparentColorValue = (тот цвет, который должен быть прозрачным) (в Delphi 7 такое точно присутствует. возможно в ранних версиях таких свойств нет).
Кроме того существуют специальные компоненты для создания окон с причудливыми формами.
4(6). Аналогично любому классу, со свойствами, методами и процедурами. Единственное, Вам придется создать процедуру Register, в которой надо зарегистрировать Ваш компонент. (см. ответ sir henry).
Ответ отправил: Denisss (статус: Практикант)
Отправлен: 17.10.2005, 15:55

Отвечает: Schmak
Здравствуйте, 007Makc!

1 При помощи функции GetTickCount() из модуля Windows. Для этого сохраняем в какой-либо переменной значение этой функции при запуске программы. И вычитаем значение этой функции из значения переменной при завершении программы.
2 Пример далее. Немного коряво рисуются стрелки но в остальном всё нормально. Разместите на форме timer и imageb вставьте код.

Приложение:

Ответ отправил: Schmak (статус: 2-ой класс)
Отправлен: 17.10.2005, 17:08


Вопрос № 27.810
Здравствуйте, эксперты!
Я хотел бы спросить пример какого нить многопоточного интернет приложения. Допустим, какой нить многопоточный сканер портов или что-нибудь подобное.
Отправлен: 16.10.2005, 21:15
Вопрос задал: Yxo (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Denisss
Здравствуйте, Yxo!
Пример (в прикрепленном к ответу файлу) взят из книги "Delphi глазами ][akepa" (5-я глава) - многопоточный сканер портов.

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа.

Ответ отправил: Denisss (статус: Практикант)
Отправлен: 17.10.2005, 16:13
Оценка за ответ: 5


Вопрос № 27.820
Уважаемые эксперты! Имеется описание алгоритма в формате имя вершины, множество ее связей с другими вершинами(см. приложение). Хотелось бы увидеть процедуру поиска всех путей между операторными вершинами. Операторные имеют имя y1..y10 условные x1..x10 Начало и Конец считаем тоже операторными. Все это используется для построения автомата Мили по заданному алгоритму(алгоритм рисовал). Заранее благодарен всем ответившим, пятерку за хороший ответ гарантирую. Спасибо за внимание.

Приложение:

Отправлен: 17.10.2005, 02:12
Вопрос задал: Master135 (статус: 9-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: sir henry
Здравствуйте, Master135!
Это не описание алгоритма, это просто данные. Самого алгоритма как раз и нет.
Еще нет условия соединения вершин. Если, для примера, задаться условием минимальной общей длины соединений, то Вам подойдет решение Прима-Краскала.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 17.10.2005, 07:12
Оценка за ответ: 3
Комментарий оценки:
По вашему множество имен вершин и множество их связей с другими вершинами не описывает алгоритм? Алгоритм вводится графически, а эта структура его описывает. В алгоритме длинна соединений не имеет никакого значения.


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

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


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Rambler's Top100 Яндекс


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

В избранное