[Delphi] /\ editeur de tiles /\ page2: pb de onMouseWheel event !

/\ editeur de tiles /\ page2: pb de onMouseWheel event ! [Delphi] - Delphi/Pascal - Programmation

Marsh Posté le 05-08-2002 à 23:49:42    

comme je trouvais pas mon bonheur parmis les composants, j'ai fait un truc tout seul ce soir et j'aimerais bien que qqun télécharge le .exe et le teste chez lui pour me donner des conseils ...
 
une bonne âme ? :jap:


Message édité par trueslash le 30-09-2002 à 13:07:14
Reply

Marsh Posté le 05-08-2002 à 23:49:42   

Reply

Marsh Posté le 05-08-2002 à 23:50:53    

:??: faut faire quoi ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 05-08-2002 à 23:53:07    

antp a écrit a écrit :

:??: faut faire quoi ?




 
essayer et critiquer

Reply

Marsh Posté le 05-08-2002 à 23:53:35    

ok mais je vois pas de lien dans ton post :heink:


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 05-08-2002 à 23:55:32    

Je parie qu'il y avait ce que tu voulais dans la JVCL
 
Y en a un dedans
 
http://jvcl.sourceforge.net
 
(J'ai déjà dit que c'est sous MPL donc gratos?  :ange: )


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 05-08-2002 à 23:55:33    

ah ben faut le temps que j'upload :D
 
http://gardenofeden.free.fr/images [...] inZoom.exe
 
318 ko :sweat:

Reply

Marsh Posté le 05-08-2002 à 23:56:34    

bon, les 3 edit sont les valeurs des composantes en R, G et B et en 16 bits
 
apres, on peut jouer avec la grille
 
vala

Reply

Marsh Posté le 05-08-2002 à 23:58:09    

ha ouais c'est pas mal.
un peu spécial quand même :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 06-08-2002 à 00:01:53    

c'est pas aussi bien que ce que je pensait en fait, dans le carré à gauche des TEdit, ya des couleurs qui se répètent ... :(
 
chaque ligne du carré correspond à la couleur courante que l'on fait varier selon une ou plusieurs compsantes, c normal d'avoir des doublons ? :??:
 
(premiere ligne, selon R, ensuite G, B, RG, RB et enfin GB)

Reply

Marsh Posté le 06-08-2002 à 00:02:31    

antp a écrit a écrit :

ha ouais c'est pas mal.
un peu spécial quand même :D




 
+1 c'est pas méga intuitif, mais c'est nouveau comme concept, j'avais jamais vu  :jap:


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 06-08-2002 à 00:02:31   

Reply

Marsh Posté le 06-08-2002 à 00:03:30    

>> Zion, je vais quand même jeter un coup d'oeil à sourceforge  :)

Reply

Marsh Posté le 06-08-2002 à 00:05:07    

y en a 4 ou 5 différents dans le pack  ;)


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 06-08-2002 à 00:12:19    

pour info, c'est pour faire un éditeur de tile et mon problème de doublons + haut n'apparait pas à chaque fois donc ça doit être naturel ...
 
sinon, je pense faire barre en dessous qui affichera les dernières couleurs sélectionnées pour pouvoir revenir en arrière.
 
à part ça et décrire un peu plus la form, qu'est ce que je pourrais facilement améliorer ?

Reply

Marsh Posté le 06-08-2002 à 00:26:14    

améliorer?
Euh, y a 2 compos, je vois pas ce que tu veux améliorer :o
 
Faudrait ptre en faire une application  ;)


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 06-08-2002 à 10:45:32    

bon, avant d'aller plus loin, je voudrais améliorer le code qui est bien dégueux :sweat:
 
pour l'instant, j'ai une classe avec une méthode raffraichir qui prend en entrée un pointeur sur un canvas et qui dessine ...
 
je voudrais faire hériter cette classe et faire qqchose de plus propre mais j'hésite entre un TPanel t un TGraphicsControl pour l'ancetre ...
 
lequel prendre ? :??:

Reply

Marsh Posté le 06-08-2002 à 13:53:30    

trueslash a écrit a écrit :

bon, avant d'aller plus loin, je voudrais améliorer le code qui est bien dégueux :sweat:
 
pour l'instant, j'ai une classe avec une méthode raffraichir qui prend en entrée un pointeur sur un canvas et qui dessine ...
 
je voudrais faire hériter cette classe et faire qqchose de plus propre mais j'hésite entre un TPanel t un TGraphicsControl pour l'ancetre ...
 
lequel prendre ? :??:




 
 
 :lol: Tu nous demandes un avis sur un code qu'on voit pas... Joli  :jap:  
 
et le TGraphicControl c'est suffisant


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 06-08-2002 à 14:23:04    

c bon, je l'ai fait avec le TGraphicControl :o:o:o
 
c'est tout beau maintenant :o:o:o
 
l'héritage, ça roxx  [:gui42] :love:

Reply

Marsh Posté le 07-08-2002 à 08:39:22    

nouveau problème:
 
avec ma clase héritant d'un TGraphicControl, je voudrais détecter quand la souris cesse de survoler mon objet mais j'ai pas trouvé d'évènement qui fasse ça :/
 
une idée ? :??:
 
:jap:

Reply

Marsh Posté le 07-08-2002 à 10:53:47    

:bounce:

Reply

Marsh Posté le 07-08-2002 à 13:58:30    

CM_MOUSEENTER
 
et
 
CM_MOUSELEAVE
 
 :hello:


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 07-08-2002 à 15:08:25    

mais le problème, c'est que comme évènement du TControl, j'ai que ça:
 

Code :
  1. OnCanResize
  2. OnClick
  3. OnConstrainedResize
  4. OnContextPopup
  5. OnDblClick
  6. OnDragDrop
  7. OnDragOver
  8. OnEndDock
  9. OnEndDrag
  10. OnMouseDown
  11. OnMouseMove
  12. OnMouseUp
  13. OnResize
  14. OnStartDock
  15. OnStartDrag


 
il faut pas utiliser d'évenements ? :??:

Reply

Marsh Posté le 07-08-2002 à 15:14:51    

http://www.google.com/search?sourc [...] TER+delphi
 
http://groups.google.com/groups?so [...] TER+delphi
 
T'es pas limité a ce que borland te propose, faut intercepter le message toi même.
 
 :hello:


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 07-08-2002 à 15:21:42    

ok merci :jap:
 
j'ai jamais fait ça, c'est l'occasion d'apprendre

Reply

Marsh Posté le 07-08-2002 à 15:28:54    

La meilleure facon d'apprendre, c'est de regarder les sources des autres.
 
http://jvcl.sourceforge.com
Y a + de 300 composants, tu trouveras ton bonheur en sources à analyser ;-)
 
 
Ex:
 

Code :
  1. type
  2.   TJvEdit = class(TEdit)
  3.    [...]
  4.   protected
  5.     procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
  6.     procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
  7.    [..]


 
 
 


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 07-08-2002 à 15:29:08    

ça roxx
 

Code :
  1. procedure ZoomMouseLeave(var msg : TMessage); message CM_MOUSELEAVE;
  2.   procedure TDessinZoom.ZoomMouseLeave(var msg : TMessage);
  3.   begin
  4.     clicGauche := false;
  5.   end;


 

Reply

Marsh Posté le 09-08-2002 à 23:16:52    

attention, nouvelle question !!!!!!!!!
 
alors, je suis obligé de décrire un peu le code, désolé :/ :
 
j'ai une classe TTileSet
 

Code :
  1. TTileSet = class(TGraphicControl)
  2. public
  3. ...
  4.    constructor create(...)
  5.    procedure addNewTile(...)
  6. ...
  7. protected
  8. ...
  9.    tiles: array of TTile
  10. ...
  11. private


 
tiles est un tableau dynamique , dans le constructeur, j'utilise setlength pour initialiser sa longueur à 1, dans addNewTile, je refais des setlength pour ajouter une case à la fin du tableau.
 
pour l'instant je n'ai pas de desrtucteur et donc quand j'essaye de quitter le prog avec plus d'une case dans le tableau, ça plante ...
 
le problème c que je sais pas détruire sa proprement, j'ai essayé de surcharger le destructeur comme ça:
 

Code :
  1. destructor TTileSet.destroy()
  2. var
  3.   i: integer;
  4. begin
  5.   for i:=0 to length(tiles) - 1 do tiles[i].free();
  6. end;


 
sa plante toujours :cry:
 
je crois que c pas bien de faire des setlength dans les méthodes non ?
 
chuis un peu coincé là :P

Reply

Marsh Posté le 09-08-2002 à 23:19:24    

perso j'utiliserais un TList (liste chaînée)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 09-08-2002 à 23:22:03    

antp a écrit a écrit :

perso j'utiliserais un TList (liste chaînée)




 
 
un TObjectList, il se démerde tout seul pour virer les objets, c'est mieux :o


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 09-08-2002 à 23:23:19    

:jap:
 
je reéssaye ...
 
je rame un peu avec les destructeurs, je sais jamais quand le papa destructeur suffit et quand il faut en faire un nouveau :/

Reply

Marsh Posté le 09-08-2002 à 23:28:34    

Zion a écrit a écrit :

 
 
 
un TObjectList, il se démerde tout seul pour virer les objets, c'est mieux :o




 
sauf quand, comme dans mon cas, tu as parfois deux lists qui pointent vers les mêmes objets :D
(parce que la seconde des deux listes représente ce qui est sélectionné dans la première par ex)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 09-08-2002 à 23:31:32    

Quand tu alloues un truc, tu dois le désallouer dans ton constructeur
 
pour utiliser un TObjectList, je ferais un truc du genre
 
TTaClass = class(TComponent)
private
  FList: TObjectList;
public
  constructor Create(AOwner: TComponent); override;
  destructor Destroy;override;
end;
 
constructor TTaClass.Create(AOwner: TComponent);
begin
  inherited;  //Pour le constructeur, tu le fous au début ca
  FList := TObjectList.Create;
end;
 
destructor TTaClass.Destroy;
begin  
  FList.Free;
  inherited; //Le destructor c'est a la fin l'inherited
end;
 
si c'est un array statique, pas besoin de surcharge, mais dès que tu alloues un truc, ca c'est la jolie soluce.


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 09-08-2002 à 23:32:21    

antp a écrit a écrit :

 
 
sauf quand, comme dans mon cas, tu as parfois deux lists qui pointent vers les mêmes objets :D
(parce que la seconde des deux listes représente ce qui est sélectionné dans la première par ex)




 
Alors tu lui dis  
OwnsObjects := false;  :D


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 09-08-2002 à 23:51:13    

ha ok :D
C'est toujours bon à savoir :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-08-2002 à 00:26:33    

le TObjectList, c'est bieng, mais comment je fais pour accéder à ce qu'il y a dedans ...
 
par exemple, si j'ai ça:
 

Code :
  1. tiles: TTile
  2. ...
  3. tiles[0].drawTile();


 
en il me jette parce qu'il est pas censé savoir que c un TTile le TObject ...
 
faut que je fasse avec des with à chaque fois :heink:
 

Code :
  1. with tiles[0] as TTile do drawTile();

Reply

Marsh Posté le 10-08-2002 à 00:35:39    

non pas des with
 
Cast avec check du type (exception si c pas la bonne classe)
(tiles[0] as TTile).Machin
 
Cast brute - genre C/C++ (aucun check, plantage assuré si c pas la bonne classe)
TTile(Tiles[0]).Machin


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 10-08-2002 à 00:42:25    

erf je savais même pas que yavait des casts en pascal :D
 
merchi :jap:

Reply

Marsh Posté le 10-08-2002 à 00:44:55    

le with dans ce cas-ci c'est quand même pas mal si tu dois accéder à plusieurs propriétés/méthodes :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-08-2002 à 10:58:29    

merci à tous les deux, voilà le fruit de mon dur travail :/
 
http://gardenofeden.free.fr/images [...] inZoom.exe
 
est-ce que c'est posible de faire du double-buffering avec les TCanvas des TGraphicControl :??:
 

Reply

Marsh Posté le 10-08-2002 à 11:41:37    

Je pense que tu dois l'appliquer au TWinControl le plus proche (Panel ou Form sur lequel est ton compo si jamais le composant dont tu dérives ne le supporte pas)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-08-2002 à 14:48:48    

Eh benh c'est pas mal tout ca, chez moi ca flicker pas du tout en tout cas ;)
 
Pour le double-buffering, en fait c'est tout con, tu sais le gérer toi même en interne, suffit de faire tout tes dessins sur un TBitmap et de faire un Draw du TBitmap dans le OnPaint, c'est tout ce que fait le double-buffering. Sinon comme l'a dit antp, tu l'appliques au compo parent qui le supporte et c'est bon aussi.


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed