TMemo jako konsola

SE
  • Rejestracja:prawie 12 lat
  • Ostatnio:ponad 9 lat
  • Postów:68
0

Cześć. Pisze program, który w zamiarze ma być wielowarstwowy, i warstwa logiki ma być rozdzielna od warstwy prezentacji/gui. Generalnie chce na razie zrobić warstwe prezentacji tekstową, żeby móc testować, obsługiwać prowizorycznie. Nie chce używać cmd, tylko własnej aplikacji. Chciałem użyć TMemo, jednak z zachowaniem historii wpisanych fraz, i z możliwością pisania w ostatniej lini tylko i wyłącznie. Napisałem zdarzenie kontrolujące ReadOnly kontrolki.

Kopiuj
 
procedure TMainForm.ConsoleKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_UP then
  begin
    if Console.CaretPos.y+1 <> Console.Lines.Count then
      Console.ReadOnly := true;
  end
  else if  Key = VK_DOWN then
  begin
    if Console.CaretPos.y+1 = Console.Lines.Count then
      Console.ReadOnly := false;
  end
end;  

Jednak zauważam, że czasami po "wjechaniu" strzałką na ostanie pole, okazuje się, że nie mogę pisać, bo Lines.Count jest większy niż przed momentem. Dlaczego tak się dzieje, ew jak inaczej rozwiązać mój problem - tzn. konsole w kontrolce ??

Z góry dzięki za odpowiedz.

edytowany 1x, ostatnio: serge
GThoro
Nie lepiej TMemo jako wyjście, a TEdit jako wejście?
SE
Myślałem o tym, ale chce mieć możliwość zaznaczania razem z wejściem
abrakadaber
abrakadaber
  • Rejestracja:prawie 13 lat
  • Ostatnio:9 miesięcy
  • Postów:6610
0

wydaje mi się, że to nie jest dobry pomysł - TMemo się nijak do tego nie nadaje. Nie prościej z TMemo zrobić jedynie "prezentera" a za linię do wprowadzania danych użyć TComboBox? Dodając kilka linii kodu masz listę ostatnio wprowadzonych poleceń, po której możesz się poruszać jak po normalnej konsoli cmd


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 2 godziny
0

Można przekierować standardowe wyjście do kontrolki.
Słowa kluczowe: input, output (zmienne typu text reprezentujące konsolę), i typ TFileRec za pomocą którego możesz napisać własny „sterownik” we/wy który zamiast do pliku albo na konsolę będzie przekierowywać wyjście do TMemo.

Potem robisz zwykłe printf a idzie automatycznie do memo.

Da się, robiłem to, nie mam kodu bo to było „dawno i nieprawda” :-)

edytowany 2x, ostatnio: Azarien

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.