Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Proje Versiyon Bilgisi
#1
Merhabalar, Hazırladığım projenin versiyon bilgisini otomatik olarak forma yazdırmak istiyorum naıl bir yol izlemeliyim.....
Cevapla
#2
unit AppVersion;

{$IFDEF MACOS}
 {$DEFINE APPLE}
{$ENDIF}

{$IFDEF IOS}
 {$DEFINE APPLE}
{$ENDIF}


interface

 function GetApplicationVersion: string;

implementation

{$IFDEF ANDROID}
uses
 FMX.Helpers.Android, FMX.Platform.Android,
 Androidapi.JNI.JavaTypes, Androidapi.Helpers,
 Androidapi.JNI.GraphicsContentViewText,System.SysUtils;
{$ENDIF}
{$IFDEF APPLE}
uses
 {$IFDEF IOS}
 iOSapi.Foundation,
 {$ELSE}
 Macapi.Foundation,
 {$ENDIF}
 Macapi.Helpers,
 Macapi.ObjectiveC,System.SysUtils;
{$ENDIF}
{$IFDEF MSWINDOWS}
uses
 System.Types, System.SysUtils, Windows;
{$ENDIF}


function GetApplicationVersion: string;
{$IFDEF ANDROID}
var
 PackageManager: JPackageManager;
 PackageInfo: JPackageInfo;
begin
 Result := '?';
 try
   PackageManager := TAndroidHelper.Context.getPackageManager; //SharedActivityContext.getPackageManager;
   PackageInfo := PackageManager.getPackageInfo(TAndroidHelper.Context.getPackageName, 0);  //SharedActivityContext.getPackageName, 0);
   Result := JStringToString(PackageInfo.versionName)+'.'+inttostr(PackageInfo.versionCode);
 except
 end;
end;
{$ENDIF}
{$IFDEF IOS}
var
 AppKey: Pointer;
 AppBundle: NSBundle;
 BuildStr : NSString;
begin
 Result := '?';
 try
   AppKey := (StrToNSStr('CFBundleVersion') as ILocalObject).GetObjectID;

   AppBundle := TNSBundle.Wrap(TNSBundle.OCClass.mainBundle);
   BuildStr := TNSString.Wrap(AppBundle.infoDictionary.objectForKey(AppKey));
   Result := UTF8ToString(BuildStr.UTF8String);

 except
 end;
end;
{$ENDIF}
{$IFDEF MSWINDOWS}
var
 sExe: string;
 Size, Handle: DWORD;
 Buffer: TBytes;
 FixedPtr: PVSFixedFileInfo;
begin
 Result := '?';
 try
   sExe := ParamStr(0);
   Size := GetFileVersionInfoSize(PChar(sExe), Handle);
   if (Size = 0) then
     exit; // RaiseLastOSError;
   SetLength(Buffer, Size);
   if not GetFileVersionInfo(PChar(sExe), Handle, Size, Buffer) then
     exit; // RaiseLastOSError;
   if not VerQueryValue(Buffer, '\', Pointer(FixedPtr), Size) then
     exit; // RaiseLastOSError;
   Result := Format('%d.%d.%d.%d',
     [LongRec(FixedPtr.dwFileVersionMS).Hi,  //major
       LongRec(FixedPtr.dwFileVersionMS).Lo,  //minor
       LongRec(FixedPtr.dwFileVersionLS).Hi,  //release
       LongRec(FixedPtr.dwFileVersionLS).Lo]) //build

 except

 end;
end;
{$ENDIF}
{$IFDEF OSX}
var
 AppKey: Pointer;
 AppBundle: NSBundle;
 BuildStr : NSString;
begin
 Result := '?';
 try
   AppKey := (StrToNSStr('CFBundleVersion') as ILocalObject).GetObjectID;

   AppBundle := TNSBundle.Wrap(TNSBundle.OCClass.mainBundle);
   BuildStr := TNSString.Wrap(AppBundle.infoDictionary.objectForKey(AppKey));
   Result := UTF8ToString(BuildStr.UTF8String);

 except
 end;
end;
{$ENDIF}

end.


Kullanım

label1.Caption:='Versiyon : '+ AppVersion.GetApplicationVersion;
Cevapla
#3
Uses  Winapi.Windows;


function GetFileVersion1(exeName : string): string;
const
 c_StringInfo = 'StringFileInfo\040904E4\FileVersion';
var
 n, Len : cardinal;
 Buf, Value : PChar;
begin
 Result := '';
 n := GetFileVersionInfoSize(PChar(exeName),n);
 if n > 0 then begin
   Buf := AllocMem(n);
   try
     GetFileVersionInfo(PChar(exeName),0,n,Buf);
     if VerQueryValue(Buf,PChar(c_StringInfo),Pointer(Value),Len) then begin
       Result := Trim(Value);
     end;
   finally
     FreeMem(Buf,n);
   end;
 end;
end;

Kullanım;

Caption:=GetFileVersion1(ParamStr(0));
Cevapla
#4
cevaplarınız için teşekkürler ancak her iki kodu kullandığımda değer boş geliyor, delphi 10.1 sürümünü kullanıyorum. herhangi bir ayar yapmak gerekiyormu tekrardan sistem üzerinden
Cevapla
#5
Hayırlı sabahlar
Project / Options / Versiyon info dan  
versiyon bilgisini girdiğini varsayarak

 Ben bir procedure tanımladım.


procedure prgversiyon(const AppName: string; var V1, V2, V3, V4: Word);
var
 VerInfoSize, VerValueSize, Dummy: DWORD;
 VerInfo: Pointer;
 VerValue: PVSFixedFileInfo;
begin
 VerInfoSize := GetFileVersionInfoSize(PChar(AppName), Dummy);
 GetMem(VerInfo, VerInfoSize);
 GetFileVersionInfo(PChar(AppName), 0, VerInfoSize, VerInfo);
 VerQueryValue(VerInfo, '', Pointer(VerValue), VerValueSize);

 with VerValue^ do
 begin
   V1 := dwFileVersionMS shr 16;
   V2 := dwFileVersionMS and $FFFF;
   V3 := dwFileVersionLS shr 16;
   V4 := dwFileVersionLS and $FFFF;
 end;
   FreeMem(VerInfo, VerInfoSize);
end;

Kullanımı
procedure Tgiris_frm.FormCreate(Sender: TObject);
var
   V1, V2, V3, V4: word;
Begin
prgversiyon (Application.ExeName, V1, V2, V3,V4);
edt_Versiyon.Text:= Format('%d.%d.%d.%d', [V1, V2, V3,V4]);

Test edilmiştir.
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#6
(23-12-2022, Saat: 09:08)cinarbil Adlı Kullanıcıdan Alıntı: Hayırlı sabahlar
Project / Options / Versiyon info dan  
versiyon bilgisini girdiğini varsayarak

 Ben bir procedure tanımladım.


procedure prgversiyon(const AppName: string; var V1, V2, V3, V4: Word);
var
 VerInfoSize, VerValueSize, Dummy: DWORD;
 VerInfo: Pointer;
 VerValue: PVSFixedFileInfo;
begin
 VerInfoSize := GetFileVersionInfoSize(PChar(AppName), Dummy);
 GetMem(VerInfo, VerInfoSize);
 GetFileVersionInfo(PChar(AppName), 0, VerInfoSize, VerInfo);
 VerQueryValue(VerInfo, '', Pointer(VerValue), VerValueSize);

 with VerValue^ do
 begin
   V1 := dwFileVersionMS shr 16;
   V2 := dwFileVersionMS and $FFFF;
   V3 := dwFileVersionLS shr 16;
   V4 := dwFileVersionLS and $FFFF;
 end;
   FreeMem(VerInfo, VerInfoSize);
end;

Kullanımı
procedure Tgiris_frm.FormCreate(Sender: TObject);
var
   V1, V2, V3, V4: word;
Begin
prgversiyon (Application.ExeName, V1, V2, V3,V4);
edt_Versiyon.Text:= Format('%d.%d.%d.%d', [V1, V2, V3,V4]);

Test edilmiştir.

Bu hatayı veriyor


Ek Dosyalar Resimler
   
Cevapla
#7
(23-12-2022, Saat: 13:28)cvheneburi Adlı Kullanıcıdan Alıntı:
(23-12-2022, Saat: 09:08)cinarbil Adlı Kullanıcıdan Alıntı: Hayırlı sabahlar
Project / Options / Versiyon info dan  
versiyon bilgisini girdiğini varsayarak

 Ben bir procedure tanımladım.


procedure prgversiyon(const AppName: string; var V1, V2, V3, V4: Word);
var
 VerInfoSize, VerValueSize, Dummy: DWORD;
 VerInfo: Pointer;
 VerValue: PVSFixedFileInfo;
begin
 VerInfoSize := GetFileVersionInfoSize(PChar(AppName), Dummy);
 GetMem(VerInfo, VerInfoSize);
 GetFileVersionInfo(PChar(AppName), 0, VerInfoSize, VerInfo);
 VerQueryValue(VerInfo, '', Pointer(VerValue), VerValueSize);

 with VerValue^ do
 begin
   V1 := dwFileVersionMS shr 16;
   V2 := dwFileVersionMS and $FFFF;
   V3 := dwFileVersionLS shr 16;
   V4 := dwFileVersionLS and $FFFF;
 end;
   FreeMem(VerInfo, VerInfoSize);
end;

Kullanımı
procedure Tgiris_frm.FormCreate(Sender: TObject);
var
   V1, V2, V3, V4: word;
Begin
prgversiyon (Application.ExeName, V1, V2, V3,V4);
edt_Versiyon.Text:= Format('%d.%d.%d.%d', [V1, V2, V3,V4]);

Test edilmiştir.

Bu hatayı veriyor

verdiğim procedure ve komutlardan  bu hatayı vermez.  boş bir proje açın ve orada deneyin lütfen
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#8
(23-12-2022, Saat: 13:51)cinarbil Adlı Kullanıcıdan Alıntı:
(23-12-2022, Saat: 13:28)cvheneburi Adlı Kullanıcıdan Alıntı: Bu hatayı veriyor

verdiğim procedure ve komutlardan  bu hatayı vermez.  boş bir proje açın ve orada deneyin lütfen

evet haklısınız boş projede çalışıyor. peki benim mevcut projemde neden çalışmaz hata neden kaynaklanır.
Cevapla
#9
(25-12-2022, Saat: 00:09)cvheneburi Adlı Kullanıcıdan Alıntı:
(23-12-2022, Saat: 13:51)cinarbil Adlı Kullanıcıdan Alıntı: verdiğim procedure ve komutlardan  bu hatayı vermez.  boş bir proje açın ve orada deneyin lütfen

evet haklısınız boş projede çalışıyor. peki benim mevcut projemde neden çalışmaz hata neden kaynaklanır.

iyi günler derleme seçenekleri çok iyi ama öğrenmek zaman alabilir.
Debug modunda derleyerek  programı adım adım izleyeyebilirsiniz 
sizi için daha kolayı programda  otomatik üretilen formdan başlayarak 
adım adım 
showmessage ('burası aaa');

kullanarak  hatanın yerini yakalamalısınız.

Not : project / options / forms larda solda bulunan formu program içinde bir yerde oluşturuyorsanız kontrol edin.
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#10
Eğer sadece major ve minor versiyon yeterli olacaksa şu şekilde kullanabilirsiniz.

function PrgVersionStr: string;
var
 Rec: LongRec;
begin
 Rec := LongRec(GetFileVersion(ParamStr(0)));
 Result := Format('%d.%d', [Rec.Hi, Rec.Lo])
end;

Kullanımı
Label1.Caption := PrgVersionStr;
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Donanım bilgilerini almak için geliştirilmiş güzel bir proje burakb44 2 299 02-04-2024, Saat: 16:06
Son Yorum: burakb44
  Aktif olan tarayıcıdan URL bilgisi almak eraendless 7 897 15-09-2023, Saat: 08:36
Son Yorum: eraendless
  Stringgrid Hücre Bilgisi Alma oguzk06 5 919 03-05-2023, Saat: 19:39
Son Yorum: oguzk06
  Bakanlıktan Bitki Koruma Ürünleri Stok Bilgisi Alınması bünyamin68 39 10.156 26-03-2023, Saat: 12:21
Son Yorum: varyemez
  Delphi Proje Açarken Problem w0fly 3 1.208 03-08-2022, Saat: 17:42
Son Yorum: mcuyan



Konuyu Okuyanlar: 1 Ziyaretçi