[gelöst] Rechnen im Dialog?

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

wega
****
Beiträge: 148
Registriert: So, 03.06.2007 21:37

[gelöst] Rechnen im Dialog?

Beitrag von wega »

Hallo zusammen,

ist es möglich, in einem Dialog zu rechen und das Ergebnis in einem Textfeld auszugeben?
Ich hänge einmal nachfolgende Grafik ein.
In Beginn und Ende möchte ich die Anfangs- und Endzeiten der Tätigkeit eintragen, im Feld Zeitbetrag soll das Ergebnis der Subtraktion Endzeit-Anfangszeit stehen und dann nach Calc übernommen werden.
Hat da jemand eine Lösung?

Gruß
Werner
Dateianhänge
Dialog.jpg
Dialog.jpg (28.07 KiB) 1211 mal betrachtet
Zuletzt geändert von wega am Sa, 27.12.2008 21:07, insgesamt 3-mal geändert.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Rechnen im Dialog?

Beitrag von komma4 »

wega hat geschrieben:ist es möglich, in einem Dialog zu rechen und das Ergebnis in einem Textfeld auszugeben?
Klar ist das möglich.

Wie hättest Du es gerne?
Dialog ist im Editor entworfen? Du hast zwei TimeFields zur Eingabe?

Einfachste Möglichkeit ist eine weitere Schaltfläche "Zeit berechnen", welche mit einer SUB verbunden ist, die die Werte aus den controls holt, rechnet und das Ergebnis im Textfeld ausgibt.

Automatisches Berechnen geht mittels listener (beim Verlassen eines der Zeitfelder), deren SUB (nach Prüfung auf Eingaben) das Gleiche leistet.

Du hast Andrews Makrodokument vorliegen?
(Paragraph 8.6 in meiner alten Ausgabe von 2003, "Set the event listener for a control"; Achtung: Beispiel ist für eine form, funktioniert aber für Dialoge entsprechend)
Und XRay zum Untersuchen der Objekte und deren Eigenschaften installiert?

Viel Erfolg!
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Rechnen im Dialog?

Beitrag von turtle47 »

Hallo Werner,

man könnte das Berechnen auch mit einem Druck auf die Enter-Taste auslösen.
Ein Beispiel ist beigefügt.

An Deiner Stelle würde ich das mit vier NumericFields lösen um die Eingabe des ":" zu vermeiden.

In etwa so:

[NumericField1] ":" [NumericField2]_________[NumericField3] ":" [NumericField4]

Oder aber Du startest die Berechnung im letzten NumericField über das Ereignis "Text modifiziert".
Dann geht es auch ohne den Listener.

Hilft das weiter?

Jürgen
Dateianhänge
Listener-Enter_Taste.ods
(10.22 KiB) 64-mal heruntergeladen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Rechnen im Dialog?

Beitrag von komma4 »

turtle47 hat geschrieben:Oder aber Du startest die Berechnung im letzten NumericField über das Ereignis "Text modifiziert".
Dann geht es auch ohne den Listener.
Bei nummerischen Felder muss man die Wertebereiche (0-23h, 0-59) vorgeben, und die ZEIT zum Rechnen zusammensetzen: ich bleibe bei meiner Empfehlung ein TimeField-control zu nehmen (Drehfeld, evtl. Min./Max.-Zeit einstellbar; Zeitraum leicht berechenbar).

Das "Text modifiziert"-Ereignis wird bei jedem Tastenanschlag im control ausgelöst - besser ist "Fokusverlust".
Eine Eingabe im "Start"-Feld könnte dann auch schon das "Ende"-Feld vorbelegen (+8,5 Stunden?!)
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
wega
****
Beiträge: 148
Registriert: So, 03.06.2007 21:37

Re: Rechnen im Dialog?

Beitrag von wega »

Hallo zusammen,

bin endlich wieder an Bord und kann an meinem Programm weiterarbeiten.
Erst einmal vielen Dank für die hilfreichen anregungen.

Wenn ich den Anregungen fplge und die GetControll-Felder Date und Time verwende,
Wie bekomme ich denn deren Inhalt im richtigen Format lesbar in Calc angezeigt?

Bei der Datumsübergabe an Calc habe ich schon so meine Schwierigkeiten.
Da wird mir ein Wert übertragen, der mit dem eingegenem Datum eigentlich nicht zu tun hat.
Quellcode:

Code: Alles auswählen

	mySheet.getCellRangeByName("B" & End_Row).value = Dlg_Zeiterfassung.GetControl("DateF_datum").date
Ergebnis in Calc:
12.02.-8657

Wie muss eine Übergabe von Datum und Zeit an Calc richtig erfolgen?

Gruß
Werner
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Rechnen im Dialog?

Beitrag von turtle47 »

Hallo Werner,

ich habe das für mich mal fogendermassen gelöst:

Code: Alles auswählen

Dim Dlg_Date,DateField1 as Object
dim myDate as String
Sub Call_Dlg_Date
	DialogLibraries.loadLibrary("MyDate") 
	oForm = DialogLibraries.MyDate.Dlg_Date
	Dlg_Date = CreateUnoDialog(oForm)
	DateField1 = Dlg_Date.getControl("DateField1")	
	oDateFieldModel = Dlg_Date.Model.DateField1
	oDateFieldModel.Text = date 'aktuelles Datum im Datefield anzeigen	
	Dlg_Date.execute()	
End Sub

Sub Insert_Date1
	oDoc = ThisComponent	
	oSheet = ThisComponent.CurrentController.getActiveSheet()
	oZell = oSheet.getCellRangeByName("A1") 'Zelle anpassen
	myDate = DateField1.text
	oZell.Value= CDate(myDate) 
	'oZell.NumberFormat = 30 'Format 13.05.06
	'oZell.NumberFormat = 31 'Format Sa 13.Mai 06
	'oZell.NumberFormat = 32 'Format 05.06
	'oZell.NumberFormat = 33 'Format 13.Mai
	'oZell.NumberFormat = 34 'Format Mai
	'oZell.NumberFormat = 35 'Format 2. Quartal 06
	oZell.NumberFormat = 36 'Format 13.05.2006
	'oZell.NumberFormat = 38 'Format Samstag, 13. Mai 2006
	'oZell.NumberFormat = 39 'Format 13. Mai 06
	Dlg_Date.endexecute()
end Sub
Viel Erfolg.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
wega
****
Beiträge: 148
Registriert: So, 03.06.2007 21:37

Re: Rechnen im Dialog?

Beitrag von wega »

Hallo Jürgen,

danke, das war der entscheidende Hinweis, jetzt geht es auch bei mir weiter.

Gruß
Werner
wega
****
Beiträge: 148
Registriert: So, 03.06.2007 21:37

Re: Rechnen im Dialog?

Beitrag von wega »

hallo zusammen,

ich habe doch noch eine Frage zum Berechnen im Dialog.

die differenzzeit berechne ich wie folgt, nach dem die Eingabezelle de Focus verliert:

Code: Alles auswählen

Sub zeitbetrag_rechnen
	Dlg_Zeiterfassung.GetControl("TimeF_zeitbetrag").time = Dlg_Zeiterfassung.GetControl("TimeF_ende").time - Dlg_Zeiterfassung.GetControl("TimeF_beginn").time
End Sub
Daraufhin wird mir im "TimeF_zeitbetrag" Fenster auch der richtige berechnete Differenzwert angezeigt.
Aber mit

Code: Alles auswählen

	if 	Dlg_Zeiterfassung.GetControl("TimeF_zeitbetrag").time <> "" then
	mySheet.getCellRangeByName("H" & End_Row).value = cdate(Dlg_Zeiterfassung.GetControl("TimeF_zeitbetrag").text)
	end if
bekomme ich den angezeigten Wert nicht in die Calc übertragen. Dahin überträgt sich der Wert "00:00"

Was muß ich machen, damit sich die errechnete Differenzzeit nach Calc überträgt.

Gruß
Werner
wega
****
Beiträge: 148
Registriert: So, 03.06.2007 21:37

Re: Rechnen im Dialog?

Beitrag von wega »

hallo zusammen,

wie bekomme ich den Inhalt von:
Dlg_Zeiterfassung.GetControl("TimeF_zeitbetrag").time
nach
Dlg_Zeiterfassung.GetControl("TimeF_zeitbetrag").text ?

mit Gruß
Werner
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Rechnen im Dialog?

Beitrag von komma4 »

wega hat geschrieben: Dlg_Zeiterfassung.GetControl("TimeF_zeitbetrag").time
nach
Dlg_Zeiterfassung.GetControl("TimeF_zeitbetrag").text ?

Durch Zuordnung:

Code: Alles auswählen

Dlg_Zeiterfassung.GetControl("TimeF_zeitbetrag").Time = _
Dlg_Zeiterfassung.GetControl("TimeF_zeitbetrag").Text

... ich frage mich aber: wozu?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
wega
****
Beiträge: 148
Registriert: So, 03.06.2007 21:37

Re: Rechnen im Dialog?

Beitrag von wega »

Hallo Winfried,

erst einmal Danke für Deine Antwort.
Mit dem GetControl-Feld Time bereche ich die Differenz zwischen zwei Zeiten und gebe diese Diffrenz zur visuellen Kontrolle ebenfalls in einem GetControl-Feld aus. Hierzu Bild01.
Übertragen nach Calc wird aber das Ergebnis von Bild uebertragen_wird.
Folge ich Deiner Anweisung der Zuweisung erschein im berechneten GetControl-Feld das Ergebnis Bild02 und bei dem Versuch der Übernahme nach Calc die angezeigte Fehlermeldung.

Frage, wie kann ich das Ergebnis des GetControl-Feldes nach Calc übertragen?

Ich hoffe, dass ich meine Frage präzise genug gestellt habe.

mit Gruß
Werner
Dateianhänge
Bild01.JPG
Bild01.JPG (7.51 KiB) 911 mal betrachtet
uebertragen_wird.jpg
uebertragen_wird.jpg (2.28 KiB) 909 mal betrachtet
Bild02.jpg
Bild02.jpg (7.26 KiB) 910 mal betrachtet
wega
****
Beiträge: 148
Registriert: So, 03.06.2007 21:37

Re: Rechnen im Dialog?

Beitrag von wega »

Hallo Winfried,

hie noch die Fehlermeldung.

Gruß
Werner
Dateianhänge
Fehlermeldung.jpg
Fehlermeldung.jpg (11.15 KiB) 899 mal betrachtet
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Rechnen im Dialog?

Beitrag von turtle47 »

Hallo Werner,

ganz so einfach ist das mit TimeField nicht. Ich habe dennoch etwas rausgefunden
und nach diesem Beitrag mal was zusammengebaut:

Code: Alles auswählen

Sub zeitbetrag_rechnen
Dim H As Long, M As Long, S As Long
Dlg_Zeiterfassung.GetControl("TimeF_zeitbetrag").time = Dlg_Zeiterfassung.GetControl("TimeF_ende").time - Dlg_Zeiterfassung.GetControl("TimeF_beginn").time	
	
	oDoc = ThisComponent	
	oSheet = ThisComponent.CurrentController.getActiveSheet()
	oZell = oSheet.getCellRangeByName("A1") 'Zelle anpassen
	myTimeField = Dlg_Zeiterfassung.GetControl("TimeF_zeitbetrag")
	mytime = myTimeField.time
	H=Int(mytime/1000000)
	M=Int(mytime/10000)-H*100
	S=Int(mytime/100)-H*10000-M*100
	TimeCtlFieldToTime=TimeSerial(H,M,S)
	oZell.FormulaLocal = TimeCtlFieldToTime
End Sub
Bringt Dich das etwas weiter?

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
wega
****
Beiträge: 148
Registriert: So, 03.06.2007 21:37

Re: Rechnen im Dialog?

Beitrag von wega »

Hallo Jürgen,

Danke, genau das ist die Lösung.
Da hätte ich mir aber glatt die Zähne ausgebissen.

Danke und ein frohes Weihnachtsfest an alle Forenteilnehmer
Gruß
Werner
wega
****
Beiträge: 148
Registriert: So, 03.06.2007 21:37

Re: Rechnen im Dialog?

Beitrag von wega »

Hallo zusammen,

mein dank an alle, die meine Lösungssuche unterstützt haben.

Hier die Datei, die jetzt dank eurer Hilfe funktioniert.
Vielleicht kann der eine oder andere aus diesem Forum auch etwas damit angangen.
Funktioniert unter OpenOffice.org 3.0
Bei früheren Versionen könnte es bei der Übergabe des GetControl-Time-Feldes Probleme geben.

Gruß
Werner
Dateianhänge
Zeiterfassung.ods
(38.55 KiB) 65-mal heruntergeladen
Antworten