FastFiber

Meervoudige keuze menu

Gestart door Atwist, ma 23 05 2011, 10:47:34

Vorige topic - Volgende topic

PJ

Citaat van: Atwist op wo 25 05 2011, 15:25:56
Roy,

Ik geloof je graag, maar mijn kennis van programmeren is nog zeer gering.
Het is de bedoeling dat de toggles weer "gereset" worden, nu gaat de lisp telkens purgen als ik afsluit.


Dan kan je best die waardes op een gewenste default zetten vooraan in de routine.
first AutoCAD  = version 2.5 (1986), DOS, on a 80286 pc

Atwist

PJ,

Volgens mij staat de waarde op 0 (dus uit)
   (list nil "0" "0" "0")

Of lees ik dit verkeerd, is dit weer wat anders :roll:
Atwist

AutoCad 2008.

roy_043

Beste Atwist,

Het is eigenlijk hoog tijd dat je je serieuzer met lisp gaat bezighouden. Dus niet zomaar een beetje knippen en plakken, maar begrijpen wat je doet. Ik geef je nog een zetje:

Code uit bericht #4 en #5 (instellingen worden onthouden)

(defun c:tog (/ Dcl_Id%     Toggle1$    Toggle2$
                Toggle3$    Toggle4$    Toggle5$    Return#
             )
  (princ "\nAndre is aan het testen")
  (princ)
  (if (not *MyToggles@)
    (setq *MyToggles@ (list nil "0" "0" "0" "0" "0"))
  )
  (setq Toggle1$ (nth 1 *MyToggles@)
        Toggle2$ (nth 2 *MyToggles@)
        Toggle3$ (nth 3 *MyToggles@)
        Toggle4$ (nth 4 *MyToggles@)
        Toggle5$ (nth 5 *MyToggles@)
  )
  (setq Dcl_Id% (load_dialog "Mytoggles.dcl"))
  (new_dialog "MyToggles" Dcl_Id%)
  (set_tile "Title" " My Toggles")
  (set_tile "Toggle1" Toggle1$)
  (set_tile "Toggle2" Toggle2$)
  (set_tile "Toggle3" Toggle3$)
  (set_tile "Toggle4" Toggle4$)
  (set_tile "Toggle5" Toggle5$)
  (action_tile "Toggle1" "(setq Toggle1$ $value)")
  (action_tile "Toggle2" "(setq Toggle2$ $value)")
  (action_tile "Toggle3" "(setq Toggle3$ $value)")
  (action_tile "Toggle4" "(setq Toggle4$ $value)")
  (action_tile "Toggle5" "(setq Toggle5$ $value)")
  (setq Return# (start_dialog))
  (unload_dialog Dcl_Id%)
  (if (= Toggle1$ "1")
    (progn
      (load "start")
      (c:tsm)
    )
  )
  (setq *MyToggles@ (list nil Toggle1$ Toggle2$ Toggle3$ Toggle4$ Toggle5$))
  (princ)
)


Aangepaste versie van deze code. De instellingen worden nu niet onthouden:

(defun c:tog (/ Dcl_Id%     Toggle1$    Toggle2$
                Toggle3$    Toggle4$    Toggle5$    Return#
             )
  (princ "\nAndre is aan het testen")
  (princ)
  (setq Dcl_Id% (load_dialog "Mytoggles.dcl"))
  (new_dialog "MyToggles" Dcl_Id%)
  (set_tile "Title" " My Toggles")
  (action_tile "Toggle1" "(setq Toggle1$ $value)")
  (action_tile "Toggle2" "(setq Toggle2$ $value)")
  (action_tile "Toggle3" "(setq Toggle3$ $value)")
  (action_tile "Toggle4" "(setq Toggle4$ $value)")
  (action_tile "Toggle5" "(setq Toggle5$ $value)")
  (setq Return# (start_dialog)) ; Return# wordt nog (?) niet gebruikt
  (unload_dialog Dcl_Id%)
  (if (= Toggle1$ "1")
    (progn
      (load "start")
      (c:tsm)
    )
  )
  (princ)
)


Groet, Roy.

PS: In jouw laatste start.lsp gebruik je puD$ en puB§ door elkaar. Dat kan vanzelfsprekend nooit werken.

Atwist

Roy,

Dank voor je voorzet
Ik ben niet met knip en plak werk bezig ik probeer de simpele programma's te ontcijferen en kijken of ik het kan gebruiken.
Er zullen altijd fragmenten van andere lisp's in zitten, zo ben jij en ook andere begonnen.
Ben dan wel x jaren tekenaar maar ik mijn nagenoeg nooit met programeren bezig gehouden en het dan nog op latere leeftijd nog zo uit de mouw schudden zo als jullie dat doen dan ben ik nog wel een tijdje bezig.
Volgens mij is dit forum om elkaar te helpen, wij stellen toch ook vragen op andere forum's omdat wij het niet weten.

Atwist
Atwist

AutoCad 2008.

roy_043

Atwist, het ontbreekt jou wat lisp betreft toch echt aan basiskennis.
Als je hier iets aan wilt doen dan is dit een aanrader (Duitstalig, maar dat is voor jou geen probleem):
http://www.autolisp-tutorial.mapcar.net/

HofCAD

#20
Beste Atwist,

Sommige mensen hebben geluk bij het slechte weer! :mrgreen:
Ik vind persoonlijk dat bijv. het onderstaande programma Retab beter is:
(defun c:Retab (/ App Dir)
  (setq App (strcat "mditab" (substr (getvar "ACADVER") 1 2))
          Dir  "T:\\Instellingen\\twist engineering\\lisp map\\"
  )
  (arxunload app (princ (strcat "\n" App " is unloaded.")))
  (setq App (strcat Dir App))
  (if (findfile (strcat App ".arx"))
    (progn
      (arxload App)
      (princ "\nThe drawingtabs are reloaded.")
    )
    (progn
      (alert (strcat " Application error: \n"
     App
     ".arx"
     " does not exist!"
     )
      )
      (princ
(strcat "\nWarning: File "
(strcat App ".arx")
" does not exist!"
)
      )
    )
  )
  (princ)
)

a) Geen foutmelding als de applicatie mditab##.arx niet geladen is.
b) Automatische keuze tussen mditab17.arx en mditab18.arx.
c) Duidelijke foutmelding als mditab##.arx onvindbaar is.

In de attachment zit het programma Tsm.lsp, wat volgens mij van een
betere opzet is dan je Start.lsp (Attachment  in: Antwoord #9).
a) De dialoogbox (*.dcl) wordt naar een tijdelijk bestand geschreven.
b) Er zit meer structuur in door de subroutines, en hopelijk maar 1 globale
  variabele TsmValPuLst.(Dit moet ik nog controleren. :oops:)
c) Door de formating door VLIDE is het programma ook beter leesbaar.
d) Er zijn meer controles op fouten.
e) Als een Lisp bestand onder een button niet gevonden kan worden, volgt er
    een melding.
f) Onderdrukking van overbodig commentaar.
g) Purge settings worden onthouden.
h) Een programma SetTsm voor resetting Purge settings.
i) Een duidelijke load commentaar.

Ik heb het programma niet volledig gecheckt, en het is ook nog niet optimaal!
Probeer het eens uit! :pintje:

Met vriendelijke groet, HofCAD CSI.

PS1 Ik snap niet goed wat je wilt bereiken met de knop 'Uitvoeren'.

PS2 Als een button aanstaat, dan kan het zijn dat er niet gepurged wordt.
Dit is makkelijk te verhelpen door het 'purge gedeelte' boven het programma
gedeelte te zetten(Wat ook door mij gedaan is)

(@Purge)
(@RunExtSub KeyNo KeyLst)


PS3 In het programma Start.lsp staat:
((= op "tekst")
  (c:tins)
)

((= op "optelU")
  (c:optel-r)
)

Moet dit niet vervangen worden door bijv.:
((= op "tekst")
  (if (@FindLoad "tins.lsp")
    (c:tins)
  )
)

of door
((= op "tekst")
  (if (null c:tins)
    (princ
      "\nWarning: Command TINS is not possible. Load the necessary file."
    )
    (c:tins)
  )
)
ACADcadabra

Atwist

Ik waardeer dit heel erg dat jij hier tijd in hebt gestoken. :o

Heb de lisp geprobeer en getest tot nu is het gewoon helemaal top. :vreegoe:

Ik ben nu bezig (ook al heb ik het druk) om het een en ander uit te vissen en waarom jij dit zo hebt gedaan, om hiervan te leer natuurlijk.  :mrgreen:

Re.PS1    de uitvoer knop is bedoeld voor het purg gedeelte dus om een purg opdracht te geven zonder dat het "TSM"             scherm weg gaat en was ook bedoeld dat dan gelijk troggle's worden gereset.

Re. PS2   Heb nog geen probleem gehad met het niet purgen maar ik zal dit onthouden.

Re. PS3   Deze code hebt ik zo gemaakt omdat de "TINS" wordt opgestart bij de strat van AutoCad.
                De reden hiervoor is dat als ik het net als de andere doe dat geeft het vaak problemen met het strarten van "TINS".


Nogmaals erg veel dank hiervoor. :vreegoe:
Atwist

AutoCad 2008.

HofCAD

#22
Beste Atwist,

Je antwoord #21 is me niet helemaal duidelijk, maar ik hoop dat je via het
onderstaande beter kan aangeven wat je wilt.

1) Als de button 'Uitvoeren' wordt gekozen:
1a) De dialoogbox verdwijnt tijdelijk.
  (Of je dit opmerkt is afhankelijk van het werk, maar het kan niet anders!)
1b) Er wordt alleen gepurged volgens de gekozen purge instellingen.:?:(Ja/Nee)
1c) De dialoogbox komt weer op.
1d) Hierbij moeten de vorige gekozen purge instellingen nog aanstaan. :?:(Ja/Nee)
1e) De purge instellingen kan men dan eventueel wijzigen, en men kan ook
    eventueel een button aanklikken buiten de categorie 'Purge keuze'.
1f) Hier na heeft men de keuze voor 'Uitvoeren', 'OK', 'Cancel' en 'Help'.
2) Als de button 'OK' wordt gekozen:
2a) De dialoogbox verdwijnt.
2b) Er wordt eventueel gepurged volgens de gekozen purge instellingen. :?:(Ja/Nee)
2c) Als er buiten de categorie 'Purge keuze' nog een button aanstaat, dan
    wordt geprobeerd om een extern programma op te starten.
2d) De gekozen purge instellingen mogen dan ook bewaard blijven. :?:(Ja/Nee)
2e) Het programma wordt beëindigd.
3) Als de button 'Cancel' wordt gekozen:
3a) De dialoogbox verdwijnt.
3b) Er wordt niets gepurged en er wordt ook geen extern programma opgestart.
3c) De gekozen purge instellingen mogen dan ook bewaard blijven. :?:(Ja/Nee)
3d) Het programma wordt beëindigd.
4) Als de button 'Help' wordt gekozen:
4a1) Dan gebeurt er nu en in de toekomst niets. :?:(Ja/Nee)
4a2) De button 'Help' mag verdwijnen! :?:(Ja/Nee)
4a3) Het eventuele help bestand heeft als extensie :?: (*.Chm/*.Pdf/Anders)
       Een *.Chm is beter.
4a4) Wat wordt de eventuele naam van het help bestand?:?: (TsmHelp.Chm/TsmHelp.Pdf/Anders)


De consequentie 'dat de gekozen purge instellingen bij een 'OK' of bij een 'Cancel'
bewaard blijven' is, dat bij een herstart van het programma Tsm de dialoogbox weer
kan opkomen met de bewaarde purge instellingen.

Als men bij de purge instellingen gekozen heeft voor 'Purge alles', maar bijv. ook
ook voor 'Blocks' en 'Layers' dan moet alleen een PURGE All volgen? :?:(Ja/Nee)

Heb je de waarschuwingen die nu op de commandoregel verschijnen liever in
een scherm? :?:(Ja/Nee/Beiden)

Moet je tijdens het herhaald purgen met de button 'Uitvoeren' geen scherm zien
of er nog iets valt te purgen? :?:(Ja/Nee)

Met vriendelijke groet, HofCAD CSI.



PS1 Je kiest er voor om te purgen via het programma Tsm en het commando -PURGE,
maar is het commando PURGE niet gebruiksvriendelijker?
Je hebt o.a. binnen een optie geen controle op wat je purged!
PS2 Ook je DCL bestand is niet zoals het hoort.
Je moet eerst een Label aangeven en dan pas een Key en niet omgekeerd.
Dit heeft mij namelijk proplemen gegeven bij de repetitie van purgen met
de button 'Uitvoeren'.
PS3 Om een *.Doc om te zetten naar een *.Chm
Zie bijv. http://download.cnet.com/Batch-DOC-to-CHM-Generator/3000-2079_4-10909381.html
PS4 Je werkt in Duitsland, maar je bent volgens mij niet van Nederlandse noch
    van Duitse afkomst!
:pintje:

ACADcadabra

Atwist

Hallo HofCad,

Mijn excuus voor de late reactie, hebben de hele nacht door gewerkt op locatie.

Maar goed even overgaan tot de orden van de dag.

1b = ja
1d = nee
2b = nee
2d = nee
3c = nee

4 Er komt geen help bestand

PurgALL = ja

Waarschuwing het liefst in het scherm.

Purg herhaal scherm = ja

PS1: Heb ik mij zelf aangeleerd maar waarom weet ik niet.
PS2: Dit komt omdat ik bestaande lispen ombouw en dan neem je natuurlijk ook de fouten over.
PS3: Oke
PS4: Ben Nederlander maar woon/werk al 7 jaar in Duitsland en door dat ik steeds wissel van de Nederlands naar
de Duitse taal wijzig gebeurd het vaak dat ik spel fouten ik de tekst heb staan Ik denk dat je daar op doelt.
Atwist

AutoCad 2008.

HofCAD

#24
Beste Atwist,

In het bestand Tsm2a.lsp zit nog steeds de Help, en in bestand Tsm2b.lsp
is de Help verwijderd.
Als je Tsm2a.lsp op de Help klikt krijg je nu nog de Lisp Help, maar je kan ook
maken dat bijv. een andere CHM, een PDF of je website geopend wordt.
Probeer ze eens uit.

Met vriendelijke groet, HofCAD CSI.
ACADcadabra

Atwist

Hallo HofCad.

Ik heb er flink mee gestoeid en het werkt allemaal geweldig, het enigste wat nu verveelend is is dat ik nu twee knoppen moet aan kliken (bij het orgineel "start") was dat een handeling.
Dus klik een je ging door zonder eerst op OK nog te drukken.

Maar voor de rest hellemaal top
Atwist

AutoCad 2008.

HofCAD

#26
Citaat van: Atwist op di 09 08 2011, 15:24:08
Hallo HofCad.

Dus klik en je ging door zonder eerst op OK nog te drukken.

Beste Atwist,

Je hebt dat zo gemaakt, maar wat voor functie had dan de 'OK' button.
De 'OK' button is er voor dat de gebruiker nadenkt over zijn keuze!

Met vriendelijke groet, HofCAD CSI.

PS in het programma Tsm2c.lsp heeft de 'OK' een zelfde werking als de 'Cancel'.
ACADcadabra

Atwist

Geen

"Dit komt omdat ik bestaande lispen ombouw en dan neem je natuurlijk ook de fouten over."
Atwist

AutoCad 2008.

HofCAD

#28
Beste Atwist,

Wil je vorderingen maken, dan moet je toch denken aan:
Computers kunnen uitsluitend goed gedefinieerde problemen oplossen.
In antwoord #22 vraag ik je expliciet:
Citaat van: HofCAD op zo 07 08 2011, 01:36:25
Beste Atwist,

Je antwoord #21 is me niet helemaal duidelijk, maar ik hoop dat je via het
onderstaande beter kan aangeven wat je wilt.

2) Als de button 'OK' wordt gekozen:
2a) De dialoogbox verdwijnt.
2b) Er wordt eventueel gepurged volgens de gekozen purge instellingen. :?:(Ja/Nee)
2c) Als er buiten de categorie 'Purge keuze' nog een button aanstaat, dan
     wordt geprobeerd om een extern programma op te starten.
2d) De gekozen purge instellingen mogen dan ook bewaard blijven. :?:(Ja/Nee)
2e) Het programma wordt beëindigd.
Waarom toen niet gereageerd met: 'Ik wil helemaal geen OK button'.

Als je iets uit een andere Lisp overneemt, dan moet je toch goed nadenken
of dat het past bij je gedefinieerde probleem.
En je moet toch eventueel het gedefinieerde probleem tijdig bijsturen.

Heb je Tsm2c.lsp uitgeprobeerd?

PS Als ik in Tsm2c.lsp de 'OK' button verwijder, ben je dan helemaal gelukkig?
ACADcadabra

Atwist

Beste HofCad,

Ik ben met TSM2c nu al erg blij waarvoor mijn dank.

Maar ik merk wat onvrede in je tekst.

Even voor de duidelijkheid
1. De door mij geplaatste "start" lisp was nog niet klaar ik wist dat daar fouten in zatten.
2. Ik weet dat mijn kennis van lisp programeren erg gering is, ik maak bestaande lisp zo dat ik ermee kan werken met ja storende fouten.
3. Ik heb al mijn waardeering uitgesproken, dat jij uit eigen beweging dit probleem wil oplossen komt voor jou rekening.
je moet dan ook begrip hebben voor mijn geringe kennis.
4. De forums zijn ervoor om elkaar te helpen, dat jij veel meer kennis hebt dan de meeste gebruikers van dit forum, daarvoor ook alle lof, maar toon dan ook begrip voor mensen met "domme" vragen en begin dan niet gelijk met de wijzende vinger te wijzen.

Dit is wat ik nu even kwijt wilde.
Atwist

AutoCad 2008.

FastFiber