Accueil > Forum > > > > Dessiner sur un TImage dans un TTabSheet
Dessiner sur un TImage dans un TTabSheet
mardi 27 juillet 2004 à 01:10:10 |
Dessiner sur un TImage dans un TTabSheet

glt0732
|
Pour dessiner dans un TImage la technique la plus simple reste :
Image1.Canvas.MoveTo(50,50); Image1.Canvas.LineTo(50,100);
Ok ! jusque la il n'y a pas de probléme, mais quand je créer plusieur TImage a l'éxécution, Comment s'appelle mes différent TImage ?
Parceque franchement je seche, surtout que cela fait 3 jours que j'essaye de dessiner sur mes différent TImages qui sont contenus dans différent TTabSheet, Enfin bref !
Si quelqu'un connait la solution ce serait cool ! Merci a tous
|
|
mardi 27 juillet 2004 à 07:13:50 |
Re : Dessiner sur un TImage dans un TTabSheet

yvemoreau
|
le mieux c'est de creer un tableau puisque l'on connait le nombres d'image requis.
on pourra ainsi nommé ses éléments et ensuite les détruires facilement dans onClose
var Form1: TForm1; tableImages:array[1..3]of TImage; implementation {$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin tableImages[1]:=TImage.Create(TabSheet1); tableImages[1].Parent:=TabSheet1; tableImages[1].Width:=TabSheet1.Width; tableImages[1].Height :=TabSheet1.Height; tableImages[1].Picture.loadfromFile('1.bmp');
tableImages[2]:=TImage.Create(TabSheet2); tableImages[2].Parent:=TabSheet2; tableImages[2].Width:=TabSheet2.Width; tableImages[2].Height :=TabSheet2.Height; tableImages[2].Picture.loadfromFile('2.bmp');
tableImages[3]:=TImage.Create(TabSheet3); tableImages[3].Parent:=TabSheet3; tableImages[3].Width:=TabSheet3.Width; tableImages[3].Height :=TabSheet3.Height; tableImages[3].Picture.loadfromFile('3.bmp'); end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin FreeAndNil(tableImages[1]); FreeAndNil(tableImages[2]); FreeAndNil(tableImages[3]); end;
{les bmp sont dans le même répertoire que le exe} tu peux aussi leur donné un nom comme ceci: tableImages[3].Name:='Imagenum1'; mais dans ce cas ci le numéro du tableau réfère à celui du tab alors ? yve
|
|
mardi 27 juillet 2004 à 07:33:46 |
Re : Dessiner sur un TImage dans un TTabSheet

yvemoreau
|
bon je vais complémenter un peu... (PageControl1.TabIndex); renvoi le numéro de la page 0 à ... ici il aurait fallu écrire tableImages:array[0..3]of TImage; pour simplifier ou augmenter de 1 (PageControl1.TabIndex+1); pour correspondre au tableau !!!  et de n'importe quel procédure tu pourra dessiner sur le tab actif var z:Integer; begin z:=PageControl1.TabIndex+1; with tableImages[z].Canvas do begin Pen.Color:=ClRed; Pen.Width:=3; MoveTo(50,22); LineTo(44,100); end; end;  yve
|
|
mardi 27 juillet 2004 à 09:28:08 |
Re : Dessiner sur un TImage dans un TTabSheet

glt0732
|
Super ! et Merci, je vais essayer ça tout de suite, et bien entendu je vous tient au courant.
|
|
mardi 27 juillet 2004 à 11:05:59 |
TImage dans un TTabSheet, Mais sur une MDIChild !

glt0732
|
Re-Salut si tu est toujour la bien entendu, aprés avoir analyser ton code, je me suis dit que ce ne pourrait pas fonctionner sachant que je peut avoir 50 TTabSheet donc 50 TImage.
Ce que j'ai oublier de préciser c'est que je suis sur une fenêtre MDI Enfant, et qui plus est je peut créer autant de fenêtre MDI contenant des TTabSheet contenant eux même des TImages.
Pour te résumer tout ceci je ne connait pas les nom des TTabSheet ni des fenetre MDI (TForm2), et bien entendus ni des TImage, étant donné que je les créer tous a l'éxécution, mais ceci est une erreur de ma part, car j'aurais du le préciser dans mon premier message. Ou peut être que je dit n'importe quoi sachant que je suis débutant sur Delphi depuis 1 mois a peine.
Enfin bref ! Assez discuter je vais vous fournir le proto sur lequel je suis en train de travailler :
Alors pour commencer nous avons une TForm1 contenant 3 boutons :
- Un Pour créer des TForm2 - Un Pour créer des TTabSheet sur le TPageControl de la Tform2 - Et un autres pour fermer les TTabSheet
Alors voici la procédure de création de TForm2 (Enfant). Cette procédure ne fait rien d'autre que de créer une fenêtre Enfant MDI, Sachant que j'ai un TPageControl contenant un TTabSheet a la conception, le 1er TTabSheet n'a donc pas besoin d'être créer.procedure TForm1.Button1Click(Sender: TObject); begin Form2:=TForm2.Create(Application); Form2.Caption:=('Dossier n°'+IntToStr(MDIChildCount)); Form2.PageControl1.Pages[0].Caption:='Page n°'+IntToStr(1); Nbr:=1; end; | Maintenant voici la création des nouveau TTabSheet, en faite j'appelle la procédure AddTabSh qui se trouve sur la 2eme Unités.procedure TForm1.Button2Click(Sender: TObject); begin if (ActiveMDIChild is TForm2) then (ActiveMDIChild as TForm2).AddTabSh('Page n°'); end; | Et Maintenant voici la procédure qui le plus gros du travail, c'est a dire la création de TTabSheet et de TImage a l'éxécution. Comme on peut voir j'ai limiter le nombre de TTabSheet a 50. La constante passez en parametre a la procedure n'est autre que le nom du TTabSheet.procedure TForm2.AddTabSh(const F:String); begin if Nbr < 50 then begin TTabSheet.Create(PageControl1).PageControl:=PageControl1; Nbr:=PageControl1.PageCount; PageControl1.Pages[Nbr-1].Caption:=F+IntToStr(Nbr); PIndex:=PageControl1.ActivePageIndex+1; if Nbr-PIndex <> 0 then PageControl1.ActivePageIndex:=Nbr-1; TabSh:=PageControl1.ActivePage; Image1:=TImage.Create(TabSh); with Image1 do begin Parent:=TabSh; Align:=alClient; end; Act:=PageControl1.TabIndex+1; end; end; | Maintenant j'ai la procédure pour dessiner sur le TImage du TTabSheet actif, qui ne fonctionne pas bien entendus.procedure TForm2.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Image1.Canvas.Create; Image1.Canvas.LineTo(x,y); end; | Par souci de clarté je me suis dit qu'il serait bien de fournir tout le prototype tant qu'a faire, et vus qu'il reste seulement 2 procédure autant vous les montrez, ce sont les procédure de suppression de TTabSheet, ici j'actualise seulement la variable qui tient a jour la position du TTabSheet Actif.procedure TForm2.PageControl1Change(Sender: TObject); begin Act:=PageControl1.TabIndex+1; end; | Une autre variable va me servir, c'est Nbr qui est le nombre de TTabSheet contenus dans TPageControl, celle ci est actualiser dans la procedure de création de TTabSheet. L'interêt est que quand on supprime un TTabSheet, et même au millieu, tous les autres se renomme automatiquement. Bien entendu le dernier TTabSheet ne peut être supprimer.procedure TForm1.Button3Click(Sender: TObject); var Z: Integer; begin if (ActiveMDIChild is TForm2) then with (ActiveMDIChild as TForm2).PageControl1 do begin if Nbr>1 then begin ActivePage.Free; Nbr:=PageCount; Act:=TabIndex+1; for Z:=Act to Nbr do Pages[Z-1].Caption:='Page n°'+IntToStr(Z); end; end; end; |
Quand je créer un 2eme TTabSheet je ne peut plus dessiner, en clair c'est le bordel ! Je suis sur qui doit avoir plus simples, mais étant que je suis débutant je ne connait pas toutes les ficelles, alors excuser moi pour ce brouillon ! Et puis sinon Merci !
|
|
mardi 27 juillet 2004 à 16:34:42 |
Re : Dessiner sur un TImage dans un TTabSheet

glt0732
|
Réponse acceptée !
Re-Salut a tous c'est encore moi que voila ! J'ai enfin la solution, hé oui et je l'ai trouvé tout seul comme un grand ! Vous rigolez ou quoi ! Franchement je n'en suis pas encore capable, car je ne suis qu'au stade de débutant, et heureusement que des colégue de developpez.com et de Phidels.com mon aider, sinon je n'était pas sortis de l'auberge, je Re-Merci quand même yvemoreau pour son aide, qui malheureusement était légérement hors sujet, mais cela était de ma faute, et oui je pose une question, et j'en oublis le principale, enfin bref, et si on parlais de la solution ! Tout ce que j'ai a dire c'est que le code du dessus est quasiment bon ! Ce n'est pas compliquer, je vais juste vous rajouter les nouvelle ligne en plus du code ci-dessus. Les nouvelle ligne de code seront en rouge, les anciennent en noir. Procédure pour créer une TForm2 (MDI Enfant)Maintenant je fait un appel a la procédure (AddTabSh) Creation de TTabSheet, avant y'en avait pas, et pour cause j'ai déja une TTabSheet a la conception, hors il est inutile de re-creer une TTabSheet alors qu'elle existe déja, non ! Et voila pourquoi j'affecte 1 a Nbr (Nbr = Nombre de TTabSheet). Vous remarquer aussi qu'il y a un nouveau parametre de type Boolean. Vous verrez plus tard pourquoi.procedure TForm1.Button1Click(Sender: TObject); begin .... ...... Form2.PageControl1.Pages[0].Caption:='Page n°'+IntToStr(1); Form2.AddTabSh(false,'Page n°'); Nbr:=1; end; | Maintenant la création des TTabSheet (Conteneur des TImage)Vous voyez la différence peut être ? Et bien a la création de TForm2, AddTabSh = False, tandis que a la création de TTabSheet, AddTabSh = True. Vous comprenez, sinon vous allez voir plus tard ! Bien entendu on laisse le parametre pour le nom du TTabSheet.procedure TForm1.Button2Click(Sender: TObject); begin if (ActiveMDIChild is TForm2) then (ActiveMDIChild as TForm2).AddTabSh(true,'Page n°'); end; | Passons a la procédure qui créer les TTabSheet et les TImage.La seule chose qui change comme vous pouvez vous en doutez c'est la déclaration de la procédure elle même, on lui rajoute un parametre Boolean. Mais ce n'est pas tout, il va falloir tester ce parametre, et oui c'est ici que l'on créer nos TTabSheet et les TImage, Mais si c'est la procedure de Création de TForm2 qui appele AddTabSh, et bien il ne faut pas que celle ci créer de nouveau TTabSheet étant donnée que TForm2 en créer automatiquement 1, il faut donc faire une instruction IF au tout début de la procédure, et voici ce que cela donne.procedure TForm2.AddTabSh(Add: Boolean; const F:String); begin if Add then begin .... ...... On créer le TTabSheet avec le TImage ..... ...... with Image1 do begin Parent:=TabSh; Align:=alClient; OnMouseDown:=ImageMouseDown; end; Act:=PageControl1.TabIndex+1; end; end else Image1.OnMouseDown:=ImageMouseDown; end; | True = on Créer TTabSheet et Timage dynamiquement False = on Appelle la procédure ImageMouseDown (précédement créer)Et maintenant le clous finale, et croyer moi c'est lui qui fais tout !Vous voyez l'affectation de ImageMouseDown, et bien on dit que l'événement OnMouseDown celui que l'on trouve dans l'inspecteur d'objet, on dit qu'il est = a notre procédure nommé ImageMouseDown, et comme a chaque événement, celui ci se dirigera vers la bonne TImage. Il suffit donc de faire :Procedure TForm2.ImageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin (sender as Timage).canvas.lineTo(x,y); end; end. |
Et voila, ce n'était pas grand chose, mais quand on connait pas, c'est toujour compliquer. Maintenant si ça vous dit, faite un copier coller du code que vous avez dans le post précédent, et rajouter y le code ici même en rouge, et bon dev !
|
|
mardi 27 juillet 2004 à 17:35:32 |
Re : Dessiner sur un TImage dans un TTabSheet

yvemoreau
|
ok, que se passe-t-il à la fin ? tu ne dois pas oublier de liberer les ressources procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var x:Integer; begin for x:=0 to PageControl1.PageCount-1 do begin //On libère le Timage du TTabSheet  //On libère le TTabSheet du TPageControl end; end; yve
|
|
jeudi 29 juillet 2004 à 02:38:36 |
Re : Dessiner sur un TImage dans un TTabSheet

glt0732
|
Re-Bonjour monsieur yve !
En clair entre mon dernier message et celui la je dormais, et je n'est donc pas pu lire ton message, et je t'avourais que je ne comprend pas trop ton message, j'espere donc que tu lira le miens.
Sinon si c'est pour la fermeture de TForm1, je pensais que les ressource était liberer des que l'on cliquait sur la croix en haut a droite, sinon je sais pas !
|
|
dimanche 1 août 2004 à 19:21:10 |
Re : Dessiner sur un TImage dans un TTabSheet

saib
|
Salut
Tu peut egalement passer par un pointeur, ce qui permet une plus grande souplesse d'utilisation
Il faut savoir que le "nom" d'un controle n'est autre qu'un pointeur vers le controle proprement dit
On peut donc assigner un controle a un pointeur du meme type par exemple, si j'ai une image TImage1 sur ma Form, je peux l'utiliser et y acceder par un autre nom il suffit pour cela de declarer une variable de type Timage
Var MonImage : TImage;
Procedure TrucBidule(Sender : TObject) Begin MonImage := (Sender as TImage) //on assigne le SEnder a la variable MonImage (il faut bien sur que le Sender soit toujours un TImage)
MonImage.Canvas.LineTo(x,y) MonImage.Width := MonImage.Width div 2 MonImage.Picture.LoadFromFile('CheminDuFichier'); etc... end;
de cette maniere, tu peut par exemple recuperer l'image assosiée au TabSheet actif sur l'evenement OnShow des TabSheet ou OnChange du TabControl, soit par le nom, soit par lien de parenté (boucle For jusqu'a ComponentCount - 1 et tu teste Components[i] pour savoir si c'est un TImage, etc...) mais c'est moins propre, et utiliser une variable pour faire des actions specifiques sur l'image quand se produisent des evenements particuliers (appui sur un bouton, changement de contenu d'un TEdit, etc...)
Voila, une p'tite astuce pour se faciliter la vie ;)
SaiB
|
|
Cette discussion est classée dans : dessiner, size, timage, différent, ttabsheet
Répondre à ce message
Sujets en rapport avec ce message
Mettre du texte dans un Timage [ par blue71 ]
Blue71Blue71Blue71Hello tout le monde, voilà j'ai une question. J'aimerai mettre du texte dans un Timage par exemple la date, cependant je sais pas co
pb drag & drop [ par templeofboom ]
Bonjour j'aimerais savoir comment récupérer le parent d'un composant créé dynamiquement je m'explique : g un TTabControl sur ma fiche je peu créé d
PB pour dessiner sur un Canvas je séche... [ par ffert ]
Bonjour Voilà un des Bug les plus incompréhensible que j'ai rencontré.... : J'ai un Panel contenant un TImage. Le Panel est en "Visible := False" à l'
Dessin dans TImage sans LoadFromFile ? [ par steph12358 ]
Bonjour à tousJ'ai 2 petites questions concernant le composant TImage1/ Peut-on dessiner dans un composant TImage sans faire un LoadFromFile avec une
Mettre du texte dans un Timage [ par blue71 ]
Blue71Blue71Blue71Hello tout le monde, j'aimerai placé du text dans un Timage, cependant je sais pas comment faire. Pouvez vous m'aider ? Se serait co
Enrensitrement d'une sequence video. [ par blue71 ]
Blue71Blue71Blue71Hello tout le monde, voilà j'ai une question. J'aimerai mettre du texte dans un Timage par exemple la date, cependant je sais pas co
Timage et plein ecran [ par toutepetitesouris ]
bon voila mon problème :)que je met mon form en plein écran l'image que j'ai mise en fond ne suit pas les bords du form...en fait je ne sait pas comme
Problème avec TImage ? [ par debiars87 ]
Bonjour à tous !!J'ai placé dans une Form une TImage puis j'ai ajouter une Image BitMap mais lors de L'enregistrement il prend beaucoup de temps ainsi
delphi couche alpha images PNG [ par josephlatcha ]
<link rel="Fi
Position d'une scrollbar dans une ScrollBox [ par lp0683 ]
Bonjour à tous :)J'ai un petit soucis, malgrè que je me soit baladé dans les diverse surjet parlant de ca, j'ai toujours rien trouvé.Je creer dynamiqu
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOURTECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOUR par ROMELARD Fabrice
Cette session est la dernière pleinière de ces 3 jours de TechDays Paris 2010. Généralement, cette troisième journée est plus axée sur l'avenir vu par Microsoft. Après un retour sur l'avenir vu par la Science Fiction ou par ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : SAVEDIALOGRE : SAVEDIALOG par JulioDelphi
Cliquez pour lire la suite par JulioDelphi RE : SAVEDIALOGRE : SAVEDIALOG par zeydounnounou
Cliquez pour lire la suite par zeydounnounou
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|