Witam
czy ktoś wie w jaki sposób można zrobić taki pasek postępu widoczny na pasku start na 'belce' tytułowej programu, jaki jest w Windows 7?
Widziałem gdzieś jakieś kody, ale to pod visual basic, na pewno nie pod delphi 7.
Witam
czy ktoś wie w jaki sposób można zrobić taki pasek postępu widoczny na pasku start na 'belce' tytułowej programu, jaki jest w Windows 7?
Widziałem gdzieś jakieś kody, ale to pod visual basic, na pewno nie pod delphi 7.
siekierzyński napisał(a)
na pewno nie pod delphi 7.
i masz racje, w delphi 7 tego nie zrobisz. Musisz mieć nowsze delphi, typu delphi 2009 czy jakie tam jest. Takie co wspiera technologie w najnowszym systemie.
nie znam win7 ale jesli to jest opcja wbudowana w system do informacje o tym znajdziesz na msdn'ie.
prawdopodobnie trzeba sie odwolac do funkcji z jakiegos systemowego dll'a.
i da sie to zrobic w d7, nowsze delphi co najwyzej to ulatwiaja.
A czy w delphi 2009 można instalować komponenty?
oczywiście ze tak, jak w każdym delphi, skołuj sobie najnowsze delphi ja tam nie wiem jaka to wersja, ale im nowsze tym lepiej ;)
chcesz zmieniac wersje delphi bo nie chce Ci sie napisac kilku linijek kodu? :D
http://msdn.microsoft.com/en-us/library/dd391697(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/dd391698(v=vs.85).aspx
Bo w codegear delphi 2009 nie mogłem dodać komponentu HTTPGET. Może nie umiałem?
cimak napisał(a)
chcesz zmieniac wersje delphi bo nie chce Ci sie napisac kilku linijek kodu? :D
http://msdn.microsoft.com/en-us/library/dd391697(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/dd391698(v=vs.85).aspx
Ok, będę musiał się wczytać, bo na razie to jest wielki chaos, jak na 1-szy rzut oka.
to jest tak: spora czesc funkcji ktorych uzywasz w delphi jest czescia systemu i funkcje siedza w rzeczywistosci w windowsowych dll'ach.
wpisz sobie np w delphi "ShowWindow" i z przytrzymanym ctrl kliknij na to.
zobaczysz ze tak naprawde ta funkcja siedzi w user32 (.dll) pod nazwa "ShowWindow".
kazda taka systemowa funkcja jest bardzo dokladnie opisana na msdnie.
wiec jesli tylko jakas funkcja istneiej w systemie i jest opisana i wiesz jak jej uzywac.
to jedyne co musisz zrobic to powiedziec delphi ze "funkcja znajduje sie w tym i tym pliku dll, przyjmuje takie i takie parametry i zwraca to i tamto".
Czyli Delphi to jakby system w kawałkach, które sobie odpowiednio składamy?
Kombinuję coś, jak te 2 linijki wstawić do delphi, szperam po googlach.
Ty chyba coś jest na ten temat: http://www.drbob42.com/examine/examinC5.htm
Głupoty gadacie, Delphi nie ma tu nic do tego.
Delphi 2009 jedynie wspiera/umożliwia łatwe "włączenie" tej funkcji poprzez "OI", czego w starszych Delphi nie mogło być.
Wystarczy wysłać odpowiedni komunikat do systemu, aby ten pasek postępu był wywołany na belce (tak samo jak migotanie belki).
W necie są kody na to, a jeśli nie w Delphi to na pewno w C++, a to już nie problem przerobić.
Oto dowód na Delphi 7: http://www.delphifeeds.com/go/s/47169
Jakieś 10minut szukania i voila!
źródło: http://code.google.com/p/mulder/source/browse/trunk/LameXP/src/Unit_Win7Taskbar.pas
///////////////////////////////////////////////////////////////////////////////
// LameXP - Audio Encoder Front-End
// Copyright (C) 2004-2010 LoRd_MuldeR <[email protected]>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
//
// http://www.gnu.org/licenses/gpl-2.0.txt
///////////////////////////////////////////////////////////////////////////////
unit Unit_Win7Taskbar;
interface
uses
Forms, Types, Windows, SysUtils, ComObj, Controls, Graphics;
type
TTaskBarProgressState = (tbpsNone, tbpsIndeterminate, tbpsNormal, tbpsError, tbpsPaused);
function InitializeTaskbarAPI: Boolean;
function SetTaskbarProgressState(const AState: TTaskBarProgressState): Boolean;
function SetTaskbarProgressValue(const ACurrent:UInt64; const AMax: UInt64): Boolean;
function SetTaskbarOverlayIcon(const AIcon: THandle; const ADescription: String): Boolean; overload;
function SetTaskbarOverlayIcon(const AIcon: TIcon; const ADescription: String): Boolean; overload;
function SetTaskbarOverlayIcon(const AList: TImageList; const IconIndex: Integer; const ADescription: String): Boolean; overload;
implementation
const
TASKBAR_CID: TGUID = '{56FDF344-FD6D-11d0-958A-006097C9A090}';
const
TBPF_NOPROGRESS = 0;
TBPF_INDETERMINATE = 1;
TBPF_NORMAL = 2;
TBPF_ERROR = 4;
TBPF_PAUSED = 8;
type
ITaskBarList3 = interface(IUnknown)
['{EA1AFB91-9E28-4B86-90E9-9E9F8A5EEFAF}']
function HrInit(): HRESULT; stdcall;
function AddTab(hwnd: THandle): HRESULT; stdcall;
function DeleteTab(hwnd: THandle): HRESULT; stdcall;
function ActivateTab(hwnd: THandle): HRESULT; stdcall;
function SetActiveAlt(hwnd: THandle): HRESULT; stdcall;
function MarkFullscreenWindow(hwnd: THandle; fFullscreen: Boolean): HRESULT; stdcall;
function SetProgressValue(hwnd: THandle; ullCompleted: UInt64; ullTotal: UInt64): HRESULT; stdcall;
function SetProgressState(hwnd: THandle; tbpFlags: Cardinal): HRESULT; stdcall;
function RegisterTab(hwnd: THandle; hwndMDI: THandle): HRESULT; stdcall;
function UnregisterTab(hwndTab: THandle): HRESULT; stdcall;
function SetTabOrder(hwndTab: THandle; hwndInsertBefore: THandle): HRESULT; stdcall;
function SetTabActive(hwndTab: THandle; hwndMDI: THandle; tbatFlags: Cardinal): HRESULT; stdcall;
function ThumbBarAddButtons(hwnd: THandle; cButtons: Cardinal; pButtons: Pointer): HRESULT; stdcall;
function ThumbBarUpdateButtons(hwnd: THandle; cButtons: Cardinal; pButtons: Pointer): HRESULT; stdcall;
function ThumbBarSetImageList(hwnd: THandle; himl: THandle): HRESULT; stdcall;
function SetOverlayIcon(hwnd: THandle; hIcon: THandle; pszDescription: PChar): HRESULT; stdcall;
function SetThumbnailTooltip(hwnd: THandle; pszDescription: PChar): HRESULT; stdcall;
function SetThumbnailClip(hwnd: THandle; var prcClip: TRect): HRESULT; stdcall;
end;
var
GlobalTaskBarInterface: ITaskBarList3;
function InitializeTaskbarAPI: Boolean;
var
Unknown: IInterface;
Temp: ITaskBarList3;
begin
if Assigned(GlobalTaskBarInterface) then
begin
Result := True;
Exit;
end;
try
Unknown := CreateComObject(TASKBAR_CID);
if Assigned(Unknown) then
begin
Temp := Unknown as ITaskBarList3;
if Temp.HrInit() = S_OK then
begin
GlobalTaskBarInterface := Temp;
end;
end;
except
GlobalTaskBarInterface := nil;
end;
Result := Assigned(GlobalTaskBarInterface);
end;
function CheckAPI:Boolean;
begin
Result := Assigned(GlobalTaskBarInterface);
end;
function SetTaskbarProgressState(const AState: TTaskBarProgressState): Boolean;
var
Flag: Cardinal;
begin
Result := False;
if CheckAPI then
begin
case AState of
tbpsIndeterminate: Flag := TBPF_INDETERMINATE;
tbpsNormal: Flag := TBPF_NORMAL;
tbpsError: Flag := TBPF_ERROR;
tbpsPaused: Flag := TBPF_PAUSED;
else
Flag := TBPF_NOPROGRESS;
end;
Result := GlobalTaskBarInterface.SetProgressState(Application.Handle, Flag) = S_OK;
end;
end;
function SetTaskbarProgressValue(const ACurrent:UInt64; const AMax: UInt64): Boolean;
begin
Result := False;
if CheckAPI then
begin
Result := GlobalTaskBarInterface.SetProgressValue(Application.Handle, ACurrent, AMax) = S_OK;
end;
end;
function SetTaskbarOverlayIcon(const AIcon: THandle; const ADescription: String): Boolean;
begin
Result := False;
if CheckAPI then
begin
Result := GlobalTaskBarInterface.SetOverlayIcon(Application.Handle, AIcon, PAnsiChar(ADescription)) = S_OK;
end;
end;
function SetTaskbarOverlayIcon(const AIcon: TIcon; const ADescription: String): Boolean;
begin
Result := False;
if CheckAPI then
begin
if Assigned(AIcon) then
begin
Result := SetTaskbarOverlayIcon(AIcon.Handle, ADescription);
end else begin
Result := SetTaskbarOverlayIcon(THandle(nil), ADescription);
end;
end;
end;
function SetTaskbarOverlayIcon(const AList: TImageList; const IconIndex: Integer; const ADescription: String): Boolean;
var
Temp: TIcon;
begin
Result := False;
if CheckAPI then
begin
if (IconIndex >= 0) and (IconIndex < AList.Count) then
begin
Temp := TIcon.Create;
try
AList.GetIcon(IconIndex, Temp);
Result := SetTaskbarOverlayIcon(Temp, ADescription);
finally
Temp.Free;
end;
end else begin
Result := SetTaskbarOverlayIcon(nil, ADescription);
end;
end;
end;
initialization
GlobalTaskBarInterface := nil;
finalization
GlobalTaskBarInterface := nil;
end.
Mam już, to właśnie się tym bawię, tylko mam problem z tbpsIndeterminate. Czy do tego też używam SetTaskbarProgressValue?
Bo tbpsIndeterminate wygląda tak samo jak tbpsNormal.
Głupoty gadacie, Delphi nie ma tu nic do tego.
Ja to kiedyś zrobiłem pod Delphi 4. Podobnie jak efekty „szkła” (Aero Glass). Kwestia ręcznego zaimportowania odpowiednich funkcji systemowych.