| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | PNY: der unverzichtbare Partner für umfassende KI-Lösungen von Workstations bis zu Edge Computing und KI-Cluster-Bereitstellung, eine Pressemitteilung
|
Autor
|
Thema: Farbe Button ändern (dcl) (1962 mal gelesen)
|
AB Mitglied
 
 Beiträge: 255 Registriert: 24.05.2002 Mechanical Desktop 6 AutoCAD 2002
|
erstellt am: 24. Mai. 2004 16:25 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, kann man in einer dcl-Datei die Farbe eines image_button ändern? D.h., ich habe allen image_button die Farbe(color) schwarz zugeordnet. Nun soll der Button, der angeklickt wurde, eine andere Farbe erhalten. Geht das? Variablen scheinen ja nicht anerkannt zu werden (z.B. (setq Farbe 2) : image_button { width = 5; color = Farbe} ) Viele Grüße Andrea Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
    

 Beiträge: 1997 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 24. Mai. 2004 16:30 <-- editieren / zitieren --> Unities abgeben:          Nur für AB
|
Brischke Moderator CAD on demand GmbH
       

 Beiträge: 4191 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 24. Mai. 2004 20:17 <-- editieren / zitieren --> Unities abgeben:          Nur für AB
Hallo Andrea, klar geht das, schau dazu mal unter dem Stichwort fill_image in der Hilfe nach. Bei Fragen ... Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Treffen Sie (defun auf dem Autodesk Anwendertreffen am 15.06. in Steyr/Österreich! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
benwisch Mitglied Bautechniker, CAD-Konstrukteur
 
 Beiträge: 375 Registriert: 01.02.2001
|
erstellt am: 25. Mai. 2004 09:38 <-- editieren / zitieren --> Unities abgeben:          Nur für AB
Moin Andrea Zitat:
... Nun soll der Button, der angeklickt wurde, eine andere Farbe erhalten. Geht das?
In Lisp ja ! Holger's Antwort -> fill_imageHier mal zwei kleine Beispiele, was man so alles damit "anstellen" kann :-) DIE DCL DATEI -> speichern unter test-image_button.DCL
Code:
TEST : dialog { label="Sonnen->Regenbogenfarben"; : image_button { key = "pic"; width = 35; height = 17; aspect_ratio = 1.0; color = graphics_background; } ok_cancel; }
Mit dem folgenden Lisp siehst du, wie sich jeweils die Farbe bei Klick ändert. Aufruf mit (c:test-image) aus Lisp heraus
Code:
;;; Hauptroutine. Ruft bei jedem Klick auf die ;;; Schaltfläche im action_tile ;;; die Funktion img-button-event auf (defun c:test-image (/ dcl_id *col) (setq dcl_id (load_dialog "test-image_button.DCL") *col 0 ) (new_dialog "TEST" dcl_id) (action_tile "pic" "(img-button-event \"pic\")") (start_dialog) (unload_dialog dcl_id) ) ;_ end defun C:TEST-IMAGE;;; ----------------------------------------------------------------- ;;; Fnktion füllt ein image-button mit Farbe ;;; Argumente : diakey = Key der Schaltfläche ;;; color = Farbewert als Ganzzahl (defun fillimage (diakey color /) (start_image diakey) (fill_image 0 0 (dimx_tile diakey) (dimy_tile diakey) color) (end_image) ) ;_ end function FILLIMAGE ;;; **** ;;; diese Funktion wird im action_tile aufgerufen ;;; und erzeugt eine "Halb"-Globale Farbvariable ;;; und übergibt diese an die Funktion -> fillimage ;;; Argument: key = schaltflächen-key (defun img-button-event (key /) (if (> 90 (setq *col (1+ *col))) (fillimage key *col) (done_dialog) ) ) ;_ end function IMG-BUTTON-EVENT
Ja, sogar Diagramme oder ein Graph kann man erzeugen... Das nächste Beispiel erzeugt bei jedem Klick einen Punkt mit wechselnder Farbe "irgendwo" auf der Schaltfläche. Die Stärke des Punktes ist 2 (Pixel). Nach jedem erneuten Klick entsteht so langsam ein Kurve rechts oben... Aufruf mit (c:test-image-2) aus Lisp heraus
Code:
(defun c:test-image-2 (/ dcl_id *col) (setq dcl_id (load_dialog "test-image_button.DCL") *col 0 ) (new_dialog "TEST" dcl_id) (action_tile "pic" "(img-button-event-2 \"pic\")") (start_dialog) (unload_dialog dcl_id) ) ;_ end defun C:TEST-IMAGE-2;;; ----------------------------------------------------------------- ;;; Wandelt eine Gradzahl in Radiant um (defun deg->rad (ang) (* pi (/ ang 180.0))) ;;; **** ;;; wird im action_tile (der Hauptfunktion) aufgerufen ;;; und startet die Funktion math (defun img-button-event-2 (key /) (if (> 90 (setq *col (1+ *col))) (math key *col *col 150) (done_dialog) ) ) ;;; **** ;;; einfache Testfunktion zur Erzeugung eines Halbkreises ;;; rechts oben in der Image_button Schaltfläche ;;; Punkt ist 2 Pixel stark ;;; ang = winkel in Grad (defun math (key color ang rad /) (start_image key) (fill_image (- (dimx_tile key) (round_up (* rad (cos (deg->rad ang))))) (round_up (* rad (sin (deg->rad ang)))) 2 2 color ) (end_image) ) ;;; **** ;;; Funktion rundet eine reale Zahl auf oder ab ;;; und gibt einen Integer zurück (defun round_up (real /) (if (<= (/ 1 (- real (setq real (fix real)))) 2) (1+ real) (fix real) ) )
Fazit... Macht richtig Spaß oder :-) ------------------ www.benwisch.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AB Mitglied
 
 Beiträge: 255 Registriert: 24.05.2002 Mechanical Desktop 6 AutoCAD 2002
|
erstellt am: 25. Mai. 2004 12:35 <-- editieren / zitieren --> Unities abgeben:         
Ja, dass ist super. Funktioniert toll. Jetzt habe ich diesbezüglich nur noch eine kleine Frage. Wenn ich mehrere image_button nebeneinander darstellen möchte, dann habe ich immer eine Lücke zwischendurch und kann sie nicht direkt aneinander legen, oder? Viele Grüße Andrea Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
benwisch Mitglied Bautechniker, CAD-Konstrukteur
 
 Beiträge: 375 Registriert: 01.02.2001
|
erstellt am: 25. Mai. 2004 14:17 <-- editieren / zitieren --> Unities abgeben:          Nur für AB
Soweit mir bekannt ist, entsteht immer eine Lücke. Wenn du aber gerne einen Kacheleffekt machen möchtest, dann erzeuge doch einfach ein einzelnes großes image_button. Ein image_button gibt auch die Koordinaten des jeweiligen Klicks aus...siehe Bsp. Die untenstehende Routine erzeugt vom Mittelpunkt aus eine Linie (hier rot) zum Click-Point. In diesem Bsp. wird mit Operationsausdrücken gearbeitet ($Key = Schlüsselattribut; $x und $y = Bildkoordinaten) Aufruf mit (c:test-image-3) aus Lisp heraus
Code:
(defun c:test-image-3 (/ dcl_id *col) (setq dcl_id (load_dialog "test-image_button.DCL") *col 0 ) (new_dialog "TEST" dcl_id) (action_tile "pic" "(pick->line $key $x $y)") (start_dialog) (unload_dialog dcl_id) ) (defun pick->line (key x y /) (start_image key) (vector_image (/ (dimx_tile key) 2) (/ (dimy_tile key) 2) x y 1) (end_image) )
Mit diesen Info's kannst du nun dir was zurecht-"basteln" :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |