Formu Taskbar gibi yapma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
FXERKAN
Üye
Mesajlar: 178
Kayıt: 26 Tem 2003 11:06
Konum: Sivas - Konya
İletişim:

Formu Taskbar gibi yapma

Mesaj gönderen FXERKAN »

Selam.

yaptığım formun winowsun taskbarı gibi davranmasını istiyorum.

yani mesela siz bir pencereyi tam ekran yaptığınız zaman pencere ekranı kaplamıyor, ancak taskbara kadar olan boş kısımları kaplıyor.

işte bunun için bende formu alwaysontop yaptım. tabii herhangibir bir pencereyi tam ekran yaptığım zaman benim programın arkasında kalıyor.

yapmak istediğim program ise longhornu bilenler varsa onun sağ köşesinde bulunan barın aynısını yapmaya çalışıyorum

umarım ne demek istediğimi anlatabilmişimdir.
[ F X E R K A N © - E r k a n Ç İ F T Ç İ ]
Kullanıcı avatarı
feinpus
Üye
Mesajlar: 214
Kayıt: 17 Kas 2003 04:37
Konum: İstanbul
İletişim:

Mesaj gönderen feinpus »

Hiç denemedim fakat formun align özelliğini ayarlarsan olabilir.
sağ-sol-alt-üst tarafa ayarlarsan arkada yada üstte kalmaz diye düşünüyorum sen bir dene :D
Oldeye Software
http://www.oldeye.com
Kullanıcı avatarı
FXERKAN
Üye
Mesajlar: 178
Kayıt: 26 Tem 2003 11:06
Konum: Sivas - Konya
İletişim:

Mesaj gönderen FXERKAN »

abi galiba benim ne sorduğumu tam olarak anlamamışsın.

ben taskbar gibi olmasını istiyorumn yani herhangibir sayfa yada explorer penceresi tam ekran haline getirildiğinde formum onun üstünde kalmayacak. sanki ikisinide hizalıymış gibi gösterecek
[ F X E R K A N © - E r k a n Ç İ F T Ç İ ]
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Kod: Tümünü seç


// form'a button ve Label koymayı unutma... 
uses shellapi;
function FindTaskBar(var ARect: TRect): Integer;
var
        AppData: TAppBarData;
begin
  // 'Shell_TrayWnd' is the name of the task bar's window
  AppData.Hwnd := FindWindow('Shell_TrayWnd', nil);
  if AppData.Hwnd = 0 then
    RaiseLastWin32Error;
  AppData.cbSize := SizeOf(TAppBarData);
  // SHAppBarMessage will return False (0) when an error
  // happens.
  if SHAppBarMessage(ABM_GETTASKBARPOS, AppData) = 0 then
    raise Exception.Create('SHAppBarMessage returned false when trying ' +
      'to find the Task Bar''s position');
  // Otherwise, we had success, so fill in the results.
  Result := AppData.uEdge;
  ARect := AppData.rc;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Rect: TRect;
  DestLeft: Integer;
  DestTop: Integer;
begin
  DestLeft := Left;
  DestTop := Top;
  case FindTaskBar(Rect) of
    ABE_BOTTOM:
    begin
      DestLeft := Trunc((Screen.Width - Width) / 2.0);
      DestTop := Rect.Top - Height;
    end;
    ABE_LEFT:
    begin
      DestTop := Trunc((Screen.Height - Height) / 2.0);
      DestLeft := Rect.Right;
    end;
    ABE_RIGHT:
    begin
      DestTop := Trunc((Screen.Height - Height) / 2.0);
      DestLeft := Rect.Left - Width;
    end;
    ABE_TOP:
    begin
      DestLeft := Trunc((Screen.Width - Width) / 2.0);
      DestTop := Rect.Bottom;
    end;
  end;
  Label1.Caption := Format('Found at Top: %d Left: %d Bottom: %d Right: %d)',
    [Rect.Top, Rect.Left, Rect.Bottom, Rect.Right]);
  // Move us to the task bar
  while (Left <> DestLeft) or (Top <> DestTop) do
  begin
    if Left < DestLeft then
      Left := Left + 1
    else if Left <> DestLeft then
      Left := Left - 1;

    if Top < DestTop then
      Top := Top + 1
    else if Top <> DestTop then
      Top := Top - 1;

    Application.ProcessMessages;
  end;
end;
Bu kodu denemedim ama tahminimce işini görür veya kodları değiştirerek yararlanabilirsin.

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
FXERKAN
Üye
Mesajlar: 178
Kayıt: 26 Tem 2003 11:06
Konum: Sivas - Konya
İletişim:

Mesaj gönderen FXERKAN »

husonet
abicim gönderdiğin kod için teşekkür ederim ama galiba sorunumu tam izah edememişim

sorun şu abicim

benim formumum
borderstylı : bsNone
Formstyle : fsStayOnTop
form ekranın sağ kısmında hizalı bir şekilde duruyor

şimdi yapmak istediğim şey şu şekilde

bu form daima ekranın sağında duracak stayontop biçiminde

ben mesela masaüstünde başka bir pencere açıpta bunu tam ekran yaptığım zaman
bu pencere ekranı kaplıyor ve benim formumum altında kalıyor. işte ben bu altta kalma olayını
engellemek istiyorum

aynen windowsun taskbarı gibi,

bunu nasıl yapabilirm sormak istediğim buydu işte
[ F X E R K A N © - E r k a n Ç İ F T Ç İ ]
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7602
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

sanırım para ile satılan appcontrols isimli bileşen seti bu istediğini yapıyor. Bir ara bizim arkadaşlardan birisi kullanıyordu. Delphi super page ve torry'de arattırırsan bulurum sanırım.

Kolay gelsin.
Kullanıcı avatarı
FXERKAN
Üye
Mesajlar: 178
Kayıt: 26 Tem 2003 11:06
Konum: Sivas - Konya
İletişim:

Mesaj gönderen FXERKAN »

hocam bu componentdan başka yardımcı birşey yok mu yani. fiaytıda pek ucus değilmiş yani :D

benim yaptığım program zaten ücretsiz ve basit bişey yani. bu işi yapabileceğim başka birşey yok mu? component olmaksızın kod yardımıyla falan
[ F X E R K A N © - E r k a n Ç İ F T Ç İ ]
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

baska bir forumda gozume carptı
basit bir api varmıs SystemParametersInfo diye:)

Kod: Tümünü seç

procedure TForm1.FormCreate(Sender: TObject);
var
  aRect: TRect;
begin
  BorderStyle:= bsNone;
  Top := 0;
  Left := 0;
  Width := Screen.Width;
  Height := 41;
  FormStyle := fsStayOnTop;

  aRect.Top :=45;
  aRect.Left := 0;
  aRect.Right := Screen.Width;
  aRect.Bottom := Screen.Height;

  SystemParametersInfo(SPI_SETWORKAREA, 0, @aRect, 0);

end;

ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam.

- @gkimirti'nin verdiği kodlar geçerlidir. :)

aRect.Top := 0;
aRect.Left := 0;
aRect.Right := Screen.Width - Formunuz.Width; //gibi bir alan sizin dışınızdaki program formlarına kalacak alandır.
aRect.Bottom := Screen.Height;

- Formun Maximize - Minimize olaylarını Widnows mesajlarından takip edin. Form Resize'da WindowState kontrolü geç kalabilir. Bir deneyin ama mesaj kontrolü daha hızlı sonuç verir.

- Sadece dikkat edeceğiniz işlem; iki kere Maximize Window yapılmasına izin verirseniz, formunuz kendi belirleyeceğini sınırlarınızın dışına atılır.

- Formun width değerini sınırlayıp, Align özelliğini alRight yaptığınızada da aynı ICQ gibi bir formunuz olur.

- Eklenecek bir durum ise ekranda aktif pencereleri de aratıp, bunlardan Maximized durumda olanları Restore edip tekrar maximize ettirmelisiniz ki sizin formunuzdan geriye kalan alana uyum sağlayabilsinler.
Resim
Resim ....Resim
Cevapla