Hmm ...
Pourquoi pas essayer de récupérer le Handle de Explorer.exe, et puis un EnumWindows pour récuperer le handle du canevas de fond d'écran ... Et on agit pareil qu'avec les handles de "DesktopWindow" ??
J'essayerai dès que possible.
Le vrai problème avec un TCanvas pointant sur le Desktop, c'est de conserver l'affichage (dès que tu déplae une icône ou une fenêtre, ça part à l'ouest...
Si tu as une idée pour considérer le Desktop comme un WallPaper, ce serait pas plus mal...
Bonjour,
tout d'abord merci pour vos commentaires.
@Cirec : oui maintenant que je m'en rends compte il est vrai que c'est un peu léger pour une source ... j'aurai pu au moins mettre un exemple ... quelle honte :'(
Tu pourras quand même me laisser mettre le singleton (et eventuellement la démo) avant de faire disparaître la source :} ?
j'ai réinstallé mon OS et pas encore lissé les polices d'écran ce qui m'a fait prendre une parenthèse "()" pour une accolade "{}" .. ceci et ce que JulioDelphi a dit a fait que j'ai pris ce code pour autre chose que du Delphi ... bouhouououuuu.
Désolé BluePerfect .. ton code a donc bien sa place ici ;)
Conclusion:
Voilà : et ???? ;P
améliorations : Voir commentaires de Cirec
bugs : En si peu de lignes, ça m'étonnerait quand même ;)
conseils : Fournit au moins un programme qui l'utilise ton composant.
optimisations : Pas la peine de perdre du temps dans ce cas précis.
remarques : Nécéssité d'un tel composant ???
class function TDesktopCanvas.NewInstance: TObject;
begin
if __DesktopCanvasSingleInstance = Nil then
begin
__DesktopCanvasSingleInstance := TDesktopCanvas(inherited NewInstance);
Result := __DesktopCanvasSingleInstance;
end
else
raise Exception.Create(ClassName + ' : This object is used at singleton.');
end;
{$ENDIF}
{ TDesktop }
constructor TDesktop.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
fDesktopCanvas := TDesktopCanvas.Create;
end;
destructor TDesktop.Destroy;
begin
fDesktopCanvas.Free;
inherited Destroy;
end;
Cirec ? T'es pas réveillé ? le code blue est clairement du delphi :] Peut etre es tu troublé par les "_" et/ou une indentation excessive mais c'est du pascal ^^
Voici une fonction dont tu pourrais t'inspirer pour l'unicité de ton composant !
class function TAbstract.IsUniqueOfThisClass( _universe:TComponent;
_class:TClass
):Boolean;
var _each:Integer;
_stack:TComponent;
begin
Result := True;
if Assigned(_universe)
then begin
_stack := _universe;
while not( _stack.InheritsFrom(TForm)
or _stack.InheritsFrom(TDataModule)
)
and Assigned(_stack.Owner)
do _stack := _stack.Owner;
_each := 0;
while not(Result)
and (_each < _stack.ComponentCount)
do if _stack.Components[_each].InheritsFrom(_class)
then Result := False
else _each := _each + 1;
end;
end;
20 sept. 2008 à 18:28
19 sept. 2008 à 19:22
Pourquoi pas essayer de récupérer le Handle de Explorer.exe, et puis un EnumWindows pour récuperer le handle du canevas de fond d'écran ... Et on agit pareil qu'avec les handles de "DesktopWindow" ??
J'essayerai dès que possible.
Cordialement, Bacterius !
19 sept. 2008 à 19:07
Un live wallpaper !
19 sept. 2008 à 18:55
Cordialement, Bacterius !
19 sept. 2008 à 18:53