Fonction Undo/Redo Multilevel

Signaler
Messages postés
9
Date d'inscription
jeudi 15 août 2002
Statut
Membre
Dernière intervention
25 août 2002
-
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
-
Voila j'ai besoin d'un fonction permettant d'annuler ou rétablir du text dans un memo (comme word). La fonction intégré memo.Undo n'autorise qu'un seul niveau et moi je recherche une infinité de niveaux.

J'ai trouvé ce que je voulas dans les composants richedit 98 et ThiUndo mais je n'arrive pas a les compiler (source .pas introuvable). Je travail avec Delphi 6 Personel.

Je voudrais savoir si quelqu'un a déjà fait ce genre de fonction et si il est près a m'aider. Ca fait 2 mois que me suis mis a delphi et je trouve ce langage très cool.

merci de votre aide.
JuniorFr

9 réponses

Messages postés
962
Date d'inscription
mercredi 3 avril 2002
Statut
Membre
Dernière intervention
12 septembre 2006
2
Si tu as trouvé des composants qui le font c'est me mieux. Peux-tu alors nous donner l'adresse ou les télécharger ? Ainsi on pourra voir pourquoi tu ne peu pas compiler...

Sinon tu as raison Delphi c'est cooooooooooooool....

--- :sleepy) Nono du Moulin :sleepy) ---
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Il existe un article sur Delphi 3000 qui donne le code pour réaliser un undo/redo multiple. Utilises leur fonction de recherche pour ne pas farfouiller partout pendant des heures.

May Delphi be with you.
Delphi advanced
Messages postés
9
Date d'inscription
jeudi 15 août 2002
Statut
Membre
Dernière intervention
25 août 2002

Merci beaucoup de votre aide.
J'avais oublier de préciser les sites, mais les voila :
- ThiUndo : http://www.torry.net/ (rechercher avec le mot clé 'Undo')
- RichEdit98 : http://dce.felk.cvut.cz/mirrors/TorryD/TorryDV.htm (TRichEdit98 1.40)
Voila. Je vous donne des nouvelles bientôt.
Merci
JuniorFr
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Source et exemple sont disponibles à l'adresse suivante : undo/redo using state.

NB : Cet article est aussi publié sur Delphi3000.com.

May Delphi be with you.
Delphi advanced
Messages postés
9
Date d'inscription
jeudi 15 août 2002
Statut
Membre
Dernière intervention
25 août 2002

Ok merci, j'avait trouvé.
Bon j'ai modifier un peut la source pour avoir les compteurs undo et redo, comme ca je peut griser ou non les boutons...
Ca marche super. Je peut poster sur le forum, comme ca d'autres pouront en profiter.
Merci beaucoup car ca faisait une semaine que je cherchais ceci.

@++
JuniorFr
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Super, en plus on va bientôt dépasser les 500 sources sur le forum.
Voilà au moins un code source digne du plus grand intérêt :big) .
May Delphi be with you.
Delphi advanced
Messages postés
9
Date d'inscription
jeudi 15 août 2002
Statut
Membre
Dernière intervention
25 août 2002

ok je vais mettre des commentaires dans la source.
Mais j'ai un p'tit pb : lorsque je tape du texte tout va bien, mais lorsque je sort l'app (perd le focus) en tappant la touche 'Windows' par exemple, il me sort une erreur.
J'ai bien plusieurs idées mais laquelle est la meilleur :
- limité les touches lors des évenement keyDown et keyUp (Key : Word)
- désigné et vérifier le handle de mon app pour fair les enregistrement TStream
Laquelle de ces deux méthode est la meilleur. OU sinon est-ce qu'il en existe une autre (en passant pas les api par exemple ?)

Merci
JuniorFr
Messages postés
9
Date d'inscription
jeudi 15 août 2002
Statut
Membre
Dernière intervention
25 août 2002

Bon j'ai réussi a isoler le pb avec keyup et keydown, en refusant certaines touches (91 (menu démarrer) et 93 (menu popup) particulièrement).
J'ai le code ci dessous :

procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin

if ord(Key) in [17,18,91,93] then
else
begin
{instructions}
end;

end;

Mais voila je n'arrive pas a le faire fonctionner avec le test : if not ord(Key) in [17,18,91,93] then...
Il me refuse la compilation.. quel est le pb ? Merci de me répondre.
Après ca, je met la source sur le forum.

JuniorFr
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
La fonction Ord donne le rang dans un type scalaire.
Or, tu veux comparer la valeur retournée à un ensemble où les éléments n'ont pas de valeur de rang.

La bonne formule est :
if Key in [VK_CONTROL, VK_MENU, VK_LWIN, VK_RWIN] then;
ou alors :
case key of
VK_CONTROL, VK_MENU, VK_LWIN, VK_RWIN :;
end;

Pour des questions de lisibilité et de facilité de maintenance, évites d'utiliser les valeurs (qui, de plus, sont données en hexadécimal dans l'aide >:) ).
Avoues que c'est tout de même plus facile à lire et...à comprendre.

Recherches "virtual keys" dans la Win32 programmer's reference livrée avec Delphi.

May Delphi be with you.
Delphi advanced