Delphi Json veri Alma

Qr-code lar da oluşan verileri okumak için aşağıdaki kodlar yardımcı olacaktır

aşağıdaki örnek bir e-irsaliye de bulunan qr-code verisinin içindeki almak için örneklendirilmiştir

uses System.JSON;

procedure TForm3.Button1Click(Sender: TObject);
var
  jsonData: TJSONObject;
begin
  // JSON veriyi bir TJSONObject nesnesine çözümle
  jsonData := TJSONObject.ParseJSONValue(Memo1.Lines.Text) as TJSONObject;

  if Assigned(jsonData) then
  begin
    try
      // ettn değerini al
      edit1.Text := jsonData.GetValue('ettn').Value;
      edit2.Text := jsonData.GetValue('vkntckn').Value;
      edit3.Text := jsonData.GetValue('avkntckn').Value;
      edit4.Text := jsonData.GetValue('senaryo').Value;
      edit5.Text := jsonData.GetValue('tip').Value;
      edit6.Text := jsonData.GetValue('tarih').Value;
      edit7.Text := jsonData.GetValue('no').Value;
      edit8.Text := jsonData.GetValue('sevktarihi').Value;
      edit9.Text := jsonData.GetValue('sevkzamani').Value;
      edit10.Text := jsonData.GetValue('tasiyicivkn').Value;
      edit11.Text := jsonData.GetValue('plaka').Value;


    finally
      jsonData.Free;
    end;
  end
  else
  begin
    ShowMessage('JSON Verisi Çözümlenemedi.');
  end;
end;

Örnek Programı İndirmek için aşağıdaki bağlantıyı kullanınız

Kaynak Kodları İndir

Delphi Web Browser Yazdırma İşlemleri

procedure TForm1.Button1Click(Sender: TObject);
begin
  WebBrowser1.Navigate(‘https://ahmetaydinlik.com/‘);
end;

// Yazdır Dialog Penceresi Açmadan Yazdırma

procedure TForm1.Button2Click(Sender: TObject);
var
  vaIn, vaOut: OleVariant;
begin
  WebBrowser1.ControlInterface.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER,
    vaIn, vaOut);
end;

// Yazdırma Dialog Penceres Açarak Yazdırma

procedure TForm1.Button3Click(Sender: TObject);
var
  vaIn, vaOut: OleVariant;
begin
  WebBrowser1.ControlInterface.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER,
    vaIn, vaOut);
end;

// Önizleme

procedure TForm1.Button4Click(Sender: TObject);
var
  vaIn, vaOut: OleVariant;
begin
  WebBrowser1.ControlInterface.ExecWB(OLECMDID_PRINTPREVIEW,
    OLECMDEXECOPT_DONTPROMPTUSER, vaIn, vaOut);
end;

// Sayfa ayarları dialogu açarak

procedure TForm1.Button5Click(Sender: TObject);
var
  vaIn, vaOut: OleVariant;
begin
  WebBrowser1.ControlInterface.ExecWB(OLECMDID_PAGESETUP, OLECMDEXECOPT_PROMPTUSER,
    vaIn, vaOut);
end;

Oracle Bağlantı Ayarları

Oracle Bağlantısını yapmak için Oracle Client Uygulamasını versiyona göre indiriyoruz

benim Kullanacağım Client 11g için dir

win64_11gR2_client

Client Uygulaması İndirdikten sonra içersindeki setup çalıştırıp

administrator seçip kuruluma devam edin

Kurulum bittikten sonra

Net Configrasyon Asistanı Çalıştıştırıp aşağıdaki adımlara göre devam ediyoruz

Aşağıdaki alan da Servis Adımızı giriyoruz

Standart post kullanıyorsanız portu değiştirmenize gerek yok farklı bir port kullanıyorsanız alttaki seçeneği seçerek manuel port girişi yapabilirsiniz

bu alana geldikten sonra bağlantı testi yapmak istediğimiz soruyor

change login diyerek kullanıcı bilgilerimiz giriyoruz

testiniz başarılı olduktan sonra client uygulamamız kuruldu

Başlat menüsünden sistem ortam değişkenleri açarak

Ortam Değişkenlerine giriyoruz

ORACLE_HOME değişkenini ekliyoruz değer olarak client uygulamasının yolunu gösteriyoruz

tnsname.ora dosyamızı düzenledikten sonra bağlantı sağlayabiliyoruz

Font Style Stringe Çevirme ve String i Font Style Çevirme
function FontStyletoStr(St: TFontStyles): string;
var
  S: string;
begin
  S := '';
  if St = [fsbold] then S := 'Kalın'
  else if St = [fsItalic] then S := 'İtalik'
  else if St = [fsStrikeOut] then S := 'Üstu Çizgili'
  else if St = [fsUnderline] then S := 'Altı Çizgili'

  else if St = [fsbold, fsItalic] then S := 'Kalın İtalik'
  else if St = [fsBold, fsStrikeOut] then S := 'Kalın, Üstü Çizgili'
  else if St = [fsBold, fsUnderline] then S := 'Kalın, Altı Çizlili'
  else if St = [fsbold,fsItalic, fsStrikeOut] then S := 'Kalın İtalic Üstü Çizgili'
  else if St = [fsBold, fsUnderline,fsStrikeOut] then S := 'Kalın Altı Çizgili Üstü Çizgili'
  else if St = [fsbold,fsItalic, fsUnderline] then S := 'Kalın İtalic Altı Çizgili'
  else if St = [fsItalic, fsStrikeOut] then S := 'İtalik Üstü Çizgili'
  else if St = [fsItalic,fsUnderline] then S := 'İtalik Altı Çizgili'
  else if St = [fsUnderLine,fsStrikeOut] then S := 'Altı Üstü Çizgili'
  else if St = [fsItalic,fsStrikeOut] then S := 'İtalik Altı Çizgili';
  Result := S;
end;

function Pnn_StrtoFontStyle(St: string): TFontStyles;
var
  S: TfontStyles;
begin
  S  := [];

  if St = 'Kalın' then S :=[fsbold]
  else if St = 'İtalik'  then S :=[fsItalic]
  else if St = 'Üstu Çizgili' then S :=[fsStrikeOut]
  else if St = 'Altı Çizgili' then S := [fsUnderline]

  else if St = 'Kalın İtalik' then S :=[fsbold,fsItalic]
  else if St = 'Kalın, Üstü Çizgili' then S :=[fsBold, fsStrikeOut]
  else if St = 'Kalın, Altı Çizlili' then S :=[fsBold, fsUnderline]
  else if St = 'Kalın İtalic Üstü Çizgili' then S :=[fsbold,fsItalic, fsStrikeOut]
  else if St = 'Kalın İtalic Altı Çizgili' then S := [fsbold,fsItalic, fsUnderline]
  else if St = 'Kalın Altı Çizgili Üstü Çizgili' then S :=[fsBold, fsUnderline,fsStrikeOut]

  else if St = 'İtalik Üstü Çizgili' then S :=[fsItalic, fsStrikeOut]
  else if St = 'İtalik Altı Çizgili'  then S :=[fsItalic,fsUnderline]
  else if St = 'Altı Üstü Çizgili' then S := [fsUnderLine,fsStrikeOut]
  else if St = 'İtalik Altı Çizgili' then S := [fsItalic,fsStrikeOut];
  Result := S;
end;

Kullanımı

Font Dialogtaki Seçilen Style ı string e çeviriyoruz
edit1.text :=  FontStyletoStr(FontDialog1.Font.Style);

Edit teki Style ımızı Edit1 in fontuna atıyoruz
Edit1.Font.Style := StrtoFontStyle(Edit1.Text);
Delphi Tutarı Yazıya Çevirme Function
function YaziyaCevir(Rakam:real ):string;
  const
    b1:ARRAY [1..9] of string =
      ('BİR','İKİ','ÜÇ','DÖRT','BEŞ','ALTI','YEDİ','SEKİZ','DOKUZ');
    b2:ARRAY [1..9] of string =
      ('ON','YİRMİ','OTUZ','KIRK','ELLİ','ALTMIŞ','YETMİŞ','SEKSEN','DOKSAN');
    b3:ARRAY [1..6] of string =
      ('KATRİLYON','TRİLYON','MİLYAR','MİLYON','BİN','');
  var
    gr:ARRAY [1..6] of string[3];
    sn:ARRAY [1..6] of string;
    bs:ARRAY [1..3] of integer;
    tutars, tutart, tutark , sonuct, sonuck: string;
    tur,i,l: integer;


  begin
     tutars:=floattostr(Rakam);
     if pos(',',tutars)=0 then tutars:=tutars+',00';
     tutart:=copy(tutars,1,(pos(',',tutars)-1));
     tutark:=copy(tutars,(pos(',',tutars)+1),2);
     tutart:=stringofchar('0',(18-(length(trim(tutart))))) + tutart;
     tutark:=tutark + stringofchar('0',( 2-(length(trim(tutark)))));
     for i:=1 to 6 do gr[i]:=copy(tutart,1+(3*(i-1)),3);

     for l:=1 to 6 do
      begin
        bs[1]:=strtoint(copy(gr[l],1,1));
        if bs[1]<>0 then
          (
            if bs[1]<>1 then
              sn[l]:=sn[l]+b1[bs[1]]+'YÜZ'
            else
              sn[l]:=sn[l]+'YÜZ'
          );
        bs[2]:=strtoint(copy(gr[l],2,1));
        if bs[2]<>0 then sn[l]:=sn[l]+b2[bs[2]];
        bs[3]:=strtoint(copy(gr[l],3,1));
        if bs[3]<>0 then sn[l]:=sn[l]+b1[bs[3]];
        if length(trim(sn[l]))<>0 then sn[l]:=sn[l]+b3[l];
      end;

     if sn[5]='BİRBİN' then sn[5]:='BİN';
     for i:=1 to 6 do sonuct:=sonuct+sn[i];
     if strtoint(copy(tutark,1,1))<> 0 then sonuck:=sonuck + b2[strtoint(copy(tutark,1,1))];
     if strtoint(copy(tutark,2,1))<> 0 then sonuck:=sonuck + b1[strtoint(copy(tutark,2,1))];
     if tur=0 then result:=sonuct + '.TL / ' + sonuck + '.KR ';
     if tur=1 then result:=sonuct + '.TL ';
     if tur=2 then result:=sonuck + '.KR ';
  end;
Delphi Dosya base64 Decode ve Encode

Projemize alttaki kütüphaneleri ekliyoruz

daha sonra formumuza 2 adet buton bir tane filenameedit yada opendialog da olabilir 1 tane de memo ekliyoruz

     
    uses Soap.EncdDecd,System.NetEncoding;

Dosyamızı base64 formatına çevirmek için aşağıdaki kodu kullanıyoruz


procedure TForm3.Button1Click(Sender: TObject);
var
   stream: TMemoryStream;
begin
    stream := TMemoryStream.Create;
     try
           stream.LoadFromFile(JvFilenameEdit1.Text);
           Memo1.Text := EncodeBase64(stream.Memory, stream.Size);
     finally
          stream.Free;
  end;
end;


Base64 olan bir string i dosyaya çevirmek için benim çevirdiğim dosya pdf olduğundan pdf olarak ekledim


procedure TForm3.Button2Click(Sender: TObject);
var
   stream : TmemoryStream;
begin
stream := TmemoryStream.Create;
   stream.write(TNetEncoding.Base64.DecodeStringToBytes(Memo1.Text),
   length(TNetEncoding.Base64.DecodeStringToBytes(Memo1.Text)));
    stream.Position := 0;
   stream.SaveToFile('d:\test2.pdf');
end;


Delphi 10.4 FreeAndNil Hatası Çözümü

Delphi 10.3 olan freeandnil komutunda 10.4 versiyonunda değişikliğe gidilmesinden dolayı sadece Tobject leri gönderebiliyoruz array ları freeandnil olarak kullanamıyoruz

Delphi 10.3 deki FreeAndNil Procedure 
procedure FreeAndNil(var Obj);
{$IF not Defined(AUTOREFCOUNT)}
var
  Temp: TObject;
begin
  Temp := TObject(Obj);
  Pointer(Obj) := nil;
  Temp.Free;
end;
{$ELSE}
begin
  TObject(Obj) := nil;
end;
{$ENDIF}
Delphi 10.4 deki FreeAndNil Procedure 

procedure FreeAndNil(const [ref] Obj: TObject);
{$IF not Defined(AUTOREFCOUNT)}
var
  Temp: TObject;
begin
  Temp := Obj;
  TObject(Pointer(@Obj)^) := nil;
  Temp.Free;
end;
{$ELSE}
begin
  Obj := nil;
end;
{$ENDIF}

çözüm için şöyle bir yol buldum 

procedure AHMET_FreeAndNil(var Obj);
{$IF not Defined(AUTOREFCOUNT)}
var
  Temp: TObject;
begin
  Temp := TObject(Obj);
  Pointer(Obj) := nil;
  Temp.Free;
end;
{$ELSE}
begin
  TObject(Obj) := nil;
end;
{$ENDIF}

10.4 versiyonunda procedure nin ismini değiştirip projeye dahil ettiğimizde AHMET_FreeAndNil(array1); olarak kullanıp arrayları free edebiliyoruz
ASCII Table

ASCII Table

Dec  = Decimal Value
Char = Character

'5' has the int value 53
if we write '5'-'0' it evaluates to 53-48, or the int 5
if we write char c = 'B'+32; then c stores 'b'


Dec  Char                           Dec  Char     Dec  Char     Dec  Char
---------                           ---------     ---------     ----------
  0  NUL (null)                      32  SPACE     64  @         96  `
  1  SOH (start of heading)          33  !         65  A         97  a
  2  STX (start of text)             34  "         66  B         98  b
  3  ETX (end of text)               35  #         67  C         99  c
  4  EOT (end of transmission)       36  $         68  D        100  d
  5  ENQ (enquiry)                   37  %         69  E        101  e
  6  ACK (acknowledge)               38  &         70  F        102  f
  7  BEL (bell)                      39  '         71  G        103  g
  8  BS  (backspace)                 40  (         72  H        104  h
  9  TAB (horizontal tab)            41  )         73  I        105  i
 10  LF  (NL line feed, new line)    42  *         74  J        106  j
 11  VT  (vertical tab)              43  +         75  K        107  k
 12  FF  (NP form feed, new page)    44  ,         76  L        108  l
 13  CR  (carriage return)           45  -         77  M        109  m
 14  SO  (shift out)                 46  .         78  N        110  n
 15  SI  (shift in)                  47  /         79  O        111  o
 16  DLE (data link escape)          48  0         80  P        112  p
 17  DC1 (device control 1)          49  1         81  Q        113  q
 18  DC2 (device control 2)          50  2         82  R        114  r
 19  DC3 (device control 3)          51  3         83  S        115  s
 20  DC4 (device control 4)          52  4         84  T        116  t
 21  NAK (negative acknowledge)      53  5         85  U        117  u
 22  SYN (synchronous idle)          54  6         86  V        118  v
 23  ETB (end of trans. block)       55  7         87  W        119  w
 24  CAN (cancel)                    56  8         88  X        120  x
 25  EM  (end of medium)             57  9         89  Y        121  y
 26  SUB (substitute)                58  :         90  Z        122  z
 27  ESC (escape)                    59  ;         91  [        123  {
 28  FS  (file separator)            60  <         92  \        124  |
 29  GS  (group separator)           61  =         93  ]        125  }
 30  RS  (record separator)          62  >         94  ^        126  ~
 31  US  (unit separator)            63  ?         95  _        127  DEL

Kaynak : https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html

Delphi FMX Mobil de Enter Tuşu İle İlermek

Mobil uygulama klavyedeki Enter tuşuna basınca sonraki işleme yapmak için kullandığım kod

procedure TForm.SifreKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
  Shift: TShiftState);
begin
  if sender is TEdit then
    if Key in [vkReturn] then
      case TEdit(sender).ReturnKeyType   of
        TReturnKeyType.Send : Button1Click(Self);
      end;
end;