"Crash-Kurs BASIC und Dialoge"?

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

pcdirk91
***
Beiträge: 54
Registriert: Fr, 15.11.2013 18:02
Wohnort: Fürth/bay

"Crash-Kurs BASIC und Dialoge"?

Beitrag von pcdirk91 »

Halli Leute,
Beim Betreff wusste ich nicht genau wie ich Ihn benennen sollte *sorry
Ich habe im Anhang eine Prozedur P_MatAnlegen die ein Dialog aufruft in dem Materialien angelegt werden. In diesem Dialog werden die beiden Eingabefelder der Reihe nach eingeschltet bzw ausgeschaltet. wenn ich bei der Materialstärke feststelle, das ich die Bezeichnung ändern muss (möchte), geht das erst, wenn die beiden Felder gefüllt sind und ich das Bezeichnungsfeld erneut aktiviere. (ist duch den Event) . Soweit der Ist Zustand.
Meine FRage ist nun ob man die Möglichkeit schaffen kann schon aus dem Stärke-Eingabefeld wieder in die Bezeichnung zu gelangen.

Sicher ist die Lösung auch so wie sie jetzt ist machbar, aber bei grossen Dialogen mit vielleicht 10 eingabefeldern ist das ganze dann doch etwas mühsam. Das einblenden der einzelnen Eingabefeldern, soll so sein um Benutzer-Eingaben besser steuern zu können.

Vielleicht hat ja einer von Euch eine Idee wie man das lösen Könnte. Ach und kann man eigentlich auch mehere Ereignisse einem Feld zuorden??? (z.B. bei Fokuserhalt und FokusVerlust ???)
Danke im Voraus für Eure Ideen und Hilfe
Gruss DIrk
Dateianhänge
Versuch 1.ods
Hier die Datei mit dem Midul Material. Der Rest ist noch nicht fertig
(79.69 KiB) 168-mal heruntergeladen
Zuletzt geändert von pcdirk91 am Do, 30.01.2020 21:08, insgesamt 1-mal geändert.
marcel_at_work
****
Beiträge: 195
Registriert: Sa, 24.04.2010 15:51
Wohnort: Basel [CH]

Re: Eingabefelder in Dialog

Beitrag von marcel_at_work »

Hallöchen Dirk,

ich hab' jetzt nur mal kurz hineingeschaut. Es scheint da auch ein paar Fehler drin zu geben. Wenn man auf "Material anlegen" klickt, erscheint NUR das Bezeichner-Feld. Das "Stärke"-Feld ist NUR im "Material ändern"-Kontext vorhanden - ist dies so gewollt? WARUM willst du denn überhaupt den Bezeichner wieder ändern, nachdem du die Stärke geändert hast?

Was sich aber zeigt ist, daß du scheinbar noch gar keine Listener-Events benutzt...

Mittels der Xray-Library kannst du dir die möglichen Event-Handler und -Listener anzeigen lassen. Grundsätzlich stehen einem Objekt (dem Broadcaster) sämtliche Events gleichzeitig zur Verfügung. Diese sind u.a. in Andrew Pitonyak's "OpenOffice.org-Makros Erklärt" sehr gut beschrieben. Die möglichen Grenzen liegen dabei auschließlich in deiner Fantasie vor.

Du könntest z.B. per ENTER-KeyEvent vom Stärke-Feld (oder auto. nach drei Sekunden/oder was auch immer) zum Bezeichner-Feld zurückspringen.

Wenn ich dir aber einen Tipp in anderem Kontext geben darf:
Der Code in der Datei ist ziemlich umfangreich. Es finden sich überall Prozeduren und Definitionen mit selbem Inhalt, welche man durch Funktionen mit Parameter-Übergabe/-rückgabe größtenteils beseitigen könnte. Der Code wäre dann übersichtlicher und du hättest weniger zum Tippen. 8)

Aus tausend mal...

Code: Alles auswählen

Sub FeldTitelAus
 oTextAnweisung.Visible = False
 oTextFehler.Visible    = True
 oTextTitel.Visible     = False
 oBenTitel.Visible      = False
 oBenLand.setFocus
End Sub
... wird z.B. ...

Code: Alles auswählen

Public Sub objectSwitch(o1 As Object, o2 As Object, o3 As Object, o4 As Object, o5 As Object)
   o1.Visible = False
   o2.Visible = True
   o3.Visible = False
   o4.Visible = False
   o5.setFocus
End Sub
... und der Aufruf dazu:

Code: Alles auswählen

objectSwitch(oTextAnweisung, oTextFehler, oTextTitel, oBenTitel, oBenLand)
Oder aus...

Code: Alles auswählen

If oBenVor.Model.EnableVisible = True Then oBenVor.Model.EnableVisible = False
... wird...

Code: Alles auswählen

Public Sub setVisible(oObject As Object, bFlag As Boolean)
   oObject.Model.EnableVisible = bFlag
End Sub
... und der Aufruf...

Code: Alles auswählen

setVisible(oBenVor, False)
Viele Grüße,

Marcel
[Win 10 Pro x64/Downgrade 7, AOO 4.1.6 und LO 6.3.0.4]
pcdirk91
***
Beiträge: 54
Registriert: Fr, 15.11.2013 18:02
Wohnort: Fürth/bay

Re: Eingabefelder in Dialog

Beitrag von pcdirk91 »

Hi Marcel,
Erst mal Danle Für Deine Abtwort. Jetzt haste Dir genau den Teil angesehen an dem Ich gerade sitze.
Ich bin kein Programierer sondern nur "Schreinermeister" Aus Lust und Dollerei versuche ich mich in diese Art ein zuarbeiten. ich versuche immer erst eine Losung zu finden , um dann den Code zu kürzen wo es geht. Genau der Teil den Du Dir angesehen hast versuche ich gerade zu realisieren. Deshalb ist der noch ewig lang (Ich kopiere mir die Teile Im Block und schalte Dann die Sachen ein oder aus. Wenn das funzt versuche ich den Code zu kürzen.

Ist nicht der normale weg aber ich versuche so zu lernen. Das x-Ray habe ich schon so oft gehört aber bekomme es nicht zum laufen. Mein Englisch ist dazu zu schlecht (Dokimentation von xRay)

Das wegen des Materuals ist so gedacht:
Gehen wir davon aus ein absoluter Laie setzt sich an das Programm und versucht ein Material anzulegen. Dabb erscheibt erst die Material-Bezeichnung
er gibt was ein drückt Tab; die Eingabe wird geprüft wenn die Bedingungen alle erfüllt sind, wird die Material-Stärke eingeblendet usw. Wenn er sich aber bei der Bezeichnung verschrieben oder vertan hat sollte er das auch ändern können (sobald er es sieht). Sicher wenn er als Bezeichnung z.B. 123 eingibt dann ist das auchg richtig aber wie soll ich's sagen wenn ich in ein reines E-Mobil Benzin rein tue dann wird das auch nichts *grins soll heiu0en doof bleibt doof da .....
die Schritte die du vorgeschlagen hast werde ich mir mal in mein Hirn reinprügeln und dann sicherlich imsetzen * ich möchte die Schritte verstehen.

das was ich bisher ´ja nennen wir es mal so erreicht habe ist durch probieren, und nachfragen entstanden Ich habe bisher noch keine Bücher gekauft.
und wegen Deinem Post wegen dem Tablett * Sorry dachte das könnte dir helfen. War nicht böse gemeint

Vieln Dank nochmal für Deine Hilfe und schönes WE
Gruss Dirk
marcel_at_work
****
Beiträge: 195
Registriert: Sa, 24.04.2010 15:51
Wohnort: Basel [CH]

Re: Eingabefelder in Dialog

Beitrag von marcel_at_work »

Hallo Dirk,

da war ich wohl zu schnell. :lol:
Ich glaube, ich habe das mit dem "Bezeichner" immer noch nicht so ganz verstanden. WAS wird denn genau geprüft, wenn man den Bezeichner eingegeben hat??? Ein neues Material hat doch noch keine "Stärke" hinterlegt, oder?

Google mal diese kostenlosen .pdf-Dateien im Internet:
OOME 3.0 - OpenOffice.org Makros erklärt [Andrew Pitonyak]
OpenOffice.org Makros - Kochbuch [Thomas Krumbein]
StarOffice 8 - Programmierhandbuch für BASIC
Base 5.1 Gesamtband

Das sind deutsche Dokumentationen zu dem Thema - die erste benutze ich dabei am weitaus häufigsten, da sie sehr detailiert ist.
Ich habe früher auch einfach "drauf los" gearbeitet und Projekte haben sich dadurch unnötig in die Länge gezogen. Wenn man die Grundlagen kennt (und oben Beschriebenes ist in kurzer Zeit gelesen), erübrigen sich die meisten zukünftige Fragen wie von Geisterhand, da man "Masse" dazu hat.

Xray: Ohne diesen Objektinspektor könnte ich gar nicht arbeiten - das MUSST du haben! Die Xray-Dokumentation habe ich dabei noch niemals angeschaut. Die App an sich ist nach einiger Übung selbsterklärend.
WAS ist genau das Problem? Die Datei wird normal nur geöffnet und installiert sich nach klick automatisch in der Office-Bibliothek. Hat schon dies nicht funktioniert?

Viele Grüße,

Marcel

Ps.: Wegen dem Tablet > es HÄTTE 8) mir ja helfen können, alles gut.
[Win 10 Pro x64/Downgrade 7, AOO 4.1.6 und LO 6.3.0.4]
pcdirk91
***
Beiträge: 54
Registriert: Fr, 15.11.2013 18:02
Wohnort: Fürth/bay

Re: Eingabefelder in Dialog

Beitrag von pcdirk91 »

Hallo Marcel,

Also Sinn des ganzen ist folgendes:
Ich habe ein Gkeisplanungsprogramm (Wintrack für ModelBahnen) on diesem Programm kann ich Modelle für Trassen (da sind die Schienen draif montiert) .Damit ich im Wintrack diese Trassen erzeugen kann brauche ich sogenannte Hexaeder (*nennen die halt so). Und die x- y- und z-Punkte kann ich aus dem CAD-Programm ermitteln. Das Ganze wird dann in eine Txt-Datei geschrieben. diese Txt-Datei importiere ich ins Calc und bereite diese Daten auf. Der Wintrack-Hexaeder-Befehl sieht so aus :
Hexaeder -10000.001, -10000.002, -10000.003, -10000.004, -10000.005, -10000.006, -10000.007, -10000.008, -10000.009, -10000.010, -10000.011, -10000.012, -9996.001, -996.002, -996.003, -996.004, -996.005, -996.006, -996.007, -996.008, -996.009, -996.010, -996.011, -996.012
*Wundere Dich nicht über die Zahlen jeder Hexaeder besteht aus 8-Punkten und das Beispiel habe ich als größtmöglichen Wert erstellt (mm mit 3 nachkommastellen)
So eine Hexaederdatei kann aus über Hundert Zeilen bestehen. Um, diese nicht einzeln zu erstellen wird die Txt-Datei so aufbereitet wie in dem Beispiel gezeigt. Wenn Die datei dann als Txt-Datei wieder exportiert wurde, kann ich diese im Wintrack weiterverarbeiten. Die Hexaeder-Zeilen sind so erstellt worden das die Werte genau untereinander stehen. Das ganze soll mir Schreibarbeit ersparen.
Das mit dem Material und der Materialbeschreibung und Stärke kommt aus meinem Beruf eine Furnierplatte mit 8 mm STärle heisst bei uns Schreinern
Fu08 . Das Material breuche ich um mir dann eine Stückliste für das Bauen zu erstellen.
Aber wenn du die die Datei Versuch1 mal genauer ansiehst wirst du feststellen das ich auch Plattb brauch (Modul Platten). Und auch da sind Dialoge die mehere eingabefelder haben die in gleicher Art wie das P_MatAnlegen aufgebaut sind. Das heisst auch dort soll durch ein- bzw ausschakten der Eingabe-Felder eine möglichst sichere Eingabe des Benutzers ermöglicht werden. unter meinem gruss siehst mal ein Beispie für das Wintrack Programm
Falls es dich interessiert.

Ich hoffe du verstehst nun was ich mit Material bezeichnung gemeint habe und warum das ganze.

Gruss DIrk

beispiel aus Wintrack
//Seitenwände Grube 2:------------------------------------------------------------------------
color 0.75,0.75,0.75//25%Grau
verschieben 0.0,67.4,0.0
hexaeder -172.0,-10.75,1.5, 172.0,-10.75,1.5, 172.0,-6.75,1.5, -172.0,-6.75,1.5, -172.0,-9.25,3.4, 172.0,-9.25,3.4, 172.0,-7.75,3.4, -172.0,-7.75,3.4
hexaeder -172.0,6.75,1.5, 172.0,6.75,1.5, 172.0,10.75,1.5, -172.0,10.75,1.5, -172.0,7.75,3.4, 172.0,7.75,3.4, 172.0,9.25,3.4, -172.0,9.25,3.4


// Rem Meine Datei zwar gleiche Werte aber damit du mal sieht das die Werte jetzt genau untereinander stehen

Hexaeder -10000.001, -10000.002, -10000.003, -10000.004, -10000.005, -10000.006, -10000.007, -10000.008, -10000.009, -10000.010, -10000.011, -10000.012, -9996.001, -996.002, -996.003, -996.004, -996.005, -996.006, -996.007, -996.008, -996.009, -996.010, -996.011, -996.012
Hexaeder -10000.001, -10000.002, -10000.003, -10000.004, -10000.005, -10000.006, -10000.007, -10000.008, -10000.009, -10000.010, -10000.011, -10000.012, -9996.001, -996.002, -996.003, -996.004, -996.005, -996.006, -996.007, -996.008, -996.009, -996.010, -996.011, -996.012
Hexaeder -10000.001, -10000.002, -10000.003, -10000.004, -10000.005, -10000.006, -10000.007, -10000.008, -10000.009, -10000.010, -10000.011, -10000.012, -9996.001, -996.002, -996.003, -996.004, -996.005, -996.006, -996.007, -996.008, -996.009, -996.010, -996.011, -996.012
pcdirk91
***
Beiträge: 54
Registriert: Fr, 15.11.2013 18:02
Wohnort: Fürth/bay

Re: Eingabefelder in Dialog

Beitrag von pcdirk91 »

Hi Marcel,
sorry misste erst mal überlegen wie ich die text. Datei dir senden kann Habs ins Writer gepackt Muss nur den Maßstab vergrössern damut du die reihen besser siehst
So ich hoffe es ist nun klarer
Gruss Dirk
Dateianhänge
Beispiel wintrack.odt
(10.54 KiB) 151-mal heruntergeladen
marcel_at_work
****
Beiträge: 195
Registriert: Sa, 24.04.2010 15:51
Wohnort: Basel [CH]

Re: Eingabefelder in Dialog

Beitrag von marcel_at_work »

Hallo Dirk,

erstmal lieben Dank für die Dateien.

So, ich habe mir jetzt mal einen tieferen Einblick in die Funktion deiner App verschafft.
Folgende Dinge sind mir aufgefallen...:

1) Plattenübersicht:
Man kann auf "Platte ändern" klicken, ohne dass etwas ausgewählt ist.
> besser: per Doppelklick im Grid den Datensatz öffnen (so wird auch das Menü/Grid "Platten auflisten" nicht mehr benötigt)

2) Plattenbearbeitungsansicht:
Nachdem man aus dem Bezeichner-Feld heraus ist, kommt man nie wieder dahin zurück?!
Nachdem das Materialfeld den Fokus erhalten hat, kann man nicht mehr speichern?!
Egal, welches Feld einmal den Fokus erhalten hat - man kann es nachträglich nicht mehr verändern?!
Wenn man zweimal in dasselbe Feld hineinklickt, werden die Schaltflächen jedesmal wo anders angezeigt?

3) "Material-/Platten anlegen":
Man kann bei beiden zwar einen Namen eingeben, aber dann passiert nichts mehr?! Man kann nur abbrechen?

4) ... und ein ganz ein böser Fehler: Der "Datensatz gelöscht"-Dialog kann nicht beendet werden. Ich musste LibreOffice unsaft beenden!

5) Die Eigenschaft .EnableVisible hat in deiner App keine Bedeutung. Sie hat keinen Einfluss auf die Programmsteuerung und kann weggelassen werden.

Mit jedem Klick in irgendein Feld werden Buttons sichtbar/unsichtbar geschalten - mit jedem Klick. Mir persönlich wird fast schwindelig davon... :shock:
> besser: nur inaktiv und nicht unsichtbar schalten

Fazit: Du hast verschiedenste Funktionen per Events, etc. eingebaut, die deine Benutzerinteraktion vollkommen einschränken. Deine gestellte Frage in der Einleitung dieses Themas erübrigt sich somit.
Du wolltest wissen, wie man wieder in das Bezeichner-Feld kommt: Du musst die Events und Blockaden löschen, die das erneute Setzen des Cursors verhindern.

Kennst du den Begriff "Funktionsschema"?
Könntest du vielleicht kurz in Stichpunkten auflisten, WAS in den Bearbeitungs-Dialogen eigentlich WANN geschehen soll?
WARUM z.B. ist der Klick in das Bezeichner-Feld blockiert wurden? Was war der Zweck dahinter?
Und WAS soll geprüft werden, wenn man einen neuen Material-Namen anlegt???

Wenn man Benutzerinteraktion steuern möchte, sollte man vorab genau definieren, was das Ziel der jeweiligen Eingabe sein soll?
Bemerkt sollte dabei auch sein, daß man unter dem Aspekt der Benutzerfreundlichkeit auch Handlungsspielraum für den Benutzer lassen sollte, da sonst schnell Antagonismus bei diesem erzeugt wird. Man könnte die Dialoge auch so gestalten, daß nur Felder und Schaltflächen auf diesen existieren, die benötigt werden.

Viele Grüße,

Marcel

Edit:

Zumindest das eine hab' ich jetzt mal...
Sobald ein Eingabefeld den Fokus verliert, werden alle Eingaben nach Formatierungen geprüft und dann ggf. der Cursor zurück in das Feld gesetzt.
Wenn nicht für eine weitere Bearbeitung von anderen Kontrollfeldern zwingend erforderlich, sollte diese Prüfung ausschließlich durch die Speichern-Schaltfläche gestartet werden. Man hat sonst keine Kontrolle mehr über den Dialog.
Zuletzt geändert von marcel_at_work am Fr, 15.11.2019 23:26, insgesamt 1-mal geändert.
[Win 10 Pro x64/Downgrade 7, AOO 4.1.6 und LO 6.3.0.4]
pcdirk91
***
Beiträge: 54
Registriert: Fr, 15.11.2013 18:02
Wohnort: Fürth/bay

Re: Eingabefelder in Dialog

Beitrag von pcdirk91 »

Hi Marcel,
noch auf die schnelle eine Rüclmeldung

Xray ist installiert und ich habe auch den aufruf hinbekommen . Allerdings stehen da Begriffe drinnen die ich doch auch im beobachter von Lo
bekomme.
zu 1) das mit dem Grid und dsoppel-Kliuck wusste ich nicht *sorry diese Grids waren eine Idee von Stephan und sie haben mir gefallen Wenn mann auf
einen Datensatz klickt und die Schaltfäche auswählen drückt wird der entsprechende Datensatz geladen.
zu 2) im Ahang habe ich mal eine Vorgehensweise gesendet (Ist das dieses Finktionsschema was du meintest???

wegen des Ein- und Ausblenden der Eingabefelder möchte ich sageen Balu hat sich mal die Anfänger-Version die ich ins Forum gesetzt habe wegen Problemen der Fehlermeldung die dann im Dialog angezeigt wird bei mir gemeldet und gemeint ich sollte die Felder nicht Sperren sondern aus- bzw einblendeen. Hat mir gefallen und daher das Ergebnis.

das mit den Events ist mir heute auch in den Sinn gekommen nachdem ich diesen Thread eröffnet habe. Aber da muss ich erst mal sehen wie ich das löse.Ich wollte halt nur eineen Dialog-Event machen. Aber das geht so nicht.
Ich hoffe ich konnte einiges erklären und bitte die Rechtschreibfehler zu entschuldigen (Ich nix Maschinenschreiben können. Icke nur Holzwiurm :lol:
So ich merke die Konzentration ist weg ich werde dann mal in die Heuer gehen. Sitze seit heute früh 3:00 am Rechner.
Aber vielen vieln Dank für Deine Hilfe und Verständnis
Eine gute Nacht an Dich

Gruss DIrk
pcdirk91
***
Beiträge: 54
Registriert: Fr, 15.11.2013 18:02
Wohnort: Fürth/bay

Re: Eingabefelder in Dialog

Beitrag von pcdirk91 »

Hi Marcel
Scheibar ist die Datei zu groß gewesen Jetzt müsste es passen
Gruss Dirk
Dateianhänge
Ist das ein Funktionsschema2.odt
(92.14 KiB) 188-mal heruntergeladen
Ist das ein Funktionsschema.odt
(132.81 KiB) 185-mal heruntergeladen
marcel_at_work
****
Beiträge: 195
Registriert: Sa, 24.04.2010 15:51
Wohnort: Basel [CH]

Re: Eingabefelder in Dialog

Beitrag von marcel_at_work »

Hallo Dirk,

danke, endlich verstehe ich, was das Ziel ist. :lol:

Soweit ist das Vorgehen nachvollziehbar. Ich hätte da ein paar Denkansätze...

1) Wenn beim "Material anlegen" die TAB-Taste für die weitere Funktion nötig ist, fehlt ein Zusatz wie z.B. "Bitte Eingabe mit TAB bestätigen" o.ä.
Für eine Benutzersteuerung sollte der Benutzer auch die Bedingungen kennen.

2) Wenn es Bedingungen für Eingaben gibt, könnte man auch darüber nachdenken, dies so zu kennzeichnen: z.B. "Material-Stärke [1-28mm]"
Es gibt Internetseiten, die keinerlei Passwortrichtlinien erkenntlich machen und wenn man, wie ich 700Bit-ANSI-Passwörter benutzt, stundenlang mit der Registrierung auf dieser blöden Seite beschäftigt ist. Solche "Handwerksarbeit" gehört verboten. :lol:

3) Wenn du die Formatprüfung auf die ENTER-Taste verlegst, kann man mit der Maus und TAB überall hinwechseln. Das wäre für die bestehenden Dialoge wahrscheinlich das effektivste.

Ich persönlich finde das mit dem ganzen Ausblenden nicht wirklich schön. Es gibt Situationen, in denen dies sogar notwendig ist, aber grundlegend würde ich auf so etwas verzichten, wo es nur geht.
Desweiteren widerspricht auch das Menü jeglicher Richtlinie über Benutzerfreundlichkeit, da ein Hauptmenü fehlt, an dem jeder Reiter stets an der selben Stelle sitzt. In jedem Untermenü werden die Reiter anders angeordnet - dies endet beim Benutzer in Verwirrung. :shock:

Hier ist das GridEvent:
a) Bei mir wird das DoppelklickEvent immer zweimal ausgeführt, deshalb ist eine Prüfung dafür vorhanden.
b) Desweiteren wird auch noch geprüft, ob auch in der Tabelle und nicht im Spaltenkopf geklickt wird.
... meine GridControl-Bezeichner fangen alle mit gcl an.
... als Beispiel wird die markierte Zeile ausgegeben.

Code: Alles auswählen

Sub MouseListener_disposing(oEvent)
End Sub

Private nCountMouseListener As Integer
Sub MouseListener_MousePressed(oEvent)
	Select Case Left(oEvent.Source.Model.Name, 3)								   'Prüfung, ob das Objekt ein Tabellenkontrollelement ist
	Case "gcl"
		With oEvent.Source
			If oEvent.Y >= .Model.ColumnHeaderHeight * 2 And .CurrentRow > -1 Then 'Prüfung, ob die Mausposition unterhalb des Spaltenkopfes liegt
				If oEvent.ClickCount = 2 Then									   'Prüfung, ob ein Doppelklick durchgeführt wurde
					nCountMouseListener = nCountMouseListener + 1
					'Benutzung einer Zählervariable, um eine zweifache Ausführung des Events bei Doppelklick zu verhindern
					If nCountMouseListener > 1 Then
						msgbox CInt(oEvent.Source.Model.GridDataModel.getCellData(0, oEvent.Source.getCurrentRow))
						nCountMouseListener = 0									   'Zurücksetzung der Zählervariable
					End If
				End If
			End If
		End With
	Case Else

	End Select
End Sub

Sub MouseListener_MouseReleased(oEvent)
End Sub

Sub MouseListener_MouseEntered(oEvent)
End Sub

Sub MouseListener_MouseExited(oEvent)
End Sub
Ich habe bis jetzt kaum mit dem Beobachter gearbeitet, aber die Objektbeziehungen und Methoden, etc. werden sicherlich nicht darin angezeigt.
Spiele mal ein wenig damit herum, dann siehst du selbst, warum dieses kleine Ding so interessant ist. Viele Fragen wirst du zukünftig gar nicht mehr stellen.

Viele Grüße,

Marcel
[Win 10 Pro x64/Downgrade 7, AOO 4.1.6 und LO 6.3.0.4]
pcdirk91
***
Beiträge: 54
Registriert: Fr, 15.11.2013 18:02
Wohnort: Fürth/bay

Re: Eingabefelder in Dialog

Beitrag von pcdirk91 »

Hallo Marcel,
sorry das ich mich erst jetzt melde, aber ich hatte heute Termin bei meiner Mutter. Naja man istz ja froh das man Sie noch jat und Ich kümmere mich ja auch gerne um Sie.
Zu Deiner letzten Antwort von Gestern
:shock: hast mir eine etwas schlaflose Nacht bereitet. Nee Spass bin ja danknar für jede Hilfe
wegwn des Ausblendens der einzelnen Felder, bin ich zu dem Entschluss gebommen, dass Sie zwar schrittweise eingeblendet werden sollen aber dann nicht mehr ausgeschaltet werden. Sprich was eingeblendet ist bleibt eingeblendet (* Lach weniger Arbeit)
Tut mit Leid das ich die Tabulotortaste nicht erwähnt habe , aber für mich war das logisch denn eigentlich habe ich Excel gelernt und da ging das springen von einem Feld ins nächste Ohne Tastenzuweisung nicht anders. Damit meine ich normale DIaloge und keine programmierten . bin also von falschen Voraussetzngen ausgegangen. Aber Dein Hinweis es dem Benutzer mitzuteilen ist sicherlich richtig.

Heute Nacht im Halbschlaf kam mir die Idee die Überprüfung der Bedingungen der einzelenen Felder in jeweis ein Event zu packen also z.B. die Material-Bezeichnung in das Event MatBez die Material-Stärke in das Event MatST. ob das geht weiss ich noch nicht.

In den letzten 2 Stunden habe ich das xeay nun Unstalliert und zum laufen gebracht. Ist noch etwas ungewohnt und die Infos erschlagen mich im Mment noch aber kommt Zeit kommt vielleicht auch die Erleuchtung.

Das die Überprüfung auf die Enter-Taste gelegt werden könnte wäre auch eine Idee. Ich dachte mit aber vieleicht über Keycode (oder wie immer das heisst) die einzelnen Eingabefelder zu aktivieren. Wäre das auch eine Idee natürlich in Verbindung mit der Idee vom Absatz oben (EventBez). Wie gesagt das wollte ich mal probieren.

Das mit meinem Hauptmenü verstehe ich nicht. Sorry aber ich war der Meinung ein Hauptmenü zu haben und auch in den entsprechenden Untermenüs die -Anlegen, -Ändern, -Löschen usw immer gleich aufgenaut zu haben . Oder verstehe ich da etwas völlig verkehrt.

Danke für den MouseListener . Den werde ich mir ansehem und sicher mit verwenden . Wie du schon sagtest ist es mit einfacher. Aber ist noch ne Weile hin bis dahin. Die anderen Punkte sind erst mal wichtiger.

So ich denke ich habe nichts vergessen und wünsche Dir und falls vorhanden Deiner Familie ein schönes Wochenmend und einen guten Wochgenstart

Gruss Dirk
*Ps.: Danke nochmals
marcel_at_work
****
Beiträge: 195
Registriert: Sa, 24.04.2010 15:51
Wohnort: Basel [CH]

Re: Eingabefelder in Dialog

Beitrag von marcel_at_work »

Hallo Dirk,
Tut mit Leid das ich die Tabulotortaste nicht erwähnt habe , aber für mich war das logisch denn eigentlich habe ich Excel gelernt und da ging das springen von einem Feld ins nächste Ohne Tastenzuweisung nicht anders. Damit meine ich normale DIaloge und keine programmierten . bin also von falschen Voraussetzngen ausgegangen. Aber Dein Hinweis es dem Benutzer mitzuteilen ist sicherlich richtig.
Diese Prämisse ist mir bewusst. Da im "Material anlegen"-Dialog aber nur ein einziges Feld vorhanden ist, gehe ich erst einmal nicht davon aus, dass ich mit TAB überhaupt irgendwo hinkommen würde. 8)
Heute Nacht im Halbschlaf kam mir die Idee die Überprüfung der Bedingungen der einzelenen Felder in jeweis ein Event zu packen also z.B. die Material-Bezeichnung in das Event MatBez die Material-Stärke in das Event MatST. ob das geht weiss ich noch nicht.
Da jede deiner Format-Prüfungen den Cursor im selben Feld blockiert, wenn diese negativ ausfällt, ist das Produkt immer dasselbe. Was dir Schwierigkeiten macht, ist die Feld-Prüfung selbst. Solch' eine Prüfung sollte zwecks der Benutzerfreundlichkeit erst am Ende der Eingaben gemacht werden.

Das mit dem Xray ist riesig. Wenn du irgendeinen Eintrag ausgewählt und vorher das Office-SDK installiert hast, kannst du mit einem Klick auf den Button "SDK Documentation" die API-Referenz aufrufen, wo du auch sämtliche Details zu irgendeinem Objekt bekommst.
Mein Englisch ist auch nicht das beste, ich habe aber seit ein paar Monaten einen tollen Weg gefunden, jeden noch so langen Text in Deutsch zu übersetzen - und zwar über die folgende Website. Dort kann man bis zu 4000 Zeichen auf einmal übersetzen lassen und die KI erkennt sogar technischen Kontext - viel besser als Goo...
Das die Überprüfung auf die Enter-Taste gelegt werden könnte wäre auch eine Idee. Ich dachte mit aber vieleicht über Keycode (oder wie immer das heisst) die einzelnen Eingabefelder zu aktivieren. Wäre das auch eine Idee natürlich in Verbindung mit der Idee vom Absatz oben (EventBez). Wie gesagt das wollte ich mal probieren.
Siehe weiter oben. Das Problem deiner Dialoge ist die direkte Feld-Prüfung und das damit korrelierende auslösende Event. Solang das Prüf-Event durch einen Button (oder was auch immer) ausgelöst wird, welchen du nicht zur Navigation benutzt, ist ja alles i.O.
Das mit meinem Hauptmenü verstehe ich nicht. Sorry aber ich war der Meinung ein Hauptmenü zu haben und auch in den entsprechenden Untermenüs die -Anlegen, -Ändern, -Löschen usw immer gleich aufgenaut zu haben . Oder verstehe ich da etwas völlig verkehrt.
Dein Hauptmenü (Startmenü) hat die Schaltflächen (Reiter) für alle anderen Übersichten und Dialoge jeweils oben links und rechts angeordnet. In jedem weiteren Untermenü/Dialog sind die Teile des Hauptmenüs unten in der Mitte angeordnet (und ich glaube sogar, stets in anderer Reihenfolge?).
Und weil dieser Aufbau, mit diesem ganzen an-/ausblenden und Buttons stets woanders hin verschieben (und zurück) ziemlich komplex ist, gibt es auch viele unbehandelte Fehler im Code.

Vielen Dank, dir auch... aber Familie gibt es bei mir nicht mehr.

Viele Grüße,

Marcel
[Win 10 Pro x64/Downgrade 7, AOO 4.1.6 und LO 6.3.0.4]
pcdirk91
***
Beiträge: 54
Registriert: Fr, 15.11.2013 18:02
Wohnort: Fürth/bay

Re: Eingabefelder in Dialog

Beitrag von pcdirk91 »

Hallo Marcel,
ich wollte Dir mal eine Zwischenlösung zeigen falls Sie Dich interessiert.

Wunder dich nicht das der Button "Material anlegen " im Dialog keine Aktion ausführt. Ich habe die Prozedur dahinter nicht definiert.
Was mich noch interessieren würde ist ob in der Prozedur "P_MatAnlegen" die Entladung des KeyListeners so richtig bzw notwendig ist.
Ausserdem, ob es sinnvoll wäre den key_Listener auch für die Tabulator-Taste zu generieren??

Jedenfalls kann ich nun sowohl die "Material-Bezeichnung" als auch die "Material-Stärke" anklicken

Wegen:
Public Sub objectSwitch(o1 As Object, o2 As Object, o3 As Object, o4 As Object, o5 As Object)
o1.Visible = False
o2.Visible = True
o3.Visible = False
o4.Visible = False
o5.setFocus
End Sub

... und der Aufruf dazu:

Code: Alles auswählen

objectSwitch(oTextAnweisung, oTextFehler, oTextTitel, oBenTitel, oBenLand)
die Variablen o1, o2 sind doch nur solange gültig wie deie Prozedur läuft oder habe ich das nicht richtig verstanden. Wenn ich also o1 brauch muss ich diese Sub wieder starten oder

Ich hoffe ich bin nicht zu aufdringlich ind würde mich über Dein Feedback freuen.

Gruss DIrk
Dateianhänge
material Anlegen Dialog mit oKey_Event1.ods
(38.69 KiB) 186-mal heruntergeladen
marcel_at_work
****
Beiträge: 195
Registriert: Sa, 24.04.2010 15:51
Wohnort: Basel [CH]

Re: Eingabefelder in Dialog

Beitrag von marcel_at_work »

Hallöchen Dirk,

seit dem letzten Mal starte ich deine Dateien nun stets in einer "gesicherten Umgebung" > warum stürzt LO jedes mal ab, wenn ich eins deiner Module einsehen möchte? :shock:

Naja, egal...

Code: Alles auswählen

Sub P_MatAnlegen
...
Zeile 460: Rueckwert = oDlg_Dialog.Execute > diese zusätzliche Variable ist unnötig. Das geht auch einfach:

Code: Alles auswählen

If oDlg_Dialog.Execute = 0 Then
	UnregisterKeyListener
	...
Dies startet den Dialog und fragt auch simultan die Abbruchbedingungen ab.

Ich lege dir wirklich dringend ans Herz, zumindest die erste, oben beschriebene .pdf-Dokumentation herunterzuladen und zu studieren, weil in deiner App für einfache Anweisungen, statt einer benötigten Variable, desöfteren gleich mehrere gesetzt werden, die dann, ineinander verschachtelt, später zum Verlust des Überblicks und zu unnötigen Programmfehlern führen (können).
Was mich noch interessieren würde ist ob in der Prozedur "P_MatAnlegen" die Entladung des KeyListeners so richtig bzw notwendig ist.
Die An-/Abmeldung der Listener finde ich klasse. :)
Allgemein: Die Abmeldung von Listenern ist nötig, damit sie kein weiteres mal (simultan) angemeldet werden können, wenn man, wie in deinem Fall, den selben Dialog mehrere mal aufrufen kann. Dann würde der KeyListener (z.B. die Feld-Prüfung, usw.) mehrere mal nacheinander aufgerufen...
Ausserdem, ob es sinnvoll wäre den key_Listener auch für die Tabulator-Taste zu generieren??
Mit TAB kannst du aktuell wieder durch die Dialoge navigieren. Du kannst zwar auch dort ein Event hinzufügen, aber die Frage ist, für WAS?
die Variablen o1, o2 sind doch nur solange gültig wie deie Prozedur läuft oder habe ich das nicht richtig verstanden. Wenn ich also o1 brauch muss ich diese Sub wieder starten oder
Die Antwort auf diese Frage wird unter "Variablen deklarieren", ganz am Anfang der vorab beschriebenen .pdf behandelt und bildet eine der Grundlagen von Programmiersprachen allgemein - dies solltest du dringend studieren!!!

Die Bezeichner o1, o2 usw. sind im Funktionskopf (in den Klammern) als Parameter definiert, d.h. es sind keine Variablen. Die Variablen werden außerhalb dieser Funktion deklariert/definiert und existieren deshalb auch noch, wenn man diese Funktion wieder verlässt. Die Variablen können dabei irgendwie heißen und haben nur in dieser Funktion diese Bezeichnungen. Es sind sozusagen "Platzhalter".
Bsp.:

Code: Alles auswählen

Sub printName(o1 As String)
	msgbox o1
End Sub

Sub testPrint()
	Dim sString As String : sString = "Dirk"

	call printName(sString)
End Sub
In der test-Routine wird die Variable sString deklariert und mit "Dirk" belegt. Diese Variable wird dann der Funktion/Sub "printName" übergeben (bzw. in ihr als Parameter gesetzt).

Bitte siehe in der Dokumentation unter "Variablen deklarieren" nach...

Code: Alles auswählen

Function oKey_KeyPressed(oEvt) As Boolean
...
Zeile 507/535: "oKey... = True/False" ist überflüssig
Zeile 513 und 514: tauschen,... denn aktuell wird die Formatprüfung des Feldes zuerst durchgeführt, und dann die Prüfung, ob etwas drinsteht

Viele Grüße,

Marcel
[Win 10 Pro x64/Downgrade 7, AOO 4.1.6 und LO 6.3.0.4]
pcdirk91
***
Beiträge: 54
Registriert: Fr, 15.11.2013 18:02
Wohnort: Fürth/bay

Re: Eingabefelder in Dialog

Beitrag von pcdirk91 »

Hi Marcel,
Ich habe mich heute mit den Variablen beschäftigt. Leider habe ich dennoch eine Frage dazu.

Beim initialisieren des Dialoges "MaterialAnAeLoe" habe ich nun fogenden Code stehen
EingabeEin_Aus(oMatSt,oMatNr, False) ' Der Aufruf

Public Sub EingabeEin_Aus(o1 As Object,o2 As Object, bFlag As Boolean) ' die entsprechende Sub
o1.Visible = bFlag
o2.Visible = bFlag
End Sub

Kann ich für die Einblendung des Feldes "oMatSt" jetz auch sagen es soll nur das Feld "oMatSt" wieder sichtbar geschaltet werdem (in der Sub EingabeEin_Aus(...) oder muss ich dann eine extra Sub schreiben die nur das Feld "oMatSt" sichtbar macht ??



Seit dem letzten Mal starte ich deine Dateien nun stets in einer "gesicherten Umgebung" > warum stürzt LO jedes mal ab, wenn ich eins deiner Module einsehen möchte?
Das mit dem Starten in einer sicheren Umgebung tut mir Leid . wenn ich die Dateuen zwischen meinen Rechnern hin und her schiebe, bekomme ich keine Fehlermeldung oder Absturz. Liegt das meiner LibreOffice Version 6.2.1.2 (x64) ? Vielleicht ist auch meine Installation defekt ??? Keine Ahnung. Falls Dich das ärgert/ stört soll ich dir dann lieber keine Dateeub senden???

Ich bin DIr ja dankbar das Du mir helfen willst aber deswegen sollst Du keine Problemme bekommen.

Vielleicht hast du ja einen Moment um mir zu antworten. Ansonsten wünsche ich Dir einen schönen Abend.

Gruss Dirk
Antworten