Taskbar Kontrolü

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
goksenin
Üye
Mesajlar: 37
Kayıt: 04 Ara 2003 11:59
İletişim:

Taskbar Kontrolü

Mesaj gönderen goksenin »

Slma.
merhaba

ben programım açıldığı zaman tüm taskbarları autohide yapmak istiyorum...
WinApi lerden yaralandım ama yazdığım kod işlemi gerçekleştirmiyor ...

procedure TFrmAna.FormCreate(Sender: TObject);
var
AppBarData : TAppBarData;
begin
AppBarData.cbSize := sizeof(AppBarData);
if not (SHAppBarMessage(ABM_GETSTATE, AppBarData) and ABS_AUTOHIDE) > 0 then
begin
SHAppBarMessage(ABM_SETAUTOHIDEBAR, AppBarData);
end;
end;

bu hızlı başlat(quick lan.) ı falanda yaparsa iyi olacak...
bilgisi olan varsa ve kod gönderebilirseniz sevinirim.

Hayırlı çalışmalar...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam.

- Bu yapmak istediğine (AutoHide Taskbar On/Off) Microsoft müsade etmiyor. Ama desktop ayarlarına müsade ediyor. Yani senin programın TaskBar üzerine dahil maximize edilebiliyor. İstersen daha önce ICQ şeklindeki form sorusuna yazdığımız cevabı yine forumdan bulabilirsin. Ben sana TaskBar'ı gizleme/gösterme olayını yazıcam.
Referans Aldığım Makale :
Microsoft Knowledge Base Article - 179363
HOWTO: Cover the Task Bar with a Window makalesinden İngilizce
http://support.microsoft.com/default.as ... -us;179363
- Hide / Show olayını WinSight ile taskbar'ın tanımında 'Shell_TrayWnd' olduğunu buldum, ShowWindow fonksiyonu ile çözüm üretebiliniyor.

- Bunun kodları aşağıdaki gibi. Bence bu işini görür. Yalnız programın çalıştığı sürece senin izin verdiğin zamanlarda Taskbar görünmesi mümkün olur. Bir konuda dikkatini çekerim.!!! programın geçersiz bir işlem sonucu sonlanırsa, bahsedeceğim üç şıktan birisi olmadan taskbar'ı göremezsin.

1. Tekrar program açılıp kapanırsa.
2. Windows'u restart yapılırsa.
3. Üçüncü bir program yazıp bunu çözersen.

Kod: Tümünü seç

// Taskbar'ı Gizle
var
  Taskbar: THandle;
begin
  Taskbar := FindWindow('Shell_TrayWnd', nil);
  ShowWindow(Taskbar, SW_HIDE);

Kod: Tümünü seç

// Taskbar'ı Göster
var
  Taskbar: THandle;
begin
  Taskbar := FindWindow('Shell_TrayWnd', nil);
  ShowWindow(Taskbar, SW_SHOW);
- Umarım işin görülür.
Resim
Resim ....Resim
goksenin
Üye
Mesajlar: 37
Kayıt: 04 Ara 2003 11:59
İletişim:

mrmcop çok teşekkür ama... :)

Mesaj gönderen goksenin »

mrmcop ilgine çok teşekkür ederim...
verdiğin kodları daha öncede denedim olay yani hide show olayı ok de
benim maksadım taskbar ların alanını kullanabilmek
programı ekranın ne kadar kullanılabilir yeri varsa kullanmak...
bu kodlar taskbarı gizliyor ama bulundukları yer açık kalıyor yani oraları kullanamıyorum

bende mi bir hata var...?

tekrar teşekkür ederim.

hayırlı çalışmalar...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam.

- API'lerle uğrıştığını görünce bunu bilebileceğini değerlendirmiştim. Kusura bakma.. :)

- Senin için yazdığım 8) , bu işi dinamik olarak yapabilmeni sağlayacak Procedure aşağıdaki gibi.

Kod: Tümünü seç

Procedure TForm1.ClientAyarla(Top, Left, Right, Bottom : Integer);
var
  aRect: TRect;
begin
  aRect.Top    := Top;
  aRect.Left   := Left;
  aRect.Right  := Right;
  aRect.Bottom := Bottom;
  SystemParametersInfo(SPI_SETWORKAREA, 0, @aRect, 0);
end;
- Tüm Screen'i kullanmak istediğinde yani Taskbar'ı Hide ettiğinde tüm alanı kullanmak istediğinde;

Kod: Tümünü seç

  ClientAyarla(0, 0, Screen.Width, Screen.Height);
- Taskbar'ı show ettiğinde (TaskBar'ı 30 Height kabul ettim) geriye kalan alanı kullanmak istediğinde;

Kod: Tümünü seç

  ClientAyarla(0, 0, Screen.Width, Screen.Height-30);
- Çalışmalarında başarılar. :idea:
Resim
Resim ....Resim
goksenin
Üye
Mesajlar: 37
Kayıt: 04 Ara 2003 11:59
İletişim:

çok teşekkür ederim.

Mesaj gönderen goksenin »

Slma.
mcop çok teşekkür ederim.
Allahta senden razı olsun... ne diye bilirim ki
beni yolladığın kodla rahatlattın kasıpğ duruyordum :)

bir iki şey daha sormak istiyorum aynı konu ile ilgili
Shell_TrayWnd TaskBar için geçerli ya acaba QuickLanch için falan bu parametre hangi değerleri alabiliyor biliyormusun?

Birde TaskBarın boyutlarını nasıl öğrenirim...

Hayırlı çalışmalar...
Göksenin.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam.

- İşinin görüldüğünü göremek beni sevindirdi.

- Ben sana TaskBar'ın boyutunu vermekten çok, ekranda kullanacağın alan büyüklüğünü bilerek basit bir çıkartma işlemi ile nasıl bulacağını örnekliycem.

Kod: Tümünü seç

var
  KullanimAlani : TRect;
begin
  SystemParametersInfo(SPI_GETWORKAREA, 0, @KullanimAlani, 0);
  With KullanimAlani
  do ShowMessageFmt('Kullanım Alanı : Top:%d, Bottom:%d, Left:%d, Right:%d', [top, Bottom, Left, Right]);
  ShowMessageFmt('Dekstop Boyutu : %d', [Screen.Height-KullanimAlani.Bottom]);
- Bunun da işine yarayacağını değerlendirerek çalışmalarında başarılar dilerim.

- Sistem Programcılığına mı soyunuyoruz diye bir soru aklıma geldi ayrıca ?? 8)

Not. QuickLauch sorunu geç gördüm, ve hangi parametreden bahsettiğini anlamadım. Aşağıdaki tipte birşeyse biraz araştırmadan cevap veremiycem.

- QuickLauch'un parenti TaskBar olduğundan, bu handle ile EnumChild operasyonu uygulanması gerekiyor ki bu sadece bir başlangıç noktası, doğru olmayabilir. Denemeden cevap veremeyeceğini yineliyorum.

- Takip eden konu ise Windows Mesaj ağında bu pencerelere erişip daha alt düzey işlemler,Bunu denemek ve anlatmak zaman alır. Temelde daha önce anlattıklarım geçerli. Bunların ışığında internetten araştırıp kolaylıkla bulabileceğinizi ayrıca değerlendiriyorum.

- Zaten Quick Lauch Bar aslında bir klasördür biliyorsunuzdur. Bu klasörün yeri ise

(XP ve 2K için)

Kod: Tümünü seç

\Documents and Settings\<user name>\Application Data\Microsoft\Internet
Explorer\Quick Launch
- Çalışmalarınızda başarılar dilerim.
En son mrmarman tarafından 15 Oca 2004 12:35 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Resim
Resim ....Resim
goksenin
Üye
Mesajlar: 37
Kayıt: 04 Ara 2003 11:59
İletişim:

TEŞEKKÜR EDERİM...

Mesaj gönderen goksenin »

BİLGİNİ PAYLAŞTIĞIN İÇİN TEKRARDAN TEŞEKKÜR EDER.
HAYIRLI ÇALIŞMALAR DİLERİM.

NOT : QuickLauch ilgili araştırma yaparsan eğer cevabını bekliyor olacağım. Bende araştırıyorum sonuçu gruba atarım inşallah...

GÖKSENİN.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Edit yapmıştım ama yetişemedim.

- Quick Lauch bar ile ilgili değilim. Yani bir sorunun varsa vakit bulduğum taktirde ve o zaman da unutmazsam tabi. :? araştırırım... Lakin...
- Quick Lauch Bar ile ilgili sorunu açar mısın ? ne yapmak istiyorsun. Eğer işlerin görülmüş de genel kültür diye soruyorsan diğer arkadaşların vaktinden çalmış olucaz bunu da değerlendirlerim.. :oops:
En son mrmarman tarafından 15 Oca 2004 12:40 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Resim
Resim ....Resim
goksenin
Üye
Mesajlar: 37
Kayıt: 04 Ara 2003 11:59
İletişim:

Birde Quick Lanch taki maksadım şu

Mesaj gönderen goksenin »

Birde Quick Lanch taki maksadım şu tüm aktif toolbarları bu yöntemle hide edip kendi yazdığım programı ekrana kaplatmak ...

'Shell_TrayWnd' in farklı adları veya Quick Lanch için değişik metodlu bir adı var mıydı onu öğrenmek istemiştim

veya o anda aktif olan taskbarların bir listesini...
böylece hepsine hukmedebilmeyi....
umarım anlata bildim :)

Göksenin...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Bahsettiğim gibi QuickLauchBar, TaskBar'ın Child'i. Dolayısıyla Taskbar'ı gizleyip de QuickLauch kalsın diyemezsin. Hüküm TaskBar ile sınırlanıyor.
Resim
Resim ....Resim
Kullanıcı avatarı
67neo
Üye
Mesajlar: 20
Kayıt: 29 May 2005 01:31
Konum: Antalya
İletişim:

Mesaj gönderen 67neo »

Merhaba arkadaşlar.Bende çalışan tüm formlarımı taskbarda görüntülemek istiyorum. Normalde bu olmuyor. Bütün formların tipi normal olmasına rağmen sadece ilk form taskbar da gözüküyor. Diğerleri sanki onun yavrusuymuş gibi duruyor. Ben bunu istemiyorum hepsi ayrı ayrı görünmesini istiyorum. Sizce bu nasıl olur?
Bilgi paylaştıkça çoğalır. Başarı ise bunun sonucudur.
Cevapla