Yorumları: 910
Konuları: 69
Kayıt Tarihi: 30-06-2017
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 8.494 Üstad
31-10-2017, Saat: 15:09
(Son Düzenleme: 31-10-2017, Saat: 16:27, Düzenleyen: uparlayan.
Sebep: Soru genişletildi.
)
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 SetConsoleCursorPosition ve SetConsoleTextAttribute 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?
YouTube Delphi Tips
"Mantıklı adam kendini dünyaya uyarlar; mantıksız adam ise dünyayı kendine uydurmakta inat eder. Bu nedenle, tüm ilerleme o inatçı adama bağlıdır." - George Bernard Shaw
Yorumları: 1.572
Konuları: 88
Kayıt Tarihi: 09-08-2016
Rep Puanı: 13.841 Üstad
Deneme şansım yok ama ANSI Escape sequences 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 
Örneğin; kırmızı Selam yazmak için:
WriteLn(#27'[31mSelam');
There's no place like 127.0.0.1
Yorumları: 4.249
Konuları: 381
Kayıt Tarihi: 07-07-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 17.135 Üstad
31-10-2017, Saat: 17:05
(Son Düzenleme: 31-10-2017, Saat: 17:25, Düzenleyen: Fesih ARSLAN.)
(31-10-2017, Saat: 16:54)SimaWB Adlı Kullanıcıdan Alıntı: Deneme şansım yok ama ANSI Escape sequences 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 
Ö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.
DelphiCan'dır!
Yorumları: 910
Konuları: 69
Kayıt Tarihi: 30-06-2017
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 8.494 Üstad
31-10-2017, Saat: 17:11
(Son Düzenleme: 31-10-2017, Saat: 20:27, Düzenleyen: uparlayan.)
Açıkçası böyle bir çözüm beklemiyordum, ilginç oldu, teşekkür ederim.
YouTube Delphi Tips
"Mantıklı adam kendini dünyaya uyarlar; mantıksız adam ise dünyayı kendine uydurmakta inat eder. Bu nedenle, tüm ilerleme o inatçı adama bağlıdır." - George Bernard Shaw
Yorumları: 910
Konuları: 69
Kayıt Tarihi: 30-06-2017
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 8.494 Üstad
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?
YouTube Delphi Tips
"Mantıklı adam kendini dünyaya uyarlar; mantıksız adam ise dünyayı kendine uydurmakta inat eder. Bu nedenle, tüm ilerleme o inatçı adama bağlıdır." - George Bernard Shaw
Yorumları: 4.249
Konuları: 381
Kayıt Tarihi: 07-07-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 17.135 Üstad
31-10-2017, Saat: 18:28
(Son Düzenleme: 31-10-2017, Saat: 18:30, Düzenleyen: Fesih ARSLAN.)
(31-10-2017, Saat: 18:14)uparlayan Adlı Kullanıcıdan Alıntı: 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?
Geriye Windows testi kaldı, onu da bir zahmet siz yapın.
DelphiCan'dır!
Yorumları: 910
Konuları: 69
Kayıt Tarihi: 30-06-2017
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 8.494 Üstad
31-10-2017, Saat: 18:38
(Son Düzenleme: 31-10-2017, Saat: 20:47, Düzenleyen: uparlayan.
Sebep: windows testi ve resim eklendi
)
Yoldayım üstat, yorarmıydım yoksa
GÜNCELLEME
Windows'ta maya tutmadı
YouTube Delphi Tips
"Mantıklı adam kendini dünyaya uyarlar; mantıksız adam ise dünyayı kendine uydurmakta inat eder. Bu nedenle, tüm ilerleme o inatçı adama bağlıdır." - George Bernard Shaw
Yorumları: 910
Konuları: 69
Kayıt Tarihi: 30-06-2017
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 8.494 Üstad
31-10-2017, Saat: 22:13
(Son Düzenleme: 31-10-2017, Saat: 23:14, Düzenleyen: uparlayan.
Sebep: Teşekkür eklendi.
)
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...
SimaWB'e ayrıca teşekkürler.
YouTube Delphi Tips
"Mantıklı adam kendini dünyaya uyarlar; mantıksız adam ise dünyayı kendine uydurmakta inat eder. Bu nedenle, tüm ilerleme o inatçı adama bağlıdır." - George Bernard Shaw
Yorumları: 1.572
Konuları: 88
Kayıt Tarihi: 09-08-2016
Rep Puanı: 13.841 Üstad
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
Yorumları: 357
Konuları: 30
Kayıt Tarihi: 10-07-2017
Aktif Kullandığınız Delphi Sürümü:
- Delphi 10.3
- Lazarus / FPC
Rep Puanı: 4.215 Uzman
31-10-2017, Saat: 22:52
(Son Düzenleme: 31-10-2017, Saat: 23:03, Düzenleyen: Fesih ARSLAN.)
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"
|