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

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


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

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

Выпуск № 409
от 10.03.2006, 14:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 265, Экспертов: 67
В номере:Вопросов: 4, Ответов: 9


Вопрос № 36735: Здравствуйте эксперты!! Подскажите пожалуйста каким образом нарисовать график по заданной функции??...
Вопрос № 36739: Даров, Эксы. Вопрос на 100 баллов: Как в ListView'е (Viewstyle="vsReport)" изменить цвет шрифта у определенной строки?...
Вопрос № 36747: Здравствуйте Уважаемые Эксперты! У меня к Вам несколько вопросов: 1. В меню Delphi 7 была функция поиска компонентов, набрал название компонента нажал OK и он на форме, если такая функция в Borland Developer Studio 2006? А то я ее чегото не могу ...
Вопрос № 36799: Возможно банальный вопрос, но меня интересует пример размещения на рисунке TImage компонентов TEdit. Т.е. суть заключается в том, чтобы на рисунке отрисовывать, например квадратики с полями для ввода. Слышал, что под рисунок подкладывают компонент TP...

Вопрос № 36.735
Здравствуйте эксперты!!
Подскажите пожалуйста каким образом нарисовать график по заданной функции??
Отправлен: 04.03.2006, 16:20
Вопрос задал: F Ruslan R (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лучников Юрий Владимирович
Здравствуйте, F Ruslan R!

Самый простой способ воспользоваться компонентом TChart с вкладки Additional. Данный компонент представляет из себя гибкий инструмент для отображения всевозможных графиков, диаграмм...

Краткое руководство:
1)Щелкаете по положенной на форме компоненте двойным кликом
2)Жмете кнопочку Add... для добавления серии. По умолчанию ей будет присвоено название Series1.

3) Далее с помощью метода Series1.AddXY() рисуете график нужной функцией к примеру вот так:
for i := 1 to 30 do Series1.AddXY(i, func(i), '', clBlack); где i это X, а func(i) - значение нужной функции в точке X.

Успехов!
Ответ отправил: Лучников Юрий Владимирович (статус: Студент)
Отправлен: 04.03.2006, 16:44

Отвечает: Ерёмин Андрей
Здравствуйте, F Ruslan R!
Можно по разному. Если самостоятельно рисовать график, то нужно для каждой точки X в цикле для Form.Canvas (или другого объекта) просчитать значение Y по формуле, а затем закрасить точку цветом: Form.Canvas.Pixels[X,Y]:=clBlack; А лучше воспользоваться готовыми компонентами - EGraph например, очень мощный компонент для построения графиков. Также есть встроенный TChart.
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Отправлен: 04.03.2006, 17:10
Оценка за ответ: 5

Отвечает: Alex_Nick
Здравствуйте, F Ruslan R!

на форму бросаем paintbox и button

для функции Y=sqrt(x) следующий обработчик нажатия кнопки:

procedure TForm1.Button1Click(Sender: TObject);
var X:integer;
begin
X:=0;
paintbox1.Canvas.MoveTo(X,paintbox1.Height div 2);
for X:=0 to 200 do begin
paintbox1.Canvas.lineto(X,paintbox1.Height div 2-round(sqrt(X)));
end;
end;
график функции строим путем перебора X от 0 до 200;
paintbox1.Height div 2-round(sqrt(X)) - это означает "на sqrt(X) выше середины paintbox1". по этому принципу двигаем начало координат как по вертикали, так и по горизонтали.

вроде всё.

Ответ отправил: Alex_Nick (статус: 1-ый класс)
Отправлен: 04.03.2006, 19:07
Оценка за ответ: 5

Отвечает: Diman_A
Здравствуйте, F Ruslan R!
В приложении функция, строящая график прямо на форме.

Приложение:

Ответ отправил: Diman_A (статус: 6-ой класс)
Отправлен: 05.03.2006, 06:48


Вопрос № 36.739
Даров, Эксы. Вопрос на 100 баллов: Как в ListView'е (Viewstyle="vsReport)" изменить цвет шрифта у определенной строки?

Приложение:

Отправлен: 04.03.2006, 16:32
Вопрос задал: [Bruder] (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: Ерёмин Андрей
Здравствуйте, [Bruder]!
Очень легко. Нужно просто обрабатывать событие OnCustomDrawItem. Вот пример:

procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var X: Integer;
begin
X:=255-(Item.Index*25);
ListView1.Canvas.Font.Color:=RGB(X,255-X,255-X);
end;


Не обращайте внимание на первую строку - это просто формула, придуманная мной наугад, чтобы числовые значения цвета получились разные. После этого запустите и посмотрите, что получится :-)
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Отправлен: 04.03.2006, 17:06
Оценка за ответ: 4
Комментарий оценки:
Это я пробовал... проблема в том, что мне надо ТОЛЬКО ОДНУ (определённую) СТРОКУ! А в Вашем варианте я не могу контролировать процесс... да и изменяется всё подряд... хотя красиво )))

Отвечает: Alex_Nick
Здравствуйте, [Bruder]!
ставим ownerdraw для listview в true;
пишем обработчик ondrawitem для listview:

procedure TForm1.ListView1DrawItem(Sender: TCustomListView;
Item: TListItem; Rect: TRect; State: TOwnerDrawState);
begin
randomize;
listview1.Canvas.Font.Color:=random(maxint);
ListView1.Canvas.TextRect(rect,rect.Left+1,rect.Top+1,item.Caption);
end;
вместо random(maxint) ставим нужный цвет в зависимости, например, от item.Caption
Ответ отправил: Alex_Nick (статус: 1-ый класс)
Отправлен: 04.03.2006, 19:37
Оценка за ответ: 5
Комментарий оценки:
пойдёт ))


Вопрос № 36.747
Здравствуйте Уважаемые Эксперты! У меня к Вам несколько вопросов:
1. В меню Delphi 7 была функция поиска компонентов, набрал название компонента нажал OK и он на форме, если такая функция в Borland Developer Studio 2006? А то я ее чегото не могу найти.
2. Как сделать, чтобы приложения Windows Net и C# Builder выглядели в стиле XP? Почемуто даже при добавлении XP Manifest c помощью программы XPManifest приложения выглядят как будто Manifest и не добавляли.
3. Кто нибудь переустанавливал компоненты AnimatedMenus_2000 c Delphi 7 на BDS 2006? У меня выдаёт сообшение "Ошибка Не найден файл 'DsgnInf.dcu'" хотя в Delphi 7 ни каких ошибок не выдавало. Если кто знает в чем загвоздка помогите.
4. Как можно сделать, чтобы при запуске программы появлялась не стандартная форма, а другая нарисованная. Или есть такой компонент которому задал адрес изображения формы, кнопок и т.д. и т. п., а он сам все сделает и где его скачать, если нету то пожалуйсто как это все сделать программно.
Заранее Спасибо.
Отправлен: 04.03.2006, 19:43
Вопрос задал: Шишкин М.А. (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Diman_A
Здравствуйте, Шишкин М.А.!
Не знаю, почему у Вас Animated menus установились на d7, а на BDS не хотят, но эта проблема традиционно решается так:
1) Смотрим в секцию uses во всех pas файлах, ищем "Dsgnintf". Если нашли, то удаляем, и пишем вместо него 2 модуля :DesignIntf и DesignEditors. (естественно, через запятую).
2) После этого займемся файлом dpk. При попытке установить пакет Дельфя может жаловаться на отсутствие файла proxies.pas. Но ни в виде скомпилировнного DCU-файла, ни в виде исходного PAS-файла вы его не найдете, так как он поставляется только в виде кода, включенного в файл DesignIde.DCP. Чтобы включить пакет DesignIde.DCP в наш проект, можно в окне редактора щелкнуть правой кнопкой мыши на пункте "Requires" ("Требуются"), в открывшемся меню выбрать "Add...", перейти в каталог $(Delphi)Lib, найти и выбрать файл designide.dcp, после чего закрыть окно нажатием кнопки "Ok". Вы увидите, что выбранный модуль добавился в секцию "Requires" нашего проекта.
После этих плясок с бубном мне удавалось поставить на новую delphi старые компоненты, например, skinengine.
Но если все по-прежнему, то пошлите по вн. почте ваш email, я вам вышлю статью, с помощью которой можно все-таки поставить нужные компоненты.
Насчет нестандартной формы: существует много скиновых пакетов, но я остановил свой взгляд на suipack (www.sunisoft.com). Там есть спец. программа, с помощью которой вы и склепаете свой скин, а также около 20 готовых скинов.
Ответ отправил: Diman_A (статус: 6-ой класс)
Отправлен: 05.03.2006, 13:43


Вопрос № 36.799
Возможно банальный вопрос, но меня интересует пример размещения на рисунке TImage компонентов TEdit. Т.е. суть заключается в том, чтобы на рисунке отрисовывать, например квадратики с полями для ввода. Слышал, что под рисунок подкладывают компонент TPanel но как сделать в общем-то не знаю. Еще одно пожелание - желательно,чтобы квадратик с полем ввода был описан как класс. Спасибо.
Отправлен: 05.03.2006, 12:59
Вопрос задал: Master135 (статус: Студент)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Ерёмин Андрей
Hello, Master135!
Я не совсем понял вопрос, но постараюсь помочь. Я так понял, вам нужны рисованные поля ввода? Это делается примерно так (на конкретном примере):
1) Кладём TEdit на форму и изменяем свойства:
Left = 120, Top = 96, Width = 40, Height = 21, Borderstyle="bsNone."
2) Помещаем на форму TShape и тоже изменяем свойства:
Left = 119, Top = 95, Width = 42, Height = 23, Pen.Color = clRed.
Вот и получилось поле ввода с красной рамкой. Смысл заключается в том, что у TEdit все границы убираются (свойство BorderStyle), а вокруг можно делать всё, что угодно. Если требовалось другое, прошу объяснить более точно, или же (что ещё лучше) - привести скриншот того, что примерно должно получиться.
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Отправлен: 05.03.2006, 14:58

Отвечает: Злоумышленник
Здравствуйте, Master135!
У меня была подобная задача, только вместо Эдитов - Lable'ы. В твоём случае надо так, наверное. Делаешь панель, на неё кидаешь Image1, свойство Image1.Align := alClient, Image1.Stretch := true, это в инспекторе объектов всё. Затем на панель кидаешь Эдиты и ставишь их Visible в false (невидимые). Естественно в проге в любой момент ты их сможешь сделать видимыми и изменить местоположение с помощью с-ств Edit1.Top, Edit1.Left
{...чтобы квадратик с полем ввода был описан как класс...} - это уже перегиб :)
---------
Почему нет встроенного языка 1С на мордовском? Было бы клёво!
Ответ отправил: Злоумышленник (статус: 4-ый класс)
Отправлен: 05.03.2006, 18:22
Оценка за ответ: 3
Комментарий оценки:
Это я все знаю, но ведь я недаром просил, сделать класс, ведь все эти лабелы-едиты добавляються динамически. Класс - это не перегиб - это норма приличного программирования.


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

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

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

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

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


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


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.18 от 09.03.2006
Яндекс Rambler's Top100

В избранное