PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : zeilennummern vor tmemo?


Schaf
14.04.2002, 22:59
moinzn! wie kann ich bei einem tmemo-feld die jeweiligen zeilennummern davorschreiben? aber so, dass da auch fleißig mitgescrollt wird ;-) brauch ich fürn assembler-interface ... soll in etwa so aussehen:

**+--------------- . . .
1 | asm-befehle
2 | pushen
3 | poppen
4 | usw.
5 | im tmemo
.
.
.


xOOn
15.04.2002, 10:36
1. soviel ich weiss mag tmemo nur 32k an daten
2. naja am einfachsten ist es bevor du add machst einfach das zu machen:

as = IntToStr (Memo1.Lines.Count) + ´ | ´ + deine daten;

und dann adden, wenn du die daten haben willst musst due die zeilen wieder entfernen, wenn du eine zeile loescht dann hast du ein problem!

ich wuerde das nicht mit einem memo machen!


ein freund hat mal nen hexeditor gebaut, dazu hat er fuer die daten und duer die zeilen nummer 2 stringlists verwendet, daber bei daten geht das auch nicht so gut
--------------------------------
alles in allem wuerde ich die zeilennummer trennen, zb vor dem memo labels hinstellen und die dann immer berichtigen wenn man scrollt!!

Schaf
15.04.2002, 18:43
thx, aber ich wollte die zeilennummern VOR dem tmemo haben, also wie bei diversen editoren gesehen ...

was bietet sich denn statt einem tmemo sonst an?

xOOn
16.04.2002, 13:59
naja du kannst TRichEdit nehmen, und die zeilennamen einfach als labels links davon auflisten! nun musst du nur noch den zeilenabstand vom Trichedit holen (RichEdit1.Font.Height * -1 soviel wie ich weiss), damit du weisst wieweit die labels auseinander sind, die scrollbar vom richedit musst du deaktivieren damit man nur noch zeilenweise scrollen kann!
das einzige prob ist das scrollen und das ermitteln der position, welche derzeit angezeigt wird!
das ist jedochein ziemliches problem!!! ich glaube es geht irgendwie ueber messages, aber ganau weiss ich es auch nicht!

bessere loesung faellt mir keine ein :mauer: :mauer:

Felix Kaiser
16.04.2002, 14:16
Ich hab für die Logfunktionen in meinen Serverapplikationen partou einfach die Memo bearbeitet über OnChange. Wenn OnChange ausgelöst wird, habe ich einfach vor die letzte Zeile den Zeitstempel gesetzt. Könntest du ja für die Zeilennummer machen. Sollte dann aber auch eine Festbreitenschrift sein. Konfliktet aber beim Löschen von Zeilen des Memos.

Alternative auch gute und teils bessere Lösung: Du nimmst ein Panel, setzt dessen Eigenschaft BorderStyle auf Single und entfernst die Beveleigenschaften, also auf None setzen. Dann fügst du ein Memo feld ein, sehr schmal, Align = alLeft. Und eine größere Memo, die den Rest auffüllt (Aling = alClient). Über OnChange bei der größeren Memo kannst du darauf achten dass die kleine Memo IMMER soviele Zeilen enthält wie die größere. Inhalt der kleinen sind die Zahlen 1 bis N (Anzahl der Zeilen), durchnummeriert. WordWrap muss bei beiden False sein. In der großen Memo BEIDE Scrollbars aktivieren. Nun muss IMMER darauf geachtet werden, dass die vertikale Scrollposition der kleinen Memo IMMER der identisch ist, der großen Memo. Könnte man theoretisch über einen Timer lösen, aber auch in dem man das WindowProc abfängt.

TMemo ist nur bei Windows9x auf 64K Daten beschränkt. Bei neueren Versionen setzt das Limit der verfügbare Arbeitsspeicher.

xOOn
16.04.2002, 14:47
das problem ist und bleibt die scrollbar, wie krigst du raus, wechle pos sie hat!! darauf laueft letzlich alles raus

Felix Kaiser
16.04.2002, 14:52
Geht doch einfach mit API Funktionen, GetScrollPos oder wie das heißt. Such doch mal danach in der SDK bzw. innerhalb der Gruppe Scrollbar Funktionen.

Schaf
16.04.2002, 19:17
thx leute, werds mal probieren! an die api hatte ich wirklich nicht gedacht :rolleyes: