Вопрос № 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
Здравствуйте.
Есть текстовый редактор. В немнужна функция поиска самого длинного предложения - это я написал. Какие есть варианты, чтоб это найденное предложение как-нибудь в тексте выделить?
Заранее спасибо
Отвечает: Ерёмин Андрей
Здравствуйте, SunnyKiller!
Ну самое простое - сделать обычное выделение текста в Memo. За выделение отвечают свойства SelStart - начальная позиция выделения (порядковый номер символа) и SelLength - длина выделенного фрагмента. Просто используйте эти свойства в соответствии со своим кодом.
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Делаешь к примеру переменную типа StartStr и в нее сначала пишеш 1 (первый символ).
Ищещ в тексте первый встретившийся символ "." если не встретился конец текста. Копируешь в некую переменную MaxStr весь текст с позиции StartStr до позиции найденного символа "." и присваиваешь переменной StartStr позицию найденного символа ".".
Далее по циклу ищешь все "." или конец файла (вдруг нет точки) и проверяешь если разница между позицией очередного найденого символа "." больше чем длина текущего текста в MaxStr, то копируем новый текст в MaxStr.
И не забываем в цикле после каждого сравнения присваивать переменной StartStr позицию найденного символа "."
В результате в переменной MaxStr останется самое длинное предложение.
Все это применимо если окончанием предложения считать символ ".". Если разделители предложений есть еще и другие то учесть их.
Если все на много сложнее и встречаются сокращения типа " и т.п.", то придется все это учитывать.
Ну не самый оптимальный вариант наверное но должно помочь.
Ответ отправил: VinipuX (статус: 2-ой класс)
Ответ отправлен: 17.05.2007, 04:57 Оценка за ответ: 4
Вопрос № 87.247
Здравствуйте уважаемые эксперты.
У меня вот такой вопрос:
как реализовать (и реально ли это) с помощью стандартных средств Делфи следующую задачу - часть символов текста должна иметь разный цвет, размер, шрифт, стиль.
Ну вообщем вот. Что-то типа упрощённой версии Word и т.п.
Есть в 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 - вкл/выкл подчеркнутого шрифта
Пример:
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.
Такая схема вполне могла бы сработать в вашем случае. Правда при считывании надо будет решать объект какого класса надо создавать, т.е. пришлось хранить признак класса и вызывать соответствующий конструктор, а только потом копировать в объект данные обратно.
Ответ отправил: PGM (статус: 7-ой класс)
Ответ отправлен: 17.05.2007, 10:34 Оценка за ответ: 5 Комментарий оценки: Спасибо, буду пробовать.
Вопрос № 87.283
Здравствуйте Уважаемые Эксперты.
Меня интересует где можно взять учебники для написания курсовой работы на тему "Программирование многопоточных приложений. Понятия процесса и потока. Рабочие потоки. Общение основного и рабочего потока. Синхронизация потоков. События. Мьютексы и семафоры. Критические секции. Потоки пользовательского интерфейса." В Интернете есть множество статей но нет нормальной литературы, точнее мне так и не удалось найти. Возможно кто-то сталкивался с этим и знает сайты, книги. Желательно чтобы там был написано
про написание в Delphi.
Отвечает: PGM
Здравствуйте, Чурсанов Евгений Ильич!
Попробуйте поискать книгу Г.Эндрюса "Основы многопоточного, параллельного и распределенного программирования". Хоть и не Дельфи, но все очень внятно - и это именно теоретические основы.
Ну а если нужно практика и WinAPI, то конечно Рихтер "Программирование для профессионалов" любое издание - там все тоже отлично описано, но на С естественно.
Ответ отправил: PGM (статус: 7-ой класс)
Ответ отправлен: 17.05.2007, 10:45