Avatar billede klasker Nybegynder
15. september 2003 - 14:42 Der er 2 kommentarer og
1 løsning

Find start på linien

Jeg har en TStringlist, der i nogle tilfælde vil indeholde en hel del strings (omkring 600).
Jeg skal bruge en optimeret funktion som returnerer der hvor en given linie starter. Indtil videre har jeg benyttet følgende metode:

function TSyntaxEdit.GetStartOfLine(const L: Integer): Integer;
var
  I, Charcount: Integer;
begin
  I := 0;
  Charcount := 0;
  while (I < Lines.Count) and (I < L) do
    begin
      // Add to charcount. A linebreak counts as two chars
      Charcount := Charcount + Length(Lines.Strings[I]) + 2;
      inc(I);
    end;
  Result := Charcount;
end;

Det giver sig selv at hvis man sætter L til 599 kan denne funktion godt tage et lille stykke tid, og derfor vil jeg gerne høre om der er en mere optimal måde at gøre det på, dvs mindre processor krævende.
Avatar billede athlon-pascal Juniormester
15. september 2003 - 15:46 #1
Din TSyntaxEdit arver fra TRichEdit, ikke?
I så fald kan følgende måske bruges, hvis jeg har forstået dig korrekt, er det lidt det modsatte af det du vil:

var
  LineNumber: Longint;
begin
  LineNumber := SendMessage(SyntaxEdit1.Handle, EM_LINEFROMCHAR, SyntaxEdit1.Selstart, 0);
end;

Kildeliste:
- http://www.pythia.dk/faq/del3.html#2


Jeg har så været inde i WinAPI-hjælpen og kigge, og ad den vej er jeg nået frem til følgende, der så vidt jeg kan se er det du vil:

var
  LineNumber, LineIndex: Longint;
begin
  LineNumber := 500;
  LineIndex := SendMessage(SyntaxEdit1.Handle, EM_LINEINDEX, LineNumber, 0);
end;
Avatar billede athlon-pascal Juniormester
15. september 2003 - 15:49 #2
Så hvis du ikke bruger din egen TStringList, men den der "følger med" når (og hvis) du arver fra TRichEdit, så bør følgende virke:

function TSyntaxEdit.GetStartOfLine(L: Integer): Integer;
begin
  Result := SendMessage(Handle, EM_LINEINDEX, L, 0);
end;
Avatar billede klasker Nybegynder
15. september 2003 - 17:16 #3
Tak. Det var det jeg var ude efter :)
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

Seneste spørgsmål Seneste aktivitet
I dag 10:21 Ny printer, men hvilken Af mort1 i Printere
I går 19:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging