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

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


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

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

Выпуск № 817
от 22.05.2007, 14:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 473, Экспертов: 85
В номере:Вопросов: 5, Ответов: 10


Вопрос № 87218: Не подскажите пожалуйста, как в простейшем текстовом редакторе запрограммировать на кнопку удаление последний введенной строки...
Вопрос № 87228: Здравствуйте. Есть текстовый редактор. В немнужна функция поиска самого длинного предложения - это я написал. Какие есть варианты, чтоб это найденное предложение как-нибудь в тексте выделить? Заранее спасибо...
Вопрос № 87247: Здравствуйте уважаемые эксперты. У меня вот такой вопрос: как реализовать (и реально ли это) с помощью стандартных средств Делфи следующую задачу - часть символов текста должна иметь разный цвет, размер, шрифт, стиль. Ну вообщем вот. Что-...
Вопрос № 87248: Мир вам, уважаемые эксперты! Вновь обращаюсь к вам за советом. Имеется некий TObjectList, доверху набитый различными самодельными объектами, потомками TObject и друг друга. Нужно сделать save/load. Делать в лоб не хочется, так как кла...
Вопрос № 87283: Здравствуйте Уважаемые Эксперты. Меня интересует где можно взять учебники для написания курсовой работы на тему "Программирование многопоточных приложений. Понятия процесса и потока. Рабочие потоки. Общение основного и рабочего потока. Синхр...

Вопрос № 87.218
Не подскажите пожалуйста, как в простейшем текстовом редакторе запрограммировать на кнопку удаление последний введенной строки
Отправлен: 16.05.2007, 19:24
Вопрос задал: Mantis (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Устинов С.Е.
Здравствуйте, Mantis!

Ну это смотря что считать простейшим текстовым редактором.
Например, можно на форму кинуть TMemo (назовем его Memo1)и кнопку, тогда по нажатию на кнопку нужно выполнить:

Memo1.Lines.Delete(Memo1.Lines.Count-1);


Удачи!
---------
Ждешь квалифицированного ответа? Задай правильно вопрос!
Ответ отправил: Устинов С.Е. (статус: Практикант)
Ответ отправлен: 16.05.2007, 21:05

Отвечает: Sattar
Здравствуйте, Mantis!
В приложении код для Memo и RichEdit.

Приложение:

---------
Programming is like sex, one mistake and you have to support it for the rest of your life.

Ответ отправил: Sattar (статус: 3-ий класс)
Ответ отправлен: 17.05.2007, 19:12


Вопрос № 87.228
Здравствуйте.
Есть текстовый редактор. В немнужна функция поиска самого длинного предложения - это я написал. Какие есть варианты, чтоб это найденное предложение как-нибудь в тексте выделить?
Заранее спасибо

Приложение:

Отправлен: 16.05.2007, 20:36
Вопрос задал: SunnyKiller (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, SunnyKiller!
Ну самое простое - сделать обычное выделение текста в Memo. За выделение отвечают свойства SelStart - начальная позиция выделения (порядковый номер символа) и SelLength - длина выделенного фрагмента. Просто используйте эти свойства в соответствии со своим кодом.
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на Delphi. Помощь, советы, обмен опытом.
ICQ: 286837644
----
Ответ отправлен: 16.05.2007, 20:42
Оценка за ответ: 4

Отвечает: VinipuX
Здравствуйте, SunnyKiller!

Делаешь к примеру переменную типа StartStr и в нее сначала пишеш 1 (первый символ).
Ищещ в тексте первый встретившийся символ "." если не встретился конец текста. Копируешь в некую переменную MaxStr весь текст с позиции StartStr до позиции найденного символа "." и присваиваешь переменной StartStr позицию найденного символа ".".
Далее по циклу ищешь все "." или конец файла (вдруг нет точки) и проверяешь если разница между позицией очередного найденого символа "." больше чем длина текущего текста в MaxStr, то копируем новый текст в MaxStr.
И не забываем в цикле после каждого сравнения присваивать переменной StartStr позицию найденного символа "."
В результате в переменной MaxStr останется самое длинное предложение.

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

Ну не самый оптимальный вариант наверное но должно помочь.
Ответ отправил: VinipuX (статус: 2-ой класс)
Ответ отправлен: 17.05.2007, 04:57
Оценка за ответ: 4


Вопрос № 87.247
Здравствуйте уважаемые эксперты.
У меня вот такой вопрос:
как реализовать (и реально ли это) с помощью стандартных средств Делфи следующую задачу - часть символов текста должна иметь разный цвет, размер, шрифт, стиль.
Ну вообщем вот. Что-то типа упрощённой версии Word и т.п.
Отправлен: 16.05.2007, 23:20
Вопрос задал: Богданов Михаил (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

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

Есть в Delphi7 (на счет других версий не знаю) в каталоге DemosRichEdit (C:Program FilesBorlandDelphi7DemosRichEdit), такой проект - программа наподобие стандартного WordPad. Там реализованы изменение размеров, начертания и имени шрифта, изменение позиции текста, создание списка, есть даже линейка, как в word'e. Также реализованы функции создания документа, открытия, сохранения, печати, работа с буфером обмена и др.
Можете посмотреть как это делается. Также я думаю будет не сложно добавить свои возможности по примеру, например изменение цвета текста и фона.
Ответ отправил: Louken (статус: 2-ой класс)
Ответ отправлен: 16.05.2007, 23:33
Оценка за ответ: 5
Комментарий оценки:
Спасибо большое как раз то что надо :)
совсем забыл про RichEdit.... :)
пример то что надо (в нём правда есть некоторые неувязки, но я понял как исправить.

Отвечает: Denisss

Здравствуйте, Spiteful imp!

Реализовать возможно. С помощью компонента TRichEdit (закладка Win32).

Чтобы часть символов имела свой цвет, размер, шрифт, стиль - есть свойство SelAttributes.

Для того, чтобы установить какому-либо тексту, например, стиль шрифта, нужно сначала выделить этот текст методами
SelStart - устанавливает начало выделения;
SelLength - устанавливает длину выделения.
После этого нужно обратиться к свойству SelAttributes.Style и установить его равным, например [fsBold], чтобы установить жирный стиль шрифта.
Аналогичным образом можно и другие свойства текста реализовать.
Удачи!
Ответ отправил: Denisss (статус: Профессионал)
Россия, Москва
WWW: Хлама много, по сути ничего...
ICQ: 281599577
----
Ответ отправлен: 16.05.2007, 23:39
Оценка за ответ: 5
Комментарий оценки:
Спасибо. То что искал.

Отвечает: VinipuX
Здравствуйте, Spiteful imp!

Надо взять компонент TRichEdit и делать в нем все то, что вы описали.

Вот небольшой примерчик, а вообще с делфями идут примеры

Как изменить стиль шрифта RichEdit нажатиями соответствующих комбинаций клавиш? (например включить курсив по нажатию Ctrl + I)
Ответ:
В примере стили шрифта меняются по нажатию след. комбинаций клавиш
Ctrl + B - вкл/выкл жирного шрифта
Ctrl + I - вкл/выкл наклонного шрифта
Ctrl + S - вкл/выкл зачеркнутого шрифта
Ctrl + U - вкл/выкл подчеркнутого шрифта
Пример:

const
KEY_CTRL_B = 02;
KEY_CTRL_I = 9;
KEY_CTRL_S = 19;
KEY_CTRL_U = 21;

procedure TForm1.RichEdit1KeyPress(Sender: TObject; var Key: Char);
begin
case Ord(Key) of
KEY_CTRL_B:
begin
Key := #0;
if fsBold in (Sender as TRichEdit).SelAttributes.Style then
(Sender as TRichEdit).SelAttributes.Style :=
(Sender as TRichEdit).SelAttributes.Style - [fsBold]
else
(Sender as TRichEdit).SelAttributes.Style :=
(Sender as TRichEdit).SelAttributes.Style + [fsBold];
end;
KEY_CTRL_I:
begin
Key := #0;
if fsItalic in (Sender as TRichEdit).SelAttributes.Style then
(Sender as TRichEdit).SelAttributes.Style :=
(Sender as TRichEdit).SelAttributes.Style - [fsItalic]
else
(Sender as TRichEdit).SelAttributes.Style :=
(Sender as TRichEdit).SelAttributes.Style + [fsItalic];
end;
KEY_CTRL_S:
begin
Key := #0;
if fsStrikeout in (Sender as TRichEdit).SelAttributes.Style then
(Sender as TRichEdit).SelAttributes.Style :=
(Sender as TRichEdit).SelAttributes.Style-[fsStrikeout]
else
(Sender as TRichEdit).SelAttributes.Style :=
(Sender as TRichEdit).SelAttributes.Style+[fsStrikeout];
end;
KEY_CTRL_U:
begin
Key := #0;
if fsUnderline in (Sender as TRichEdit).SelAttributes.Style then
(Sender as TRichEdit).SelAttributes.Style :=
(Sender as TRichEdit).SelAttributes.Style-[fsUnderline]
else
(Sender as TRichEdit).SelAttributes.Style :=
(Sender as TRichEdit).SelAttributes.Style+[fsUnderline];
end;
end;
end;

Ответ отправил: VinipuX (статус: 2-ой класс)
Ответ отправлен: 17.05.2007, 05:05
Оценка за ответ: 5
Комментарий оценки:
Спасибо интересный пример пожалуй пригодится :)


Вопрос № 87.248
Мир вам, уважаемые эксперты!
Вновь обращаюсь к вам за советом.
Имеется некий TObjectList, доверху набитый различными самодельными объектами, потомками TObject и друг друга.
Нужно сделать save/load.
Делать в лоб не хочется, так как классов ожидается не много, а очень много. (И экземпляров тоже будет много)
Возможно ли как-нибудь сделать универсальную процедуру записи/загрузки любого объекта? Что-нибудь наподобии дампа, которому было бы все равно что именно он записывает.
Или мне придется переопределять для каждого класса свой save?
С уважением, Лука.
Отправлен: 16.05.2007, 23:24
Вопрос задал: Лука (статус: 9-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: PGM
Здравствуйте, Лука!

Есть такое предложение - у меня была подобная проблема при реализации Copy/Paste для разнородных классов. Вышел я из положения используя общего предка от TPersistent, свойство объекта InstanceSize и копирование с помощью Move.

Сохранение: Move(Pointer(AList[i])^, ASave^, AList[i].InstanceSize);
Восстановление: Move(ASave^, Pointer(AList[i])^, AList[i].InstanceSize);

Такая схема вполне могла бы сработать в вашем случае. Правда при считывании надо будет решать объект какого класса надо создавать, т.е. пришлось хранить признак класса и вызывать соответствующий конструктор, а только потом копировать в объект данные обратно.
Ответ отправил: PGM (статус: 7-ой класс)
Ответ отправлен: 17.05.2007, 10:34
Оценка за ответ: 5
Комментарий оценки:
Спасибо, буду пробовать.


Вопрос № 87.283
Здравствуйте Уважаемые Эксперты.
Меня интересует где можно взять учебники для написания курсовой работы на тему "Программирование многопоточных приложений. Понятия процесса и потока. Рабочие потоки. Общение основного и рабочего потока. Синхронизация потоков. События. Мьютексы и семафоры. Критические секции. Потоки пользовательского интерфейса." В Интернете есть множество статей но нет нормальной литературы, точнее мне так и не удалось найти. Возможно кто-то сталкивался с этим и знает сайты, книги. Желательно чтобы там был написано про написание в Delphi.
Отправлен: 17.05.2007, 08:32
Вопрос задал: Чурсанов Евгений Ильич (статус: Студент)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: PGM
Здравствуйте, Чурсанов Евгений Ильич!

Попробуйте поискать книгу Г.Эндрюса "Основы многопоточного, параллельного и распределенного программирования". Хоть и не Дельфи, но все очень внятно - и это именно теоретические основы.

Ну а если нужно практика и WinAPI, то конечно Рихтер "Программирование для профессионалов" любое издание - там все тоже отлично описано, но на С естественно.
Ответ отправил: PGM (статус: 7-ой класс)
Ответ отправлен: 17.05.2007, 10:45

Отвечает: Sattar
Здравствуйте, Чурсанов Евгений Ильич!
Ответ удален и перенесен в ветку форума «О деятельности экспертов и работе портала – Удаленные ответы для обсуждения» [ Климова М. ]

---------
Programming is like sex, one mistake and you have to support it for the rest of your life.
Ответ отправил: Sattar (статус: 3-ий класс)
Ответ отправлен: 17.05.2007, 19:03


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

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

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

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

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

В избранное