TMemo jako konsola

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.

 
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.

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

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” :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1