Форум: "Основная";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
Внизаля ку3 Найти похожие ветки
← →
дурак (2004-02-10 02:06) [0]как сделать чтоб в edit можно было писать цветной , как в квэйке 3? То есть ставишь ^ за ней цифру и следующий за этой конструкцией текст менял свой цвет на тот, который эта цифра обозначает ?
И чтобы потом в RichEdit этот текст передавался без ^ и этой цифр,
КОРОЧЕ:
При^2вет (написано в Edit), а когда посылаем всё это в RichEdit, то там получается такое: При вет
← →
Баралгин (2004-02-10 09:19) [1]Поищи компонент, на такие сложные вопросы тут неотвечают =(
← →
хз (2004-02-10 09:44) [2]2 Баралгин
Ты видимо хотел сказать "на такие глупые вопросы..."?
← →
h0use (2004-02-10 11:14) [3]Просто парси строчку и с помощью методов работы с select меняй атрибуты текста.
← →
дурак (2004-02-10 11:59) [4]2 h0use
а поподробней, пожалуйста.
← →
alex_*** (2004-02-10 12:05) [5]да я думаю не получится с Edit такое делать. На крайняк попробуй отловить перекрыть оконную процедуру у Edit"a, отловить WM_PAINT и вручную рисовать.
← →
h0use (2004-02-10 12:05) [6]Читай про SelStart, SelText, SelAttributes и много думай :)
← →
Плохиш (2004-02-10 12:09) [7]
> h0use © (10.02.04 12:05) [6]
Он это в TEdit-е хочет сделать! ;-)
Ну не предназначен TEdit для этого, не предназначен.
← →
хз (2004-02-10 12:23) [8]2 Плохиш [7]
> а когда посылаем всё это в RichEdit
...
← →
alex_*** (2004-02-10 12:23) [9]хотя на самом деле он вроде хочет чтоб в richedit разнокрасный текст был При^2вет (написано в Edit), . Тогда вопрос не правильно сформулировал.
← →
дурак (2004-02-10 14:30) [10]Не вопрос правельно сформулировал, но с запитыми протупил, в общем alex_*** ты прав, это я пытаюсь добится, 3 недели маялся наилутший результат с функциями Copy и Delet, но всёравно как-то по другому надо (очень надо).
2 h0use™ -- Купил дельфи, но как всегда он на диске супер сжат, так что Demos и хелпов нет ( а мож и ещё чёнить =( ) немог бы чуть помоч с осваением? или мож кто хелп кинет (немного наверно весит).
← →
alex_*** (2004-02-10 14:34) [11]24 метра в зипе. Кинуть?
← →
alex_*** (2004-02-10 15:00) [12]Проблема чтоб выкинуть из Edit.Text спец. символы или как раскрасить richedit?
p.s. за 3 недели мог бы книжку или нормальную версию дельфей прикупить. А хелп с демосами ставить все равно придется
← →
h0use (2004-02-10 15:10) [13]А там все равно нет соотв. примера я сам доходил...
Вот как я сделал на вход подается строка типа:[B]Привет[/B],меня зовут [I]h0use[/I]
на выходе получаем в RichEdit получаем Привет, меня зовут h0use Плюс там еще цвета устанавливаются в зависимости от индекса из TColorComboBox и смайлики подставляются. Вот сама процедура:
procedure TFMain.AddChatText(AString:String);
var
S : string;
I,J : Integer;
C : String;
ColList : TStringList;
FontName: TFontName;
FontSet : TFontCharset;
begin
ColList:=TStringList.Create;
reChat.SelAttributes.Style:=[];
reChat.Lines.Add("");
reChat.SelStart:=reChat.SelStart-2;
J:=reChat.SelStart;
reChat.SelText:="["+TimeToStr(Now)+" ";
S:=Copy(AString,1,Pos("|",AString)-1);
if S=DM.BAConn.Login then reChat.SelAttributes.Style:=[fsBold,fsItalic]
else reChat.SelAttributes.Style:=[fsBold];
reChat.SelText:=S;
reChat.SelAttributes.Style:=[];
reChat.SelAttributes.Color:=clBlack;
reChat.SelText:=" ] > ";
S:=Copy(AString,Pos("|",AString)+1,Length(AString));
I:=1;
While I <= Length(S) do // Iterate
begin
if (S[I]="<") then // Проверка на таг
begin
if S[I+2]=">" then // проверка на стили
begin
case UpCase(S[I+1]) of //
"I": reChat.SelAttributes.Style:=reChat.SelAttributes.Style+[fsItalic];
"B": reChat.SelAttributes.Style:=reChat.SelAttributes.Style+[fsBold];
"U": reChat.SelAttributes.Style:=reChat.SelAttributes.Style+[fsUnderLine];
"S": reChat.SelAttributes.Style:=reChat.SelAttributes.Style+[fsStrikeOut];
end; // case
I:=I+3;
Continue;
end; // конец проверки на стили
if (UpCase(S[I+1])="C") and (S[I+4]=">") then // проверка на цвет
begin
C:=S[I+2]+S[I+3];
ColList.Add(C);
reChat.SelAttributes.Color:=cbColor.Colors[StrToInt(ColList.Strings[ColList.Count-1])];
I:=I+5;
Continue;
end; // конец проверки на цвет
if (S[I+1]="/") and (S[I+3]=">")then // проверка на конец тага
begin
case UpCase(S[I+2]) of //
"I": reChat.SelAttributes.Style:=reChat.SelAttributes.Style-[fsItalic];
"B": reChat.SelAttributes.Style:=reChat.SelAttributes.Style-[fsBold];
"U": reChat.SelAttributes.Style:=reChat.SelAttributes.Style-[fsUnderLine];
"S": reChat.SelAttributes.Style:=reChat.SelAttributes.Style-[fsStrikeOut];
"C": if ColList.Count>1 then
begin
ColList.Delete(ColList.Count-1);
if ColList.Count<1 then reChat.SelAttributes.Color:=clBlack
else reChat.SelAttributes.Color:=cbColor.Colors[StrToInt(ColList.Strings[ColList.Count-1])];
end
else reChat.SelAttributes.Color:=clBlack;
end; // case
I:=I+4;
Continue;
end; // конец проверки на конец тага
end; // Конец проверки на таг
if (S[I]=":") and (S[I+1]=")") then
begin
FontName:=reChat.SelAttributes.Name;
FontSet:=reChat.SelAttributes.Charset;
reChat.SelAttributes.Charset:=SYMBOL_CHARSET;
reChat.SelAttributes.Name:="Wingdings";
reChat.SelText:=#74;
reChat.SelAttributes.Name:=FontName;
reChat.SelAttributes.Charset:=FontSet;
I:=I+2;
Continue;
end;
if (S[I]=":") and (S[I+1]="|") then
begin
FontName:=reChat.SelAttributes.Name;
FontSet:=reChat.SelAttributes.Charset;
reChat.SelAttributes.Charset:=SYMBOL_CHARSET;
reChat.SelAttributes.Name:="Wingdings";
reChat.SelText:=#75;
reChat.SelAttributes.Name:=FontName;
reChat.SelAttributes.Charset:=FontSet;
I:=I+2;
Continue;
end;
if (S[I]=":") and (S[I+1]="(") then
begin
FontName:=reChat.SelAttributes.Name;
FontSet:=reChat.SelAttributes.Charset;
reChat.SelAttributes.Charset:=SYMBOL_CHARSET;
reChat.SelAttributes.Name:="Wingdings";
reChat.SelText:=#76;
reChat.SelAttributes.Name:=FontName;
reChat.SelAttributes.Charset:=FontSet;
I:=I+2;
Continue;
end;
reChat.SelText:=S[I];
Inc(I);
end; // for
reChat.SelStart:=J;
if not BlockMode then edMsg.SetFocus;
FreeAndNil(ColList);
end; // AddChatText
За оптимальность кода не отвечаю, у меня вроде не тормозило поэтому оставил как есть
← →
h0use (2004-02-10 15:16) [14]Поправка...таги не в [], а в <> как на этом форуме :)
← →
дурак (2004-02-10 15:17) [15]h0use огромный THX, век незабуду, всё пойду переваривать, а не лутше завтра - ща во Владивостоке уже спать пора =)
← →
дурак (2004-02-12 10:08) [16]
While I <= Length(S) do // Iterate
begin
if (S[I]="<") then // Проверка на таг
begin
if S[I+2]=">" then // проверка на стили
begin
case UpCase(S[I+1]) of //
проблема с этим, здесь задается конструкция типа HTML тега, т.е. индефикатор атрибута текста в таких <3>-скобках, а я пытаюсь добится ^3, вроде всё делаю правельно, но виснет до треска в динамиках.
← →
h0use (2004-02-12 10:18) [17]Дык проверяй не как у меня на три символа, а проверяй типа так:
if S[I]="^" then
Case S[I+1] of
"3" : делаем то-то
"4" : делаем то-то
....
esle
ничего не делаем
← →
дурак (2004-02-12 10:20) [18]Спасибо, до меня дошло уже
begin
if S[I]=S[I] then
begin case UpCase(S[I+1]) of...
← →
h0use (2004-02-12 10:22) [19]
> if S[I]=S[I] then
Странная строчка :) Это же всегда истина...
← →
дурак (2004-02-12 10:25) [20]Ну так она проверяет первый символ, тоесть ^, а если он там же и остался значит всё ок =)
← →
дурак (2004-02-12 10:30) [21]TimeToStr(Now) - понравилась она мне, я раньше и незнал про эту прцедуру и делал сам, но как зделать маску на секунды (чеб их невидно было)????
← →
alex_*** (2004-02-12 10:41) [22]FormatDateTime("hh:mm",Now());
← →
дурак (2004-02-12 10:43) [23]Вот спасибо
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.037 c