Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2460 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

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

n°193468
zion
Plop
Posté le 10-08-2002 à 14:48:48  profilanswer
 

Reprise du message précédent :
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
mood
Publicité
Posté le 10-08-2002 à 14:48:48  profilanswer
 

n°197737
trueslash
(╯°□°)╯︵ MMM
Posté le 20-08-2002 à 09:55:05  profilanswer
 

nouveau problème:
 
j'aimerais sauvegarder le travail effectué sur le programme
 
je sais seulement utiliser les fichier typés (file of ...) mais j'ai besoin de sauvegarder des chaines de caractères et des tableaux dynamiques, je ne peux donc pas créer un enregistrement correspondant :/
 
comment faire :??:
 


---------------
sympathisant UBCT
n°197788
trueslash
(╯°□°)╯︵ MMM
Posté le 20-08-2002 à 10:59:41  profilanswer
 

:bounce:


---------------
sympathisant UBCT
n°197884
trueslash
(╯°□°)╯︵ MMM
Posté le 20-08-2002 à 12:08:38  profilanswer
 

:bounce:
 
alors, c comment kon sauvegarde :D


---------------
sympathisant UBCT
n°197888
antp
Super Administrateur
Champion des excuses bidons
Posté le 20-08-2002 à 12:09:53  profilanswer
 

à mon avis le plus simple sera de gérer toi même ton fichier, en écrivant par ex un entier disant la taille du tableau stocké dans le fichier, puis en écrivant un tableau de cette taille.
Pour les chaînes pareil, un entier pour la longueur, puis la chaîne elle même


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°197903
trueslash
(╯°□°)╯︵ MMM
Posté le 20-08-2002 à 12:31:12  profilanswer
 

antp a écrit a écrit :

à mon avis le plus simple sera de gérer toi même ton fichier, en écrivant par ex un entier disant la taille du tableau stocké dans le fichier, puis en écrivant un tableau de cette taille.
Pour les chaînes pareil, un entier pour la longueur, puis la chaîne elle même




 
oui mais comment on fait ça ? :??:
 
je déclare un file of ...
 
(en fait, au début, je voulais faire un file of integer et je me suis dis 'merde j'ai oublié les strings';)


---------------
sympathisant UBCT
n°197905
antp
Super Administrateur
Champion des excuses bidons
Posté le 20-08-2002 à 12:34:32  profilanswer
 

TFileStream ;)
 

Code :
  1. var
  2.   f: TFileStream;
  3.   s: string;
  4.   i: Integer;
  5. begin
  6.   s := 'coucou';
  7.   i := Length(s);
  8.   f := TFileStream.Create('c:\mon fichier.txt', fmCreate);
  9.   f.Seek(0, soFromBeginning)
  10.   f.Write(i, SizeOf(Integer));
  11.   f.Write(@s[1], i);
  12.   f.Free;
  13. end;


Message édité par antp le 20-08-2002 à 12:34:45

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°197907
trueslash
(╯°□°)╯︵ MMM
Posté le 20-08-2002 à 12:36:16  profilanswer
 

ok, je regarde le TFileStream, si on est libre d'écrire ce que l'on veut, c'est ce qu'il me faut :jap:


---------------
sympathisant UBCT
n°197910
antp
Super Administrateur
Champion des excuses bidons
Posté le 20-08-2002 à 12:42:29  profilanswer
 

oui là c'est toi qui gère le fichier comme tu veux
c'est le plus souple pour faire un format propre à toi
 
vaut mieux mettre un entête spécial pour éviter qu'on charge n'importe quoi, genre une chaine de 100 octets que tu compares avant de lire la suite du fichier :)


Message édité par antp le 20-08-2002 à 12:42:47

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°197988
trueslash
(╯°□°)╯︵ MMM
Posté le 20-08-2002 à 14:42:44  profilanswer
 

j'ai dû remplacer
 

Code :
  1. f.Write(@s[1], i);


 
 
par
 

Code :
  1. f.Write(pointer(s)^, i);


 
sinon, ça marche au poil :jap:
 
(il me disait 'variable required', bizarre)

mood
Publicité
Posté le 20-08-2002 à 14:42:44  profilanswer
 

n°197991
antp
Super Administrateur
Champion des excuses bidons
Posté le 20-08-2002 à 14:49:23  profilanswer
 

faut peut-être pas le @ alors
par contre si tu fais pointer(s) ça va foirer, sûr à 100% ;) Il mettra pas d'erreur mais t'auras des conneries dans le fichier :D
(s = pointeur vers un objet de type AnsiString, alors que s[1] = 1er caractère de la chaine, donc début de la zone où est réellement l'objet)
 
pour la lecture tu lis d'abord l'integer (i), puis tu fais SetLength(s, i), puis tu fais un Read(s[1], i);


Message édité par antp le 20-08-2002 à 14:50:27

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°198040
trueslash
(╯°□°)╯︵ MMM
Posté le 20-08-2002 à 15:35:08  profilanswer
 

ouép, ça marche bien sans la @
 
ça va bien me simplier tout le bordel ça, tant mieux :)
 
par curiosité, ya quoi de stocké dans une string à part des caractères, la longueur ?

n°198053
antp
Super Administrateur
Champion des excuses bidons
Posté le 20-08-2002 à 15:38:51  profilanswer
 

la longueur, oui je suppose, mais il gère ça de manière un peu spéciale donc mieux vaut pas s'en mêler :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°198056
trueslash
(╯°□°)╯︵ MMM
Posté le 20-08-2002 à 15:41:11  profilanswer
 

bah j'imagine, que dans s[0] ya la longueur sur un entier de 8 bits si les string sont limittés à 255 caractères :/

n°198078
zion
Plop
Posté le 20-08-2002 à 15:56:27  profilanswer
 

:non:  
 
Comme l'a dit antp, fait gaffe à ce que tu fais.
 
Un shortstring est un string de type pascal classique, donc un array de 255 chars plus le premier byte qui est la longueur du string.
 
Un string est géré dynamiquement suivant que ce soit un petit ou grand string... C'est à dire que si ton string fait 10-20 chars, tu as des chances qu'il soit stocké comme un shortstring, par contre si il a 1000 chars, il sera stocké comme un PChar, donc comme en C/C++, un string terminé par un #0.  
 
A propos tu as aussi le TStringStream, le TResourceStream, le TMemoryStream, etc, etc
 
 :hello:


---------------
Informaticien.be - Lancez des défis à vos amis
n°198079
antp
Super Administrateur
Champion des excuses bidons
Posté le 20-08-2002 à 15:56:28  profilanswer
 

les string sont limitées à 2 Go, on n'est plus en Turbo Pascal 4 :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°221737
trueslash
(╯°□°)╯︵ MMM
Posté le 30-09-2002 à 13:06:35  profilanswer
 

heehee chuis de retour ...
 
j'ai un problème avec mes TGraphicControl ...
 
j'arrive pas à récupérer les evenements de rotation de la roulette de la souris :/
j'ai créé des procedures et jeles ai associé à la proprété onMouseWheelUp et down, mais ça fonctionne pas, les procedures ne sont jamais exeécutées ...
 
c'est bizarre car cette méthode fonctionnne avec les clics de souris mais pas les rotations :/ :/ :/ :/ :/


---------------
sympathisant UBCT
n°221752
[SDF]Poire
Vive Grumly
Posté le 30-09-2002 à 13:36:01  profilanswer
 

trueslash a écrit a écrit :

heehee chuis de retour ...
 
j'ai un problème avec mes TGraphicControl ...
 
j'arrive pas à récupérer les evenements de rotation de la roulette de la souris :/
j'ai créé des procedures et jeles ai associé à la proprété onMouseWheelUp et down, mais ça fonctionne pas, les procedures ne sont jamais exeécutées ...
 
c'est bizarre car cette méthode fonctionnne avec les clics de souris mais pas les rotations :/ :/ :/ :/ :/




Intercepte les messages


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
n°221753
[SDF]Poire
Vive Grumly
Posté le 30-09-2002 à 13:37:31  profilanswer
 

Exemple :

procedure WMMouseWheel(var Message: TWMMOUSEWHEEL); message WM_MOUSEWHEEL;
 
...
 
procedure TImagesView.WMMouseWheel(var Message: TWMMOUSEWHEEL);
begin
  with VertScrollBar do
  begin
    if Message.WheelDelta > 0 then
      Position := Position - Increment * 3
    else
      Position := Position + Increment * 3;
  end;
end;


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
n°221833
trueslash
(╯°□°)╯︵ MMM
Posté le 30-09-2002 à 15:44:43  profilanswer
 

merci poire :)
 
je pensais pas  qu'il fallait intercepter vu que le onMouseWheelUp et que le onMouseWheelDown sont des propriétés du TGraphicControl :/
 
mais je vais le faire :)
 
 
 
merce


---------------
sympathisant UBCT
n°221977
trueslash
(╯°□°)╯︵ MMM
Posté le 30-09-2002 à 19:37:07  profilanswer
 

ça marche pas :cry:
 
je précise que j'hérite d'un TGraphicControl
 

Code :
  1. procedure mouseWheel(var Message: TWMMOUSEWHEEL); message WM_MOUSEWHEEL;
  2.   ...
  3.   procedure TDessinZoom.mouseWheel(var Message: TWMMOUSEWHEEL);
  4.   begin
  5.     tailleCase := tailleCase + 1;
  6.     paint;
  7.   end;


---------------
sympathisant UBCT
n°222024
[SDF]Poire
Vive Grumly
Posté le 30-09-2002 à 20:47:10  profilanswer
 

trueslash a écrit a écrit :

ça marche pas :cry:
 
je précise que j'hérite d'un TGraphicControl
 

Code :
  1. procedure mouseWheel(var Message: TWMMOUSEWHEEL); message WM_MOUSEWHEEL;
  2.   ...
  3.   procedure TDessinZoom.mouseWheel(var Message: TWMMOUSEWHEEL);
  4.   begin
  5.     tailleCase := tailleCase + 1;
  6.     paint;
  7.   end;

 




procedure WMMouseWheel(var Message: TWMMOUSEWHEEL); message WM_MOUSEWHEEL;  
 
...  
 
procedure TDessinZoom.WMMouseWheel(var Message: TWMMOUSEWHEEL);  
begin  
  if Message.WheelDelta > 0 then  
    tailleCase := tailleCase - 1;
  else  
    tailleCase := tailleCase + 1;  
  paint;
  showmessage('wheel'); // ligne de debug  
end;


Message édité par [SDF]Poire le 30-09-2002 à 20:48:34

---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
n°222037
trueslash
(╯°□°)╯︵ MMM
Posté le 30-09-2002 à 21:04:01  profilanswer
 

:cry:
 
marche toujours pas
 
le code est jamais exécuté :/
 
:cry: :cry:


---------------
sympathisant UBCT
n°222039
trueslash
(╯°□°)╯︵ MMM
Posté le 30-09-2002 à 21:05:19  profilanswer
 

en fait, c'est ce morceau de bout d'aide que je comprends pas .:/
 

Code :
  1. Dispatches messages received from a mouse wheel.
  2. procedure MouseWheelHandler(var Message: TMessage); dynamic;
  3. Description
  4. The WndProc method calls MouseWheelHandler when it receives a mouse wheel message. MouseWheelHandler checks whether the windowed control is embedded in a form, and if so, calls the form?s MouseWheelHandler method. This allows the form to respond to mouse wheel messages before they are handled by individual controls. If the windowed control is not in a form, MouseWheelHandler passes the mouse wheel message to the Perform method, which generates an OnMouseWheel event, followed (if necessary) by an OnMouseWheelUp or OnMouseWheelDown event.


---------------
sympathisant UBCT
n°222114
[SDF]Poire
Vive Grumly
Posté le 01-10-2002 à 01:14:02  profilanswer
 

:pt1cable:  
Version de windows ?
Version de Delphi ?
Tu la déclare où ?
source ?
 
PS : chez moi ça marche nickel...


Message édité par [SDF]Poire le 01-10-2002 à 01:15:28

---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
n°222211
trueslash
(╯°□°)╯︵ MMM
Posté le 01-10-2002 à 11:57:59  profilanswer
 

windows2k
delphi6 personnal
 
rien de bizarre dans la source :/
 
j'ai testé le même code partant d'un autre composant, ça marche ...
 
bizarre quoi :/
 
 


---------------
sympathisant UBCT
n°222242
[SDF]Poire
Vive Grumly
Posté le 01-10-2002 à 13:33:43  profilanswer
 

Pour que ça marche il fo que le composant ait le focus.
Sinon fo faire un hook  
ou "tu captures les messages du form ou carrément de l'application et tu testes si le curseur est au dessus du controle" zion methode inside
 :hello:


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
n°222336
trueslash
(╯°□°)╯︵ MMM
Posté le 01-10-2002 à 15:36:22  profilanswer
 

[SDF]Poire a écrit a écrit :

Pour que ça marche il fo que le composant ait le focus.
Sinon fo faire un hook  
ou "tu captures les messages du form ou carrément de l'application et tu testes si le curseur est au dessus du controle" zion methode inside
 :hello:  




 
je vais chercher par là :jap:


---------------
sympathisant UBCT
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
Explorer sous delphi[Newbie] Programme C (editeur, compilateur etc...) ???
Editeur de ressource (.res)[Algo/Delphi] Detection de collision par triangularisation.
Est ce que c Possible avec Delphiinterbase - delphi
prendre en compte le clavier ds un app delphi en opengl??Prob à l'install [delphi 4 pro}
[Delphi]BDE libre? 
Plus de sujets relatifs à : [Delphi] /\ editeur de tiles /\ page2: pb de onMouseWheel event !


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR