Tüm Platformlar için Hızlı Uygulama Geliştirme Kitabı... Delphi

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Linux Cursor Position ve Text Attributte API muadili...
#1
Merhaba,

Bilindiği üzere Tokyo sürümüyle beraber Linux için konsol uygulamaları geliştirebiliyoruz. Windows konsol ortamında imleç pozisyonu ve text renklendirmeleri için Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol ve Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol gibi bazı API'leri kullanıyoruz. Bu API'ler text ekranda ( konsolda / DOS ekranında ) imlecin konumunu  / metnin zemin ve yazı rengini ayarlamaya yarıyor.

Bu API'lerin Linux eşdeğeri hangisidir, nereden bulabilirim?
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
Cevapla
#2
Deneme şansım yok ama Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol kullanılarak belki yapılabilir.(Sanırım Delphi'nin kullandığı Linux derleyicisine bağlı)
Bu yöntemle konsola yazdırmak istediğiniz metin "escape" karakteri ve ardından köşeli parantezle başlamalı. Yukarıdaki linkte renk kodları vs. yazıyor. Denemek lazım Smile
Örneğin; kırmızı Selam yazmak için:
WriteLn(#27'[31mSelam');
There's no place like 127.0.0.1
WWW
Cevapla
#3
(31-10-2017, Saat: 16:54)SimaWB Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlDeneme şansım yok ama Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol kullanılarak belki yapılabilir.(Sanırım Delphi'nin kullandığı Linux derleyicisine bağlı)
Bu yöntemle konsola yazdırmak istediğiniz metin "escape" karakteri ve ardından köşeli parantezle başlamalı. Yukarıdaki linkte renk kodları vs. yazıyor. Denemek lazım Smile
Örneğin; kırmızı Selam yazmak için:
WriteLn(#27'[31mSelam');

Merhaba,
Sizin adınıza bir test ettim. Gayet sağlıklı çalışıyor. 

2017-10-31_17-03-36.png
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#4
Açıkçası Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol bir çözüm beklemiyordum, ilginç oldu, teşekkür ederim.
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
Cevapla
#5
Fesih bey, paylaştığınız ekran görüntüsünde macOS olduğunu görüyorum, rica etsem aynı kodu macOS'da da deneyebilir misiniz?
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
Cevapla
#6
(31-10-2017, Saat: 18:14)uparlayan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlFesih bey, paylaştığınız ekran görüntüsünde macOS olduğunu görüyorum, rica etsem aynı kodu macOS'da da deneyebilir misiniz?

2017-10-31_18-27-47.png

Geriye Windows testi kaldı, onu da bir zahmet siz yapın. Smile
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#7
Yoldayım üstat, yorarmıydım yoksa  Wink



GÜNCELLEME

Windows'ta maya tutmadı

o6V8d9.png
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
Cevapla
#8
Bir sonuca bağlamadan  konuyu bitirmek istemedim. Kaynak olması açısından aşağıdaki kod belki bir gün birinin işine yarar niyetiyle;

program Renkli;

{$APPTYPE CONSOLE}

uses
    System.SysUtils   //  Format
  {$IFDEF MSWINDOWS}  //  Windows ise
  , WinApi.Windows    //  SetConsoleTextAttribute , SetConsoleCursorPosition
  {$ENDIF}
  ;

const
  clBlack         =   0;
  clBlue          =   1;
  clGreen         =   2;
  clCyan          =   3;
  clRed           =   4;
  clMagenta       =   5;
  clBrown         =   6;
  clSilver        =   7;

  {$IFDEF MSWINDOWS}
  clDarkGray      =   8;
  clLightBlue     =   9;
  clLightGreen    =  10;
  clLightCyan     =  11;
  clLightRed      =  12;
  clLightMagenta  =  13;
  clYellow        =  14;
  clWhite         =  15;
  {$ENDIF}

procedure Color(Zemin, Metin: Integer);
begin
  {$IFDEF MSWINDOWS}
    SetConsoleTextAttribute ( GetStdHandle(STD_OUTPUT_HANDLE)
                            , (Zemin * 16) or Metin
                            );
  {$ENDIF}
  {$IFNDEF MSWINDOWS}
    Write( Format(#27'[%d'#27'[%d', [Zemin + 40, Metin + 30] ) );
  {$ENDIF}
end;

procedure CLS;
{$IFDEF MSWINDOWS}
var
  CRT         : THandle;
  Bufinf      : TConsoleScreenBufferInfo;
  ConsoleSize : DWORD;
  NumWritten  : DWORD;
  Koordinat   : TCoord;
{$ENDIF}
begin
  {$IFDEF MSWINDOWS}
    CRT := GetStdHandle(STD_OUTPUT_HANDLE);
    Win32Check(CRT <> INVALID_HANDLE_VALUE);
    Win32Check(GetConsoleScreenBufferInfo(CRT, Bufinf));
    ConsoleSize := Bufinf.dwSize.X * Bufinf.dwSize.Y;
    Koordinat.X := 0;
    Koordinat.Y := 0;
    Win32Check(FillConsoleOutputCharacter(CRT, ' ', ConsoleSize, Koordinat, NumWritten));
    Win32Check(FillConsoleOutputAttribute(CRT, Bufinf.wAttributes, ConsoleSize, Koordinat, NumWritten));
    Win32Check(SetConsoleCursorPosition(CRT, Koordinat));
  {$ENDIF}
  {$IFNDEF MSWINDOWS}
    write(#27'[2J');
  {$ENDIF}
end;

procedure GotoXY(X,Y: Byte);
{$IFDEF MSWINDOWS}
var
  Z: _COORD;
{$ENDIF}
begin
  {$IFDEF MSWINDOWS}
    Z.X := X;
    Z.Y := Y;
    SetConsoleCursorPosition( GetStdHandle(STD_OUTPUT_HANDLE), Z );
  {$ENDIF}
  {$IFNDEF MSWINDOWS}
    Write( Format(#27'[%d;%dH', [X.ToString, Y.ToString]) );
  {$ENDIF}
end;

function Print(aMetin: String): string; overload;
begin
 Result := aMetin;
  Write(Result);
end;

function Print(X, Y: Byte; aMetin: String): string; overload;
begin
 Result := aMetin;
  GotoXY(X, Y);
  Write(Result);
end;

function Print(aMetin: String; const Args: array of const): string; overload;
begin
 Result := format(aMetin, Args);
  Write(Result);
end;

function Print(X, Y: Byte; aMetin: String; const Args: array of const): string; overload;
begin
  GotoXY(X, Y);
 Result := Print(aMetin, Args);
end;

procedure Pencere(aBaslik: AnsiString; X, Y, B, E: Byte; Zemin, Metin: Integer);
var
  I: Integer;
begin
  Color(Zemin, Metin);
  Print(X,Y, '┌%s┐', [StringOfChar('─', E - 2)]);
  for I := 1 to B - 2 
  do  Print(X, Y + I, '│%s│', [StringOfChar(' ', E - 2)]);
  Print(X, Y + I, '└%s┘', [StringOfChar('─', E - 2)]);
  Print(X + 2, Y, '[%s]', [aBaslik]);
end;

var
  I, J, X: Integer;
begin
  CLS;
  Pencere('Bi Pencere', 2, 2, 15, 35, clSilver, clRed);
  Color(clSilver, clGreen);
  Print(4, 4, 'Türkçe Harf Testleri          ');
  Print(4, 5, 'çöğüşiı / ÇÖĞÜŞİI / 0123456789');
  Color(clBlack, clSilver);
  Print(0, 0, '');
  Readln;
end.

Şöyle de bir ekran çıktısı üretiyor...

rJ1MEP.png

SimaWB'e ayrıca teşekkürler.
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
Cevapla
#9
Harika bir sonuçlandırma olmuş. Elinize, emeğinize sağlık.
Forumlarda sıklıkla karşılaştığımız, soru sorup da cevabını alıp gidenlere örnek olur inşallah!
There's no place like 127.0.0.1
WWW
Cevapla
#10
Elinize sağlık .Linux için yazı formatlarını da araya noktalı virgül koyarak ekleyebilirsiniz.Formatlar:
0 Reset all attributes
1 Bright
2 Dim
4 Underscore
5 Blink
7 Reverse
8 Hidden
Örnek:
echo -e "\033[31;4m bu yazı kırmızı ve altıçizili"
Bizi Toprağa Gömdüler Fakat Tohum Olduğumuzu Bilmiyorlardı.
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi ile Linux Uygulama Geliştirme Abdullah ILGAZ 25 4.238 30-07-2018, Saat: 13:11
Son Yorum: Bay_Y
  Linux ShellExecute API Muadili uparlayan 7 796 03-11-2017, Saat: 01:18
Son Yorum: uparlayan
  Hoş Bir Linux Dağıtımı Elementary Os savasabd 3 780 23-10-2017, Saat: 22:56
Son Yorum: nguzeller
  Linux Sunucu Önerisi Fesih ARSLAN 22 2.496 18-06-2017, Saat: 17:19
Son Yorum: nguzeller
Question Linux da Lazarus ve raudus kurup yayınlama masteryoda 1 1.708 07-10-2016, Saat: 02:06
Son Yorum: engerex



Konuyu Okuyanlar: 1 Ziyaretçi