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

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


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

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

Выпуск № 784
от 18.04.2007, 18:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 460, Экспертов: 98
В номере:Вопросов: 8, Ответов: 16


Вопрос № 82268: Здраствуйте, мне нужно было создать шахматную доску из Shape'в , но так чтобы реально на форме небыло ни одного шэйпа, код в доп. окне. Теперь , препод сказал что нужно ещё зделать реальные шахматы на ней, помогите с созданием хотябы пары фи...
Вопрос № 82277: Здравствуйте, уважаемые эксперты! Как можно изменить окраску отдельной ячейки в StringGrid или цвет букв в определенной ячейке? Спасибо....
Вопрос № 82291: Доброго времени суток, господа! Актуальный вопрос - где и как можно приобрести лицензионную DELPHI 6 ? Что для этого надо сделать? Я, правда, не пишу коммерческих программ, а только для себя и на работе для внутреннего пользования. Но ... Наверно...
Вопрос № 82297: Здравствуйте, уважаемые эксперты! Как узнать, в какой ячейке StringGrid-a происходят изменения? Мне нужно изменить цвет этой ячейки, в которой пользователь что-то исправил. Спасибо....
Вопрос № 82361: Уважаемые эксперты для тестирование канала необходимо прогнать TCP или UDP трафик с другой стороны, его надо поймать оценить потери и прогнать назад. Подскажите с чего начать. ...
Вопрос № 82403: Здраствуйте! У меня возник следующего образа вопрос. Пишу программу, на форме Image, PopMenu и Label. Label, form - определенного цвета, стоит Transparentcolor Этот же цвет. вообщем прозрачно. В имдже синий цвет (красный - форма и остальное),...
Вопрос № 82426: Здравствуйте уважаемые эксперты!!! Подскажите пожалуйста как с помощью Делфи 7 конвертировать html в pdf (желательно исходник). И общий вопрос: возможности Делфи 7 работать с pdf файлами. Спасибо!!!...
Вопрос № 82430: В чем разница между TNMMSGServ/TNMMsg и TServerSocket/TClientSocket. Какой компонент лучше для передачи текста по сети....

Вопрос № 82.268
Здраствуйте, мне нужно было создать шахматную доску из Shape'в , но так чтобы реально на форме небыло ни одного шэйпа, код в доп. окне.

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

Приложение:

Отправлен: 12.04.2007, 19:09
Вопрос задал: Flexlx (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Lomer
Здравствуйте, Flexlx!
Мне кажется, придется работать с массивом TImage. Изображения фигур можно выдрать из какой-нибудь шахматной программы (полно в инете). Скорее всего, придется в фотошопе сделать размер изображений 50x50, а площадь изображения, не занятую фигурой, сделать на 100% прозрачной.
Далее - просто. Сохраняете в папке с программой изображения, скажем, 1.bmp, 2.bmp, ..., 32.bmp. Код будет вроде бы такой(не проверял):
Figure: array[1..32]of TImage;
Bmps: array[1..32] of TPicture;
...

for i:=1 to 32 do
Bmps[i].LoadFromFile(IntToStr(i)+'.bmp');
for i:=1 to 16 do
begin
Figure[i].Create(Form1);
Figure[i].Picture:=Bmps[i];
Figure[i].Left:=(i mod 8)*50;
Figure[i].Top:=(i div 8+1)*50;
end;
for i:=1 to 16 do
begin
Figure[i].Create(Form1);
Figure[i].Picture:=Bmps[i];
Figure[i].Left:=(i mod 8)*50;
Figure[i].Top:=(i div 8+7)*50;
end;

Приложение:

Ответ отправил: Lomer (статус: 4-ый класс)
Ответ отправлен: 12.04.2007, 19:49


Вопрос № 82.277
Здравствуйте, уважаемые эксперты!
Как можно изменить окраску отдельной ячейки в StringGrid или цвет букв в определенной ячейке?
Спасибо.
Отправлен: 12.04.2007, 20:19
Вопрос задал: Vassea (статус: 2-ой класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Gh0stik
Здравствуйте, Vassea!

Вам достаточно будет проделывать изменения в обработчике OnDrawCell.

Например так:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if (ACol = 2) and (ARow=2) //цвет фона и текста изменяем только для ячейки (2,2)
then
begin
StringGrid1.Canvas.Brush.color:=clred; //цвет фона
StringGrid1.Canvas.Font.Color:=clWhite; //цвет текста
StringGrid1.Canvas.Font.Style:=[fsBold]; //стиль текста (жирный)
end;
StringGrid1.canvas.fillRect(Rect); //заливаем фон
StringGrid1.canvas.TextOut(Rect.Left,Rect.Top,StringGrid1.Cells[ACol,ARow]); //красим текст
end;

Good Luck!!!

---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессионал)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 12.04.2007, 20:40
Оценка за ответ: 5

Отвечает: Базанов Иван Александрович
Здравствуйте, Vassea!
Как вариант и дополнение к предыдущему ответу можно написать свой класс - наследник от TStringGrid, в котором можно будет совершенно произвольно отрисовывать ячейки каким угодно образом...
---------
Disassemble your life and get the key
Ответ отправил: Базанов Иван Александрович (статус: 5-ый класс)
Ответ отправлен: 12.04.2007, 21:51
Оценка за ответ: 4

Отвечает: xXx
Здравствуйте, Vassea!

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if (ACol=2) and (ARow=1) then
with StringGrid1.Canvas do
begin
Brush.Color:=clRed;
FillRect(Rect);
TextOut(Rect.Left+2,Rect.Top+2,StringGrid1.Cells[ACol,ARow]);
end;
end;
Ответ отправил: xXx (статус: 6-ой класс)
Ответ отправлен: 13.04.2007, 06:14
Оценка за ответ: 5


Вопрос № 82.291
Доброго времени суток, господа! Актуальный вопрос - где и как можно приобрести лицензионную DELPHI 6 ? Что для этого надо сделать?
Я, правда, не пишу коммерческих программ, а только для себя и на работе для внутреннего пользования. Но ... Наверное время пришло!?
В фирменных салонах утверждают. что это невозможно. В другой среде писать не хочется, т.к. накопились уже наработки.
Благодарю за сочувствие и реальный совет. Михаил И. Федосов.
Отправлен: 12.04.2007, 21:52
Вопрос задал: Федосов Михаил Иванович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: PGM
Здравствуйте, Федосов Михаил Иванович!

Боюсь, что тут трудно чем-то помочь. Продукт-то старый. Сейчас предлагают из такого класса (не считая, конечно монстра Delphi 2006) только Turbo Delphi за 250-300 зеленых (например, в "Интерфейсе"). Хотя прекрасно вас понимаю и сам бы не прочь купить именно Delphi 6, особенно, если не втридорога, б/у так сказать. Но я полагаю, купив более "продвинутую" версию, вы сможете юридически спокойно пользоваться старой - ведь ее не забирают же обратно при апгрейде :). Если это важно юридически, можно уточнить данный факт при покупке.
Ответ отправил: PGM (статус: 4-ый класс)
Ответ отправлен: 12.04.2007, 23:59
Оценка за ответ: 5
Комментарий оценки:
Здравствуйте PGM! Большое спасибо Вам за понимание моей проблемы! А вот идея "прикрыть" Delphi 6 более "продвинутой" произвела на меня впечатление. Попробую! Успехов Вам

Отвечает: sir henry
Здравствуйте, Федосов Михаил Иванович!
А чем Вам Delphi 7 не нравится? Интерфейс разработки тот-же, исправлены некоторые глюки. Вдобавок его до сих пор еще можно купить у какого-нибудь официального дистрибутора. :)
Зайдите на сайт http://www.ibase.ru/prices/, свяжитесь с ними по телефону (там есть) или e-mail, возможно у них еще остались коробки с Delphi 6.
Однако цены... :) Ну вот для примера:
Delphi 7 Architect 106600 руб
Delphi 7 Enterprise 75400 руб
Delphi 7 Professional 33280 руб
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 13.04.2007, 06:51
Оценка за ответ: 5
Комментарий оценки:
Уважаемый Sir Henry! Спасибо большое за Ваше участие! Меня интересует конкретно Delphi 6, т.к. крутятся уже давно задачи, написанные на нем, и до сих пор просят "улучшить и добавить". Но адреса и телефоны - сделаю попытку.
Но! Цены, пиведенные Вами мне не по силам, а начальники столько не дадут, т.к. деньги сейчас копим и тратим на лицензирование Win и Office. Увы.
Ваши отклики очень поддерживают и снижают чувство одиночества перед возникшей проблемой. Это дорогого стоит!!
Поверьте.


Вопрос № 82.297
Здравствуйте, уважаемые эксперты!
Как узнать, в какой ячейке StringGrid-a происходят изменения? Мне нужно изменить цвет этой ячейки, в которой пользователь что-то исправил.
Спасибо.
Отправлен: 12.04.2007, 22:17
Вопрос задал: Vassea (статус: 2-ой класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, Vassea!
Событие OnSetEditText. У события два дополнительных значения - ACol и ARow - координаты ячейки, в которой происходят изменения.
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на Delphi. Помощь, советы, обмен опытом.
ICQ: 286867644
----
Ответ отправлен: 12.04.2007, 22:34
Оценка за ответ: 5

Отвечает: Louken
Здравствуйте, Vassea!

у StringGrid-a есть событие OnSelectCell, у которого есть два параметра ACol и ARow. Это и есть координаты активной ячейки.
Чтобы изменять цвет активной ячейки, используйте событие OnDrawCell, например так как показано в примере:

Приложение:

Ответ отправил: Louken (статус: 1-ый класс)
Ответ отправлен: 12.04.2007, 23:01
Оценка за ответ: 4

Отвечает: Gh0stik
Здравствуйте, Vassea!

Предлагаю такой подход.
Определяем две глобальные переменные: var sposle, sdo:string;

Также создаем два обработчика:
procedure TForm1.StringGrid1GetEditText(Sender: TObject; ACol,
ARow: Integer; var Value: String);
begin
sdo:=Value; //сохраняем значение до редактирования
end;

procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol,
ARow: Integer; const Value: String);
begin
sposle:=Value; //сохраняем значение после редактирования
end;


Далее при OnDrawCell просто делаем проверку, если значения различны - до и после, то изменяем цвет заливки.

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if (sdo<>sposle) then
begin
StringGrid1.Canvas.Brush.Color := clPurple;
sdo:=''; sposle:='';
end;
StringGrid1.canvas.fillRect(Rect);
StringGrid1.canvas.TextOut(Rect.Left,Rect.Top,StringGrid1.Cells[ACol,ARow]);
end;


Good Luck!!!
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессионал)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 12.04.2007, 23:10
Оценка за ответ: 5


Вопрос № 82.361
Уважаемые эксперты для тестирование канала необходимо прогнать TCP или UDP трафик с другой стороны, его надо поймать оценить потери и прогнать назад. Подскажите с чего начать.

Приложение:

Отправлен: 13.04.2007, 11:49
Вопрос задал: Jon33 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: chikanok
Здравствуйте, Jon33!
Я надеюсь вас устроит моё решение.
Можно использовать Компоненты Indy(IDTCPClient & IDTCPServer).
В приложении пример решения данной задачи и код формы (dfm), но только в одном направдении т.к. можете сделать аналогично.
И клиент и сервер расположены в одном приложении.
На форме IdTcpClient(Client),idTCPServer(Server) и TButton(Button1).
Отправьте ваш е-маил в личку и я вышлю полностью проект.
Удачи.

Приложение:

---------
Главное желание,а там разберёмся!

Ответ отправил: chikanok (статус: 3-ий класс)
Ответ отправлен: 13.04.2007, 15:17


Вопрос № 82.403
Здраствуйте! У меня возник следующего образа вопрос. Пишу программу, на форме Image, PopMenu и Label.
Label, form - определенного цвета, стоит Transparentcolor Этот же цвет.
вообщем прозрачно. В имдже синий цвет (красный - форма и остальное), ставлю Transparet:=false на Label вижу фон. Но вот Popupmenu (везде на форме и на лабеле и на имейдже!) на прозрачном не работает. Как сделать чтобы работал. Кому нужен пример он здесь www.elacerta.narod.ru. ПОМОГИТЕ!!!
Отправлен: 13.04.2007, 15:00
Вопрос задал: Овчинников Николай Владиславович (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: PaVeL_Ekt
Здравствуйте, Овчинников Николай Владиславович!

Если я правильно понял, что меню не срабатывает там где форма невидимая, то вот решение:
На транспоренте формы (где форма не визуальная) меню отрабатывать не будет, т.к. под ней нет области формы, а посему могу посоветовать поставить системную ловушку (HOOK) на события миши и при правом клике проверять координаты через mouse.CursorPos.X и Y соответственно.
---------
Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: Студент)
Ответ отправлен: 13.04.2007, 15:32


Вопрос № 82.426
Здравствуйте уважаемые эксперты!!!
Подскажите пожалуйста как с помощью Делфи 7 конвертировать html в pdf (желательно исходник). И общий вопрос: возможности Делфи 7 работать с pdf файлами. Спасибо!!!
Отправлен: 13.04.2007, 17:29
Вопрос задал: Piit (статус: 2-ой класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Овчинников Николай Владиславович
Здравствуйте, Piit!

Вот http://colorpilot.ru/pdfsample_delphi.html для создания PDF. Очень хорошо работает.
Ответ отправил: Овчинников Николай Владиславович (статус: 1-ый класс)
Ответ отправлен: 13.04.2007, 17:42
Оценка за ответ: 5
Комментарий оценки:
А бесплатного нет?

Отвечает: Lomer
Здравствуйте, Piit!

Попробуйте также вот это:
http://www.convertzone.com/doc2pdfcom/demo/czdoc2pdf.exe
CZ-doc2pdf COM
COM object that batch convert ms word doc, rtf, html, text to pdf, It can be called from VB, VC, DELPHI.

Ответ отправил: Lomer (статус: 4-ый класс)
Ответ отправлен: 13.04.2007, 18:17
Оценка за ответ: 5

Отвечает: Melamed
Здравствуйте, Piit!
Самое простое, если на компютере стаит драйвер принтера, который печатает в pdf файл, отправить файл на печать, используя этот драйвер.
Желаю успехов
Ответ отправил: Melamed (статус: 10-ый класс)
Ответ отправлен: 13.04.2007, 23:07
Оценка за ответ: 5
Комментарий оценки:
Суперская идея!!! Это намного проще для меня


Вопрос № 82.430
В чем разница между TNMMSGServ/TNMMsg и TServerSocket/TClientSocket. Какой компонент лучше для передачи текста по сети.
Отправлен: 13.04.2007, 17:53
Вопрос задал: George soselia (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, George soselia!
Судя по этой статье, первый вариант вам больше подойдет для передачи текста.
Главное, чтобы при последющей модернизации вовремя сменить компонент на более подходящий (если нужно будет), чтобы не получилось как тут.
---------
Не узнаешь - не попробуешь.
Ответ отправил: Сухомлин Кирилл Владимирович (статус: Специалист)
Ответ отправлен: 13.04.2007, 18:02

Отвечает: Bingo
Здравствуйте, George soselia!
Вообще, для передачи текста по сети можно пользоваться и другими компонентами Indy( ТСP,UDP,и.т.д), у каждого из них свои особенности работы. Жаль, что Вы не указали, какой Indy у Вас установлен, будем считать, что Indy9. Приведу пример для передачи текста с помощью TCP клиент (TIdTCPClient) на TCP сервер(TIdTCPServer). Создадим сервер. Поместим на форму TIdTCPServer и TMemo (туда будет поступать текст). В настройках сервера выберем какой-нибудь неиспользуемый порт (456), Active:=True (!!!) и выберем событие OnExecute. Запишем:

---

procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
begin
with AThread.Connection do
begin
Memo1.Lines.Add(AThread.Connection.CurrentReadBuffer);
Disconnect;
end;
end;

----

Все, сервер готов. Создадим клиент. На форме разместим кнопку и TEdit. В настройках клиента запишем такой же порт, как и у сервера, а в Host - IP адрес или имя компьютера, где размещен сервер. По нажатии по кнопке произойдет следующее:

---

procedure TForm1.Button1Click(Sender: TObject);
begin
IdTCPClient1.Connect;
IdTCPClient1.Write(Edit1.Text);
IdTCPClient1.Disconnect;
End;

---

Ну и теперь можно запустить сервер - на одной машине, клиент - на другой. Если же (не исключено) у Вас установлен Indy 10, то принцип работы сервера и клиента отличается (задайте новый вопрос).
Удачи!
---------
C темным пивом в светлое будущее!
Ответ отправил: Bingo (статус: 3-ий класс)
Ответ отправлен: 13.04.2007, 20:48


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

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

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

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

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


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


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.50 (beta) от 15.04.2007
Яндекс Rambler's Top100

В избранное