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

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


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

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

Выпуск № 403
от 04.03.2006, 12:57

Администратор:Калашников О.А.
В рассылке:Подписчиков: 261, Экспертов: 65
В номере:Вопросов: 7, Ответов: 17


Вопрос № 36234: Здравсевуйте эксперты!! Подскажите пожалуйста каким образом нарисовать пунктирную линию через Canvas? И как нарисовать дугу?...
Вопрос № 36248: Здравствуйте эксперты!! Опять я к вам с вопросом! Подскажите как заставить двигаться Shape по периметру треугольника и по дуге, если у меня есть рисунок со всеми координатами?! Зарание спасибо!!!...
Вопрос № 36266: Здравствуйте уважаемые эксперты!У меня следуюющий вопрос: У меня стоит stylexp, можно ли как-нибудь приделать к своей проге определенный стиль. Допустим прописать в ресурсах файл темы, или еще как-нибудь?...
Вопрос № 36275: Ув. эксперты, 1) у меня вопрос, где можно взять(скачать) список ошибок хотя бы при работе с файлами: ну например при попытке переименования открытого документа - ошибка EInOutError I/O error 183 , а при попытке созда...
Вопрос № 36276: Ув. эксперты, может вопрос не совсем по теме, когда копирую текст из другого документа в Memo или RichEdit, то все русские буквы заменяются на вопросительные знаки,,,. Как лечить? Причины? Что то со шрифтами? т...
Вопрос № 36278: Здравствуйте, эксперты! Я пишу тут одну программку и все гонюсь за тем как уменьшить ее размер до минимума. Вопрос такой, может у кого есть ли аналоги процедуркам ExtractFilePath и FileExists на winapi или asm? Спасибо....
Вопрос № 36291: Подскажите в какую сторону копать: во многих программах есть формы с настройками, в этих формах множество различных компонентов, при изменении определенных (?) свойств которых становится кнопка "Применить" активна. Не ставят же они на кажды...

Вопрос № 36.234
Здравсевуйте эксперты!!
Подскажите пожалуйста каким образом нарисовать пунктирную линию через Canvas?
И как нарисовать дугу?
Отправлен: 26.02.2006, 12:45
Вопрос задал: F Ruslan R (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Jadd
Здравствуйте, F Ruslan R!
1) Canvas.Pen.Style := psDot; если точками пунктир рисуешь
Canvas.Pen.Style := psDash; если черточками

2) Canvas.Arc(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer); рисует дугу. Описание координат в хелпе.
Успехов
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Специалист)
Отправлен: 26.02.2006, 12:56
Оценка за ответ: 5

Отвечает: sir henry
Здравствуйте, F Ruslan R!
Пунктирная линия будет рисоваться при рисовании любого примитива, если поставить:
Canvas.Pen.Style:=psDash (или psDot, psDashDot, psDashDotDot - выбирайте, что Вам больше понравится)
Дуга рисуется с пмомщью:
Canvas.Arc(X1, Y1, X2, Y2, X3, Y3, X4, Y4);
Ответ отправил: sir henry (статус: Академик)
Отправлен: 26.02.2006, 13:04
Оценка за ответ: 5

Отвечает: Denisss

Здравствуйте, F Ruslan R!

1. Устанавливаете свойство Pen.Style:= psDash; // пунктир
2. Устанавливаете начало линии: MoveTo(X, Y); // X, Y: Integer - начальная точка
3. Устанавливаете конец линии: LineTo(X, Y); // X, Y: Integer - конечная точка

Прим.:
толщина линий (Pen.Width) должна быть равной 1. Иначе Вы получите сплошную толстую линию (по крайней мере это касается Delphi версий 7 и ниже).
Не забудьте после того, как отрисуете линию вернуть свойство Pen.Style в значение psSolid - это поможет в дальнейшем избежать ошибок.

Способ начертания дуги Вам вроде уже подсказали.

Удачи!
Ответ отправил: Denisss (статус: Специалист)
Отправлен: 27.02.2006, 01:43
Оценка за ответ: 5


Вопрос № 36.248
Здравствуйте эксперты!!
Опять я к вам с вопросом!
Подскажите как заставить двигаться Shape по периметру треугольника и по дуге, если у меня есть рисунок со всеми координатами?!
Зарание спасибо!!!
Отправлен: 26.02.2006, 14:51
Вопрос задал: F Ruslan R (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: sir henry
Здравствуйте, F Ruslan R!
Нужно будет вычислять координаты согласно функции движения.
Треугольник - это три прямые линии.
дуга - в простейшем случае соотношение синуса и косинуса. Более сложные случаи на Ваше усмотрение.
Движение происходит, когда Вы в цикле от начальной до конечной точки движения вычисляете координаты фигуры и показываете ее, небольшая задержка, отом прячете ее, потом цикл по новой.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 26.02.2006, 15:02
Оценка за ответ: 5

Отвечает: Полховский Александр Владимирович
Здравствуйте, F Ruslan R!
Можно через Timer. На каждом событии часов высчитывая координаты Shape по выше изложенной методике.
---------
Спасём нашу хрупкую планету !
Ответ отправил: Полховский Александр Владимирович (статус: Студент)
Отправлен: 26.02.2006, 17:57
Оценка за ответ: 5


Вопрос № 36.266
Здравствуйте уважаемые эксперты!У меня следуюющий вопрос:
У меня стоит stylexp, можно ли как-нибудь приделать к своей проге определенный стиль. Допустим прописать в ресурсах файл темы, или еще как-нибудь?
Отправлен: 26.02.2006, 19:00
Вопрос задал: Евгений (jeni) (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Leshiy2006
Здравствуйте, Евгений (jeni)!1-й вариант используйте SkinForm
2)если у пользователя стоит stylexp можете ShellExecute
Удачи!
Ответ отправил: Leshiy2006 (статус: 3-ий класс)
Отправлен: 26.02.2006, 23:20

Отвечает: Diman_A
Здравствуйте, Евгений (jeni)!
В win XP смена тем предусмотрена уже в самой системе, и StyleXP тут ни при чем. Она просто позволяет пользоваться темами, не предусмотренными Micro$oft. Т.е. она патчит файл uxtheme.dll, в котором понавешано защиты для предотвращения использования "сторонних" тем. В пропатченном файле этой защиты нет. Судя по всему, MS решил просто срубить деньги с производителей тем, да только добрые дядьки сломали их планы вместе с библиотекой uxtheme.dll. StyleXp - просто удобная оболочка. Она тебе не поможет. А нестандартный вид ты можешь придать своей проге с помощью скиновых компонентов ThemeEngine (www.ksdev.com) или SuiPack (www.sunisoft.com). В комплекте с ними идет много скинов, среди которых есть и модификации XP-шных. (напр. Longhorn)
Ответ отправил: Diman_A (статус: 6-ой класс)
Отправлен: 27.02.2006, 16:22


Вопрос № 36.275
Ув. эксперты,

1) у меня вопрос, где можно взять(скачать) список ошибок
хотя бы при работе с файлами:

ну например
при попытке переименования открытого документа
- ошибка EInOutError I/O error 183 , а при попытке
создания документа с повторным именем -
ошибка EInOutError I/O error 102 ,
EAccessViolations и т.д...

2) как обработать ошибку, если
сообщение вида:
.........raised exception...... class EInOutError
with message "File not found". Process stopped. Use..........

как я понимаю в первых случаях
I/O Result = 183 и 102 соответственно, а в последнем?
т.е понятно exception on EInOutError do - не подходит......

В хелпе Delphi - есть но очень мало....

Спасибо...
Отправлен: 26.02.2006, 21:44
Вопрос задал: Wlp (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: sir henry
Здравствуйте, Wlp!
1) В хелпе есть описание этих ошибок. Например набираете в строке хелпа:
EInOutError
И получаете вполне подробное описание, плюс коды ошибок. По остальным ошибкам аналогично.
Может быть Вы что-то другое имели в виду? если так, то уточните.
2) Немного непонятно. Вам нужно получить сообщение об ошибке?
Например можно сделать так:
Try
...
Except
on E: Exception do ShowMessage(E.Message);
End;
Если не то - поясните, будте добры.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 27.02.2006, 06:10
Оценка за ответ: 5
Комментарий оценки:

Спасибо за ответ......
я написал что смотрел Хелп Дельфи,
просто наверно не правильно выразился, для чего и в каком виде мне это нужно...
Второй вопрос тоже некорректно задал.....
наверное нужно было задавать вопросы в другом порядке... -
из второго следует первый......

Попытаюсь выразится точнее в мини-форуме.....


Вопрос № 36.276
Ув. эксперты,

может вопрос не совсем по теме,
когда копирую текст из другого документа в Memo
или RichEdit, то все русские буквы заменяются на
вопросительные знаки,,,.

Как лечить? Причины? Что то со шрифтами?

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

Спасибо....
Отправлен: 26.02.2006, 21:47
Вопрос задал: Wlp (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Rusland
Здравствуйте, Wlp!
Если копировать текст при включенной русской раскладке, то вопросов быть не должно (проверьте). Следовательно прежде чем копировать текст нужно включить русскую раскладку клавиатуры (см. приложение).

Приложение:

---------
Если партия скажет есть контакт, будем есть контакт.

Ответ отправил: Rusland (статус: Специалист)
Отправлен: 27.02.2006, 09:41


Вопрос № 36.278
Здравствуйте, эксперты!
Я пишу тут одну программку и все гонюсь за тем как уменьшить ее размер до минимума. Вопрос такой, может у кого есть ли аналоги процедуркам ExtractFilePath и FileExists на winapi или asm?
Спасибо.
Отправлен: 26.02.2006, 22:34
Вопрос задал: Yxo (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: sir henry
Здравствуйте, Yxo!
В качестве первой функции Вам подойдет:
GetFullPathName(lpFileName: PChar; nBufferLength: DWORD; lpBuffer: PChar; var lpFilePart: PChar): DWORD;
В качестве второй - уже ивестная Вам функция:
FindFirstFile(lpFileName: PChar; var lpFindFileData: TWIN32FindData): THandle;
:)
Хочу обратить Ваше внимание, что простая замена отдельных функций Дельфи на WinAPI не даст Вам уменьшения размера, если в своей программе Вы используете VCL. Уберете VCL - Ваша программа автоматом сократится в десятки раз.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 27.02.2006, 06:25
Оценка за ответ: 5


Вопрос № 36.291
Подскажите в какую сторону копать: во многих программах есть формы с настройками, в этих формах множество различных компонентов, при изменении определенных (?) свойств которых становится кнопка "Применить" активна. Не ставят же они на каждый компонент обрабочик события активации кнопки "Применить". Как такое сделать? Надеюсь понятно выразился...
Отправлен: 27.02.2006, 00:27
Вопрос задал: Сергей Т. (статус: 2-ой класс)
Всего ответов: 7
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Tamashev Denis M
Здравствуйте, Сергей Т.!
Я так понял ты хочешь напесать для одной кнопки OnClick ,,,???,,,
Пишешь код для кнопки а в другой кнопке помойму в name толи &OK толи $OK
извени подзабыл !!!
Проверь !!!
Ответ отправил: Tamashev Denis M (статус: 1-ый класс)
Отправлен: 27.02.2006, 00:33
Оценка за ответ: 5
Комментарий оценки:
На мини форуме напишу поподробней.

Отвечает: Bochvarov NikB
Здравствуйте, Сергей Т.!
Статять, ставять.
Кроме етого, помнят последние величиньи и если разние, тогда активируют Апплай :)
Ответ отправил: Bochvarov NikB (статус: 6-ой класс)
Отправлен: 27.02.2006, 00:34
Оценка за ответ: 5
Комментарий оценки:
На мини форуме напишу поподробней.

Отвечает: Denisss

Здравствуйте, Сергей Т.!

Почему это "не ставят... обработчик события..."?! Именно ставят, но на всех один.
Вот пример:
Ставите на форму несколько Edit'ов (Edit1, Edit2, ...), кладете кнопку "Применить" (btnApply).
Для одного из Edit'ов создаете событие OnChange:

procedure TForm1.Edit1Change(Sender: TObject);
begin
  btnApply.Enabled:= True;
end;

Далее в инспекторе объектов (F11) устанавливаете всем Edit'ам это событие, т.е. событие Edit2.OnChange = Edit1Change, ...
Чтобы выделить все Edit сразу, выделите сначала один Edit, зажмите Shift и поочереди выделяйте остальные.

Создаете обработчик нажатия кнопки btnApply:

procedure TForm1.btnApplyClick(Sender: TObject);
begin
  btnApply.Enabled:= False;
  //...
end;

Удачи!
Ответ отправил: Denisss (статус: Специалист)
Отправлен: 27.02.2006, 01:20
Оценка за ответ: 5
Комментарий оценки:
Спасибо. Это все и так понятно, я имел ввиду другое "можно ли не ставить"?, но ловить?

Отвечает: sir henry
Здравствуйте, Сергей Т.!
Делается это довольно просто.
Для начала у Вас кнопка должна быть неактивна:
ButtonTuning.Enabled:=False;
В любом из полей с настройками, в его событии OnChange (т.е. при любых изменениях содержимого поля) пишите:
ButtonTuning.Enabled:=True;
Все, кнопка становится активной.
Можно, так-же, сделать через TActionList, но по трудоемкости это будет так-же. Проще во всех OnChange указать одну и туже процедуру активации.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 27.02.2006, 06:34
Оценка за ответ: 5
Комментарий оценки:
Если действительно проще, то спасибо за совет

Отвечает: Полховский Александр Владимирович
Здравствуйте, Сергей Т.!
Кхм... можно создать переменную boolean и присваивать ей true, если что-то изменилось. И периодически проверять, не true ли там, если да, то активировать кнопку, если нет - сделать недоступной. Но это то же самое, что и просто напрямую к кнопке обращаться. другие способы более затратны (если, например, отслеживать изменения компонентов).
---------
Спасём нашу хрупкую планету !
Ответ отправил: Полховский Александр Владимирович (статус: Студент)
Отправлен: 27.02.2006, 08:03
Оценка за ответ: 5
Комментарий оценки:
Вы меня не понял...

Отвечает: LanK
Здравствуйте, Сергей Т.!

Хмм. "Не ставят же они на каждый компонент" да ставят, ставят :(

А Вы не хотите :) ...

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

Собственно пока писал родилось ТРИ идеи :)

1. В общем идея то проста - Вам необходимо написать модуль - перехватчик событий клавиатуры. Если нажали кнопку (тут надо вставлять проверки что не пробел/стрелки/tab и т.д. ) то "включать" кнопку применить.

2. А что собственно мешает на скажем OnMouseMove формы поставить проверку - не изменилось ли что в наших Edit? Думаю если "держать" архив данных в памяти, то такая проверка будет достаточно быстра. Ну и обязательно поставить "флаг" изменилось - включить кнопку и отключить проверку.

3. Можно переписать TEdit чтобы он при изменении присылал свое собственное сообщение программе - МЕНЯ изменили!!!
ВАХ, скока способов :) Можно наверное еще придумать...

P.S. Обязательно напишите мне - решились ли воспользоваться каким либо способом? Увы, у меня так руки и не дошли до такого - легче всем на OnChange как советовали поставить...
---------
Пусть все будет хорошо! Давайте жить дружно! :) И будет жить еще лучше!
Ответ отправил: LanK (статус: 7-ой класс)
Отправлен: 27.02.2006, 08:45
Оценка за ответ: 5
Комментарий оценки:
1 Лишняя нагрузка
2 Еще хуже
3 Проще для всех onChange постваить..
В мини форуме напишу...

Отвечает: Злоумышленник
Здравствуйте, Сергей Т.!
Ставят, как правило, в своём событии OnChange: bbApply.Enabled := true
---------
Почему нет встроенного языка 1С на мордовском? Было бы клёво!
Ответ отправил: Злоумышленник (статус: 3-ий класс)
Отправлен: 27.02.2006, 19:17
Оценка за ответ: 5
Комментарий оценки:
Вы тоже не поняли..


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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.16 от 01.03.2006
Яндекс Rambler's Top100

В избранное