Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Synmemo zeilen umdrehen (https://www.delphipraxis.net/17081-synmemo-zeilen-umdrehen.html)

Dragon27 27. Feb 2004 22:02


Synmemo zeilen umdrehen
 
hallo, ich hab folgendes vor:

in einem Synmemo soll der Benutzer Zeilen markieren können und dann kopieren, diese sollen dann umgedreht werden ungefähr so:

1
2
3
4
5
6

------

6
5
4
3
2
1

Jetzt würde ich gerne wissen wie ich die Makierten Zeile in eine Listbox lesen kann? Kann mir dazu jemand helfen? Ach ja, also des müssen immer die MAKIERTEN Zeilen sein also nicht wie oben von 1 an.

Danke für den Tipp

Dragon27

Markus K. 27. Feb 2004 22:11

Re: Synmemo zeilen umdrehen
 
Hi Dragon27,
nur mal so ein Gedanke von mir, da ich ned weiß ob es dafür eine spezielle Prozedur gibt. Du könntest alle markierten Zeilen in einem Array speichern und diese Zeilen dann am Ende in verdrehter Reihenfolge wieder ausgeben.

Tschüß Markus

Dragon27 27. Feb 2004 22:16

Re: Synmemo zeilen umdrehen
 
hallo Markus,

ja des is klar aber wie bekomme ich raus von welcher Zeile aus ich einlesen soll und bis welche Zeile ich lesen soll?

Danke für deine Mühe!

nailor 27. Feb 2004 22:22

Re: Synmemo zeilen umdrehen
 
Ich weiß nicht, obs leichter geht, aber über SelStart und SelLength kannst du rausfinden, wo markiert wurde. Über Length(Lines[index]) kannst du dann rausfinden, welche Zeile das sein muss. Alles vorher kopieren, dann das von Markus machen und den Rest wieder übernehmen.

(vorausgesetzt SynMemo funktioniert wie ein normales Memo)

Robert_G 27. Feb 2004 22:37

Re: Synmemo zeilen umdrehen
 
Wenn du die Zeilen im Ganzen haben willst und nicht nur die selektierten Zeichen, dann müsste es so gehen:
Delphi-Quellcode:
Var
  StartLn, EndLn, i: Integer;
  SList: TStrings;
Begin
  With SynMemo1 Do
  Begin
    StartLn := pred(CharIndexToRowCol(SelStart).Line);
    EndLn := pred(CharIndexToRowCol(SelEnd).Line);
  End;
  SList := TStringList.Create;
  Try
    For i := EndLn Downto StartLn Do
      SList.Add(Trim(SynMemo1.Lines[i]));

    ListBox1.Items.Assign(SList);
  Finally
    FreeAndNil(SList);
  End;
End;
CharIndexToRowCol gibt dir von einer absoluten Position Line und Char. Das wird in umgekehrter Reihenfolge in eine StringList geschrieben. Die StringListe wird dann an die Items der ListBox übergeben.

Edit: Tippfehler

nailor 27. Feb 2004 22:45

Re: Synmemo zeilen umdrehen
 
CharIndexToRowCol kannte ich nicht. Dann einfach alles bis eins vor die Zeile übernehmen, umdrehen und Rest dranpacken. Und eventuell für demn 100%igen Service die ursprüngliche Markierung wieder herstellen (machen nur wenige nette Programme).

Robert_G 27. Feb 2004 22:48

Re: Synmemo zeilen umdrehen
 
Die Markierung wird bei meinem Code-Schnipsel nur gelesen, aber nicht geändert.

nailor 28. Feb 2004 08:59

Re: Synmemo zeilen umdrehen
 
Sicher, dass sie nicht trotzdem verloren geht?


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz