Avatar billede mr.meincke Nybegynder
03. december 2003 - 01:34 Der 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)
Avatar billede dkn Nybegynder
03. december 2003 - 02:08 #1
farve koden i irc er 3, dvs hvis du har lavet en klient skal du bare sende en tekst som:

irc.send(chr(3) + '4 Rød Tekst');

hvor 4 angiver den farve du ønsker
Avatar billede dkn Nybegynder
03. december 2003 - 02:09 #2
når tror da jeg misforstod dig, du vil gerne modtage noget tekst.
Nå men det er jo bare en lille funktion med richedit...
Avatar billede snowball Novice
03. december 2003 - 08:01 #3
Du kan evt. prøve nogen af de irc komponenter der er på http://www.torry.net/irc.htm

Snowball
Avatar billede mr.meincke Nybegynder
03. december 2003 - 17:10 #4
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
Avatar billede dkn Nybegynder
03. december 2003 - 18:14 #5
okay, det ved jeg ikke, vil lige se på det
Avatar billede mr.meincke Nybegynder
03. december 2003 - 18:30 #6
Ok... Takker :p
Avatar billede dkn Nybegynder
03. december 2003 - 21:47 #7
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;

  RichEdit.SelStart := -1;
  RichEdit.SelLength := -1;
  RichEdit.SelAttributes.Color := clWindowText;
end;


Når du modtager noget tekst kan du så bruge:
AddSomeIRCTekst(shortfrom + ': ' + messages, richedit1);
Avatar billede mr.meincke Nybegynder
03. december 2003 - 22:13 #8
Hmm... Den farver ingenting... :/
Avatar billede mr.meincke Nybegynder
03. december 2003 - 22:36 #9
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
Avatar billede mr.meincke Nybegynder
03. december 2003 - 22:36 #10
btw, kan du få den til at understøtte BG farven også?
Avatar billede dkn Nybegynder
03. december 2003 - 22:39 #11
forstår ikke helt om du har fået det til at virke eller der er et problem?

Men jeg skal nok se på det med bold osv engang
Avatar billede mr.meincke Nybegynder
03. december 2003 - 22:46 #12
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).
Avatar billede mr.meincke Nybegynder
04. december 2003 - 19:54 #13
Hmm... Jeg har lavet det her men den virker kun ordenligt på den første linie:

procedure TMainForm.IRC_TEXT(aText: String; aRichEdit: TRichEdit);
const
  Colors: Array[0..15] of TColor = (clWhite, clBlack, clNavy, clGreen, clRed, clMaroon, clPurple, $000080FF, $00BEA687, $00AD8F67, $00614E34, $0093764F, $00DFD3C4, clYellow, clGray, clSilver);
var
  IsColor: Boolean;
  ColorCode,BG_ColorCode: Integer;
  i, txtLen,txtLenAfter: Integer;
begin
  //-- Set variables
  IsColor := True;
  ColorCode := 8;
  BG_ColorCode := 1;

  //-- Get the length of the RichEdit's text before inserting the new text
  txtLen := Length(txtMsgs.Text);
  txtLenAfter := Length(aText);

  //-- Now, insert the new text
  txtMsgs.Lines.Add(aText);

  for i := txtLen to txtLenAfter do
  begin
    txtMsgs.SelStart := i;
    txtMsgs.SelLength := 1;

    if ( txtMsgs.SelText = Chr(3) ) then
    begin
      IsColor := not IsColor;
      txtMsgs.SelText := '';
     
      if ( IsInteger(Copy(txtMsgs.Text, i + txtLen, 2)) ) then
      begin
        ColorCode := StrToInt( Copy(txtMsgs.Text, i + txtLen, 2) );
        txtMsgs.SelStart := i + txtLen;
        txtMsgs.SelLength := 2;
        txtMsgs.SelText := '';
      end else if ( IsInteger(Copy(txtMsgs.Text, i + txtLen, 1)) ) then
      begin
        ColorCode := StrToInt( Copy(txtMsgs.Text, i + txtLen, 1) );
        txtMsgs.SelStart := i + txtLen;
        txtMsgs.SelLength := 1;
        txtMsgs.SelText := '';
      end;
      txtMsgs.SelStart := i;
      txtMsgs.SelLength := 1;

      if ( Copy(txtMsgs.Text, i + txtLen, 1) = ',' ) then
        txtMsgs.SelStart := i;
        txtMsgs.SelLength := 1;
        txtMsgs.SelText := '';
        //-- Now lets begin chekcing for the
        if ( IsInteger(Copy(txtMsgs.Text, i + txtLen, 2)) ) then
        begin
          BG_ColorCode := StrToInt( Copy(txtMsgs.Text, i + txtLen, 2) );
          txtMsgs.SelStart := i + txtLen;
          txtMsgs.SelLength := 2;
          txtMsgs.SelText := '';
        end else if ( IsInteger(Copy(txtMsgs.Text, i + txtLen, 1)) ) then
        begin
          BG_ColorCode := StrToInt( Copy(txtMsgs.Text, i + txtLen, 1) );
          txtMsgs.SelStart := i + txtLen;
          txtMsgs.SelLength := 1;
          txtMsgs.SelText := '';
        end;
    end;
    txtMsgs.SelStart := i;
    txtMsgs.SelLength := 1;
    txtMsgs.SelAttributes.Color := Colors[ColorCode];
  end;
end;
Avatar billede dkn Nybegynder
04. december 2003 - 20:03 #14
Ok, vil se på det her iaften.
Avatar billede mr.meincke Nybegynder
04. december 2003 - 21:47 #15
ok... takker :o)
Avatar billede dkn Nybegynder
04. december 2003 - 21:48 #16
har fået farve til at virke nu, tilføjer lige underlined, og bg
Avatar billede mr.meincke Nybegynder
04. december 2003 - 22:01 #17
ok ... bold osv også ? ;)
Avatar billede dkn Nybegynder
04. december 2003 - 22:40 #18
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 :)

procedure TMainForm.IRC_TEXT(aText: string; aRichEdit: TRichEdit);
const
  Colors            : array[0..15] of TColor = (clWhite, clBlack, clNavy, clGreen, clRed, $0000003A, $00740074, $000080FF, $0000FFBF, $0000FC00, $00939300, $00E16464, $00C56464, clFuchsia, clGray, clSilver);
var
  IsColor, IsUnderlined, IsReversed, IsBold: Boolean;
  ColorCode        : Integer;
  i, txtLen, txtLenAfter: Integer;
const
  StandardColor    = 1;                // black
label ReCheck;
begin
  //-- Set variables
  IsColor := false;
  IsUnderlined := false;
  IsReversed := false;
  IsBold := false;

  //-- 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;
Avatar billede dkn Nybegynder
16. december 2003 - 17:23 #19
har du testet det evt?
Avatar billede mr.meincke Nybegynder
16. december 2003 - 20:23 #20
Ahh doh :) Thx btw ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester