_

[LISP] CADPL - Wstaw datę [Tool_008]

Forum poświęcone flagowemu produktowi oraz aplikacjom pochodnym Autodesku. To jedyne forum mające w tytule nazwę programu, a to ze względu na jego olbrzymią popularność w Polsce. Można tutaj umieszczać również posty z ogólnie pojętej tematyki "Kreślarskie 2D".

[LISP] CADPL - Wstaw datę [Tool_008]

Postprzez kruuger » cze 29, 2010 00:21

witam

wydlubalem sobie cos takiego - zalacznik.
wydaje sie ze wszystko dziala jak trzeba. nie jestem tylko pewien zachownia okienka DCL w momencie nacisniecia klawisza ESCAPE. tzn czy wpisujac w pole Separatora jakis znak i nie zatwierdzajac go Enterem to po nacisniecie ESC edit _box powinien zostac sczytany czy nie?
jesli nie to czy jest jakis sprytny sposob aby temu zaradzic?

kruuger

EDIT: 10/07/10 Ostateczna wersja ADA v1.0
EDIT: 21/07/10 Mały update - wersja ADA v1.01
- plik Ada.zip - wersja PL
- plik Ada_EN.zip - wersja english
Załączniki
Ada_EN.zip
(13.33 KiB) Pobrane 130 razy
Ada.zip
(13.68 KiB) Pobrane 122 razy
ada_dialogs.PNG
ada_dialogs.PNG (19.66 KiB) Przeglądane 1398 razy
Ostatnio edytowany przez kruuger lip 22, 2010 00:15, edytowano w sumie 5 razy
Avatar użytkownika
kruuger
 
Posty: 4860
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

[LISP] CADPL - Wstaw datę [Tool_008]

Postprzez kojacek » cze 29, 2010 06:19

kruuger napisał(a):witam

wydlubalem sobie cos takiego - zalacznik.
wydaje sie ze wszystko dziala jak trzeba. nie jestem tylko pewien zachownia okienka DCL w momencie nacisniecia klawisza ESCAPE. tzn czy wpisujac w pole Separatora jakis znak i nie zatwierdzajac go Enterem to po nacisniecie ESC edit _box powinien zostac sczytany czy nie?
jesli nie to czy jest jakis sprytny sposob aby temu zaradzic?

kruuger



Program (mym skromnym) jest ŹLE skonstruowany.
1) Próbuje (nie wiadomo po co) zastąpić symbol (domyślnie) chroniony o nazwie MEM. To zła praktyka.
2) Konstrukcja okna jest nieprawidłowa (nieczytelna) - separatoory nie są widoczne w wycinkach i tak:
- DD MM YY z separatorem "=" jest takie same jak DD MM YY z separatorem "-". Wychodzi na to że DD MM YY nigdy nie jest prawdziwe (bo nie DD=MM=YY ani nie DD-MM-YY)
3) Okno działa nie prawidłowo. Dowolne zmiany ustawień mogą działać TYLKO po wybraniu OK, przycisk cancel służy do zamknięcia okna. Innymi słowy: wszelkie zabawy w obrębie okna dialogowego mogą odbywać się tylko w pamięci i TYLKO ostatnie ustawienia po naciśnięciu OK mogą zmienić ustawienia programu. Tutaj Cancel działa tak samo jak OK.
4) Powyższe odnosi się do wszelkich działań - zadam pytanie - na jakiej podstawie program dokonał wpisów w Rejestrze Windows gdy ANI RAZU nie użyłem przycisku OK :?:

kojacek
Avatar użytkownika
kojacek
 
Posty: 5501
Dołączył(a): paź 03, 2005 20:17

[LISP] CADPL - Wstaw datę [Tool_008]

Postprzez kruuger » cze 29, 2010 10:09

1) czyli:
Kod: Zaznacz cały
funkcja (val / tst Res)
(setq tst val)
;;; jak mamy nil to (setq Res nil)
;;; jak T to (setq Res tst)

2) nie bardzo rozumie..toggle maja swoj label wiec ich etykieta nie ulega zmianie (wybieramy sobie tylko format)
wstukujac separator widzimy wszystko dopiero na podgladzie (preview).
etykiety toggle chyba nie mozna zmieniac (bez pisania DCL w locie)?
3) 4) zastanawialem sie czy zmiany zapamietywac juz po zmianie wycinka czy dopiero po wyjsciu z okna.
chyba rzeczywiscie opcja bez OK nie jest OK. cza to bedzie zmienic.

dzieki
kruuger
Avatar użytkownika
kruuger
 
Posty: 4860
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

[LISP] CADPL - Wstaw datę [Tool_008]

Postprzez kojacek » cze 29, 2010 10:48

kruuger napisał(a):1) czyli:
Kod: Zaznacz cały
funkcja (val / tst Res)
(setq tst val)
;;; jak mamy nil to (setq Res nil)
;;; jak T to (setq Res tst)

2) nie bardzo rozumie..toggle maja swoj label wiec ich etykieta nie ulega zmianie (wybieramy sobie tylko format)
wstukujac separator widzimy wszystko dopiero na podgladzie (preview).
etykiety toggle chyba nie mozna zmieniac (bez pisania DCL w locie)?
3) 4) zastanawialem sie czy zmiany zapamietywac juz po zmianie wycinka czy dopiero po wyjsciu z okna.
chyba rzeczywiscie opcja bez OK nie jest OK. cza to bedzie zmienic.

dzieki
kruuger


1) tak
2) No właśnie, tutaj dyskusja może iść bardziej w kierunku tworzenia CZYTELNEGO (jasnego, intuicyjnego, wygodnego itd) interfejsu użytkownika. Wartym zastanowienia jest (tutaj):
- wybór tylko czterech formatów (zobacz ile ma ich FIELD dla dat), co od razu decyduje o rodzaju wycinków toggle vs list.
- konieczność ustawienia separatora w edit_box a nie w np. list - zastanawiające jest ile w RZECZYWISTOŚCI wykorzystuje się separatorów w zapisie daty
- robienie wycinka Preview... czy uzytkownik NAPRAWDĘ nie jest w stanie odróżnić myślnika od kropki?
Powyższe determinuje wygląd, a ten w konsekwencji sposób działania okna (list zamiast edit_box eliminuje sprawdzanie poprawności, list w wyborze formatu, eliminuje preview, list w wyborze separatorze może dynamicznie zmieniać list formatu itd.
Także mozna przemyśleć działanie samego programu -> zobacz: http://kojacek.republika.pl/arrow.html
Działanie typu: Wskaż obiekt -> Ustaw domyślne -> Ewentualnie zmień ustawienia -> Wizualizuj obiekt (w czasie zmiany)...
3) 4) Zawsze. Ważne (z punktu widzenia poprawnego interfejsu uzytkownika) przyciski "kończące okno" to:
[Tak] [Nie] [Anuluj] i czasem [Zamknij], powinny ZAWSZE działać w jednakowy (przewidywalny) sposób.
Tak - Nie -> akceptacja (lub nie) ustawień i zamkniecie okna -> Podjęcie (lub nie) działania
Anuluj - jednoznaczne i całkowite "wycofanie" się do samego początku (jakby "nie było" okna)
Zamknij - zastępujące kombinację Tak/Nie, lub w innym kontekście może być obok nich.

ps. Sprawdzenie błędu jest tylko w edit_box, ręczne (lub programowe) ustawienie np. separatora w Rejestrze np. na "A"... działa... ;)

kojacek
Avatar użytkownika
kojacek
 
Posty: 5501
Dołączył(a): paź 03, 2005 20:17

[LISP] CADPL - Wstaw datę [Tool_008]

Postprzez kruuger » cze 29, 2010 12:01

kojacek napisał(a):2) No właśnie, tutaj dyskusja może iść bardziej w kierunku tworzenia CZYTELNEGO (jasnego, intuicyjnego, wygodnego itd) interfejsu użytkownika. Wartym zastanowienia jest (tutaj):
- wybór tylko czterech formatów (zobacz ile ma ich FIELD dla dat), co od razu decyduje o rodzaju wycinków toggle vs list.
- konieczność ustawienia separatora w edit_box a nie w np. list - zastanawiające jest ile w RZECZYWISTOŚCI wykorzystuje się separatorów w zapisie daty
- robienie wycinka Preview... czy uzytkownik NAPRAWDĘ nie jest w stanie odróżnić myślnika od kropki?
Powyższe determinuje wygląd, a ten w konsekwencji sposób działania okna (list zamiast edit_box eliminuje sprawdzanie poprawności, list w wyborze formatu, eliminuje preview, list w wyborze separatorze może dynamicznie zmieniać list formatu itd.

pomysl z lista byl (dokladnie cos podobnego do opcji z FILED, pelny customize). na razie na wlasne potrzeby proste okienko z toggle jest wystarczajace (no i brak czasu na zabawe).
co do separatorow to wlasciwie sprawa ma sie podobnie jak do formatu daty. ile razy uzywa sie formatu innego niz DD.MM.RR.
cale te formaty i separatory to raczej bajer.

kojacek napisał(a):Także mozna przemyśleć działanie samego programu -> zobacz: http://kojacek.republika.pl/arrow.html
Działanie typu: Wskaż obiekt -> Ustaw domyślne -> Ewentualnie zmień ustawienia -> Wizualizuj obiekt (w czasie zmiany)...

to byloby niezle. tylko jak szukac odpowiednich funkcji w vla...
tutaj pewnie jakis vla-update, cos pewnie z atrybutami moze vla-attribute (zgaduje)

EDIT:
kojacek napisał(a):ps. Sprawdzenie błędu jest tylko w edit_box, ręczne (lub programowe) ustawienie np. separatora w Rejestrze np. na "A"... działa... ;)

hehe, maly ten moj mozdzek zeby od razu cos takiego przewidziec :)
i ile osob trafi do tego rejestru..(jeszcze gdyby skompilowac kod)
kruuger
Avatar użytkownika
kruuger
 
Posty: 4860
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

[LISP] CADPL - Wstaw datę [Tool_008]

Postprzez kojacek » cze 29, 2010 12:42

kruuger napisał(a): pomysl z lista byl (dokladnie cos podobnego do opcji z FILED, pelny customize). na razie na wlasne potrzeby proste okienko z toggle jest wystarczajace (no i brak czasu na zabawe).
co do separatorow to wlasciwie sprawa ma sie podobnie jak do formatu daty. ile razy uzywa sie formatu innego niz DD.MM.RR.
cale te formaty i separatory to raczej bajer.

kojacek napisał(a):Także mozna przemyśleć działanie samego programu -> zobacz: http://kojacek.republika.pl/arrow.html
Działanie typu: Wskaż obiekt -> Ustaw domyślne -> Ewentualnie zmień ustawienia -> Wizualizuj obiekt (w czasie zmiany)...

to byloby niezle. tylko jak szukac odpowiednich funkcji w vla...
tutaj pewnie jakis vla-update, cos pewnie z atrybutami moze vla-attribute (zgaduje)

EDIT:
kojacek napisał(a):ps. Sprawdzenie błędu jest tylko w edit_box, ręczne (lub programowe) ustawienie np. separatora w Rejestrze np. na "A"... działa... ;)

hehe, maly ten moj mozdzek zeby od razu cos takiego przewidziec :)
i ile osob trafi do tego rejestru..(jeszcze gdyby skompilowac kod)
kruuger



1) a propos dat: http://kojacek.republika.pl/diesel.html... ponad dziesięć lat temu, masz listę, z drugiej dobierasz separator ("." "-" "/" " ") - łączysz w dowone konfiguracje...
2) vla... szukamy w helpie
3) sprawdzenie poprawności danych z rejestru... no a czym się różni od sprawdzenia w innym miejscu... ;)

:idea: Dla ćwiczenia (umysłu, mieśni palców...) w formie dyskusji może jakiś wspólny OpenSource :?: Kierunek, działanie i kod uzgadniamy w dyskusji, każdy się może przyłączyć... ot tak dla zabawy trochę... i nauki...

Pomysł taki:

1) Wywołujemy polecenie
2) Wskazujemy MTEXT, TEXT, ATTRIB
3) Wstawiamy aktualną datę z domyślnym formatem
4) Jest opcja zmiany
5) Zmianę robimy w "locie"
6) Ostatnie ustawienie jest domyślnym
7) Inne, robimy w ActiveX z DCL-em, czyli "chodzący" na wszystkich Ac od 2k0 włącznie...

Zaczynamy?
1) i 2) Zaczynaj... :)

kojacek
Avatar użytkownika
kojacek
 
Posty: 5501
Dołączył(a): paź 03, 2005 20:17

[LISP] CADPL - Wstaw datę [Tool_008]

Postprzez kruuger » cze 29, 2010 13:53

kojacek napisał(a):Pomysł taki:

1) Wywołujemy polecenie
2) Wskazujemy MTEXT, TEXT, ATTRIB
3) Wstawiamy aktualną datę z domyślnym formatem
4) Jest opcja zmiany
5) Zmianę robimy w "locie"
6) Ostatnie ustawienie jest domyślnym
7) Inne, robimy w ActiveX z DCL-em, czyli "chodzący" na wszystkich Ac od 2k0 włącznie...

Zaczynamy?
1) i 2) Zaczynaj... :)

no moze byc ciekawie :) fajnie gdyby ktos jeszcze dolaczyl co by dyskusja nie byla "skrzywiona" moimi nawykami i checiami zrobienia czegos tak a nie inaczej. sugestie, uwagi mile widziane
czyil na poczatek:
Kod: Zaznacz cały
(Defun C:ADA (/ OB)
  (initget "Ustaw Wyjdz")
  (setq OB (nentsel (strcat "\nWskaz ATTRIB/MTEXT/TEXT aby zmienic date <" "DD.MM.RR" "> [Ustaw/Wyjdź]: ")))
  (princ)
);defun

(princ)

Bedziemy dzialac w petli WHILE czy tylko warunek IF (petla chyba ciekawsza)
Jakies opcje rozpatrujemy w zgloszeniu?
k.
Avatar użytkownika
kruuger
 
Posty: 4860
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

[LISP] CADPL - Wstaw datę [Tool_008]

Postprzez kojacek » cze 29, 2010 19:49

Ode mnie na razie:
Kod: Zaznacz cały
(defun C:ADA (/ In Format)
  (setq Format "DD.MM.RR") ; <- pozniej obliczone
  (initget "Ustaw Wyjdz")
  (setq In
    (nentsel
      (strcat "\nWskaż ATTRIB/MTEXT/TEXT aby zmienić datę <"
              Format
              "> [Ustaw/Wyjdź]: "
      )
    )
  )
  (if
    (listp In)
    (if
      (zerop (length In))
      (princ "\nNic nie wskazano. ")
      (progn
        In
      )
    )
    (progn
      In
    )
  )
  ;(princ)
)


1) Format jako zmienna (bo później będzie odczytywany przez osobną funkcję)
2) Na razie jak warunek tylko (if), sprawdzenie wyboru
Avatar użytkownika
kojacek
 
Posty: 5501
Dołączył(a): paź 03, 2005 20:17

[LISP] CADPL - Wstaw datę [Tool_008]

Postprzez kojacek » cze 30, 2010 11:13

Dodaję:
1) Funkcję formatujacą datę
2) Wykorzystanie jej w kodzie głównym
Teraz jest:
Kod: Zaznacz cały
(defun C:ADA (/ In Format)
  (setq Format
    (jk:SYS_GetFormatDate "." "DD" "MO" "YYYY")
  )
  (initget "Ustaw Wyjdz")
  (setq In
    (nentsel
      (strcat "\nWskaż ATTRIB/MTEXT/TEXT aby zmienić datę <"
              Format
              "> [Ustaw/Wyjdź]: "
      )
    )
  )
  (if
    (listp In)
    (if
      (zerop (length In))
      (princ "\nNic nie wskazano. ")
      (progn
        In
      )
    )
    (progn
      In
    )
  )
  ;(princ)
)


a format daty:
Kod: Zaznacz cały
(defun jk:SYS_GetFormatDate (sep a b c)
  (strcase
    (vl-string-translate "," sep
      (menucmd
        (strcat
          "M=$(edtime,$(getvar,date),"
          a "\",\""
          b "\",\""
          c ")"
        )
      )
    )
    T
  )
)

Popróbujcie

kojacek
Avatar użytkownika
kojacek
 
Posty: 5501
Dołączył(a): paź 03, 2005 20:17

[LISP] CADPL - Wstaw datę [Tool_008]

Postprzez kruuger » cze 30, 2010 11:34

kojacek napisał(a):Dodaję:
1) Funkcję formatujacą datę
2) Wykorzystanie jej w kodzie głównym
Teraz jest:
Kod: Zaznacz cały
(defun C:ADA (/ In Format)
  (setq Format
    (jk:SYS_GetFormatDate "." "DD" "MO" "YYYY")
  )
  (initget "Ustaw Wyjdz")
  (setq In
    (nentsel
      (strcat "\nWskaż ATTRIB/MTEXT/TEXT aby zmienić datę <"
              Format
              "> [Ustaw/Wyjdź]: "
      )
    )
  )
  (if
    (listp In)
    (if
      (zerop (length In))
      (princ "\nNic nie wskazano. ")
      (progn
        In
      )
    )
    (progn
      In
    )
  )
  ;(princ)
)


a format daty:
Kod: Zaznacz cały
(defun jk:SYS_GetFormatDate (sep a b c)
  (strcase
    (vl-string-translate "," sep
      (menucmd
        (strcat
          "M=$(edtime,$(getvar,date),"
          a "\",\""
          b "\",\""
          c ")"
        )
      )
    )
    T
  )
)

Popróbujcie

kojacek


co tu duzo pisac, wyglada to wszystko ciekawie.
pierwszy kody to chyba jakies przygotowanie na iles tam ruchow do przodu :) to sprawdzanie listp zerop.
czemu to bedzie sluzyc?
kolejny krok to chyba zmiana daty i wyswietlenie okienka?

kruuger
Avatar użytkownika
kruuger
 
Posty: 4860
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

Następna strona

Powrót do AutoCAD

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników