Fonction Undo/Redo Multilevel

JuniorFr Messages postés 9 Date d'inscription jeudi 15 août 2002 Statut Membre Dernière intervention 25 août 2002 - 15 août 2002 à 21:10
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 18 août 2002 à 22:28
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

cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
15 août 2002 à 21:28
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) ---
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
15 août 2002 à 23:35
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
0
JuniorFr Messages postés 9 Date d'inscription jeudi 15 août 2002 Statut Membre Dernière intervention 25 août 2002
16 août 2002 à 11:13
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
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
17 août 2002 à 17:40
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JuniorFr Messages postés 9 Date d'inscription jeudi 15 août 2002 Statut Membre Dernière intervention 25 août 2002
17 août 2002 à 21:02
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
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
17 août 2002 à 21:36
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
0
JuniorFr Messages postés 9 Date d'inscription jeudi 15 août 2002 Statut Membre Dernière intervention 25 août 2002
18 août 2002 à 00:25
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
0
JuniorFr Messages postés 9 Date d'inscription jeudi 15 août 2002 Statut Membre Dernière intervention 25 août 2002
18 août 2002 à 18:00
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
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
18 août 2002 à 22:28
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
0
Rejoignez-nous