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 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|