Kilka nieco "trudniejszych" zagadnień.

0

Na sam początek może mi ktoś podpowie, jak przerobić ten kod:

void TForm1::Color(AnsiString wyraz)
{
TPoint caret = Form1->RichEdit1->CaretPos;
  AnsiString wyr = wyraz;
  for(int i = 0 ; i < Form1->RichEdit1->Text.Length() - wyr.Length() + 1; i++)
  {
    bool skip = false;
    for(int i2 = 0 ; i2 < wyr.Length() ; i2++)
    {
      if(Form1->RichEdit1->Text.c_str()[i+i2] != wyr.c_str()[i2])
      {
        skip = true;
        break;
      }
    }
    if(!skip)
    {
      Form1->RichEdit1->SelStart = i;
      Form1->RichEdit1->SelLength = wyr.Length();
      Form1->RichEdit1->SelAttributes->Color = clRed;
    }
  }
  Form1->RichEdit1->CaretPos = caret;
  Form1->RichEdit1->SelAttributes->Color = clBlack;
}

na kod w Delphi. Oczywiście, próbowałem samemu, ale największe problemy są z instrukcjami FOR.
Drugie zagadnienie, to jak "zniwelowac" miganie zaznaczonycych wyrazów, po wykonaniu funkcji ?

Następnie, mając taki wpis:

doPlayerAddItem(cid, 2045, 1)

Jak wyciągac argument drugi ? Bez wzgledu na jego dlugosc, ma byc zawsze drugi.
To samo tyczy się tego wpisu:

doPlayerSendTextMessage(cid, 22, "Czesc!")

Jak wyciągnąć zawsze tekst między cudzysłowami ?

0

ad1. Powinno działać

procedure TForm1.Color(Wyraz: AnsiString);
var
  Caret  :TPoint;
  i, j, rLen, wLen :Word;
  Skip   :Boolean;
begin
  with RichEdit1 do
  begin
    Caret := CaretPos;
    rLen := Length(Text);
    wLen := Length(Wyraz);
    for i := 0 to (rLen-wLen)-1 do
    begin
      Skip := False;
      for j := 0 to wLen-1 do
        if Text[i+j] <> Wyraz[j] then
           begin
             Skip := True;
             Break;
           end; // if Text
      if not Skip then
         begin
           SelStart := i;
           SelLength := wLen;
           SelAttributes.Color := clRed;
         end; // if not Skip
    end; // for i
    CaretPos := Caret;
    SelAttributes.Color := clBlack;
  end; // with
end;

Ad2. Nie rozumiem

Ad3.

var wyninek, wyraz :string;

wycinek := Copy(wyraz, 2, Length(wyraz)-1);
0

co do 2)

  • szukasz pozycji pierwszego przecinka
  • szukasz pozycji drugiego przecinka
  • wyciągasz to, co jest pomiędzy przecinkami
  • ew. usuwasz spacje z tego, co wyciągnąłeś
0

#Oleksy
dziekuję.

A co do drugiego zagadnienia, pisalem - jest wpis:

doPlayerAddItem(1,2,3)

1 - argument pierwszy
2 - argument drugi
3 - argument trzeci

i chodzi o to, aby brac drugi argument

#Edit
nie dopisalem wczesniej

uzytkownik ma pole do pisania, i jezeli wlasnie wpisze takie cos:

doPlayerSendTextMessage(cid, 22, "Tekst")

to program ma znaleŹĆ ten wlasnie wpis (linie) i pobrac to co jest miedzy cudzyslowami

to samo jest z pierwszym przykladem

0

Ah! Nie mozna edytowac posta...

#Adam
[Error] Unit1.pas(76): Incompatible types: 'Word' and 'procedure, untyped pointer or untyped parameter'

przy zmianie typu na Integer jest to samo (dokladniej: pierwsza instrukcja FOR)

0

w linijce

wLen := Length(Wyraz)

brakuje średnika na końcu

0

#Adam
Nie działa. Koloruje tylko pierwszą literę tekstu w RichEdit. Wyrazów, które ma kolorować - nie koloruje.
Moze ktos cos poradzic wzw z pkt. 2 i 3 ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1