[Lazarus][Pascal] Zmiana czcionki okna Console / StdOut

Tutaj umieszczamy tematy związane z językami programowania niepasującymi do innych działów.
Regulamin forum
Temat prosimy poprzedzić nazwą języka umieszczonego w nawiasach kwadratowych np. [Pascal].
Awatar użytkownika
tasza
Expert
Expert
Posty: 935
Rejestracja: czwartek 12 sty 2017, 10:24
Kontaktowanie:

[Lazarus][Pascal] Zmiana czcionki okna Console / StdOut

Postautor: tasza » poniedziałek 17 gru 2018, 22:20

Choć siła cała Lazarusa w szybkim tworzeniu aplikacji okienkowych to i konsolowe pokraki często zdarza się pisać, wtenczas do wyprowadzania napisów na konsole służy typowa dla Pascala biblioteczna procedurka write() lub writeln(). O ile docelowo uruchomiona aplikacja wpasowuje się w realia bieżących ustawień systemowej konsoli, to w trakcie uruchamiania i testów jesteśmy skazani na lazarusowe okienko ze 'standardowym wyjściem', po którym FPC bazgra pod dyktando write(). No i tu powstaje drobna niedogodność, ponieważ okienko owe wywoływane kombinacją Ctrl+ALt+O pokazuje zawartość tekstową fontem z rodziny Sans, któremu daleko od 'komputerowego' monospace. Na urodzie stracą wszelkie semigrafiką robione tabelki, a ASCII-arty będą wyglądały tak, jakby ktoś kichnął w literki na ekranie. A ponieważ dziś właśnie z tym tematem walczyłam - to i taki oto tip powstał.

Bo rozwiązanie zagadnienia jest dość proste, choć z tych klasy - sport ekstremalny. Należy po prostu zmodyfikować kod źródłowy formy z terminalem, dopisując obecnemu tam obiektowi klasy TMemo właściwości odpowiedzialne za bieżącą czcionkę, poczym Lazarusa skompilować.

Rzeczony plik foremki (w Linux) znajduje się typowo w lokalizacji /usr/share/lazarus/<wersja>/debugger/pseudoterminaldlg.lfm a jego zawartość po uzupełnieniu o dość kompaktowy monospace widać poniżej:

pseudoterminaldlg.lfm pisze:

Kod: Zaznacz cały

inherited PseudoConsoleDlg: TPseudoConsoleDlg
  Left = 1261
  Top = 344
  Caption = 'Console'
  DockSite = True
  object Memo1: TMemo[0]
    Left = 0
    Height = 240
    Top = 0
    Width = 320
    Align = alClient
    OnUTF8KeyPress = Memo1UTF8KeyPress
    ReadOnly = True
    ScrollBars = ssAutoBoth
    TabOrder = 0
    WantTabs = True
    Font.Height = -11
    Font.Name = 'DejaVu Sans Mono'
    Font.Style = [fsBold]     
  end
end


Dość dobry rezultat daje też wykorzystanie czcionki FreeMono czyli ostatnie trzy linijki zamieniamy na:

pseudoterminaldlg.lfm pisze:

Kod: Zaznacz cały

    Font.Height = -13
    Font.Name = 'FreeMono'   


Eksperymenty z fontami to w/g mnie najefektywniej robić na osobno skleconej aplikacji, konfigurując obiekt klasy TMemo (jak w oknie Console). Potem sobie projekt zapisać na dysk i podglądnąć jak wygląda plik *.lfm (Lazarus Form), szczególnie ta część co ustawia czcionkę.

Po tym zabiegu trzeba przebudować IDE i gotowe, seria obrazków po kolei:

Przed zmianą, domyślna czcionka okna Console:
00_laz.png


Polecenie przebudowy IDE:
01_laz.png


Potwierdzenie, dla pewności
02_laz.png


Gotowe, świeżutkie IDE ze zmodyfikowaną czcionką terminalową
03_laz.png


Oczywiście można się bawić w dodanie tego do konfiguracji środowiska etc/itd tylko po co. To się robi raz na wielkie nigdy pod swoje upodobania.

No i na koniec - jak się sztuczka z kompilacją nie uda, to nie ma co panikować, Lazarus jest taki sprytny, że zabezpiecza swoją ostatnio działająca binarkę i jest do czego wrócić. No chyba że mamy zupełnie nakombinowane w środowisku, to wtedy R.I.P.

#slowanawiatr
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
___________________________________________ ____ ___ __ _ _ _ _
J​eżeli dadzą ci papier w linie, pisz w poprzek. Juan Ramón Jiménez

Wróć do „Inne języki programowania”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 3 gości