Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Mehrzeilen Text in einem DCL-Fenster edetieren

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Mehrzeilen Text in einem DCL-Fenster edetieren (1043 mal gelesen)
Niggemann
Mitglied



Sehen Sie sich das Profil von Niggemann an!   Senden Sie eine Private Message an Niggemann  Schreiben Sie einen Gästebucheintrag für Niggemann

Beiträge: 159
Registriert: 31.10.2003

Win 98 Se, ACAD 2004, XP Prof, ACAD 2004 und ACAD 2010

erstellt am: 30. Mai. 2006 21:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen
Ist es möglich in einem DCL-Fenster einen Mehrzeilen Text zu erfassen, ändern oder neu zu erstellen. Die maximale Anzahl von Textzeilen beträgt 99. Mit einer List_box bekomme ich den Text zwar in das Fenster kann ihn aber nicht bearbeiten. Der text kommt aus einer Ascii-Datei und ist als Liste in Autolisp vorhanden.

Wer weiß einen Rat
im Vorraus schon mal Danke

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Theodor Schoenwald
Ehrenmitglied



Sehen Sie sich das Profil von Theodor Schoenwald an!   Senden Sie eine Private Message an Theodor Schoenwald  Schreiben Sie einen Gästebucheintrag für Theodor Schoenwald

Beiträge: 1672
Registriert: 16.04.2002

erstellt am: 31. Mai. 2006 00:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Niggemann 10 Unities + Antwort hilfreich

Hallo,

was hindert Dich die ASCII-Datei mit einem komfortablen Editor zu bearbeiten, z.B. mit dem "JFE" von Jens Altman (Freeware). Den Editor und Deine ASCII-Datei kannst Du unter Lisp ganz einfach aufrufen. Dein ganzer Code wäre nur ein par Zeilen.

Gruß
Theodor Schönwald

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



Sehen Sie sich das Profil von marc.scherer an!   Senden Sie eine Private Message an marc.scherer  Schreiben Sie einen Gästebucheintrag für marc.scherer

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 31. Mai. 2006 09:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Niggemann 10 Unities + Antwort hilfreich

Hi,
also ich habe dieses Problem folgendermaßen gelöst:

Zur Erklärung:
Der Text wir auf 10 Zeilen gekürzt in dem Abschnitt ": paragraph"
angezeigt (könnte man natürlich auch vermindern/erhöhen).
DCL-Definition s.u.
Will man den Text editieren, muß man auf den Button editieren drücken und die interne Acad-Func (IMHO ETools! erforderlich) acet-ui-txted wird mit dem gespeicherten Text aufgerufen (Der gepeicherte Text wird zur Anzeige in der Dialogbox immer durch 'ne Subroutine gejagt, remember 10 Zeilen Begrenzung, aber das muß den gespeicherten Text ja nicht jucken ;-))
Einfach mal testen:

Code:

(acet-ui-txted "Ey, coole Sache das..." "Dialogtitel" "Anfrage:")

Ein wesentlicher Knackpunkt war damals das Format des Zeilen-Delimitters. Ich mußt als Zeilentrennung im gespeicherten Text das Semikolon ( ";" ) verwenden, acet-ui-txted benötigt zur Zeilentrennung aber "\r\n".
Dafür habe ich dann 'nen eigenen Aufruf von acet-ui-txted geproggt,
der den Delimitter des gespeicherten Textes vor Aufruf austauscht und nach der Rückgabe eben wieder zurücktauscht (siehe MS:EDIT_BOX).

Nachfolgend ein paar Codes dazu, auch deren Kommentar sollte für Dich hilfreich sein.
Ich weise aber darauf hin, dass es sich bei den hier veröffentlichen Codes keinesfalls um eine fertige Komplettlösung handelt. Es fehlen z.B. einige Subroutinen. Es ging mir auch nur darum einen Lösungsansatz aufzuzeigen.

DCL-Definition für Anzeige des Textes:

Code:

ZVO_NOTE_10 : boxed_row {
label = "Bemerkung:";
: paragraph {
            : text_part {
                key = "TEXT1";
//                width = 63;
            }
            : text_part {
                key = "TEXT2";
//                width = 63;
            }
            : text_part {
                key = "TEXT3";
//                width = 63;
            }
            : text_part {
                key = "TEXT4";
//                width = 63;
            }
            : text_part {
                key = "TEXT5";
//                width = 63;
            }
            : text_part {
                key = "TEXT6";
//                width = 63;
            }
            : text_part {
                key = "TEXT7";
//                width = 63;
            }
            : text_part {
                key = "TEXT8";
//                width = 63;
            }
            : text_part {
                key = "TEXT9";
//                width = 63;
            }
            : text_part {
                key = "TEXT10";
//                width = 63;
            }
}
: button {
            fixed_width = true;
            fixed_height = true;
            alignment = top;
            label = "Editieren";
            key = "BTNEDITNOTE";
        }
}


Lisp-Funktionen für Edit-Box und das Befüllen der Text-Anzeige

Code:

;; Basiert auf der acetutil.arx
;; (acet-ui-txted [text [caption [note]]])
;; Der Text geht als ";" separated rein und raus
;; intern muß jedoch der delimiter ein "\r\n" sein.
;; Die Wandlung erfolgt in dieser Sub.
(defun MS:EDIT_BOX (TEXT DIALOGTITLE USERPROMPT / RETVAL)
  ;; Wandlung des textstrings in ein kompatibles Format:
  (setq TEXT (MS_STRTOKEN-SUBST TEXT "\r\n" ";"))
  (if (setq RETVAL (MS:SAFE-EVAL
                     (list 'acet-ui-txted TEXT DIALOGTITLE USERPROMPT)
                   ) ;_ end of MS:SAFE-EVAL
      ) ;_ end of setq
    (setq RETVAL (MS_STRTOKEN-SUBST RETVAL ";" "\r\n"))
    (setq retval (MS_STRTOKEN-SUBST TEXT ";" "\r\n"))
  ) ;_ end of if
  RETVAL
) ;_ end of defun


;; Funktion stellt den delimited-String in einem Zehnzeiligen Bemerkungs-
;; feld dar.
;; Das Argument KEY ist ein Teilstring für den KEY der weitere Teilstring
;; ergibt sich durch indizies. Also z.B. KEY = TEXT dann wird daraus TEXT1, TEXT2 usw.
;; Argumente:
;; KEY = Der Anfangsstring für den Key, wird durch eine laufende Nummer erweitert
;; NOTESTR = Ein eventuell mit 'nem Token geteilter String (csv)
;; DELIMITER = Das Trennzeichen für csv
;; NOTELEN = Anzahl der zulässigen Zeilen
;;
;; Rückgabe = Keine
;;
;; Beispielaufruf:
;; (ZVO-NOTE-IF "TEXT" "A;B;C;D;E;G" ";" 10)
(defun ZVO-NOTE-IF (KEY NOTESTR DELIMITER NOTELEN / INDEX NOTELST)
  (setq KEY   (strcase KEY)
        INDEX 1
  ) ;_ end of setq
  (if (get_tile (strcat KEY (itoa INDEX)))
    (if NOTESTR
      (if (/= NOTESTR "")
        (progn
          (setq NOTELST (MS_STRTOKEN NOTESTR DELIMITER NIL)
                NOTELST (LIMITLIST NOTELST NOTELEN "")
          ) ;_ end of setq
          (foreach ELEM NOTELST
            (SET-TILE-IF (strcase (strcat KEY (itoa INDEX))) ELEM)
            (setq INDEX (1+ INDEX))
          ) ;_ end of foreach
        ) ;_ end of progn
      ) ;_ end of if
    ) ;_ end of if
  ) ;_ end of if
) ;_ end of defun

;; Funktion limitiert die Länge einer Liste auf
;; die im Argument LSTLEN übergebene Länge
;; Ist die Liste zu lang, wird sie gekürzt
;; Ist sie zu kurz, wird sie mit dem Wert
;; des Arguments FILLPATTERN aufgefüllt
(defun LIMITLIST (LST LSTLEN FILLPATTERN / LEN retval)
  (setq LEN (length LST))
  (if (> LEN LSTLEN)
    (repeat LSTLEN
      (setq RETVAL (cons (car LST) RETVAL)
            LST    (cdr LST)
      ) ;_ end of setq
    ) ;_ end of repeat
    (progn
      (setq RETVAL (reverse LST))
      (repeat (- LSTLEN LEN)
        (setq RETVAL (cons FILLPATTERN RETVAL))
      ) ;_ end of repeat
    ) ;_ end of progn

  ) ;_ end of if
  (reverse retval)
) ;_ end of defun



...

------------------
Ciao,
Marc

[Diese Nachricht wurde von marc.scherer am 31. Mai. 2006 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Niggemann
Mitglied



Sehen Sie sich das Profil von Niggemann an!   Senden Sie eine Private Message an Niggemann  Schreiben Sie einen Gästebucheintrag für Niggemann

Beiträge: 159
Registriert: 31.10.2003

Win 98 Se, ACAD 2004, XP Prof, ACAD 2004 und ACAD 2010

erstellt am: 31. Mai. 2006 22:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo

Ich habe vergessen in meiner Frage zuerklären wofür ich diesen Editor benötige. ich möchte damit Datanorm Texte erstellen diese werden in einer bestimmten Reihenfolge in einer Ascii-Datei abgestellt vor den Texten und hinter den Texten kommen noch Zahlen, Leerfelder usw..
Mit Lisp kann ich diese Datensätze sehr leicht manipulieren das heist ich kann sie in Datanorm 3, Datanorm 4 und Datanorm 5 ausgeben. Bisher habe ich mich mit dem guten alten EDIT.COM rumgeschlagen, dieses bin ich jetzt leid da ich immer aufpassen muß das eine Textzeile nicht mehr als  40 Zeichen hat, auch das Abzählen der Semikolons, die als Trennzeichen dienen, ist mir zu aufwändig. Das ganze Betrachte ich als eine Übung wenn's klappt habe ich wieder einiges dazugelernt was mir beim nächtsten Problem wieder weiter hilft. Seit 14 Jahren bearbeite ich mit Lisp Datanormdateien für mich gibt es kein einfacheres Werkzeug was genau das macht was ich will.

mfg
Niggemann

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Niggemann
Mitglied



Sehen Sie sich das Profil von Niggemann an!   Senden Sie eine Private Message an Niggemann  Schreiben Sie einen Gästebucheintrag für Niggemann

Beiträge: 159
Registriert: 31.10.2003

Win 98 Se, ACAD 2004, XP Prof, ACAD 2004 und ACAD 2010

erstellt am: 31. Mai. 2006 22:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Marc

Deine Antwort ist sehr interressant, mir wäre eine Lösung, die nicht auf irgendwelche Zusatzprogramme oder Dateien zurück greift lieber. Wie du aus meiner Antwort an Theodor Schönwald entnehmen kannst, habe ich mein erstes Tool mit ACAD R9 geschrieben und meine Progs laufen noch unter ACAD R16. Für micht zählt die Konstanz der Programme, da ich nicht jeden Tag etwas in Lisp mache und diese Tools mir meine tägliche Arbeit erleichtern sollen. Eine reine Lisp-Routine möglichst ohne VL.... Komponenten wäre mir am liebsten. Solltest du eine solche Lösung wissen wäree ich dir sehr Dankbar.

mfg
Niggemann

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Brischke
Moderator
CAD on demand GmbH




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 31. Mai. 2006 23:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Niggemann 10 Unities + Antwort hilfreich

@Niggemann,

wenn ich das jetzt richtig sehe, dann hast du im grunde irgendwelche Tabellen, die du in einem mehrzeiligem Textfeld angezeigt bekommen möchtest.
Wenn dem tatsächlich so ist, dann würde ich mit einer mehrspaltigen Liste arbeiten. Entsprechend der maximal möglichen Spalten definierst du in der DCL entsprechende Eingabefelder, die die Werte der gepickten Zeile anzeigen.
Dann bastelst du noch die Buttons für Editieren Hinzufügen und Löschen und fertig ist das ganze.
Klar das ist jetzt kein mehrzeiliger Editor, Vprteil wäre aber, dass du die Semikolons als Spaltentrennzeichen nicht mehr zählen musst. 

Grüße Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Niggemann
Mitglied



Sehen Sie sich das Profil von Niggemann an!   Senden Sie eine Private Message an Niggemann  Schreiben Sie einen Gästebucheintrag für Niggemann

Beiträge: 159
Registriert: 31.10.2003

Win 98 Se, ACAD 2004, XP Prof, ACAD 2004 und ACAD 2010

erstellt am: 05. Jun. 2006 21:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Datatext.gif

 
Hallo Marc, Hallo Holger
Habe mir eure Lösungsansätze zu Herzen genommen dabei kommen natürlich neue Fragen. Ich habe eine Variante mit untereinander angeordneten "edit_box" Feldern gewählt zwischen den Feldern ist ein unschöner Streifen, der mich stört.
1. Ist es möglich in dem DCL-Fenster die "edit_boxen" so anzuorden das diese Dichter aneinander sind?
2. Gibt es eine Möglichkeit die "Bild rauf" und "Bild runter" Tasten zu belegen damit ich in einem längeren Text scrollen kann?
3. Ist generell es möglich in einem Lisp die Funktionstasten zu Belegen?

im Vorraus schon mal Danke
Niggemann

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADwiesel
Moderator
CAD4FM UG




Sehen Sie sich das Profil von CADwiesel an!   Senden Sie eine Private Message an CADwiesel  Schreiben Sie einen Gästebucheintrag für CADwiesel

Beiträge: 1968
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 07. Jun. 2006 07:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Niggemann 10 Unities + Antwort hilfreich

Hai Niggemann

1. die editfelder können leider nicht enger zusammenrücken
2. wenn du anstelle von textfeldern listboxen verwendest, wird automatisch ein scrolbalken bei längeren Texten eingesetzt
3. ja

------------------
Gruß
CADwiesel
Besucht uns im CHAT

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Niggemann
Mitglied



Sehen Sie sich das Profil von Niggemann an!   Senden Sie eine Private Message an Niggemann  Schreiben Sie einen Gästebucheintrag für Niggemann

Beiträge: 159
Registriert: 31.10.2003

Win 98 Se, ACAD 2004, XP Prof, ACAD 2004 und ACAD 2010

erstellt am: 07. Jun. 2006 12:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo CADwiesel

das weiß ich auch in Listboxen kann ich auch das Mausrad zu scrolen benutzen, aber in den editfeldern kann ich schreiben und sehe noch was davor steht bzw. was dahinter wenn ich zB. eine Zeile gelöscht habe. Dieses ist dann einfacher weil ich dann den Text besser ausrichten kann zB.
Farbe  : rot
Material: Kunsttoff
so  stehen die Doppelpunkte immer untereinander und die Worte danach ebenso. Aber wie schon mal gesagt es sind reine Ascii-Daten. Der Zugriff auf die Funktionstasten der Tastatur würde mich intresieren und warum man einer "edit_box" ein "height = 5" zuweisen kann und den Rest der "edit-box" nicht Nutzbar ist. Alles andere klappt schon super.

Gruß
Niggemann

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz