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;
Delphi FMX Grid Renklendirme

Delphi Firemonkey string grid renklendirme kodu

procedure TForm.StringGrid1DrawColumnCell(Sender: TObject;
const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;
const Row: Integer; const Value: TValue; const State: TGridDrawStates);
 
begin
 aRowColor := TBrush.Create(TBrushKind.Solid, TAlphaColors.Alpha);
 
if Sartim > 0 then
  aRowColor.Color := TAlphaColorRec.Aqua
else
if Sartim  = 0 Then
  ARowColor.Color := TAlphaColorRec.Lime
else
if Sartim  <  0 then
  aRowColor.Color := TAlphaColorRec.Aliceblue;
 
aNewRectF := Bounds;
aNewRectF.Inflate(3, 3);
Canvas.FillRect(aNewRectF, 0, 0, [], 1, aRowColor);
Column.DefaultDrawCell(Canvas, Bounds, Row, Value, State);
 
aRowColor.free;
 
 
 
end;
Delphi JSON Class Örnek

Delphi ile json işlemlerinde class oluşturarak uygulamaya dahil edilmesi ve kullanımı

öncelikle bir json formatında dosyaya ihtiyacımız var bunun https://www.json-generator.com/ adresinden bir json oluşturacağım

generate butonuna basarak json oluşturma işlemini tamamlıyorum ve dowloand JSON file butonu ile dosyayı indiriyorum

dosyamı indirdikten sonra https://jsontodelphi.com/ adresinden oluşturmus olduğum Json dosyama uygun bir şekilde class oluşturmasını istiyorum burada json verilerimizi ekliyoruz ve generate butonuna basıyoruz

Json class ımız oluşturduktan sonra aşağıdaki şekilde pencere açılıyor ve classlarımızı indiriyoruz

Dosyalarımızı indirip kaydettikden sonra Delphi de yeni bir uygulama oluşturup classlarımızı projemize ekliyoruz

projemize ekledikten sonra uses satırına bu iki class ı ekliyerek işlemlere başlıyabiliriz

unit AnaFormU;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
  TForm3 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;



implementation

{$R *.dfm}

uses Pkg.Json.DTO, RootUnit;

end.

projedeki kodlarımız bu şekilde olması gerekli dosyalarımızı ekledikten sonra

daha sonra forma bir adet memo ve bir adet buton ekliyorum. Bu kullanım isteğine göre direk dosyayı da okuyup alabilirsiniz farklı yöntemlerde kullanılabiliriz.

eklediğim memo nesnesine json verimi ekliyorum

procedure TForm3.Button1Click(Sender: TObject);
var
  JSonRoot : TRootDTO;
  I: Integer;
  Y: Integer;
begin
  JSonRoot := TRootDTO.Create;
  try
    JSonRoot.AsJson := Memo1.Text;
    For I := 0 to JSonRoot.Items.Count -1 do // ana root un altındaki veriler için kurulan döngü
    Begin
      ShowMessage(JSonRoot.Items[I].About);

      For Y := 0 to JSonRoot.Items[I].Friends.Count -1 do  // alt kırılımdaki veriler için kurulan döngü
      Begin
         ShowMessage(JSonRoot.Items[I].Friends.Items[Y].Name);
      End;
    End;
  finally
    JSonRoot.Free;
  end;
end;

butonumuz altında eklediğim kodlar ile json nesnelerine istediğimiz gibi ulaşabiliriz ve buradan sonra hangi işlemleri yaptırmak istiyorsak o kodları yazıp istediğimiz gibi kullanabiliriz.

Rest yönteminde de aynı yapı kullanılabilir.

örnek proje dosyalarını indirmek için : https://disk.yandex.com.tr/d/vNHwOxFThIMbgQ

Json Dosya

[
  {
    "_id": "609f90fdb6183a5e4b5f9c47",
    "index": 0,
    "guid": "52597634-ea2b-4977-a4cf-4ee6283cb035",
    "isActive": false,
    "balance": "$3,217.24",
    "picture": "http://placehold.it/32x32",
    "age": 33,
    "eyeColor": "blue",
    "name": "Cummings Mcgee",
    "gender": "male",
    "company": "FUELTON",
    "email": "cummingsmcgee@fuelton.com",
    "phone": "+1 (870) 434-2176",
    "address": "235 Linwood Street, Coloma, Northern Mariana Islands, 8966",
    "about": "Ut et dolor mollit aliquip et aute labore ea ut exercitation amet occaecat ex. Laboris sunt mollit nulla mollit est ea excepteur sint ex dolore id aliqua. Non laborum ipsum sit reprehenderit ullamco. Culpa velit ullamco aute dolor. Velit sunt incididunt amet elit consectetur excepteur amet ex mollit eu sunt eiusmod.\r\n",
    "registered": "2018-12-28T11:52:08 -03:00",
    "latitude": -44.755947,
    "longitude": 6.985219,
    "tags": [
      "labore",
      "eiusmod",
      "magna",
      "adipisicing",
      "occaecat",
      "consectetur",
      "id"
    ],
    "friends": [
      {
        "id": 0,
        "name": "Taylor May"
      },
      {
        "id": 1,
        "name": "Zimmerman Conner"
      },
      {
        "id": 2,
        "name": "Casey Howell"
      }
    ],
    "greeting": "Hello, Cummings Mcgee! You have 5 unread messages.",
    "favoriteFruit": "apple"
  },
  {
    "_id": "609f90fd768c4ddf28327448",
    "index": 1,
    "guid": "bf240ca4-5264-4b98-8c83-1e1f2271022f",
    "isActive": true,
    "balance": "$2,203.26",
    "picture": "http://placehold.it/32x32",
    "age": 39,
    "eyeColor": "green",
    "name": "Chandler Richards",
    "gender": "male",
    "company": "LUNCHPAD",
    "email": "chandlerrichards@lunchpad.com",
    "phone": "+1 (863) 596-2946",
    "address": "842 Cumberland Walk, Barclay, Wisconsin, 5437",
    "about": "Ea eu ullamco nostrud laborum eu id elit sint velit. Aute cillum veniam sit sunt. Commodo do non adipisicing in duis minim ut ullamco. Dolore irure fugiat quis officia ad laboris quis incididunt. Id enim nisi irure Lorem. Sunt cillum minim ipsum consequat sunt voluptate ex ullamco ea fugiat labore commodo culpa. Magna nisi veniam non laborum dolore quis laboris amet proident ipsum amet est velit.\r\n",
    "registered": "2016-07-05T03:43:22 -03:00",
    "latitude": -78.387974,
    "longitude": 122.367721,
    "tags": [
      "pariatur",
      "est",
      "sint",
      "nisi",
      "ex",
      "proident",
      "ipsum"
    ],
    "friends": [
      {
        "id": 0,
        "name": "Brandi Cervantes"
      },
      {
        "id": 1,
        "name": "Bird Taylor"
      },
      {
        "id": 2,
        "name": "Shields Lynch"
      }
    ],
    "greeting": "Hello, Chandler Richards! You have 4 unread messages.",
    "favoriteFruit": "banana"
  },
  {
    "_id": "609f90fd565c87fb4bc0cf08",
    "index": 2,
    "guid": "48d47780-50e6-40f7-be71-11288b87cd8f",
    "isActive": false,
    "balance": "$3,285.38",
    "picture": "http://placehold.it/32x32",
    "age": 31,
    "eyeColor": "blue",
    "name": "Noble Gallagher",
    "gender": "male",
    "company": "REALMO",
    "email": "noblegallagher@realmo.com",
    "phone": "+1 (880) 492-2817",
    "address": "946 Central Avenue, Blandburg, Michigan, 2916",
    "about": "Sunt officia qui nulla aute cillum. Irure aliqua do enim do irure dolor tempor. Aute aliquip consectetur deserunt sint tempor aute commodo ea consectetur pariatur adipisicing ullamco et velit. Qui aliqua aliqua minim elit est laboris veniam duis occaecat consectetur. Qui proident laborum culpa consequat nulla elit sit anim consequat. Ea excepteur elit nulla nisi est ipsum esse commodo Lorem voluptate. Incididunt nisi minim eiusmod aliqua.\r\n",
    "registered": "2014-02-04T01:52:38 -02:00",
    "latitude": -81.255892,
    "longitude": -125.918893,
    "tags": [
      "sunt",
      "magna",
      "sunt",
      "consequat",
      "pariatur",
      "esse",
      "non"
    ],
    "friends": [
      {
        "id": 0,
        "name": "Petra Waters"
      },
      {
        "id": 1,
        "name": "Wiley James"
      },
      {
        "id": 2,
        "name": "Emerson Fulton"
      }
    ],
    "greeting": "Hello, Noble Gallagher! You have 3 unread messages.",
    "favoriteFruit": "strawberry"
  },
  {
    "_id": "609f90fd5f4cc2c9fa433416",
    "index": 3,
    "guid": "a2ee1e27-e694-414a-9197-1b0fc3f83e84",
    "isActive": true,
    "balance": "$1,092.75",
    "picture": "http://placehold.it/32x32",
    "age": 31,
    "eyeColor": "blue",
    "name": "Edna Head",
    "gender": "female",
    "company": "CALLFLEX",
    "email": "ednahead@callflex.com",
    "phone": "+1 (848) 598-3042",
    "address": "718 Crooke Avenue, Dargan, Montana, 4841",
    "about": "Eiusmod ut sunt duis reprehenderit velit id cillum minim. Commodo labore eu nulla ut proident dolor. Culpa reprehenderit elit proident eu officia anim dolore ut aute ipsum reprehenderit laborum enim. Nulla proident esse occaecat incididunt qui proident voluptate esse. Irure aliqua nisi in magna consectetur pariatur eiusmod aliquip est tempor. Lorem mollit eu reprehenderit nulla fugiat.\r\n",
    "registered": "2016-12-08T04:03:57 -03:00",
    "latitude": -55.840006,
    "longitude": 123.928552,
    "tags": [
      "ea",
      "nostrud",
      "occaecat",
      "occaecat",
      "laborum",
      "ipsum",
      "anim"
    ],
    "friends": [
      {
        "id": 0,
        "name": "Norton Boyle"
      },
      {
        "id": 1,
        "name": "Gena Spears"
      },
      {
        "id": 2,
        "name": "Billie Franks"
      }
    ],
    "greeting": "Hello, Edna Head! You have 5 unread messages.",
    "favoriteFruit": "apple"
  },
  {
    "_id": "609f90fd8b0843359e1aec3d",
    "index": 4,
    "guid": "f6203fa2-8663-4839-8f6f-057b23666e66",
    "isActive": true,
    "balance": "$2,409.46",
    "picture": "http://placehold.it/32x32",
    "age": 31,
    "eyeColor": "brown",
    "name": "Holden Dale",
    "gender": "male",
    "company": "STRALOY",
    "email": "holdendale@straloy.com",
    "phone": "+1 (888) 536-3882",
    "address": "692 Russell Street, Canby, Wyoming, 8722",
    "about": "Est sint laboris labore et cillum velit Lorem excepteur id labore adipisicing incididunt. Mollit mollit aute ipsum exercitation exercitation elit non Lorem ipsum laborum anim. Non incididunt eu qui consequat elit ea cillum consectetur aute minim do cillum minim aute. Laborum incididunt id nisi voluptate in. Duis est esse mollit proident. Dolor consequat ut non magna dolore.\r\n",
    "registered": "2015-11-08T12:25:28 -03:00",
    "latitude": 78.775663,
    "longitude": -132.169324,
    "tags": [
      "consectetur",
      "commodo",
      "labore",
      "ea",
      "incididunt",
      "tempor",
      "excepteur"
    ],
    "friends": [
      {
        "id": 0,
        "name": "Snider Koch"
      },
      {
        "id": 1,
        "name": "Nina Mcknight"
      },
      {
        "id": 2,
        "name": "Clay Bullock"
      }
    ],
    "greeting": "Hello, Holden Dale! You have 2 unread messages.",
    "favoriteFruit": "banana"
  },
  {
    "_id": "609f90fd7da5851dc6d4e963",
    "index": 5,
    "guid": "23d4bb4e-70ab-4c5e-99d0-98a7f9d25bce",
    "isActive": false,
    "balance": "$1,836.32",
    "picture": "http://placehold.it/32x32",
    "age": 28,
    "eyeColor": "green",
    "name": "Bradshaw Randall",
    "gender": "male",
    "company": "KENGEN",
    "email": "bradshawrandall@kengen.com",
    "phone": "+1 (955) 517-3942",
    "address": "485 Morgan Avenue, Brenton, Idaho, 4739",
    "about": "Labore voluptate cupidatat id ea Lorem dolore ipsum qui. Elit aute et dolore enim nulla eu nisi incididunt dolore officia tempor. Cillum veniam consequat cillum nisi in.\r\n",
    "registered": "2019-02-06T07:16:15 -03:00",
    "latitude": 75.626382,
    "longitude": -27.711717,
    "tags": [
      "labore",
      "consequat",
      "incididunt",
      "ex",
      "incididunt",
      "voluptate",
      "cupidatat"
    ],
    "friends": [
      {
        "id": 0,
        "name": "Cooke Hancock"
      },
      {
        "id": 1,
        "name": "Suarez Hood"
      },
      {
        "id": 2,
        "name": "Bates Leblanc"
      }
    ],
    "greeting": "Hello, Bradshaw Randall! You have 7 unread messages.",
    "favoriteFruit": "apple"
  },
  {
    "_id": "609f90fd70cc6cec2e8ce707",
    "index": 6,
    "guid": "25feec15-c3f9-4a79-950b-88e76a78b675",
    "isActive": false,
    "balance": "$3,214.59",
    "picture": "http://placehold.it/32x32",
    "age": 24,
    "eyeColor": "green",
    "name": "Darlene Glover",
    "gender": "female",
    "company": "KROG",
    "email": "darleneglover@krog.com",
    "phone": "+1 (959) 522-2797",
    "address": "631 Gardner Avenue, Crisman, Louisiana, 3576",
    "about": "Quis pariatur cillum cillum sint et consectetur occaecat velit laboris elit et mollit. Veniam ut velit id enim consequat consequat id officia aliquip anim consequat qui. Quis cillum in ipsum consectetur aliqua exercitation voluptate laborum in laborum eu minim consequat. Nisi occaecat enim ad aute sit incididunt do ullamco et nulla. Nulla officia in mollit duis consectetur culpa excepteur. Dolor ullamco est commodo magna irure occaecat eu excepteur exercitation dolore duis officia. Cillum aliquip id sunt sunt in labore anim mollit laboris est dolor exercitation consectetur.\r\n",
    "registered": "2018-07-03T03:10:32 -03:00",
    "latitude": -42.579361,
    "longitude": 178.507411,
    "tags": [
      "ea",
      "do",
      "incididunt",
      "magna",
      "est",
      "ex",
      "reprehenderit"
    ],
    "friends": [
      {
        "id": 0,
        "name": "Rosalie Knight"
      },
      {
        "id": 1,
        "name": "Mccoy King"
      },
      {
        "id": 2,
        "name": "Darla Morin"
      }
    ],
    "greeting": "Hello, Darlene Glover! You have 3 unread messages.",
    "favoriteFruit": "apple"
  }
]
Delphi Array Fonksiyon

Delphi ile array birden fazla veri döndürmeye yarar

type
  TMyArray = array[1..10] of string; // Genel bir array türü tanımlıyoruz bu türü göndereceğiniz bilgilere göre boyutunu ayarlıyabilirsiniz


Function TAnaF.Get_StokBilgi(StokKodu:String):TMyArray;
var
  Qry: TUniQuery;
Begin
  Qry := TuniQuery.Create(Self);
  Qry.Connection := EtaMasterDB;
  DataSetAcUnidac(Qry,'STKKART','STKKOD,STKCINSI,STKBIRIM,STKGENKDVNO','STKKOD = ' + QuotedStr(StokKodu));
  Result[1] := Qry.FieldByName('STKCINSI').AsString;
  Result[2] := Qry.FieldByName('STKBIRIM').AsString;
  Result[3] := Qry.FieldByName('STKGENKDVNO').AsString;

  Qry.Close;
  FreeAndNil(Qry);

End;

Kullanımı


procedure TAnaF.Button1Click(Sender: TObject);
var
   StokBilgi : TMyArray;
begin
  StokBilgi := Get_StokBilgi(Fatura_QStok_Kodu.AsString);
  ShowMessage(StokBilgi[1]);
  ShowMessage(StokBilgi[2]);
  ShowMessage(StokBilgi[3]);
end;

Delphi FTP dosya gönderme
function TAnaF.FtpDosyaGonder (IdFTP : TIdFTP; SrcDosya, DesDosya:TFileName; RemoteDir: String;FtpAdr,FtpUser,FtpSifre:String ):string;
var
  FtpC: TIdFTP;
  yil: Word;
  ay: Word;
  gun: Word;
begin
  DecodeDate(date,yil,ay,gun);
  FtpC := TIdFTP.Create(Self);
  Result := '';
  with FtpC do
  Begin
    Disconnect;

    AutoLogin     :=  IdFTP.AutoLogin;
    AutoIssueFEAT := IdFTP.AutoIssueFEAT;
    IPVersion     := IdFTP.IPVersion;
    TransferType  := IdFTP.TransferType;
    ReadTimeout   := IdFTP.ReadTimeout;
    ListenTimeout := IdFTP.ListenTimeout;
    Passive       := IdFTP.Passive;

    Host      := FtpAdr;
    Username  := FtpUser;
    Password  := FtpSifre;
    Connect;
  End;

     Application.ProcessMessages;
  If FtpC.Connected then
  begin
    FtpC.ChangeDir(RemoteDir);

     try
        FtpC.MakeDir(RemoteDir+'/'+yil.ToString);     // Klasör oluşturmayı dene
        FtpC.ChangeDir(RemoteDir+'/'+yil.ToString);  // oluşturulan klasöre bağlan
      except
        FtpC.ChangeDir(RemoteDir+'/'+yil.ToString); // eğer klasör varsa klasöre git 
      end;

    Try
      Application.ProcessMessages;
 //     FtpC.TransferType := ftBinary; // Uses kısmına IdFTPCommon
 eklenmeli
      FtpC.Put(DesDosya,SrcDosya, False);
    Finally
      Result := SiteURL.Text+'/'+yil.ToString+'/'+SrcDosya; //gönderilen yıl bazlı klasöre yükler
      FtpC.Quit;
    end;
        Application.ProcessMessages;
  end;
  FtpC.Disconnect;
  FreeAndNil(FtpC);


end;

Kullanımı

procedure TAnaF.Button1Click(Sender: TObject);
var
    dosya: string;
    Mesaj: string;
begin
  dosya :='0860472212.png';
  Mesaj := FtpDosyaGonder(FtpConnection,dosya,TempFileYolu + dosya,FtpYol.Text,FTPAdres.Text,FtpKullanici.Text,FtpSifre.Text);
  ShowMessage(Mesaj);
end;

Delpi Xing QR Code Oluşturma

Uses kısmına DelphiZXIngQRCode eklenmeli ve DelphiZXIngQRCode.pas dosyası projeye dahil edilmeli

procedure TAnaF.QROlustur(QrData:String;);
var
  QRCode: TDelphiZXingQRCode;
  Row, Column: Integer;
    Bitmap: TBitmap;
  Source: TRect;
  Dest: TRect;
  Png: TPngImage;
begin
  sleep(100);
  QRCode := TDelphiZXingQRCode.Create;
  try
    QRCode.Data := QrData;
    QRCode.Encoding := TQRCodeEncoding(5);
    QRCode.QuietZone := StrToIntDef('4', 4);
    QRCodeBitmap.SetSize(QRCode.Rows, QRCode.Columns);
    for Row := 0 to QRCode.Rows - 1 do
    begin
      for Column := 0 to QRCode.Columns - 1 do
      begin
        if (QRCode.IsBlack[Row, Column]) then
        begin
          QRCodeBitmap.Canvas.Pixels[Column, Row] := clBlack;
        end else
        begin
          QRCodeBitmap.Canvas.Pixels[Column, Row] := clWhite;
        end;
      end;
    end;
  finally
    QRCode.Free;
  end;

  PaintBox1.Repaint;
  Application.ProcessMessages;
  sleep(100);
  Application.ProcessMessages;
  

  Bitmap := TBitmap.Create;

  try
    with Bitmap do
    begin
      Width := 170;
      Height := 170;
      Dest := Rect(0, 0, Width, Height);
    end;
    with PaintBox1 do
      Source := Rect(0, 0, Width, Height);
      Bitmap.Canvas.CopyRect(Dest, PaintBox1.Canvas, Source);
      Png :=  TPngImage.Create;
          Application.ProcessMessages;
      Png.Assign(Bitmap);
          Application.ProcessMessages;
      png.SaveToFile(KayitEdilecekKlasorYolu+'dosyaadi.png');
        Png.Free;
  finally
    Bitmap.Free;
        Application.ProcessMessages;

  end;
end;

Kullanımı

QROlustur('QrCode içine gelecek string data');