Vcl.Style ve başlangıçta programı gizleme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Vcl.Style ve başlangıçta programı gizleme

Mesaj gönderen PROGRAMADOR »

Merhaba arkadaşlar,

Registry'de autorun'a programı ekledim. Hiçbir style uygulamadığımda program parametre ile registry'den açıldığında minimize işlemi gerçekleşiyor ve uygulama gizleniyor.

Vcl.Style'den bir style uyguladığımda ve ve bu style ile program registry'den açıldığında program minimize olmasına karşın gizlenmiyor. Ben aşağıdaki araç çbuğunda görünsün istemiyorum programı, "hide" olsun.

Bunu nasıl yapabilirim?

Uygulamayı minimize edildiğinde gizlemek için ApplicationEvents componentini kullanıyorum.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: Vcl.Style ve başlangıçta programı gizleme

Mesaj gönderen xxxjedixxx »

Taskbar'dan gizlemek için,
ShowWindow(Application.Handle, SW_Hide);

Tekrar göstermek için
ShowWindow(Application.Handle, SW_Show);
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: Vcl.Style ve başlangıçta programı gizleme

Mesaj gönderen PROGRAMADOR »

Maalesef bilgisayar açılışında bu bir işe yaramıyor. Sorunu şöyle hallettim:

shouldMinimize adında boolean tipinde bir değişken oluşturdum. Eğer /winstart parametresi ile program açılırsa shouldMinimize true olacak:

Kod: Tümünü seç

if ParamStr(1) = '/WinStart' then
      shouldMinimize:=True else shouldMinimize:=false;
Daha sonra Thread execute procedure'ünü şöyle yazdım.

Kod: Tümünü seç

procedure tthread_backup.Execute;
begin
  try
      priority:=tpnormal;
      freeonterminate:=false;
      while (not terminated) do begin
          gtick:=gettickcount;
          if gtick-last_second>SECOND then begin
              last_second:=gtick;
              if shouldMinimize then Synchronize(DoMinimizeSync);
              if gtick-last_5_sec>FIVESECONDS then begin
                  last_5_sec:=gtick;
                  FolderChangeTimer;
                  if gtick-last_minute>MINUTE then begin
                      last_minute:=gtick;
                      Synchronize(CheckOfflines2Backup);
                  end;
              end;
          end;
      end;
  except
  end;
end;
DoMinimizeSync procedure'ünün kodu ise şöyle:

Kod: Tümünü seç

procedure tthread_backup.DoMinimizeSync;
begin
  frmMain.ApplicationEvents1Minimize(frmMain);
  frmMain.windowstate:=wsminimized;
  shouldMinimize:=false;
end;
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: Vcl.Style ve başlangıçta programı gizleme

Mesaj gönderen xxxjedixxx »

Tekrar merhaba,

Ben sorunu yanlış anlamışım. Açılışta gizlemek için bir parametreye ihtiyaç var ve sen de WinStart diye kullanmışsın.

Projenin kaynak koduna, Application.Run'dan önce aşağıdaki kodu yazarsan açılışta parametrene bağlı olarak gizlenecektir. Hiç thread ile uğraşmana gerek yok.

Kod: Tümünü seç

  ...
  // ShowMainForm varsayılan olarak True değerine sahiptir. Burada parametreye bağlıyoruz.
  Application.ShowMainForm := (ParamStr(1) <> '/WinStart') and (ParamStr(1) <> '/hide') and (ParamStr(1) <> '-hide'); 
  ...
  Application.Run;
Cevapla