Manchmal keine Reaktion auf Maus-Klicks

Started by Arcuso, January 12, 2010, 06:05:32 AM

Previous topic - Next topic

Arcuso

Gruß aus Bad Ischl !
Wir fahren im Vermessungsbüro vorläufig noch mit AutoCAD 2005 und planen heuer ein gröberes Upgrade, auch bei unseren selbstgeschnitzten LISP-Tools. Für eine feinere Oberfläche dieser Makros habe ich mir eben OpenDCL 6 heruntergeladen und installiert.
Der Editor, Support und Übersetzung sind sehr ansprechend, die Muster-Dialoge überzeugend.
Beim ersten neu erstellten Projekt funktionierte aber die Weiterleitung von Maus-Klicks an die entsprechenden Lisp-Funktionen nicht. Diese selbst sind aber OK (bei statischem Dialog in der Commando-Zeile eingegeben). Bei der Fehlersuche habe ich das Beispiel "Modeless" (das ja korrekt arbeitet) umgebaut und habe den EXIT-Button geklont. Der funktioniert jetzt wie sein Original, obwohl gar keine LIsp-Funktion für ihn existiert. Dafür reagiert aber ein neuer Button samt Funktion überhaupt nicht. Bei den Objekt-Eigenschaften kann ich keine Ursache finden.
Zur Demo hätte ich 4 Files vorbereitet.

Danke

Fred Tomke

Hallo, Arcuso,

herzlich willkommen im OpenDCL-Forum.

Zunächst was Administratorisches: gehe mal in Dein Profil.
In den Profil-Einstellungen findest Du einen Menüpunkt Benutzerkonto. Dort gibt es eine Auswahlliste Sprachdatei. In der Liste findest Du zweimal German. Bitte wähle das untere German aus, um die Umlaute korrekt anzuzeigen.

Um Dein Problem zu lösen, wäre tatsächlich ein Beispiel sinnvoll - denn mir fallen ad hoc jede Menge Gründe ein, die ein Funktionieren scheinbar unmöglich machen.

QuoteZur Demo h�tte ich 4 Files vorbereitet.
Dann freue ich mich auf die Demos.  ;)

VG, Fred
Fred Tomke
Dipl.-Ing. (FH) Landespflege

[ landscaper - landscape developer - digital landscape and urban design]

SpEEDY

Hallo Arcuso und Willkommen im Forum
Endlich kommt hier ein wenig Leben rein. Aber nur ein wenig.

Wie Fred schon sagt einen Demo wer am besten um dir einen gezielte Lösung zu nennen.

Mir ist aber gerade Langweilig und ich nenne dir schon ein Paar Sachen die du in OpenDCL Studio beachten solltest um zum richtigen Ergebnis zu kommen.

Wenn es um das klicken einer Schaltfläche geht muss folgendes beachtet werden.
Fred korrigiere mich wenn ich Falsch liege.

1.
Beim dem Register Karte "Ereignisse". Muss eine haken bei "Clicked" gemacht werden.
Falls der Button Kopiert ist und schon ein Haken dir ist. Sollte man ihn einmal raus nehmen und wieder rein tun. Den so Aktualisiert sich der Name des Befehls in der Lisp-Routine.



2.
Nach dem Haken muss auf jedenfall das ODCL Pojekt gespeichert werden.

3.
In der Lisp-Routine muss folgender Code ausgeführt werden.

(defun c:Unbenannt_Dialog1_Textschaltfläche1_OnClicked (/);hier muss natürlich der Name deines Form und der Name deine Button stehen. Einfach auf Kopieren in den "Ereignissen" klicken.
  (dcl_MessageBox "OK");nur zum testen
)

Wenn du alles richtig gemacht hast sollte es funktionieren.
Vergiss aber nicht das laden deinen ODCL-Projektes und der ODCL befehle. Am Anfang deiner Routine.

(command "OpenDCL")
(dcl_Project_Load "name deines Projektes" T)
(dcl_Form_show Erst eder names des Prokektes dann der Name des Forms)

Hoffe du kannst damit was anfangen. Wenn du die Demo zu Verfügung stellst kann man mehr sagen.

Mfg

SpEEDY
Es ist unmöglich etwas Idiotensicher zu machen, weil Idioten so genial sind!

Fred Tomke

Hi SpEEDY, vielen Dank für Deine Unterstützung.

Quote from: SpEEDY on January 12, 2010, 12:19:14 PM
Mir ist aber gerade Langweilig [...]

Da kann ich aber Abhilfe schaffen: schau mal hier.  ;D

Hi, Arcuso,

neben der Idee von SpEEDY gäbe es da noch das Detail, dass in nicht-modalen Dialogen Ereignisse synchron oder asynchron ausgeführt werden. Das könnte am Ende zu dem scheinbaren Effekt führen, dass ein Ereignis nicht ausgeführt wird. Eine kleine Erklärung findest Du hier.

VG,
Fred
Fred Tomke
Dipl.-Ing. (FH) Landespflege

[ landscaper - landscape developer - digital landscape and urban design]

SpEEDY

Morgen Fred.

Ich kann nur sagen du und deinen Samples.  ;D
Ich weiß nicht um ich zu dem ÃÅ"bersetzen komme.
Vielleicht ende nächster Woche. Kann ich dir aber nicht an dieser Stelle Versprechen.
Was wir aber auch noch ÃÅ"bersetzen sollten bzw. neu schreiben. Wäre das Beginner Tutorial auf der Hauptseite.

Aber dazu später mehr.

Erstmal muss Arcuso geholfen werden.  ;D

Mit freundlichen Grüßen

SpEEDY
Es ist unmöglich etwas Idiotensicher zu machen, weil Idioten so genial sind!

Fred Tomke

Quote from: SpEEDY on January 13, 2010, 12:31:49 AM
Was wir aber auch noch ÃÅ"bersetzen sollten bzw. neu schreiben. Wäre das Beginner Tutorial auf der Hauptseite.

Gute Idee!
Fred Tomke
Dipl.-Ing. (FH) Landespflege

[ landscaper - landscape developer - digital landscape and urban design]

Fred Tomke

Aaaalso, Arcuso sandte mir zwischenzeitlich seine Demos.

1.: Kopie-von-Schließen-Schaltfläche: entspricht genau dem Problem, das SpEEDY schilderte. Copy&Paste eines Steuerelements kopiert zunächst auch die Ereignisfunktionsnamen. Beim ersten Aktivieren eines Ereignisses wird aus dem Steuerelementvariablennamen und dem Ereignisnamen ein Befehlsname definiert und im Eingabefeld unter der Liste der Ereignisse ergänzt. Es wird also der Funktionsname nicht automatisch verändert, wenn das Steuerelement umbenannt oder kopiert wird, denn es kann gewollt sein, dass verschiedene Auslöser die gleiche Ereignisfunktion auslösen (siehe OnKillFocus oder OnReturnPressed in einem Eingabefeld oder Entf-Taste innerhalb eines ListView und Löschen-Schaltfläche). Lösung von SpEEDY ist demnach anzuwenden.

2. Neuer Knopf-Schaltfläche. Hier hast Du das Ereignis OnClicked noch nicht aktiviert!

Soweit fürs erste.

VG, Fred
Fred Tomke
Dipl.-Ing. (FH) Landespflege

[ landscaper - landscape developer - digital landscape and urban design]

Fred Tomke

Ja und zum zweiten Beispiel, Arcuso, kann ich folgendes sagen:

Du kannst nur Ereignisse verwenden, die auch existieren. Du versuchst beim Doppelklick in ein Eingabefeld die Vordergrundfarbe zu ändern. Das wird nicht so funktionieren, weil es für ein Textfeld kein OnDblClick-Ereignis gibt. Man könnte aber ein OnSetFocus und ein OnKillFocus abfangen.

Es gibt zwar ein onMouseMove, damit aber ein Doppelklick-Ereignis abzufangen, halte ich für aufwändig. Außerdem wird damit sehr viel Traffic generiert.

Ich habe mal ein Beispiel angehangen.

Fred
Fred Tomke
Dipl.-Ing. (FH) Landespflege

[ landscaper - landscape developer - digital landscape and urban design]