Windows Taskbar

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7602
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Windows Taskbar

Mesaj gönderen mussimsek »

Merhaba,

_Emre_ diyorki :
selam arkadaşlar ben win toolbar daki yeni araç çubuklarından adres çubuğu gibi kendi yapmış olduğum programı oraya yerleştirmek istiyorum lütfen yardımcı olun
herkeze şimdiden teşekkürler
NOT : Lütfen sorularımızı foruma soralım.

Kolay gelsin.
ardahan
Üye
Mesajlar: 144
Kayıt: 26 Oca 2004 05:17
Konum: İstanbul - Kocaeli - Ardahan
İletişim:

Mesaj gönderen ardahan »

Kod: Tümünü seç

unit ApplicationBar;

interface

uses Windows, Messages, SysUtils, Forms, ShellAPI, Classes, Controls;

type
  TAppBarEdge = (abeTop, abeBottom, abeLeft, abeRight);

  EAppBarError = class(Exception);

  TAppBar = class(TCustomForm)
  private
    FABD           : TAppBarData;
    FDockedHeight  : Integer;
    FDockedWidth   : Integer;
    FEdge          : TAppBarEdge;
    FOnEdgeChanged : TNotifyEvent;
    FTopMost       : Boolean;

    procedure WMActivate(var M: TMessage); message WM_ACTIVATE;
    procedure WMWindowPosChanged(var M: TMessage); message
WM_WINDOWPOSCHANGED;
    function SendAppBarMsg(Msg: DWORD): UINT;
    procedure SetAppBarEdge(Value: TAppBarEdge);
    procedure SetAppBarPos(Edge: UINT);
    procedure SetTopMost(Value: Boolean);
    procedure SetDockedHeight(const Value: Integer);
    procedure SetDockedWidth(const Value: Integer);
  protected
    procedure CreateParams(var Params: TCreateParams); override;
    procedure CreateWnd; override;
    procedure DestroyWnd; override;
    procedure WndProc(var M: TMessage); override;
  public
    constructor CreateNew(AOwner: TComponent; Dummy: Integer = 0);
override;
    property DockManager;
  published
    property Action;
    property ActiveControl;
    property AutoScroll;
    property AutoSize;
    property BiDiMode;
    property BorderWidth;
    property Caption;
    property Color;
    property Ctl3D;
    property DockedHeight: Integer read FDockedHeight write
SetDockedHeight default 35;
    property DockedWidth: Integer read FDockedWidth write
SetDockedWidth default 40;
    property UseDockManager;
    property DefaultMonitor;
    property DockSite;
    property DragKind;
    property DragMode;
    property Edge: TAppBarEdge read FEdge write SetAppBarEdge default
abeTop;
    property Enabled;
    property ParentFont default False;
    property Font;
    property FormStyle;
    property Height;
    property HelpFile;
    property HorzScrollBar;
    property Icon;
    property KeyPreview;
    property Menu;
    property OldCreateOrder;
    property ObjectMenuItem;
    property ParentBiDiMode;
    property PixelsPerInch;
    property PopupMenu;
    property Position;
    property PrintScale;
    property Scaled;
    property ShowHint;
    property TopMost: Boolean read FTopMost write SetTopMost default
False;
    property VertScrollBar;
    property Visible;
    property Width;
    property WindowState;
    property WindowMenu;
    property OnActivate;
    property OnCanResize;
    property OnClick;
    property OnClose;
    property OnCloseQuery;
    property OnConstrainedResize;
    property OnContextPopup;
    property OnCreate;
    property OnDblClick;
    property OnDestroy;
    property OnDeactivate;
    property OnDockDrop;
    property OnDockOver;
    property OnDragDrop;
    property OnDragOver;
    property OnEdgeChanged: TNotifyEvent read FOnEdgeChanged write
FOnEdgeChanged;
    property OnEndDock;
    property OnGetSiteInfo;
    property OnHide;
    property OnHelp;
    property OnKeyDown;
    property OnKeyPress;
    property OnKeyUp;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnMouseWheel;
    property OnMouseWheelDown;
    property OnMouseWheelUp;
    property OnPaint;
    property OnResize;
    property OnShortCut;
    property OnShow;
    property OnStartDock;
    property OnUnDock;
  end;

implementation

var
  AppBarMsg: UINT;

constructor TAppBar.CreateNew(AOwner: TComponent; Dummy: Integer);
begin
  FDockedHeight := 35;
  FDockedWidth := 40;
  inherited CreateNew(AOwner, Dummy);
  ClientHeight := 35;
  Width := 100;
  BorderStyle := bsNone;
  BorderIcons := [];
  FABD.cbSize := sizeOf(FABD);
  FABD.uCallbackMessage := AppBarMsg;
end;

procedure TAppBar.WMWindowPosChanged(var M: TMessage);
begin
  inherited;

  SendAppBarMsg(ABM_WINDOWPOSCHANGED);
end;

procedure TAppBar.WMActivate(var M: TMessage);
begin
  inherited;

  SendAppBarMsg(ABM_ACTIVATE);
end;

procedure TAppBar.WndProc(var M: TMessage);
var State: UINT;
begin
  if M.Msg = AppBarMsg then
    begin
      case M.WParam of
        ABN_STATECHANGE: begin
                           State := SendAppBarMsg(ABM_GETSTATE);
                           if ABS_ALWAYSONTOP and State = 0 then
                             SetTopMost(False) else
                             SetTopMost(True);
                         end;
        ABN_FULLSCREENAPP: begin
                             State := SendAppBarMsg(ABM_GETSTATE);
                             if M.LParam <> 0 then
                               begin
                                 if ABS_ALWAYSONTOP and State = 0 then
                                   SetTopMost(False) else
                                   SetTopMost(True);
                               end else
                                 if State and ABS_ALWAYSONTOP <> 0
then
                                   SetTopMost(True);
                           end;
        ABN_POSCHANGED: begin
                          SetAppBarPos(FABD.uEdge);
                        end;
      end;
    end else
      inherited WndProc(M);
end;

function TAppBar.SendAppBarMsg(Msg: DWORD): UINT;
begin
  if csDesigning in ComponentState then Result := 0
    else Result := SHAppBarMessage(Msg, FABD);
end;

procedure TAppBar.SetAppBarPos(Edge: UINT);
begin
  if csDesigning in ComponentState then Exit;
  FABD.uEdge := Edge;
  with FABD.rc do
    begin
      Top := 0;
      Left := 0;
      Right := Screen.Width;
      Bottom := Screen.Height;

      SendAppBarMsg(ABM_QUERYPOS);

      case Edge of
        ABE_LEFT: Right := Left + FDockedWidth;
        ABE_RIGHT: Left := Right - FDockedWidth;
        ABE_TOP: Bottom := Top + FDockedHeight;
        ABE_BOTTOM: Top := Bottom - FDockedHeight;
      end;

      SendAppBarMsg(ABM_SETPOS);
    end;

  BoundsRect := FABD.rc;
end;

procedure TAppBar.SetTopMost(Value: Boolean);
const
  WndPosArray: array[Boolean] of HWND = (HWND_BOTTOM, HWND_TOPMOST);
begin
  if FTopMost <> Value then
    begin
      FTopMost := Value;
      if not (csDesigning in ComponentState) then
        SetWindowPos(Handle, WndPosArray[Value], 0, 0, 0, 0,
SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);
    end;
end;

procedure TAppBar.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  if not (csDesigning in ComponentState) then
    begin
      Params.ExStyle := Params.ExStyle or WS_EX_TOPMOST or
WS_EX_WINDOWEDGE;
      Params.Style := Params.Style or WS_DLGFRAME;
    end;
end;

procedure TAppBar.CreateWnd;
begin
  inherited CreateWnd;
  FABD.hWnd := Handle;
  if not (csDesigning in ComponentState) then
    begin
      if SendAppBarMsg(ABM_NEW) = 0 then
        raise EAppBarError.Create('Failed to create AppBar');
      SetAppBarEdge(FEdge);
    end;
end;

procedure TAppBar.DestroyWnd;
begin
  SendAppBarMsg(ABM_REMOVE);
  inherited DestroyWnd;
end;

procedure TAppBar.SetAppBarEdge(Value: TAppBarEdge);
const
  EdgeArray: array[TAppBarEdge] of UINT =
    (ABE_TOP, ABE_BOTTOM, ABE_LEFT, ABE_RIGHT);
begin
  SetAppBarPos(EdgeArray[Value]);
  FEdge := Value;
  if assigned(FOnEdgeChanged) then FOnEdgeChanged(Self);
end;

procedure TAppBar.SetDockedHeight(const Value: Integer);
begin
  if FDockedHeight <> Value then
    begin
      FDockedHeight := Value;
      SetAppBarEdge(FEdge);
    end;
end;

procedure TAppBar.SetDockedWidth(const Value: Integer);
begin
  if FDockedWidth <> Value then
    begin
      FDockedWidth := Value;
      SetAppBarEdge(FEdge);
    end;
end;

initialization
  AppBarMsg := RegisterWindowMessage('ApplicationBarMessage');

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

Mesaj gönderen mrmarman »

@ardahan

- Bu nedir ? Bir açıklamayı bizden esirgeme lütfen... :?:
:arrow: Google'dan arattım bulduğum link şu... Bari bunu yazsaydın...
http://www.delphi32.com/vcl/3688/

@Emre

- Programının ne işlem yaptığını bildirirsen çözüm üretmek için faydalı olur.

- Windows Taskbar çok özel bir yerdir ve Microsoft buraya müdahaleye hiç sıcak bakmıyor... :roll:

- AutoHide özelliğini bile açıp kapatmaya izin yokken buraya ne yerleştirmek istiyorsun bunu açıklarsan iyi olur.
Resim
Resim ....Resim
ardahan
Üye
Mesajlar: 144
Kayıt: 26 Oca 2004 05:17
Konum: İstanbul - Kocaeli - Ardahan
İletişim:

Mesaj gönderen ardahan »

Selam

TAppBar diye bir bileşen var bende. Onun source kodu (Open Source tur) nı yolladım. Anladığım kadarıyla arkadaş uygulaması için bir taskbar tarzı bir yapı yapmaya çalışıyor ona istinaden yolladım.

Kızılacak bi şi yok yani :) Nasıl yapıldığını ben bilmiyorum ki onu açıklayayım :) Windows message larla da bir iş yüzünden bu aralar uğraşıyorum.

Bi de sana zahmet sitenin backgroundunu ya da text rengini değiştirebilirmisin? Yok kredi kartı satıcıları gibi küçük harflerle büyük voleler vurmak için görünmez yazılar kullanıyorsan bişi demicem :)))
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

:lol: İşte şu yazdıklarını başına yazssaydın, sana gönderme yapmazdım.. :oops:

:lol: DivXTurk Programı o kadar çok şey yapıyor ki onları az yere sığdırmaya çalıştım desem :lol: :lol: :lol:

:arrow: Şaka bir yana, Selçuk ŞENER isimli DivXTurk Kullanıcı bir arkadaşımın tasarımı... Kendisi programı beğenmiş, bedava olduğunu da görünce kendisinin de çorbada tuzu bulunsun istemiş. Bu güzel jestini kırmak bir yana ben de sayfayı beğendim aslında. Logo ve Sayfa çok uyumlu...

:arrow: Sana hak vermemek de yanlış olur aslında, host ve güncelleme bende ama kendisinden manevi telif adına bir görüşürüm.

:arrow: Önerin için ayrıca teşekkürler...

@Admin Senin de önerin yerine ulaştı... Artık splash screen ile ana formdaki resim bağımsız oldu. Yola çıkış noktası adına sana ayrıca teşekkürler.

- Emboss edince logo ayrı bir güzel oldu. Formun rengini de eşleyince taşa oyulmuş bir DivXTurk Logosu oldu.

Resim

Resim
Resim
Resim ....Resim
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7602
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

evet Muharrem bey böyle çok daha iyi ve güzel olmuş.

Bu arada yakında buraya da bir DivxTurk forumu açmak zorunda kalacağız herhalde :lol:

Kolay gelsin.
ardahan
Üye
Mesajlar: 144
Kayıt: 26 Oca 2004 05:17
Konum: İstanbul - Kocaeli - Ardahan
İletişim:

Mesaj gönderen ardahan »

Muharrem Bey yaş kaç sorması ayıptır? Ona göre abi falan diyelim. Programın arabirimini kullanışlı bulmadım. İsterseniz bir katkıda bulunabilirim. Dil desteği de ekleyebiliriz.

Ya bi de ben logoyu beğendim fakat koskoca bir siteyi de logoya uyarlamak mantıksız

Saygılar

Ardahan

(Sakın beni çaylak sanmayın !)
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@mrmcop demen kafi.. Yaşın önemi yok. Delphi ortak paydasındayız... :lol:

:arrow: Önerin için teşekkürler, gerektiğinde yardımcı olacağını bilmek güzel... :oops:

:arrow: Delphi programcılığında öncelik sırası fonksiyonellik ve sistem kaynak tüketimi sınırını en alt düzeyde tutmak 1.Sırada, GUI ise 2.sırada yer alır. Şahsen uguladığım, sürüm ve build numarasını da belirleyen bu unsurlar. 3, 4, 5 sürümler ise yılların birikimi olur.

:arrow: Bu programı ortak kullanıma açma fikri yakın bir arkadaşımın ısrarı ile oldu. 2. sürüme kadar piyasaya çıkmayacaktı, kullananlar da memnu olunca bana bu haliyle release etmek düşerdi ve de yaptım...

:arrow: Bu açıdan hiç baktın mı ? GUI alışkanlık meselesidir. Alışık olduğu tarzda yenilik ister bu doğal.. Ekran formunda dolayı kullanmayan zaten kullanmıyordur. Göstergeler bakılırsa bu sebeple kullanmak istemeyen varsa bile bir o kadar daha insan bunu önemsemiyor... Çünkü ticari bir kaygı yok.. Herkesin kendi gelir kaynağı var zaten...

- İnsan işlerinin hemen görüldüğünü anlayınca bu meseleyi bir kenara bırakıyor. Bir programı tablo gibi sürekli ekranında tutan kim var ki ?

- DivXTurk 1.5.(4).15 olan sürüm numarası, GUI aşamasında DivXTurk 2.x.(x).x serisine dönüşecek...

:arrow: Siteyi logoya uyarlamak konusuna gelince nasıl böyle bir çıkarımda bulundun anlamadım.

- Sadece bir tespitti. Logo ve sitenin uygunluğunu bildirmek, Logo'ya göre site tasarımı için çaba sarfedildiğini ne kadar gösterir ?

- Ha derseniz DivXTurk'ün logosu ezelden beri buydu, site tasarımında bundan yola çıkldı, anlarım... Aynı zamanda bildirmiş olayım; Logo da sitede yeni tasarı.

- Belki görür belki görmez ama gıyabında buradan Selçuk ŞENER'e tekrar teşekkürlerimi sunarım. Herkes için en değerli şey olan, hayatından bir vakti bize ayırıp site tasarlamış...

- Burada Delphi için siz de dahil herkes bu değerli şeyi, yani hayatından ayırdığı vakit ile cevap yazıyoruz... Bunun değerini bilene helal olsun... :idea:
Resim
Resim ....Resim
Cevapla