begin process at 2010 02 10 07:42:30
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Composants

 > COMPOSANT TDESKTOP

COMPOSANT TDESKTOP


 Information sur la source

Note :
Aucune note
Catégorie :Composants Classé sous :composant, desktop, canevas, canvas, handle Niveau :Débutant Date de création :18/09/2008 Vu / téléchargé :2 684 / 186

Auteur : Bacterius

Ecrire un message privé
Commentaire sur cette source (17)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Ayant lu récemment un excellent livre sur la conception des composants, je vous présente mon nouveau-né ;)

Voici un composant (très simple, sans prétention) qui vous permettra d'accéder rapidement au canevas bureau, et d'écrire dessus, etc ...
Vous pouvez, en parallèle, récupérer le DC et le handle du bureau ;)

Je rencontre 1 difficulté pour le moment :
- comment autoriser 1 seul composant par application


 Conclusion

Voilà, améliorations, bugs, conseils, optimisations, remarques, erreurs, problèmes, critiques, etc ...

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture UNITÉ DE SUPPORT VISTA
Source avec Zip Source avec une capture GESTION DES "CRASHS D'APPLICATION"
Source avec Zip Source avec une capture CONJECTURE DU CARRÉ DES FACTEURS
Source avec Zip Source avec une capture EFFET VITRE ET THUMBNAILS SOUS VISTA
Source avec Zip Source avec une capture UTILISER UNE DLL INCLUSE EN RESSOURCES

 Sources de la même categorie

Source avec Zip Source avec une capture TQGRID UN STRINGGRID AMÉLIORER. par yanb
Source avec Zip DYNAMIC LIBRARY LOADER CLASS: GAGNEZ DU TEMPS POUR CHARGER L... par f0xi
Source avec Zip Source avec une capture COMPOSANTS NDSOFT par diglas
Source avec Zip Source avec une capture GESTION DES "CRASHS D'APPLICATION" par Bacterius
Source avec Zip COMPOSANT TTHRESCOLLECTION par ThWilliam

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture TQGRID UN STRINGGRID AMÉLIORER. par yanb
Source avec Zip Source avec une capture GESTION DES "CRASHS D'APPLICATION" par Bacterius
Source avec Zip Source avec une capture UN JOLI BOUTON ! par Bacterius
Source avec Zip Source avec une capture DATETIMEPICKER : AJOUT DE FONCTIONS par simonpelloquin
Source avec Zip Source avec une capture COMPOS TCYCOMPONENTS V2.6 par MAURICIO

Commentaires et avis

Commentaire de Bacterius le 18/09/2008 21:34:32

Composant codé sous Delphi 6.

Cordialement, Bacterius !

Commentaire de blueperfect le 18/09/2008 23:40:55

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;

Commentaire de cirec le 19/09/2008 01:00:15 administrateur CS

@blueperfect:
il semblerait que tu te sois trompé de site ... ici on code en Pascal Object (Delphi).


@Bacterius:

Faire un composant pour dire voilà je l'ai fait c'est pas utile.
Ton composant n'apporte rien et d'un point de vue de code c'est maigre pour en faire un zip a déposer sur CS.

Ensuite pour le code, je dirais juste: soit le livre est pas si bon que tu le penses ou tu l'as lu trop vite .... je te conseil de le lire à nouveau ... il y  a plein de petites fautes dans le codes:
on ne fait pas appel directement à la propriété dans le code mais à sa variable associée (Ex: pas DesktopCanvas  -- mais FDesktopCanvas )
ici les variables "private" ne sont même pas utilisées.
certaines propriétés devrait être en lecture seule
et dans le destructeur on fait, en général, appel à la méthode héritée en dernier.

voilà en gros ce que j'ai à dire.

pour autoriser un seul composant par application ça s'appel un Singleton va voir ici:
http://www.delphifr.com/code.aspx?ID=27143

Surtout les commentaires de Delphiprog.

je laisse encore quelques temps le code mais tu comprendras que je doive le supprimer.

Commentaire de blueperfect le 19/09/2008 01:47:33

Heuuu....

Pourtant mon code, c'est du Pascal....

Commentaire de JulioDelphi le 19/09/2008 09:09:23 administrateur CS

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 ^^

Commentaire de blueperfect le 19/09/2008 11:38:10

Ouais, ça j'avoue, les '_' me viennent du C++, et l'indentation du Lyçée...

Ceci dit, l'approche singleton n'et pas mauvaise non-plus, mais C du Windows, alors que ma fonction s'appuie sur la VCL...

DH

Commentaire de f0xi le 19/09/2008 13:11:15 administrateur CS

Hop, je t'ajoute la GDI+ (Désactivable) et le code pour le SingleTon (Désactivable).

on passe de TComponent a TCanvas, car inutile d'avoir TComponent.


{$DEFINE DESKTOPCANVAS_USEGDIPLUS}   // active la GDI+
{$DEFINE DESKTOPCANVAS_ASSINGLETON}  // active le mode Singleton

{$IFDEF DESKTOPCANVAS_USEGDIPLUS}
uses GdipApi, GdipClass;
{$ENDIF}

type
  TDesktopCanvas = class(TCanvas)
  private
    fDesktopHandle: HWND;
    fDesktopHDC   : HDC;
    {$IFDEF DESKTOPCANVAS_USEGDIPLUS}
    fGPGraphics : TGPGraphics;
    fGPPen      : TGPPen;
    fGPBrush    : TGPSolidBrush;
    {$ENDIF}
  protected
    procedure CreateHandle; override;
  public
    {$IFDEF DESKTOPCANVAS_USEGDIPLUS}
    property GPGraphics  : TGPGraphics   read fGPGraphics;
    property GPPen       : TGPPen        read fGPPen;
    property GPSolidBrush: TGPSolidBrush read fGPBrush;
    {$ENDIF}
    property DesktopHandle: HWND read FDesktopHandle;
  public
    {$IFDEF DESKTOPCANVAS_USEGDIPLUS}
    constructor Create(const Compositing: CompositingQuality = CompositingQualityDefault;
                       const Smooth : SmoothingMode = SmoothingModeAntiAlias); reintroduce;
    {$ELSE}
    constructor Create; reintroduce;
    {$ENDIF}
    destructor Destroy; override;
    {$IFDEF DESKTOPCANVAS_ASSINGLETON}
    class function NewInstance: TObject; override;
    procedure FreeInstance; override;
    {$ENDIF}
  end;

  TDesktop = class(TComponent)
  private
    fDesktopCanvas : TDesktopCanvas;
  public
    property DesktopCanvas : TDesktopCanvas read fDesktopCanvas;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;


{$IFDEF DESKTOPCANVAS_ASSINGLETON}
var
  __DesktopCanvasSingleInstance : TObject = nil;
{$ENDIF}

{$IFDEF DESKTOPCANVAS_USEGDIPLUS}
constructor TDesktopCanvas.Create(const Compositing: CompositingQuality = CompositingQualityDefault;
                       const Smooth : SmoothingMode = SmoothingModeAntiAlias);
begin
  inherited Create;
  fDesktopHandle := GetDesktopWindow;
  fDesktopHDC    := GetWindowDC(fDesktopHandle);
  Handle         := fDesktopHDC;

  fGPGraphics    := TGPGraphics.Create(Handle);
  fGPGraphics.SetCompositingQuality(Compositing);
  fGPGraphics.SetSmoothingMode(Smooth);
  fGPPen         := TGPPen.Create(aclBlack);
  fGPBrush       := TGPSolidBrush.Create(aclWhite);
end;
{$ELSE}
constructor TDesktopCanvas.Create;
begin
  inherited Create;
  fDesktopHandle := GetDesktopWindow;
  fDesktopHDC    := GetWindowDC(fDesktopHandle);
  Handle         := fDesktopHDC;
end;
{$ENDIF}

procedure TDesktopCanvas.CreateHandle;
begin
  if Handle <> fDesktopHDC then
    Handle := fDesktopHDC;
end;

destructor TDesktopCanvas.Destroy;
begin
  {$IFDEF DESKTOPCANVAS_USEGDIPLUS}
  fGPBrush.Free;
  fGPPen.Free;
  fGPGraphics.Free;
  {$ENDIF}
  ReleaseDC(fDesktopHandle, Handle);
  inherited Destroy;
end;

{$IFDEF DESKTOPCANVAS_ASSINGLETON}
procedure TDesktopCanvas.FreeInstance;
begin
  inherited FreeInstance;
  __DesktopCanvasSingleInstance := Nil;
end;

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;

Commentaire de WhiteHippo le 19/09/2008 13:21:22

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 ???

Cordialement.

Commentaire de cirec le 19/09/2008 15:07:19 administrateur CS

euh ... ouai ... j'devais pas être réveillé :(

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 ;)

Commentaire de Bacterius le 19/09/2008 17:05:17

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 :} ?

Cordialement, Bacterius !

Commentaire de Bacterius le 19/09/2008 17:10:32

Erf f0xi je n'ai pas les unités GdiPClasses et GdiPApi.
Je cherche ...

Cordialement, Bacterius !

Commentaire de blueperfect le 19/09/2008 18:52:42

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...

Commentaire de blueperfect le 19/09/2008 18:53:20

oups : 'tu déplae' à lire 'tu déplaces"

Commentaire de Bacterius le 19/09/2008 18:55:37

Tu veux dire prendre comme canevas le fond d'écran et non pas le moniteur ?

Cordialement, Bacterius !

Commentaire de blueperfect le 19/09/2008 19:07:03

en quelque sorte...

Un live wallpaper !

Commentaire de Bacterius le 19/09/2008 19:22:24

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.

Cordialement, Bacterius !

Commentaire de blueperfect le 20/09/2008 18:28:02

S'il y avait une voie à explorer, ce serait, selon moi, du côté de Active Desktop (les éléments Web de la Personalisation du Bureau)....

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Impression d'un composant graphique [ par boichejc ] Bonjour, j'aimerais pouvoir imprimer un composant graphique qui est dispos&#233; dans une scrollbox. j'ai deja essayer d'imprimer le canvas du composa effacer un graphique [ par gorneaue ] J'utilise le composant TImage pour dessiner la courbe d'une fonction.Je ne sais pas si c'est le composant adequat, mais je n'ai trouve que celui-ci :( Composant erreur canvas [ par Bruto ] Voila j'essaye de créer un composant & je récupère une erreur que je n'arrive pas à élucider.Il me dit 'Identificateur non déclaré Canvas' pour la lig Problème Canvas sous Vista Aero [ par dim07 ] Bonjour,J'utilise le code suivant pour afficher du texte dans la barre de menu d'un écran :<span Image.Canvas.Font.Color ? [ par Taktaky ] Salut,j ai un problème avec Richeditje ne sais pas pourquoi le code ne marche pas Image.Canvas.Font.Color:=RichEdit.SelAttributes.Color;mais le Texte Ecrire du texte avec TextRect d'un Canvas [ par christophedlr ] Bonsoir,Je voudrais écrire du texte dans un canvas avec la fonction TextRect.Mon soucis est que le texte ne s'affiche pas, j'ai même essayé le code su recuperer le hande de la zone d'edition de word [ par pixigol ] Bonjour Je souhaiterais recupérer le handle de la zone d'édition de word. J'ai trouvé en cherchant sur les forums comment trouver le handle de ma word Ajout Handle [ par Nicolas___ ] Bonjour , c'est encore moi (ce soir j'use enfin du forum  ) j'aimerais bien intercepter les touches down et up mais pour ca il faut choper le focus du TTreeView conteneur de composants ? [ par DooM666 ] Bonjour, je voudrais afficher dans un TTreeView (ou un autre composant si vous avez une proposition) un composant pour chaque node, par exemple un bou


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales