03. december 2003 - 01:34Der er
19 kommentarer og 1 løsning
IRC Client
Hey,
Ved i hvor der er et komponent til Delphi så alle de der "colors" som man kan lave i IRC bliver vist - Ellers er det jo bare en firkant og lidt tal. Eller har i en idé om hvordan faen jeg laver så et eller andet understøtter det ? :o)
DKN >> Nu er det jo sådan at jeg (selv om jeg har lavet en del Delphi) stort set ALDRIG har arbejdet med RichEdit. Hvor mange points skal du ha for at fiske det sammen? :D
Ok har bixet noget sammen, den bruger richedit så håber også at det er din plan. Jeg har kun lavet farve koden ligenu, hvis du ønsker andet såsom FED og baggrungsfarve må du jo sige til.
procedure TMainForm.AddSomeIRCTekst(Tekst: string; RichEdit: TRichEdit); const Farver : array[0..15] of tcolor = (clwhite, clblack, clNavy, ClGreen, ClRed, clMaroon, clPurple, $000080FF, clyellow, cllime, clMoneyGreen, clskyblue, clteal, clpurple, clgray, clsilver); var I, TekstLength : integer; Isfarve : boolean; FarveKode : integer; function IsInteger(S: string): Boolean; var I, Code : Integer; begin Val(S, I, Code); Result := Code = 0; end; begin TekstLength := length(RichEdit.Text);
RichEdit.Lines.Add(Tekst);
Isfarve := false; I := 0;
while I < length(RichEdit.Lines.Strings[RichEdit.Lines.Count - 1]) do begin inc(I);
RichEdit.SelStart := TekstLength + I - 1; RichEdit.SelLength := 1;
{ **** Farve Highlight ****} // Tjeker om vi er i farve if RichEdit.SelText = chr(3) then begin Isfarve := not Isfarve; RichEdit.SelText := '';
RichEdit.SelStart := TekstLength + I - 1; RichEdit.SelLength := 1;
// Henter farve kode hvis den er der if (RichEdit.SelStart + 1 < length(RichEdit.Text)) then if IsInteger(RichEdit.Text[RichEdit.SelStart] + RichEdit.Text[RichEdit.SelStart + 1]) then begin FarveKode := strtoint(RichEdit.Text[RichEdit.SelStart] + RichEdit.Text[RichEdit.SelStart + 1]); RichEdit.SelText := ''; end else if IsInteger(RichEdit.Text[RichEdit.SelStart]) then begin FarveKode := strtoint(RichEdit.Text[RichEdit.SelStart]); RichEdit.SelText := ''; end; RichEdit.SelStart := TekstLength + I - 1; RichEdit.SelLength := 1; end; // Standard farve if not Isfarve then begin FarveKode := 1; // Sort RichEdit.SelAttributes.Color := clWindowText; end else RichEdit.SelAttributes.Color := Farver[FarveKode]; end;
ok nu farver den ... sådan da... Hvis farvekoden fx er 13 så farver den som hvis farvekoden var 1...Ex: :online1.no.quakenet.org 332 danishCREW #danishCREW :14,1#15,1#0,1# «»8 XXX? ! XXX «» ,1#15,1#14,1#
-- Ville også meget gerne ha at den understøtter bold, italic, underline og reset... Så får du alle de points du vil ha! :D
Det virker ikke ordenligt... Men nu da jeg har noget at gå efter prøver jeg lige selv engang - Du får self points for det script ... Det hjalp mig jo på vej! :o).
okay tror sku den er ved at være der. det med bg color i richedit kan jeg ikke lige huske :/
men jeg har ikke lige haft nogle problemer med den som den er nu, hvis du finder det må du jo sige til. Og hvis du laver koden bedre eller pænere må du gerne lige poste den igen :)
//-- Get the length of the RichEdit's text before inserting the new text txtLen := Length(txtMsgs.Text); txtLenAfter := txtLen + Length(aText);
//-- Now, insert the new text txtMsgs.Lines.Add(aText);
//-- Length of richedit change so while loop is needed! // while I < length(aRichEdit.Lines.Strings[txtLine]) do aRichEdit.Lines.BeginUpdate; for i := txtLen - 1 to txtLenAfter do begin ReCheck: //-- Select one char txtMsgs.SelStart := i; txtMsgs.SelLength := 1;
//-- Color if (txtMsgs.SelText = Chr(3)) then begin //-- Delete ident char txtMsgs.SelText := '';
//-- Trying to Get color code, it can be from 0..15 //-- so double check char length txtMsgs.SelStart := i; txtMsgs.SelLength := 2; if (IsInteger(txtMsgs.SelText)) then begin ColorCode := StrToInt(txtMsgs.SelText); txtMsgs.SelText := ''; IsColor := true; end else if (IsInteger(txtMsgs.SelText[1])) then begin ColorCode := StrToInt(txtMsgs.SelText[1]); txtMsgs.SelLength := 1; txtMsgs.SelText := ''; IsColor := true; end else IsColor := false; //-- Back to see for another identifier goto ReCheck; end;
//-- Underline if (txtMsgs.SelText = Chr(31)) then begin IsUnderlined := not IsUnderlined; txtMsgs.SelText := ''; //-- Back to see for another identifier goto ReCheck; end;
//-- Reversed if (txtMsgs.SelText = Chr(22)) then begin IsReversed := not IsReversed; txtMsgs.SelText := ''; //-- Back to see for another identifier goto ReCheck; end;
//-- Bold if (txtMsgs.SelText = Chr(2)) then begin IsBold := not IsBold; txtMsgs.SelText := ''; //-- Back to see for another identifier goto ReCheck; end;
if not IsColor then ColorCode := StandardColor;
txtMsgs.SelAttributes.Color := Colors[ColorCode];
if IsUnderlined then txtMsgs.SelAttributes.Style := txtMsgs.SelAttributes.Style + [fsUnderline] else txtMsgs.SelAttributes.Style := txtMsgs.SelAttributes.Style - [fsUnderline];
// if IsReversed then // txtMsgs.SelAttributes ??
if IsBold then txtMsgs.SelAttributes.Style := txtMsgs.SelAttributes.Style + [fsBold] else txtMsgs.SelAttributes.Style := txtMsgs.SelAttributes.Style - [fsBold]; end; aRichEdit.Lines.EndUpdate; end;
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.