Lisp et Opendcl

Excoffon Messages postés 2 Date d'inscription vendredi 7 juin 2024 Statut Membre Dernière intervention 10 juin 2024 - Modifié le 7 juin 2024 à 14:50
BoBot Messages postés 4070 Date d'inscription mardi 4 juillet 2023 Statut Modérateur Dernière intervention 19 novembre 2024 - 11 juin 2024 à 16:01

Bonjour,

J'ai écrit une palette en Opendcl et je l'affiche dans AutoCad avec un programme Lisp.

Elle s'affiche tout le temps ancrée à gauche, même lorsque je la déplace dans l'écran en palette flottante. Je n'arrive pas à garder sa dernière position quand je la réouvre après fermeture. J'ai essayé avec une entité Palette mais également avec un Control bars.


Windows / Edge 125.0.0.0

2 réponses

Excoffon Messages postés 2 Date d'inscription vendredi 7 juin 2024 Statut Membre Dernière intervention 10 juin 2024
10 juin 2024 à 09:27

Merci IA pour votre réponse.

J'avais bien défini la palette avec sa propriété "Rangeable" à Any side et j'ai écrit mon programme sur le même principe de sauvegarde des coordonnées de la palette en sortie pour les restituer en entrée. La différence, c'est que j'ai utilisé Dcl-Control-GetPos et Dcl-Control-SetPos.

Je n'ai pas accès aux fonctions Dcl_Form_GetProperty et Dcl_Form_SetProperty, mais Dcl-Control-GetProperties et Dcl-Control-SetProperties qui elles, n'ont pas propriétés Left et Top.

Il y a quelque chose qui m'échappe.

Peut-être que je n'utilise pas la bonne version d'OpenDcl.

0
BoBot Messages postés 4070 Date d'inscription mardi 4 juillet 2023 Statut Modérateur Dernière intervention 19 novembre 2024 266
11 juin 2024 à 16:01
Bonjour !
L'IA qui aime les défis est là !
Les palettes OpenDCL ont une propriété appelée "Dock" qui contrôle comment la palette est ancrée. Si elle est réglée sur "Aucun", la palette flotte librement et peut être déplacée n'importe où sur l'écran. Pour résoudre le problème, vérifiez les propriétés de votre palette OpenDCL.

En ce qui concerne le maintien de la position de la palette, OpenDCL n'a pas la capacité natif de mémoriser la dernière position. Cependant, vous pouvez implémenter cela vous-même en utilisant les propriétés 'Left' et 'Top' pour enregistrer la position de la palette lorsqu'elle est fermée et la restituer lorsque la palette est ré-ouverte. Voici un exemple de code :

```lisp
(setq *ma-palette* (dcl_Form_Show "MaPalette" T))

(defun fermer-palette (palette)
(setq *position-palette* (list (dcl_Form_GetProperty palette 'Left)
(dcl_Form_GetProperty palette 'Top)))
(dcl_Form_Close palette))

(defun ouvrir-palette ()
(setq *ma-palette* (dcl_Form_Show "MaPalette" T))
(if *position-palette*
(progn
(dcl_Form_SetProperty *ma-palette* 'Left (car *position-palette*))
(dcl_Form_SetProperty *ma-palette* 'Top (cadr *position-palette*)))))
```

Dans cet exemple, `fermer-palette` est la fonction que vous utiliserez pour fermer la palette (en lieu et place de `dcl_Form_Close`). À chaque fois que vous ouvrez la palette avec `ouvrir-palette`, sa position sera restituée à la dernière fois qu'elle a été fermée.

0