begin process at 2012 02 07 06:13:56
  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é :3 674 / 244

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 RAYTRACING EN DELPHI (PROGRESSIVE PATH TRACING)
Source avec Zip Source avec une capture MOTEUR PHYSIQUE 2D CHIPMUNK.. EN DELPHI!
Source avec Zip Source avec une capture DOWNSAMPLING OU COMMENT BIEN OPTIMISER LE CODE
Source avec Zip Source avec une capture FACTORISATION ET TEST DE PRIMALITÉ 32 BITS ULTRA OPTIMISÉ
Source avec Zip LECTEUR DE FICHIER MULTIMÉDIA RIFF

 Sources de la même categorie

Source avec Zip MOVCONTROL par abmed1963
Source avec Zip Source avec une capture PACKAGE DE COMPOSANTS CINDY V4.41 par MAURICIO
Source avec Zip Source avec une capture DBNAVIGATORPLUS par pascal1541
Source avec Zip Source avec une capture EVALUATION D' EXPRESSIONS MATHÉMATIQUE (MÉTHODE RPN) par MAURICIO
Source avec Zip Source avec une capture COMPOSANT TQPROGRESSBAR UNE BARRE DE PROGRESSION... par yanb

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture PROJETS DÉMO DU PACK DE COMPOSANTS CINDY V4.30 par MAURICIO
Source avec Zip Source avec une capture COMPOSANT TQPROGRESSBAR UNE BARRE DE PROGRESSION... par yanb
Source avec Zip TGPS COMPOSANT DE GESTION DES TRAMES NMEA 0185 par ILP
Source avec Zip COMPOSANT TCYCOMMUNICATE - COMMUNIQUER AVEC VOS AUTRES APPLI... par MAURICIO
Source avec Zip Source avec une capture MUSIC PRO COMPOSANTS par Francky23012301

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 :( 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 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 Console [ par mimoun ] J'ai un probleme, g une application en C, je voudrai pourvoir la piloter avec delphi. Donc il me faut un handle sur la console, un handle sur l'entree Aide pour composant MySQL de ce site ? [ par Fredelphi ] Bonjour,Je suis à la recherche d'une aide assez complète sur le composant MySQL trouvé sur ce site, car l'aide jointe n'est pas finie .........Qui peu Existe-t-il une methode plus rapide que draw... [ par balgrim ] Existe-t-il une methode plus rapide que draw pour ecrire sur un canvas. En fait, j'ai un bmp, et un canvas et j'aimerais pouvoir tres rapidement envoe WEBBROWSER [ par sissokomad ] comment rendre un composant webbrowser transparent(donc toujour accessible par clic) si c'est impossible quelle autre composant me permettrait de fair evenement Onprint d'un composant QuickReport [ par manudel ] Voilà l'événement Onprint ne marche pas quand j'ai plusieurs enregistrements dans mon OracleDataSet : il garde en mémoire le dernier enregistrement, e composant shelltreeview ! help [ par minipod ] Où est-ce que je peux trouver un composant ShellTreeView pour Delphi 5 s'il vouys plaît ! Merci.


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 2,246 sec (3)

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