Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - GOTOXY für Memo-Elemente
OeBe - Fr 04.02.22 15:47
Titel: GOTOXY für Memo-Elemente
Hallo,
das Betriebssystem eines Einplatinencomputers der 68322-Reihe liefert über die serielle Schnittstelle an den Host zwei Zahlen für die x- und die y-Komponente des Bildschirms, bei einem Konsolen-Prgramm mit der Abfrage
ReadCommWait so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure myGotoXY; begin SpNr := ReadComWait; ZeNr := ReadComWait; GotoXY(SpNr,ZeNr); end; |
Da ich das Programm auf die graphische Anwendung umstellen möchte, benötige ich ein Äquivalent für GOTOxy in einem Memoelement.
Danke in Voraus für einen Vorschlag.
PS: Delphi 5 läuft in Windows 10 problemlos, wenn der erste Start als Administrator erfolgt.
OeBe
Moderiert von Th69: Delphi-Tags hinzugefügtModeriert von Th69: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Fr 04.02.2022 um 17:00
Th69 - Fr 04.02.22 18:17
Es gibt bei einem
TMemo [
https://docwiki.embarcadero.com/Libraries/Sydney/de/Vcl.StdCtrls.TMemo]-Element kein wirkliches Äquivalent zum
GOTOxy.
Ein Memofeld (Multiline-Editbox) besteht intern nicht aus einem festen XY-Raster (wie ein Konsolenfenster), sondern aus Zeilen mit beliebig viel Text (je Zeile).
Was führst du denn nach dem
GOTOxy aus? Schreibst du Text an diese Stelle? Oder möchtest du nur den Cursor dorthin platzieren (damit der Benutzer an dieser Stelle weiterschreiben kann)?
Du könntest zwar ein Konsolenfenster mit einem Memofeld simulieren (Font mit fester Zeichenbreite und dann Y Zeilen mit je X Leerzeichen erzeugen), aber elegant ist das nicht.
jaenicke - Sa 05.02.22 20:26
Du könntest das Memo von SynEdit nehmen. Da gibt es auch direkt die Koordinatenfunktion.
OeBe - Do 10.02.22 10:01
Th69 hat folgendes geschrieben : |
Es gibt bei einem TMemo [https://docwiki.embarcadero.com/Libraries/Sydney/de/Vcl.StdCtrls.TMemo]-Element kein wirkliches Äquivalent zum GOTOxy.
Ein Memofeld (Multiline-Editbox) besteht intern nicht aus einem festen XY-Raster (wie ein Konsolenfenster), sondern aus Zeilen mit beliebig viel Text (je Zeile).
Was führst du denn nach dem GOTOxy aus? Schreibst du Text an diese Stelle? Oder möchtest du nur den Cursor dorthin platzieren (damit der Benutzer an dieser Stelle weiterschreiben kann)?
Du könntest zwar ein Konsolenfenster mit einem Memofeld simulieren (Font mit fester Zeichenbreite und dann Y Zeilen mit je X Leerzeichen erzeugen), aber elegant ist das nicht. |
Lösung:
Mit dieser "uneleganten" Art habe ich folgende Methode verwendet, die tadellos funktioniert (Programmauszug):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| const maxLinien = 30; maxSpalten = 50;
var Form1: TForm1; SpNr, ZeNr: Byte; Ch: Char; Zeile: array[1..maxSpalten] of Char; ZStr: String; procedure TForm1.FormActivate(Sender: TObject); var i: Byte; begin for i := 1 to maxSpalten do Zeile[i] := ' '; for i := 1 to maxLinien do Memo1.Lines.Add(Zeile); end;
procedure TForm1.WriteMemo(ZeNr, SpNr: Byte; Ch: Char); begin ZStr := Memo1.Lines[ZeNr]; Insert(Ch, ZStr, SpNr); Memo1.Lines[ZeNr] := ZStr; end; |
Aufrufbsp.:
Delphi-Quelltext
1: 2:
| ZeNr := 10; SpNr := 15; WriteMemo(ZeNr, SpNr, 'X'); |
Nochmals danke.
Bernd, alias OeBe
Moderiert von Th69: Delphi-Tags hinzugefügt
icho2099 - Fr 11.02.22 17:01
bedenke: das insert macht deine Zeile länger, das möchtest du vielleicht nicht.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!