RAD Studio XE6 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
RAD Studio XE6 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

23 Ağustos 2014 Cumartesi

Delphi Android Foreground

Merhabalar,

Sizelere bu sefer biraz cihazda görsellik yaratacak ve projenizi daha profesyonel gösterecek bir şeyler hazırladım. Bunun tam olarak ne olduğunu anlamak için  "Android Foreground" kelimelerini Google üzerinden aratıp tam anlamlı açıklamalara erişebilirsiniz ben eksik bilgi verip kafanızı karıştırmak istemem.

Bu işleme yaptığım bir örneğin resmini koyarak tam anlamı ile göstermek istiyorum.

Resim 1

Resim 2

Kodların orjinalini Embarcaderonun formunda bir soruya verilen cevaptaki linten indirdim fakat çoğu zaman üşengeç bir millet olduğumuzdan bütün bu .pas dosyalarını projeye dahil edecez de ayarlamaları yapacas da bizim için büyük iş :)
Bende bunları düşünerek bütün pas dosyalarını 1 component üzerinde birleştirdim ve yapmamız gereken sadece componenti tutup formun üzerine bırakmak ve .StartService proceduresini çalıştırmak.

Eğer biraz meraklıysanız ve android arka plan servisleri ile ilgili uygulamalar geliştirmek isterseniz .pas dosyalarının içeriğini karıştırmanızı öneririm. Çünkü hazırlayan arkadaş android cihazın yaptığı yayınları yakalama gibi olayları güzelce anlatmış orada.



Ek olarak yapılması gereken 2 ayar vardır bunlar:



2-) AndroidManifest.template.xml ayarı

Bu "AndroidManifest.template.xml" ayarı için yapılması gereken

1-) Manifest dosyasını açınız.

2-)
<receiver android:name="com.embarcadero.firemonkey.notifications.FMXNotificationAlarm"/>
satırını bulunuz ve hemen altına boş bır satır açarak vereceğim metini yapıştırınız.

3-) <service android:name="com.barisatalay.foreground.ForegroundServis"
                 android:persistent="true"
                 android:enabled="true">
        </service>

4-) Eğer doğru olarak eklediyseniz kodlar bu resimdeki gibi gözükmeli.



5- ) Resimdeki şekilde projemizi önce Clean sonra Compile yapıyoruz


Tüm bu işlemleri tamamladığınızda Foreground olayının başarı ile çalıştığını göreceksiniz.

Bütün bunlarda da hata yapma olasılığınızı düşünerek component klasörlerinin içerisine "Demo" adında klasörde sizler için örnek bir proje hazırladım.

İyi çalışmalar.

19 Ağustos 2014 Salı

Delphi Formdaki nesnelerde gezinti

Merhabalar,

Zaman zaman lazım olan ve çabuk unutulan bir işlemi unutmamak için paylaşmak istiyorum.

Amacımız formdaki nesneler arasında taborder'larına göre yön tuşlarıyla veya tab tuşuyla gezinti.

1-) Formun KeyPreview özelliğini True yapınız

2-) Formun Object Inpector'den "ActiveControl" seçeneğinde ilk olarak hangi nesnede olmasını istiyorsanız onu seçin.

3-) Formun "OnKeyDown" eventine aşağıdaki kodu yazınız.

if (Key = VK_RETURN) or (Key = VK_DOWN) then SelectNext(ActiveControl,True,True);
if Key = VK_UP then SelectNext(ActiveControl,False,True);

6 Ağustos 2014 Çarşamba

Delphi Mobile ve FireMonkey Flat Button Componenti

Merhabalar,

Embarcaderonun bizlere sunmuş olduğu TButton componenti malesef benim ihtiyaçlarımı tam olarak karşılayamamaktadır.

Öncelikli sebebi TButtonun şeffaf olmasıdır.

Bu sebebden dolayı "TFlatRectButton" adını vermiş olduğum componenti yazma ihtiyacı duydum. Bu component "TRectangle" nesnesinden türetilmiştir.

Bu "TFlatRectButton" componenti biraz acemi işi oldu fakat bana buton üzerinde istediğimi yapma özelliği sundu.

Güncel Proje Linki : https://code.google.com/p/delphi-mobile-flat-button/

İndirme Linki [06/08/2014] : http://s3.dosya.tc/server26/IzVFLm/FlatButtonSet.rar.html

FmxExpress: http://www.fmxexpress.com/free-flat-rectangle-icon-button-component-for-delphi-xe6-firemonkey-on-android-and-ios/




Bunlar nelerdir?
Resimde kullanacağımız 2 özelliği çizerek gösterdim.




1- ) "Text"

Bu özellik adından da anlaşıldığı gibi butonumuzun üzerinde gözükecek olan metindir.

2-) "Settings"

Kullanacağımız özellikleri "Settings" başlığı altında topladım.
Bunlar:

"ButtonSettings": 
  Bu bölümde butonun renk ayarlarını yapabilirsiniz.
  Eğer butonun üzerine geldiğinizde renginin sizin belirlediğiniz bi renk olmasını istiyorsanız "IsHoverColor" rengini değiştirin.
 Eğer butona tıkladığınızda butonun rengi sizin belirlediğiniz bi renk olmasını istiyorsanız "IsPressedColor" rengini değiştirin.

"IconSettings":
Bu bölümde button içerisinde kullanacağınız resim ayarlarını yapabilirsiniz.
  Icon : Butonda gözükecek olan resim.
  Align: Butona eklenmiş olan resimin butonda hangi pozisyonda duracağını seçmelisiniz.

"TextSettings":
Bu bölümde butonda gözükecek olan metinin ayarlarını yapabilirsiniz.
  Font: Gözükecek olan metinin standart font ayarlarını yaptığınız bölümdür.
  TextColor: Gözükecek olan metinin rengini buradan ayarlayabilirsiniz.
  TextHorizontal: Gözükecek olan metinin yatay olarak hizalamasını buradan ayarlayabilirsiniz.
  TextVertical: Gözükecek olan metinin dikey olarak hizalamasını buradan ayarlayabilirsiniz.

Örnek Butonlar





31 Temmuz 2014 Perşembe

Formun handle ile eventini yakalama

Merhabalar,

Kolay bi olay fakat her zaman ki gibi unutup tekrar aramamak için bloğumda yayınlıyorum :)

Olayımız delphinin bize sunduğu eventler haricinde eventleri yakalamaktır.

XE5 ile test ettim sorunsuz çalışmakta. Eğer ekli değilse "Winapi.Windows, Winapi.Messages" Kütüphanelerini eklemenizi rica edicem.


  
//Tanımlanması gereken procedure 
procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;


procedure TMainForm.WMSysCommand(var Msg: TWMSysCommand);
begin
  if (Msg.CmdType = SC_MINIMIZE) then
  begin
//Burası eğer küçültme işlemi yapılırsa ne yapmak istediğiniz.
  end;

   DefaultHandler(Msg) ;
end;



Sizlere "SC_MINIMIZE" haricinde kontrol edebileceğiniz eventleri aşağıda yazmış bulunmaktayım artık gerisi amaca hizmet edecek olan kodlardır.


SC_SIZE = 61440;
SC_MOVE = 61456;
SC_MINIMIZE = 61472;
SC_MAXIMIZE = 61488;
SC_NEXTWINDOW = 61504;
SC_PREVWINDOW = 61520;
SC_CLOSE = 61536;
SC_VSCROLL = 61552;
SC_HSCROLL = 61568;
SC_MOUSEMENU = 61584;
SC_KEYMENU = 61696;
SC_ARRANGE = 61712;
SC_RESTORE = 61728;
SC_TASKLIST = 61744;
SC_SCREENSAVE = 61760;
SC_HOTKEY = 61776;
SC_DEFAULT = 61792;
SC_MONITORPOWER = 61808;
SC_CONTEXTHELP = 61824;
SC_SEPARATOR = 61455;

17 Temmuz 2014 Perşembe

Delphi mobile TListview item click sorunu

Merhabalar,

Kullananlar fark etmiştir ki,

Örneğin TListview'imizde 3 tane item var ve TListview de item olmayan bir kısma tıkladığımız zaman delphi bunu son iteme tıklanmış olarak kabul eder.

Yeri geldiğinde güzel bir özellik olabilir fakat SearchBox ile arama yaptıktan sonra boş bir alana tıklayarak SearchBox kapatılmak istendiğinde otomatik olarak son iteme tıklama işlemi gerçekleşmesi çoğu zaman bir yazılımcıyı deli etmektedir.

Bu olayı aşmak için "FMX.ListView.pas" uniti içerisinde FindItemAbsoluteAt proceduresini bulun 4060 satır olabilir tam emin değilim. Tabiki bu işlemi yapmadan önce .pas dosyanızın yedeğini alın ne olur ne olmas.

Bu 2 satırı :
if ViewAt >= HeightSums[HeightSums.Count - 1] then
 Exit(HeightSums.Count - 1);

Bu aşağıdaki şekilde değiştirin:
if ViewAt >= HeightSums[HeightSums.Count - 1]+GetItemHeight(HeightSums.Count-1) then
 Exit(-1);

Delphi android Kameradan ve galeriden resim çekme ve paylaşma

Merhabalar,

Birazdan bahsedeceğim olay embarcaderonun sitesinde mevcuttur ve bende ilk olarak oradan yararlanmıştım. 1-2 Arkadaşımın tekrar tekrar sorması üzerine türkçe bir yazıda elimizde bulunması açısından birşeyler yazmaya karar verdim.

Projeye başlayalım:

İlk olarak boş bir proje açıyoruz.

Projeye en temel olarak 1 adet TImage ve 1 adet TButton koymanız kafidir. Gerisi süslemeye girer ve maksat ekran güzel gözüksün hemen gerekli objeleri ekleyelim.

Eklenenler:
  ToolBar = ToolBar

  KameraBut = TButton
    Align = alRight
    StyleLookup= 'cameratoolbutton'

  KameraResim = TImage
    Align = alClient

  ActionList1 = TActionList




Objelerin yerleşimleri bitirdiğinizde sıradaki işlemimiz butonumuza bir action tanımlamak ve kısa yoldan nasıl yapılacağını resim ile göstereceğim.


Şuandaki işlemimiz resimleri projemize almak olduğuna göre:
1-) TTakePhotoFromLibraryAction = Galeriden foto alma
2-) TTakePhotoFromCameraAction = Kameradan foto alma

Hangi seçeneği uygulamak isterseniz tıklayınca o action tanımlansın.

Tanımlama işleminden sonra yine Event sekmesinden "Action" eventinin sol tarafındaki "+" artı işaretine tıklayarak genişletiniz.

OnDidFinishTaking eventi içerisine aşağıdaki kodu yazarak kameradan çekilen veya galeriden seçilen resimi TImage nesnemize alıyoruz.

procedure TKameraScreen.TakePhotoFromCameraAction1DidFinishTaking(Image: TBitmap);
begin
  KameraResim.Bitmap.Assign(Image);
end;


"Image" nesesi actiondan dönen TBitmap yani seçilen veya çekilen resimdir.

İlk Görünüm:


Resim çekme anı:


 Çekilen resimin TImage içerisine Assign olmuş hali:


Sosyal Paylaşım Butonu:


Tanımlama işleminden sonra yine Event sekmesinden "Action" eventinin sol tarafındaki "+" artı işaretine tıklayarak genişletiniz.

OnBeforeExecute eventi içerisine aşağıdaki kodu yazarak TImage nesnemiz içerisindeki resmi sosyal resim paylaşma eventi ile alıcı uygulamalara gönderiyoruz.


procedure TKameraScreen.ShowShareSheetAction1BeforeExecute(Sender: TObject);
begin
  ShowShareSheetAction1.Bitmap.Assign(KameraResim.Bitmap);
end;




15 Temmuz 2014 Salı

Firemonkey Çizim ve Efekt Kullanımı

Merhabalar,

Bu yazımda sizler için hazırladığım projede firemonkey üzerinde:
1-) Resime üzerine yazı yazma,
2-) Resime üzerine çizim yapma,
3-) Resim üzerine efekt uygulama.

İşlemlerini ayrıntılı bir şekilde öğrenebileceksiniz. Proje Delphi XE5 ile hazırlanmıştır.
Tekrar belirtmek isterimki kodlarımı olabildiğince basit tutmaya çalışmaktayım tecrübeye bakmaksızın herkesin anlaması için.

Örnek Görüntüler:



12 Temmuz 2014 Cumartesi

Mobile Şifre Takip Uygulaması - Kaynak Dosyaları

Merhabalar,

Daha önce bahsetmiş olduğum projeyi en aşağıda vermiş olduğum linkten indirebilirsiniz.
Proje kimilerine göre basit olabilir yapabildiğim en basit düzeyde yapıp herkesin anlayabileceği bir kaynak hazırlamaya çalıştım.

Proje içerisinden bazı konu başlıkları:
~Mobile Sqlite bağlantı
~Sanal klavye kullanımı
~Kullanıcı giriş ekranı
~Dashboard
~Tab kontrol kullanımı
~Android Native Mesaj Dialog yapımı
~TListView nesne Ekleme/Tasarım/Obje kullanımı (Runtime)
~TListview SearchBox kullanımı
~Md5 Şifreleme
~Base64 Decode/Encode
~Veritabanı Kayıt/Güncelleme/Silme/Sorgulama işlemleri
~Farklı cihazlar için ekran desteği(Objelerin hizalanması)
~TBannerAd(Google Admob)

Ekran Görüntüleri:

Giriş Ekranı - Admob:


Şifre Değiştirme ekranı:

Dashboard:


Kayıt Ekran - Bilgi Giriş Anıı:


Liste Ekranı:


Kayıt Ekranı - Kayıt görüntüleme:


Şifre Görüntüleme Güvenliği:




19.11.2014 tarihinde güncellendi.
Indirme Linki: https://www.mediafire.com/?7m42sp7to1u7gcv

5 Temmuz 2014 Cumartesi

Mobile Şifre Takip Uygulaması - Tanıtım

Merhabalar,

Bir sonraki yazımda bir örnek proje paylaşacağım ve bu projede bloğumda bahsettiğim birçok konuya değineceğim.
Tabiki bu projeyi ev taşıma işlerimi bitirdikten sonra başlayacağım.

Proje içerisinden bazı konu başlıkları:
~Mobile Sqlite bağlantı
~Kullanıcı giriş ekranı
~Dashboard
~Tab kontrol kullanımı
~Android Native Mesaj Dialog yapımı
~TListView nesne Ekleme/Tasarım(Runtime)
~TListview SearchBox kullanımı
~Md5 Şifreleme
~Base64 Decode/Encode
~Veritabanı Kayıt/Güncelleme/Silme/Sorgulama işlemleri
~Farklı cihazlar için ekran desteği(Objelerin hizalanması)
~TBannerAd(Google Admob)

Hepinize teşekkürler sayın takipçiler...Tabi eğer böyle bir şey mümkünse...



:::Projenin ekran görüntüleri:::

4 Temmuz 2014 Cuma

Delphi Base64 şifreleme ve şifre çözme

Merhabalar,

Sizlere bu yazımda Delphide(Mobile dahil) 64bit veri şifreleme hakında biraz bilgi vereceğim.

Öncelikle nedir bu "Base64" onuna bakalım:
Base64 ikili verilerin (İngilizce: binary data) sadece ASCII karakterlerini kullanan ortamlarda iletilmesine ve saklanmasına olanak tanıyan bir kodlama şemasıdır.

Çalışma Şekli:
Kodlama sırasında 3 baytlık veriler 6 bitlik dörtlü gruplara dağıtılırlar. Her bir 6 bitlik grup 0 ile 63 arasında bir sayı oluşturur (26=64). Aşağıdaki eşleşmeye göre her sayı bir ASCII yazdırma karakterine dönüştürülür. Bir base64 kodlamasının uzunluğu daimi olarak 4' ün katları şeklindedir, uzunluğu 4' ün katı olmayan hiçbir metin geçerli bir base64 metin değildir. base64 kodlaması bitmiş bir verinin uzunluğu 4'ün katı değilse, gerektiği kadar '=' karakteri çıktının sonuna eklenir, örneğin uzunluğu 10 olan bir çıktının sonuna '==' eklenmelidir.


Bana göre genelde kullanım amacı lamerlerin veri iletişimizideki kodları takip etmesini zorlaştırmaktır. Zaten bir acemiye göre işinde profesyonel bir yazılımcı sizin stringinizi görür görmes bunun base64 ile şifrelendiğini bir bakışta anlar ve decode etmesi 5 dakikasını alacaktır.

İşin özü ve kısacası gereksiz insanların sizin textlerinize erişi mi zorlaştırmaktır.
Eğer kimse stringimi göremesin derseniz size MD5 şifrelemeyi öneririm tek taraflıdır :)

MD5 konu linki için tıklayınız!

Kodumuza dönersek:

Uses idGlobal, IdCoderMIME;
 function Sifrele(const T:String): String;
var
  b64: TIdEncoderMIME;
begin
  b64 := TIdEncoderMIME.Create;
  try
    Result := b64.EncodeString(T, IndyTextEncoding_UTF8 )
  finally
    FreeAndNil(b64);
  end;
end;


function SifreCoz(const T:String): String;
var
  b64: TIdDecoderMIME;
begin
  b64 := TIdDecoderMIME.Create;
  try
    Result := b64.DecodeString(T, IndyTextEncoding_UTF8)
  finally
    FreeAndNil(b64);
  end;
 end;

25 Haziran 2014 Çarşamba

Delphi Android ve IOS Mac adresi bulma

Örnek Resim

ANDROID:
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wInfo = wifiManager.getConnectionInfo();
String macAddress = wInfo.getMacAddress();


IOS:
 Uses
{$IFDEF IOS}
 iOSApi.UIKit;
{$ENDIF}

var
  {$IFDEF IOS}
    Device    : UIDevice;
  {$ENDIF}
begin
  {$IFDEF IOS}
    Device := TUIDevice.Wrap(TUIDevice.OCClass.currentDevice);
    ShowMessage(Device.uniqueIdentifier.UTF8String);
    ShowMessage(Device.identifierForVendor.UUIDString.UTF8String);
  {$ENDIF}
end;

23 Haziran 2014 Pazartesi

Delphi Dialog ile klasör seçme



with TFileOpenDialog.Create(nil) do
try
  Options := [fdoPickFolders];
  if Execute then
  begin
    //Buradan Dönen "FileName" ile bir değişkene seçilen klasör yolunu alabilirsiniz.
  end;
finally
  Free;
end;

Delphi XE6 Admob

XE6 Admob


 Merhabalar, Bu yazımda sizlere Embarcadero'nun bizlere sunmuş olduğu nimetlerden bir tanesinden bahsetmek istiyorum. XE6 Admob sayesinde artık uygulamalarından para kazanmak gibi düşüncesi olanlara şimdiden söyliyim gözünüzü çok yükseklere dikmeyin :) Burada Admob hesap nasıl açılır UnitID nasıl bulunur gibi anlatımlara girmek istemiyorum Hz. Google'a sorabilirsiniz size seve seve yardımcı olacaktır :) Örnek projemiz için bize lazım olan ekipman: 1 Adet Android Cihaz :) Formumuza Eklenecek olan elemanlar: 1-) TBannerAd 2-)Label 3-)Button İşlemlere başlamadan önce "INTERNET" ve "ACCESS_NETWORK_STATE" yetkilerinin açılmış olması gerektiğini unutmayalım. Görselliğe uyması için TBannerAd nesnemizin Align özelliğini Top yaptıktan sonra formumuza labeli ve butonu yerleştiriyoruz. Formun OnCreate Eventine:
BannerAd1.AdUnitID := 'ADMOB ID BURAYA';

Buton İçerisine :
BannerAd1.LoadAd;

Ve biraz işe aksiyon katmak istersek Reklamın ne kadar zaman boyunca izlendiğini labelimize yazdıralım. Bu iş için öncelikle "Var" bloğumuz altına "ActionBeginDate: TDateTime; WastedSeconds: Integer;" değişkenlerini tanımlıyoruz. TBannerAd nesnemizin Event sekmesinden OnActionCanBegin  içerisine  admobun aktif olduğu saati kayıt etmesi için: OnActionCanBegin
ActionBeginDate := Now;

Ve reklamlar arası geçiş, Reklama tıklanma vb. eventler olduğu zaman bu TBannerAd nesnemizin OnActionDidFinish Eventine yansayacaktır ve bizde bunu yakalıyalım: OnActionDidFinish
var
Seconds: Integer;
begin
Seconds := SecondsBetween(ActionBeginDate, Now);
WastedSeconds := WastedSeconds + Seconds;
Label1.Text := IntToStr(WastedSeconds) + ' boyunca reklam izlenmiş ve bitmiş.'


 Bu sayede Loglarımızı da tutmuş olabiliriz. Ayrıca yazılımcı kusursuz değildir "UnitID" olsun başka birşey olsun TBannerAd nesnesinde de olabilir birçok sorun cıkabilir bunun için TBannerAd nesnesinin "OnDidFail" eventine yazacağımız kodlar TBannerAd nesnesinde herhangi bir hata çıktığı anda aktif olacak olan eventtir. OnDidFail
Label1.Text := 'Hata : ' + Error;

Delphi IDE üzerinde yapacağımız değişiklikler bu kadardır sıradaki ve son işlemimiz "AndroidManifest.template.xml" dosyası içerisindedir.  <activity>  tagının bitim </activity>nin bir alt satırına aşağıda verdiğimi eklemeniz gerekmektedir. "<activity android:name="com.google.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>"