Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.039 c
1-79696
Grinder
2004-02-12 18:44
2004.02.25
кто скажет грамотный алгоритм


1-79819
kirilln
2004-02-11 10:25
2004.02.25
помогите с осями в TChart


1-79707
неуловимый джо
2004-01-23 13:27
2004.02.25
Скрыть MainMenu


3-79628
Enigma
2004-02-01 14:41
2004.02.25
DBGrid


14-80252
int64
2004-02-04 12:50
2004.02.25
Together от Borland.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский