![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отрисовка TRichEdit [D7, NT4, Win2k, WinXP]
yaric © (2008-08-19 20:13:00)Удалено модератором
Примечание: Спам
yaric (2008-08-20 02:06:00) [1]но если бы удалось сделать как в караоке тоже подойдет...
yaric (2008-08-20 02:05:00) [2]нет... обучающая программа....языку
Германн (2008-08-20 01:29:00) [3]
> yaric (20.08.08 01:23) [6]
Караоке?
yaric (2008-08-20 01:23:00) [4]Задача в следующем вообщем состоит...
есть текст в TRxRichEdit
есть звук в OGG Vorbis
есть звуковые метки : милисекунда:номер символа в тексе
Звук проигрывается строка с символом по метке подсвечивается...
Вот и все...
Германн (2008-08-20 01:10:00) [5]
> yaric (20.08.08 00:55) [4]
Ты бы, дурень, изложил бы свою задачу! Тогда бы смог надеятся на рабочий ответ.
yaric (2008-08-20 00:55:00) [6]так то оно так ...но EM_SETCHARFORMAT не подходит так как требует выделения линии которую необходимо подсветить, у меня идет синхронизация со звуковым файлом и рисовать нужно постоянно...при использовании этого варианты идет постоянное моргание так как меняется выделение...к тому же постоянно перемещается каретка...что тоже не хорошо...у меня есть на момент времени слово котрое проигрывается ...я знаю в какой оно сейчас линии Richeditа находиться...соотвественно необходимо єту линию выделить...
Германн (2008-08-20 00:48:00) [7]Хм. А я думал что этот топик в "Основной" удалили. Оставили только его дубликат в WinAPI.
Мне сразу не понравился вопрос о строке в TRichEdit в сочетании с примером из IDE: "как в IDE строку с точкой останова"
У IDE вроде бы не было никогда переноса!? А у РичЭдит он есть.
{RASkov} (2008-08-20 00:38:00) [8]Хотя если вопрос был
> необходимо в TRichEdit подсветить определеную строку
то тогда примерно так исправить:
procedure ColoredLineInRichEdit(REd: TCustomRichEdit; const ALine: Integer; const BColor, FColor: TColor);
var XFormat: TCharFormat2; P: TPoint;
begin
FillChar(XFormat, SizeOf(XFormat), 0);
XFormat.cbSize:=sizeOf(TCharFormat2);
XFormat.dwMask:=CFM_BACKCOLOR or CFM_COLOR;
XFormat.crBackColor:=ColorToRGB(BColor);
XFormat.crTextColor:=ColorToRGB(FColor);
P.Y:=ALine-1; P.X:=0; REd.CaretPos:=P;
Red.SelLength:=Length(REd.Lines[ALine]);
SendMessage(REd.Handle, EM_SETCHARFORMAT, SCF_WORD or SCF_SELECTION, LPARAM(@XFormat));
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
ColoredLineInRichEdit(RichEdit1, 2, clRed, clBlue);
end;
Конечно не совсем как в ИДЕ получилось, но....
{RASkov} (2008-08-20 00:23:00) [9]> [0] yaric (19.08.08 20:13)
Тут графика не при чем...
Попробуй так:
uses RichEdit;
procedure AddColoredLineInRichEdit(REd: TCustomRichEdit; const AStr: String; const BColor, FColor: TColor);
var XFormat: TCharFormat2;
begin
FillChar(XFormat, SizeOf(XFormat), 0);
XFormat.cbSize:=sizeOf(TCharFormat2);
XFormat.dwMask:=CFM_BACKCOLOR or CFM_COLOR;
XFormat.crBackColor:=ColorToRGB(BColor);
XFormat.crTextColor:=ColorToRGB(FColor);
SendMessage(REd.Handle, EM_SETCHARFORMAT, SCF_WORD or SCF_SELECTION, LPARAM(@XFormat));
REd.Lines.Add(AStr);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
AddColoredLineInRichEdit(RichEdit1, 'This line of text will blue background and Red Font', clBlue, clRed);
end;
Автор не я. Я только в процедуру "это всё" оформил....