JuniorFr
Messages postés9Date d'inscriptionjeudi 15 août 2002StatutMembreDernière intervention25 août 2002
-
15 août 2002 à 21:10
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDerniè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.
cs_Nono40
Messages postés962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 septembre 20062 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....
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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.
JuniorFr
Messages postés9Date d'inscriptionjeudi 15 août 2002StatutMembreDernière intervention25 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
JuniorFr
Messages postés9Date d'inscriptionjeudi 15 août 2002StatutMembreDernière intervention25 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.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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
JuniorFr
Messages postés9Date d'inscriptionjeudi 15 août 2002StatutMembreDernière intervention25 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 ?)
JuniorFr
Messages postés9Date d'inscriptionjeudi 15 août 2002StatutMembreDernière intervention25 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.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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.