Bonjour,
Dans mon application, j'utilise la commande CLS pour effacer la
dernière opération effectuée sur un PictureBox.
je voudrais pouvoir annuler plusieurs opérations l'une après l'autre
et aussi revenir en arrière. quelqu'un aurait il un petit exemple que
je puisse adapter à mon application ?
merci d'avance...
Bonjour,
Dans mon application, j'utilise la commande CLS pour effacer la
dernière opération effectuée sur un PictureBox.
je voudrais pouvoir annuler plusieurs opérations l'une après l'autre
et aussi revenir en arrière. quelqu'un aurait il un petit exemple que
je puisse adapter à mon application ?
merci d'avance...
Bonjour,
Dans mon application, j'utilise la commande CLS pour effacer la
dernière opération effectuée sur un PictureBox.
je voudrais pouvoir annuler plusieurs opérations l'une après l'autre
et aussi revenir en arrière. quelqu'un aurait il un petit exemple que
je puisse adapter à mon application ?
merci d'avance...
Bonjour,
Dans mon application, j'utilise la commande CLS pour effacer la
dernière opération effectuée sur un PictureBox.
je voudrais pouvoir annuler plusieurs opérations l'une après l'autre
et aussi revenir en arrière. quelqu'un aurait il un petit exemple
que je puisse adapter à mon application ?
merci d'avance...
une sorte d'undo et redo quoi!!!!!!
pour une image, alors tu va devoir te creer une sorte de pile
contenant le contenu de ta picturebox.
mais a ta place je ferai une classe CDo, et des classes heritées de
CDo (CDo_picturebox, CDo_autre action,.....)
avec les fonctions suivantes:
replique() // qui va refaire cette action (chaque classe a son propre
code adapté a l'interieur)
applique()// qui va mettre le contenu sauvé
...
(il est possible que tu adapate ce code en mettant par exemple un
paramettre indiquant l'objet) par exemple si ta 2 picturebox, pas la
peine de coder 2 classes CDo_picturebox_1 et CDo_picturebox_2)
toi tu fais une pile de pointeur vers la classe CDo. et dans ta pile
tu push ou tu pop tes classes CDo_picturebox, CDo_autre action,... en
fonction de l'action
ainsi tu pourra gerer d'autre chose en undo redo que le contenu de ta
picturebox.
Bonjour,
Dans mon application, j'utilise la commande CLS pour effacer la
dernière opération effectuée sur un PictureBox.
je voudrais pouvoir annuler plusieurs opérations l'une après l'autre
et aussi revenir en arrière. quelqu'un aurait il un petit exemple
que je puisse adapter à mon application ?
merci d'avance...
une sorte d'undo et redo quoi!!!!!!
pour une image, alors tu va devoir te creer une sorte de pile
contenant le contenu de ta picturebox.
mais a ta place je ferai une classe CDo, et des classes heritées de
CDo (CDo_picturebox, CDo_autre action,.....)
avec les fonctions suivantes:
replique() // qui va refaire cette action (chaque classe a son propre
code adapté a l'interieur)
applique()// qui va mettre le contenu sauvé
...
(il est possible que tu adapate ce code en mettant par exemple un
paramettre indiquant l'objet) par exemple si ta 2 picturebox, pas la
peine de coder 2 classes CDo_picturebox_1 et CDo_picturebox_2)
toi tu fais une pile de pointeur vers la classe CDo. et dans ta pile
tu push ou tu pop tes classes CDo_picturebox, CDo_autre action,... en
fonction de l'action
ainsi tu pourra gerer d'autre chose en undo redo que le contenu de ta
picturebox.
Bonjour,
Dans mon application, j'utilise la commande CLS pour effacer la
dernière opération effectuée sur un PictureBox.
je voudrais pouvoir annuler plusieurs opérations l'une après l'autre
et aussi revenir en arrière. quelqu'un aurait il un petit exemple
que je puisse adapter à mon application ?
merci d'avance...
une sorte d'undo et redo quoi!!!!!!
pour une image, alors tu va devoir te creer une sorte de pile
contenant le contenu de ta picturebox.
mais a ta place je ferai une classe CDo, et des classes heritées de
CDo (CDo_picturebox, CDo_autre action,.....)
avec les fonctions suivantes:
replique() // qui va refaire cette action (chaque classe a son propre
code adapté a l'interieur)
applique()// qui va mettre le contenu sauvé
...
(il est possible que tu adapate ce code en mettant par exemple un
paramettre indiquant l'objet) par exemple si ta 2 picturebox, pas la
peine de coder 2 classes CDo_picturebox_1 et CDo_picturebox_2)
toi tu fais une pile de pointeur vers la classe CDo. et dans ta pile
tu push ou tu pop tes classes CDo_picturebox, CDo_autre action,... en
fonction de l'action
ainsi tu pourra gerer d'autre chose en undo redo que le contenu de ta
picturebox.
> Bonjour,
Dans mon application, j'utilise la commande CLS pour effacer la dernière
opération effectuée sur un PictureBox.
je voudrais pouvoir annuler plusieurs opérations l'une après l'autre et
aussi revenir en arrière. quelqu'un aurait il un petit exemple que je
adapter à mon application ?
merci d'avance...
> Bonjour,
Dans mon application, j'utilise la commande CLS pour effacer la dernière
opération effectuée sur un PictureBox.
je voudrais pouvoir annuler plusieurs opérations l'une après l'autre et
aussi revenir en arrière. quelqu'un aurait il un petit exemple que je
adapter à mon application ?
merci d'avance...
> Bonjour,
Dans mon application, j'utilise la commande CLS pour effacer la dernière
opération effectuée sur un PictureBox.
je voudrais pouvoir annuler plusieurs opérations l'une après l'autre et
aussi revenir en arrière. quelqu'un aurait il un petit exemple que je
adapter à mon application ?
merci d'avance...
> On est pas en C++ :)
Les pointeurs
et l'héritages c'est pas trop le truc de VB :)
> On est pas en C++ :)
Les pointeurs
et l'héritages c'est pas trop le truc de VB :)
> On est pas en C++ :)
Les pointeurs
et l'héritages c'est pas trop le truc de VB :)
Salut,
Que fais tu sur ta picturebox come opération ?
La solution serait de stocker dans un tableau l'image avant de faire une
opération.
Le problème c'est que si tu as de grosses images ca risque d'etre assez
gourmand en mémoire.
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
Armando R. wrote:Bonjour,
Dans mon application, j'utilise la commande CLS pour effacer la
dernière opération effectuée sur un PictureBox.
je voudrais pouvoir annuler plusieurs opérations l'une après l'autre
et aussi revenir en arrière. quelqu'un aurait il un petit exemple que
je puisse adapter à mon application ?
merci d'avance...
Salut,
Que fais tu sur ta picturebox come opération ?
La solution serait de stocker dans un tableau l'image avant de faire une
opération.
Le problème c'est que si tu as de grosses images ca risque d'etre assez
gourmand en mémoire.
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
Armando R. wrote:
Bonjour,
Dans mon application, j'utilise la commande CLS pour effacer la
dernière opération effectuée sur un PictureBox.
je voudrais pouvoir annuler plusieurs opérations l'une après l'autre
et aussi revenir en arrière. quelqu'un aurait il un petit exemple que
je puisse adapter à mon application ?
merci d'avance...
Salut,
Que fais tu sur ta picturebox come opération ?
La solution serait de stocker dans un tableau l'image avant de faire une
opération.
Le problème c'est que si tu as de grosses images ca risque d'etre assez
gourmand en mémoire.
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
Armando R. wrote:Bonjour,
Dans mon application, j'utilise la commande CLS pour effacer la
dernière opération effectuée sur un PictureBox.
je voudrais pouvoir annuler plusieurs opérations l'une après l'autre
et aussi revenir en arrière. quelqu'un aurait il un petit exemple que
je puisse adapter à mon application ?
merci d'avance...
je voudrais pouvoir annuler plusieurs opérations l'une après l'autre
je voudrais pouvoir annuler plusieurs opérations l'une après l'autre
je voudrais pouvoir annuler plusieurs opérations l'une après l'autre
On est pas en C++ :)
Les pointeurs
byrefet l'héritages c'est pas trop le truc de VB :)
pour lheritage jetais pas sur :-p , mais il peut contourner en
sockant dans un variant les classes CDo_.....
On est pas en C++ :)
Les pointeurs
byref
et l'héritages c'est pas trop le truc de VB :)
pour lheritage jetais pas sur :-p , mais il peut contourner en
sockant dans un variant les classes CDo_.....
On est pas en C++ :)
Les pointeurs
byrefet l'héritages c'est pas trop le truc de VB :)
pour lheritage jetais pas sur :-p , mais il peut contourner en
sockant dans un variant les classes CDo_.....
On est pas en C++ :)
Les pointeurs
byrefet l'héritages c'est pas trop le truc de VB :)
pour lheritage jetais pas sur :-p , mais il peut contourner en
sockant dans un variant les classes CDo_.....
On est pas en C++ :)
Les pointeurs
byref
et l'héritages c'est pas trop le truc de VB :)
pour lheritage jetais pas sur :-p , mais il peut contourner en
sockant dans un variant les classes CDo_.....
On est pas en C++ :)
Les pointeurs
byrefet l'héritages c'est pas trop le truc de VB :)
pour lheritage jetais pas sur :-p , mais il peut contourner en
sockant dans un variant les classes CDo_.....
Armando R. wrote:je voudrais pouvoir annuler plusieurs opérations l'une après l'autre
Bonjour,
La mise en place d'un mécanisme d'undo/redo nécessite de répondre à 2
questions: comment et quoi?
Comment?
-------------
En général, un tel mécanisme va être mis en oeuvre par le biais d'une
double pile. Au fur et à mesure de leur exécution, les actions de
l'utilisateur sont empilées sur la pile Undo. Si une commande Undo est
déclenchée, la dernière action exécutée est dépilée, son effet est
annulé (voir plus bas) et l'action est réempilée sur la pile Redo afin
de satisfaire une éventuelle commande Redo.
Les piles en questions peuvent être soit limitées en taille (nombre
limité de undo/redo), soit être ajustées dynamiquement. En VB, il me
paraît assez simple d'implémenter une classe Pile à partir d'un objet
Collection.
Une alternative à la méthode des piles est la méthode de la sauvegarde
incrémentale utilisée par exemple par Word en connexion avec les
storages (voir interface COM IStorage pour les explication sur les
storages - fichiers composites ou compound documents). Tous les
documents Office sont en fait des storages (système de fichier à
l'intérieur d'un fichier). Word utilise pour son système d'Undo/Redo
la possibilité que donne le storage de travailler en mode incrémental
(on ne stocke que ce qui change dans des répertoires séparés)
associée à la capacité des storages de travailler en mode
transactionnel (commit / rollback). Cette approche est très
intéressante mais beaucoup plus complexe et nécessite une bonne
connaissance du COM et de la manipulation des storages.
Quoi?
-------
La question qui vient immédiatement derrière est "que va-t-on mettre
sur ces piles?". Il est évident que stocker l'état complet du
document pour chaque action, surtout dans le cas des images, amène
rapidement soit à une saturation de la mémoire, soit à une forte
limitation du nombre d'actions undo autorisées. Cela peut cependant
faire l'affaire dans certains cas.
L'approche la plus efficace est cependant de stocker un ensemble de
données décrivant la commande qui vient d'être réalisée. A chaque
commande mise à la disposition de l'utilisateur doit correspondre un
objet "commande inverse" qui décrit l'action à entreprendre pour
annuler éventuellement l'effet de la commande qui va être exécutée.
C'est cette description que l'on stocke sur la pile Undo. A
contrario, on stockera sur la pile Redo l'inverse de la "commande
inverse" que l'on vient de dépiler de la pile Undo.
Il est clair que la mise en oeuvre de cette approche nécessite une
réflexion préalable sur la manière dont les commandes utilisateurs
sont traitées et décrites dans le programme. Ce qui veut dire que
chaque commande (et commande inverse) doit être décrite par un objet
qui contient toutes les informations nécessaires à l'exécution de
l'action ou à la création d'une commande inverse annulant l'effet de
cette action. Ce n'est pas un travail très simple en VB dont les
capacités objet sont très limitées.
Pour les images, une autre approche consisterait à ne stocker que le
"delta" entre les images (avant et après l'action utilisateur). ce
delta peut se calculer en comparant les 2 images par quelques
opérations binaires simples. L'inconvénient, c'est que le résultat
peut être de taille très petite ou de la même taille que l'image
complète selon l'action qui aura été exécutée. en cela, cette
approche est intermédiaire entre la méthode décrite ci-dessus
(commandes inverses) et l'approche "stockage de chaque version du
document".
Armando R. wrote:
je voudrais pouvoir annuler plusieurs opérations l'une après l'autre
Bonjour,
La mise en place d'un mécanisme d'undo/redo nécessite de répondre à 2
questions: comment et quoi?
Comment?
-------------
En général, un tel mécanisme va être mis en oeuvre par le biais d'une
double pile. Au fur et à mesure de leur exécution, les actions de
l'utilisateur sont empilées sur la pile Undo. Si une commande Undo est
déclenchée, la dernière action exécutée est dépilée, son effet est
annulé (voir plus bas) et l'action est réempilée sur la pile Redo afin
de satisfaire une éventuelle commande Redo.
Les piles en questions peuvent être soit limitées en taille (nombre
limité de undo/redo), soit être ajustées dynamiquement. En VB, il me
paraît assez simple d'implémenter une classe Pile à partir d'un objet
Collection.
Une alternative à la méthode des piles est la méthode de la sauvegarde
incrémentale utilisée par exemple par Word en connexion avec les
storages (voir interface COM IStorage pour les explication sur les
storages - fichiers composites ou compound documents). Tous les
documents Office sont en fait des storages (système de fichier à
l'intérieur d'un fichier). Word utilise pour son système d'Undo/Redo
la possibilité que donne le storage de travailler en mode incrémental
(on ne stocke que ce qui change dans des répertoires séparés)
associée à la capacité des storages de travailler en mode
transactionnel (commit / rollback). Cette approche est très
intéressante mais beaucoup plus complexe et nécessite une bonne
connaissance du COM et de la manipulation des storages.
Quoi?
-------
La question qui vient immédiatement derrière est "que va-t-on mettre
sur ces piles?". Il est évident que stocker l'état complet du
document pour chaque action, surtout dans le cas des images, amène
rapidement soit à une saturation de la mémoire, soit à une forte
limitation du nombre d'actions undo autorisées. Cela peut cependant
faire l'affaire dans certains cas.
L'approche la plus efficace est cependant de stocker un ensemble de
données décrivant la commande qui vient d'être réalisée. A chaque
commande mise à la disposition de l'utilisateur doit correspondre un
objet "commande inverse" qui décrit l'action à entreprendre pour
annuler éventuellement l'effet de la commande qui va être exécutée.
C'est cette description que l'on stocke sur la pile Undo. A
contrario, on stockera sur la pile Redo l'inverse de la "commande
inverse" que l'on vient de dépiler de la pile Undo.
Il est clair que la mise en oeuvre de cette approche nécessite une
réflexion préalable sur la manière dont les commandes utilisateurs
sont traitées et décrites dans le programme. Ce qui veut dire que
chaque commande (et commande inverse) doit être décrite par un objet
qui contient toutes les informations nécessaires à l'exécution de
l'action ou à la création d'une commande inverse annulant l'effet de
cette action. Ce n'est pas un travail très simple en VB dont les
capacités objet sont très limitées.
Pour les images, une autre approche consisterait à ne stocker que le
"delta" entre les images (avant et après l'action utilisateur). ce
delta peut se calculer en comparant les 2 images par quelques
opérations binaires simples. L'inconvénient, c'est que le résultat
peut être de taille très petite ou de la même taille que l'image
complète selon l'action qui aura été exécutée. en cela, cette
approche est intermédiaire entre la méthode décrite ci-dessus
(commandes inverses) et l'approche "stockage de chaque version du
document".
Armando R. wrote:je voudrais pouvoir annuler plusieurs opérations l'une après l'autre
Bonjour,
La mise en place d'un mécanisme d'undo/redo nécessite de répondre à 2
questions: comment et quoi?
Comment?
-------------
En général, un tel mécanisme va être mis en oeuvre par le biais d'une
double pile. Au fur et à mesure de leur exécution, les actions de
l'utilisateur sont empilées sur la pile Undo. Si une commande Undo est
déclenchée, la dernière action exécutée est dépilée, son effet est
annulé (voir plus bas) et l'action est réempilée sur la pile Redo afin
de satisfaire une éventuelle commande Redo.
Les piles en questions peuvent être soit limitées en taille (nombre
limité de undo/redo), soit être ajustées dynamiquement. En VB, il me
paraît assez simple d'implémenter une classe Pile à partir d'un objet
Collection.
Une alternative à la méthode des piles est la méthode de la sauvegarde
incrémentale utilisée par exemple par Word en connexion avec les
storages (voir interface COM IStorage pour les explication sur les
storages - fichiers composites ou compound documents). Tous les
documents Office sont en fait des storages (système de fichier à
l'intérieur d'un fichier). Word utilise pour son système d'Undo/Redo
la possibilité que donne le storage de travailler en mode incrémental
(on ne stocke que ce qui change dans des répertoires séparés)
associée à la capacité des storages de travailler en mode
transactionnel (commit / rollback). Cette approche est très
intéressante mais beaucoup plus complexe et nécessite une bonne
connaissance du COM et de la manipulation des storages.
Quoi?
-------
La question qui vient immédiatement derrière est "que va-t-on mettre
sur ces piles?". Il est évident que stocker l'état complet du
document pour chaque action, surtout dans le cas des images, amène
rapidement soit à une saturation de la mémoire, soit à une forte
limitation du nombre d'actions undo autorisées. Cela peut cependant
faire l'affaire dans certains cas.
L'approche la plus efficace est cependant de stocker un ensemble de
données décrivant la commande qui vient d'être réalisée. A chaque
commande mise à la disposition de l'utilisateur doit correspondre un
objet "commande inverse" qui décrit l'action à entreprendre pour
annuler éventuellement l'effet de la commande qui va être exécutée.
C'est cette description que l'on stocke sur la pile Undo. A
contrario, on stockera sur la pile Redo l'inverse de la "commande
inverse" que l'on vient de dépiler de la pile Undo.
Il est clair que la mise en oeuvre de cette approche nécessite une
réflexion préalable sur la manière dont les commandes utilisateurs
sont traitées et décrites dans le programme. Ce qui veut dire que
chaque commande (et commande inverse) doit être décrite par un objet
qui contient toutes les informations nécessaires à l'exécution de
l'action ou à la création d'une commande inverse annulant l'effet de
cette action. Ce n'est pas un travail très simple en VB dont les
capacités objet sont très limitées.
Pour les images, une autre approche consisterait à ne stocker que le
"delta" entre les images (avant et après l'action utilisateur). ce
delta peut se calculer en comparant les 2 images par quelques
opérations binaires simples. L'inconvénient, c'est que le résultat
peut être de taille très petite ou de la même taille que l'image
complète selon l'action qui aura été exécutée. en cela, cette
approche est intermédiaire entre la méthode décrite ci-dessus
(commandes inverses) et l'approche "stockage de chaque version du
document".
Bonjour,
Dans mon application, j'utilise la commande CLS pour effacer la dernière
opération effectuée sur un PictureBox.
je voudrais pouvoir annuler plusieurs opérations l'une après l'autre et
aussi revenir en arrière. quelqu'un aurait il un petit exemple que je
puisse adapter à mon application ?
merci d'avance...
Bonjour,
Dans mon application, j'utilise la commande CLS pour effacer la dernière
opération effectuée sur un PictureBox.
je voudrais pouvoir annuler plusieurs opérations l'une après l'autre et
aussi revenir en arrière. quelqu'un aurait il un petit exemple que je
puisse adapter à mon application ?
merci d'avance...
Bonjour,
Dans mon application, j'utilise la commande CLS pour effacer la dernière
opération effectuée sur un PictureBox.
je voudrais pouvoir annuler plusieurs opérations l'une après l'autre et
aussi revenir en arrière. quelqu'un aurait il un petit exemple que je
puisse adapter à mon application ?
merci d'avance...