IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Créer un Bitmap dans une ScrollBox


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut Créer un Bitmap dans une ScrollBox
    Bonsoir,

    J'ai un problème ou plutôt une question, concernant la création d'un Bitmap qui serait contenu dans une ScrollBox.

    En passant par l'interface graphique, je sais créer un TImage dans une ScrollBox, il suffit de déposer le composant souhaité dans celle-cci.
    Là je veux créer un bitmap (plus grand que l'écran) mais de facon dynamique :

    Voici mes bouts de code :

    Variable en Globale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var
      FPrincipale: TFPrincipale;
      Forme_Dessinee:string;
      Dessin_Entite:TImage;
      Bitmap_Fond:TBitmap;
      Nbre_Entite:integer;
    A la création de la form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TFPrincipale.FormCreate(Sender: TObject);
    begin
    Nbre_Entite:=0;
    DoubleBuffered:=true;
    Forme_Dessinee:='Entite';
    Bitmap_Fond:=TBitmap.Create;
    Bitmap_Fond.Width:=FPrincipale.Width;
    Bitmap_Fond.Height:=FPrincipale.Height;
    Bitmap_Fond.Canvas.Brush.Color:=clWhite;
    FPrincipale.Repaint;
    end;
    et dans le OnPaint :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TFPrincipale.FormPaint(Sender: TObject);
    begin
    Canvas.Draw(0,0,Bitmap_Fond);
    end;
    Ce que je souhaite, c'est de créer ce bitmap dans la ScrollBox, est nous sur le canvas de la Fenêtre Principale.

    Merci de votre aide.

  2. #2
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Je te suggère de placer un TPaintBox dans ta ScrollBox, et tu dessines ton bitmap dans la TPaintBox (évènement OnPaint de la PaintBox)

  3. #3
    Membre Expert
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Par défaut
    Salut,

    Sinon pourquoi tu ne créé pas dynamiquement un composant Timage sur la scrollbox et tu met ton bitmap dans le Timage.

  4. #4
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Salut,

    Citation Envoyé par waskol
    Je te suggère de placer un TPaintBox dans ta ScrollBox, et tu dessines ton bitmap dans la TPaintBox (évènement OnPaint de la PaintBox)
    En effet, j'y avais pas pensé. Merci

    Citation Envoyé par tiki06
    Salut,

    Sinon pourquoi tu ne créé pas dynamiquement un composant Timage sur la scrollbox et tu met ton bitmap dans le Timage.
    Je vais essayer aussi cette méthode, je vous tiens tous les 2 au courant
    Merci

  5. #5
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    J'ai tester une des méthodes pour le moment, et je bloque à un endroit.

    Je vous mets le code:

    Déclaration des variables en globales :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var
      FPrincipale: TFPrincipale;
      Forme_Dessinee:string;
      Dessin_Entite:TImage;
      Bitmap_Fond:TBitmap;
      Nbre_Entite:integer;
      Conteneur_Bitmap_Fond:TImage;
    Dans Le FormCreate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    procedure TFPrincipale.FormCreate(Sender: TObject);
    begin
    Nbre_Entite:=0;
    DoubleBuffered:=true;
    Forme_Dessinee:='Entite';
    Conteneur_Bitmap_Fond:=TImage.Create(self);
    Bitmap_Fond:=TBitmap.Create;
    Conteneur_Bitmap_Fond.Parent:=ScrollBox;
    Conteneur_Bitmap_Fond.Width:=2000;
    Conteneur_Bitmap_Fond.Height:=1500;
    Bitmap_Fond.Width:=1000;
    Bitmap_Fond.Height:=1000;
    Bitmap_Fond.Canvas.Brush.Color:=clWhite;
    Conteneur_Bitmap_Fond.Canvas.Draw(0,0,Bitmap_Fond);
    FPrincipale.Repaint;
    end;
    Dans le MouseUp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    procedure TFPrincipale.FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
    if Forme_Dessinee='Entite' then
    begin
      Nbre_Entite:=Nbre_Entite+1;
      Dessin_Entite := TImage.Create(Self);
      Dessin_Entite.Parent:=je ne sais pas;
      Dessin_Entite.Width:=100;
      Dessin_Entite.Height:=150;
      Dessin_Entite.Top:= (Y-(Dessin_Entite.Height div 2));
      Dessin_Entite.Left:=(X-(Dessin_Entite.Width div 2));
      Dessin_Entite.Canvas.Pen.Color:=clBlack;
      Dessin_Entite.Canvas.Brush.Color:= clWhite;
      Dessin_Entite.Canvas.Brush.Style:=bsSolid;
      Dessin_Entite.Canvas.Rectangle(0,0,Dessin_Entite.Width,Dessin_Entite.Height);
      Dessin_Entite.Tag:=Nbre_Entite;
      FPrincipale.Repaint;
    end;
    Mon soucis, se trouve je pense dans le MouseUp, lorsque je crée un nouveau "Dessin_Entite".
    Je ne sais pas comment dire : Tu dois dessiner ce rectangle sur le Bitmap_Fond qui est créée dans un Timage, lui même contenu dans la ScrollBox.

    Si vous pouvez m'indiquez mon erreur SVP.
    Merci

  6. #6
    Membre Expert
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Par défaut
    J'ai executé ton code chez moi et cela fonctionne (J'ai juste modifié 2-3 choses, j'expliquerai en dessous). Juste pour résumer ce que cela fait, afin d'être sur que cela correspond à ce que tu veux :

    J'ai une ScrollBox sur ma form, un rectangle blanc se dessine sur ma scrollbox, ensuite quand je clique à un endroit sur la scrollbox, d'autres rectangles se dessinent. Est-ce correct ?

    Sinon voila ce que j'ai modifié :

    l'évenement OnMouseUp est mis sur la ScrollBox et pas sur la form donc j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    procedure TFPrincipale.ScrollBoxMouseUp(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      if Forme_Dessinee='Entite' then
      begin
        Nbre_Entite:=Nbre_Entite+1;
        Dessin_Entite := TImage.Create(Self);
        Dessin_Entite.Parent:=scrollbox;
        Dessin_Entite.Width:=100;
        Dessin_Entite.Height:=150;
        Dessin_Entite.Top:= (Y-(Dessin_Entite.Height div 2));
        Dessin_Entite.Left:=(X-(Dessin_Entite.Width div 2));
        Dessin_Entite.Canvas.Pen.Color:=clBlack;
        Dessin_Entite.Canvas.Brush.Color:= clwhite;
        Dessin_Entite.Canvas.Brush.Style:=bsSolid;
        Dessin_Entite.Canvas.Rectangle(0,0,Dessin_Entite.Width,Dessin_Entite.Height);
        Dessin_Entite.Tag:=Nbre_Entite;
        FPrincipale.Repaint;
      end;
    end;
    ensuite dans le oncreate de la Form j'ai attribué la ScrollBox comme Parent au composant Timage. ce qui donne donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Conteneur_Bitmap_Fond.Parent:=ScrollBox;
    Puis j'ai redirigé l'évenement OnMouseUp du composant Timage sur celui de la scrollbox (Vu que le composant Timage est au dessus de la scrollbox c'est lui qui intercepte les OnMouseUp).
    J'ai donc rajouté de le Oncreate de la Form la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Conteneur_Bitmap_Fond.OnMouseUp:=ScrollBoxMouseUp;
    Voila, j'espère que ça correspond à ce que tu veux faire.

  7. #7
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    C'est exactement ce que je souhaitais faire!

    Tout fonctionne très bien aussi chez moi
    Merci tiki06 pour ces explications et ces modifications de code

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MFC] Probleme update d'un BITMAP dans une boite.
    Par Platypus dans le forum MFC
    Réponses: 5
    Dernier message: 21/11/2005, 12h31
  2. Créer un mail dans une application
    Par Cedced dans le forum Windows
    Réponses: 1
    Dernier message: 03/10/2005, 11h35
  3. créer un type dans une fonction javascript
    Par amelhog dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/07/2005, 13h54
  4. Comment créer un commentaire dans une cellule d'Excel ?
    Par WebPac dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 26/04/2005, 09h23
  5. Réponses: 6
    Dernier message: 22/12/2004, 11h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo