getControl

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

Moderator: Moderatoren

kalle2005
**
Beiträge: 26
Registriert: Do, 29.11.2018 18:52

getControl

Beitrag von kalle2005 »

Hallo Fachleute,
ich versuche zum ersten Mal einen Dialog zu estellen. Seit Tagen bin ich am Lesen, habe mir das FahrtenBuch und OOME 3.0 angeshen, aber wenig verstanden.
Es soll eine Personenliste werden mit Lfd.-Nr., Vor- und Nachnamen, Geb.Datum, Alter und „Heute Geburtstag ? ==> Ja. bzw Nein.“.
Abgesehen davon, dass ich die Lfd.-Nr. (NumericField) nicht zum Laufen bekomme, bekomme ich noch nicht einmal die Textfelder hin.
Bitte seht doch einmal nach, was ich hier falsch mache. Vielen Dank

Code: Alles auswählen

'Option Explicit

'Public DlgPerson as Object
'Global Personennummer as integer


Dim Dlg_Person as Object 'Dialog  (Eingabemaske) definieren
Dim oDoc as Object       'Dokumnet definieren

Dim Personenliste as Object    'Tabelle "Liste" und "Daten" definieren
Dim PersonenNummer as integer  'Neue DatensatzZeilennummer


'Dim Ctl_Anrede as Object,Ctl_Vorname as Object, Ctl_NachName as Object,Ctl_Strasse as Object
'    Ctl_PlzOrt as Object,Ctl_GebDatum as Object,Ctl_TelefonFestnetz as Object, Ctl_TelefonMobil as Object,_
'    Ctl_Fax as Object, Ctl_Mail as Object, Ctl_Personennummer as Object
Dim vControl   
'Dim oTextFieldMasters as Object
'Dim GebDatum as date
'Dim vCurrentSelection


Sub Dlg_Neue_Person_Dialog_aufrufen
    oDoc=ThisComponent
    oSheet = oDoc.Sheets.getByName("Personenliste")
'	Personenliste = oDoc.sheets(1)
  
	DialogLibraries.loadLibrary("Standard") 
	Dlg_Person = CreateUnoDialog(DialogLibraries.Standard.Dlg_Person)

	Dlg_Person.title = "Neue Person anlegen" 
    
	oDoc = ThisComponent
    Dlg_Person  = CreateUnoDialog(DialogLibraries.Standard.Dlg_Person)
    oSheet = ThisComponent.sheets.getbyName("Personenliste") 
	Cell_Person_Nr = oSheet.getCellRangeByName("A2")
	Personennummer = Cell_Person_Nr.value + 1
'	
	Dlg_Person.Execute    
End Sub

Sub Neue_Person_eingeben
	oDoc = ThisComponent

   	oSheet = oDoc.Sheets().getByName("Personenliste")
	oSelect = ThisComponent.CurrentSelection.getRangeAddress
	
	Start_Column = oSelect.StartColumn
	Start_Row = oSelect.StartRow
  
  	oCellCursor = oSheet.createCursor()
	oCellCursor.GotoEndOfUsedArea(True)	

    Cell_Person_Nr = oSheet.getCellRangeByName("A2")
	Personennummer = Cell_Person_Nr.value + 1

	End_Column = oCellCursor.getRangeAddress.EndColumn
	End_Row = oCellCursor.getRangeAddress.EndRow
	End_Row = End_Row + 2
		
	PersonenNummer = oSheet.getCellRangeByName("A2").value + 1
   
    
	Dlg_Anrede = Dlg_Person.GetControl("Anrede") ' "ComboBox" .text
	Dlg_Anrede.setfocus()

	Dlg_Vorname = Dlg_Person.GetControl("Vorname") '.Textfield

'    Dlg_Person.getControl("Anrede").text  '= nNeueDatSatz - 10		

'	Ctl_Anrede = Dlg_Person.GetControl("Anrede")
'	Txt_Anrede = Ctl_Person.text
'	Ctl_Anrede.setfocus()
 
    
	
'	Ctl_Vorname = Dlg_Person.GetControl("Vorname")
'	Txt_Vorname = Ctl_Vorname.text
    
'   Ctl_NachName = Dlg_Person.GetControl("NachName")
'	Txt_NachName = Ctl_NachName.text
	
'	Ctl_PlzOrt = Dlg_Person.GetControl("PlzOrt")
'	Txt_PlzOrt = Ctl_PlzOrt.text
    
'    Ctl_Strasse = Dlg_Kunde.GetControl("Strasse")
'	Txt_Strasse = Ctl_Strasse.text
	
'	Ctl_GebDatum = Dlg_Person.GetControl("GebDatum")
'	Txt_GebDatum = Ctl_GebDatum.text

'	Ctl_TelefonFestnetz = Dlg_Person.GetControl("TelefonFestnetz")
'	Txt_TelefonFestnetz = Ctl_TelefonFestnetz.text

'   Ctl_TelefonMobil = Dlg_Person.GetControl("TelefonMobil")
'	Txt_TelefonMobil = Ctl_TelefonMobil.text
	
'	Ctl_Fax = Dlg_Person.GetControl("Fax")
'	Txt_Fax = Ctl_Fax.text
	
'	Ctl_EMail = Dlg_Person.GetControl("EMail")
'	Txt_EMail = Ctl_EMail.text

'   Ctl_Alter = Dlg_Person.GetControl("Alter")
'  	Txt_Alter = Ctl_Alter.text

   
	oSheet.getCellRangeByName("A" & End_Row ).Value = PersonenNummer +1
	oSheet.getCellRangeByName("B" & End_Row).String = Txt_Anrede	
	oSheet.getCellRangeByName("C" & End_Row).String = Txt_Vorname
    oSheet.getCellRangeByName("D" & End_Row).String = Txt_NachName
	oSheet.getCellRangeByName("E" & End_Row).String = Txt_PlzOrt
	oSheet.getCellRangeByName("F" & End_Row).String = Txt_Strasse
	oSheet.getCellRangeByName("G" & End_Row).String = Txt_GebDatum
	oSheet.getCellRangeByName("H" & End_Row).String = Txt_TelefonFestnetz
    oSheet.getCellRangeByName("I" & End_Row).String = Txt_TelefonMobil
	oSheet.getCellRangeByName("J" & End_Row).String = Txt_Fax
	oSheet.getCellRangeByName("K" & End_Row).String = Txt_EMail

	oSheet.getCellRangeByName("L" & End_Row).Date = FormulaLocal = "(Jahr(Jetzt()- (Jahr (GebDatum))"  'muss mich noch einlesen 'Text_Alter
'
	Dlg_Person.Endexecute 	
End Sub	
	
Win 10 Pro, AOO 4.1.9
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: getControl

Beitrag von F3K Total »

Wie wäre es,
wenn du dein Dokument hier hochlädst, zumindest meine Glaskugel ist im Urlaub, oder glaubst du, wir bauen den Dialog erstmal nach?
Gruß
kalle2005
**
Beiträge: 26
Registriert: Do, 29.11.2018 18:52

Re: getControl

Beitrag von kalle2005 »

Anbei die gewünschte Datei
Gruß Kalle
Dialog.ods
(20.89 KiB) 124-mal heruntergeladen
Win 10 Pro, AOO 4.1.9
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: getControl

Beitrag von F3K Total »

Guckst du.
Gruß R
Dateianhänge
Dialog.ods
(20.49 KiB) 141-mal heruntergeladen
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: getControl

Beitrag von F3K Total »

Also,
leichter wäre es gewesen, wenn du dir eine Datenbank mit deiner Tabelle und ein Formular dazu angelegt hättest, da hättest du die Daten bequem ohne ein einziges Makro eingeben können.
Gruß R
kalle2005
**
Beiträge: 26
Registriert: Do, 29.11.2018 18:52

Re: getControl

Beitrag von kalle2005 »

Hallo F3K Total ,
dies sieht ja schon hervorragend aus.
Ich bin begeistert, wie schnell du dies hinbekommen hast.
Meine Versuche mit Ctl schlugen bei mir immer fehlt. Auch hast du gleich aufgeräumt. Danke schön !

Bei "nGebDatum = CDatefromIso(Ctl_GebDatum.date)" habe ich das "n" herausgenommen, weil Fehlermeldung kam.
Jetzt schreibt das Programm mir ständig nur dieses Datum 30.12.1899 hin. Vielleicht kannst du mir auch dabei noch helfen.

Den Code sehe ich mir morgen genauer an, denn ich möchte ja noch unmittelbar nach der Eingabe des Geb.-Datums eine Meldung in einem Feld ausgeben, ob derjenige heute Geburtstag hat.
Vielen Dank für die bisherige Mühe.
Kalle
Win 10 Pro, AOO 4.1.9
kalle2005
**
Beiträge: 26
Registriert: Do, 29.11.2018 18:52

Re: getControl

Beitrag von kalle2005 »

Hallo F3K Total,
Mit einer Datenbank bin ich überhaupt noch nicht vertraut. Vor Jahren habe ich mich damit ein wenig befasst. Soweit ich mich erinnere, war es relativ einfach. Doch bei Formularen bin ich gescheitert und hatte auch nicht mehr die Geduld.
Jetzt folgen kleine Schritte.
Gruß
Kalle
Win 10 Pro, AOO 4.1.9
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: getControl

Beitrag von Stephan »

"F3K Total " war schneller, aber da ich es nun schon erstellt habe, stelle ich mal meine Datei mit ein.

Das dem Ereignis "Fokusverlust" des Datumsfeld zugeordnete Makro zeigt beispielhaft auch wie Du andere Felder auf dem Dialog ausfüllen kannst (hier also Alter und ob die Person heute Geburtstag hat) indem Du deren Werte aus anderen Eingaben berechnest.


Gruß
Stephan
Dateianhänge
Dialog_V2.ods
(19.04 KiB) 176-mal heruntergeladen
kalle2005
**
Beiträge: 26
Registriert: Do, 29.11.2018 18:52

Re: getControl

Beitrag von kalle2005 »

Hallo Stephan,
da funktioniert ja Alles :lol:
Ich bin begeistert.
Sowohl du als auch F3K Total haben auf unterschiedlichen Wegen Formeln erstellt. Dies ist sehr gut.
In den nächsten Tagen werde ich mich eingehend damit beschäftigen, um dies endlich 'mal zu begreifen. Im Handbuch, OOME_3_0_deutsch, steht soetwas für einen Laien nichtr deutlich genug drin.
Vielen Dank
Win 10 Pro, AOO 4.1.9
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: getControl

Beitrag von F3K Total »

Moin,
das n darf nicht fehlen, es kommt dann eine Fehlermeldung, wenn das Geburtsdatum leer ist, kann man mit If umgehen.
Gruß R
kalle05
**
Beiträge: 38
Registriert: So, 19.10.2014 18:13

Re: getControl

Beitrag von kalle05 »

Hallo F3K Total,
ich hatte es schon bemerkt und das "n" wieder vor Geb.Datum hingeschrieben. Wie kommt es eigentlich, dass erst beim zweiten Aufruf das Programm richtig läuft ? Gibt es dafür eine Erklärung ?
Gruß Kalle
:lol: Win 10
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: getControl

Beitrag von F3K Total »

Ich habe keine, wie gesagt, wenn das Datum leer ist, gibt es den Fehler ...
kalle05
**
Beiträge: 38
Registriert: So, 19.10.2014 18:13

Re: getControl

Beitrag von kalle05 »

Hallo Stephan,
nach der ersten Durchsicht habe ich gesehen, dass du mit "if" arbeitest. Ist es es denn nicht auch möglich im Dialog eine Formel einzutragen wie z.B. mit WENN(UND(WENN(TAG(D7)=TAG(E7));WENN(MONAT(D7)=MONAT(E7)))=1;"ja";"nein"). Natürlich muss die Formel noch angepasst werden. Doch wie muss ich dies im Dialog schreiben ?
Mit "if" und "then" möchte ich mich erst beschäftigen, wenn ich die Grundlagen eines Dialogs verstehe und mit "if", so habe ich gesehen, wird es z.T. recht komplex, aber auch einfacher, wie in deinem Beispiel.
Mit freundlichem Gruß
Kalle
:lol: Win 10
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: getControl

Beitrag von Stephan »

Ist es es denn nicht auch möglich im Dialog eine Formel einzutragen wie z.B. mit WENN(UND(WENN(TAG(D7)=TAG(E7));WENN(MONAT(D7)=MONAT(E7)))=1;"ja";"nein").
Tut mir leid, ich wüsste nicht wie.

Du könntest hingegen durchaus Formeln per Basic nutzen:
http://www.dannenhoefer.de/faqstarbasic ... enden.html

aber das ist ggf. 'langatmig' (und in einigen Einzelfällen funktioniert das erfahrungsgemäß nicht richtig), weshalb ich das eher nicht so gerne tue.

Im Konkreten übersieh bitte auch etwas Anderes nicht, mein Beispiel ist so asusgelegt das sich die Dialog-Werte bereits VOR dem Eintrag ins Tabellenblatt anpassen. Wollte man hingegen Dialogwerte aufgrund von Tabellenwerten brechnen, müsste man zuerst die nötigen Werte in die Tabelle schreiben, hier im Konkreten also das Geburtsdatum sofort in die Tabelle schreiben sobald es im Dialog eingegeben ist und nicht erst wenn man auf "Übertragen" klickt.
Das kann man zweifelsohne tun, nur ich erkenne den Vorteil nicht. Der Nachteil wäre hingegen man hätte die Calc-Tabelle schon vor Abschluss der Eingabe aller Werte um eine Zeile erweitert und müsste dann für die "Abbrechen" Schaltfläche noch extra ein Makro erstellen was diese Erweiterung rückgängig macht wenn man es sich doch noch anders überlegt und "Abbrechen" klickt.

Vor- und Nachteil musst Du letztlich selbst abwägen, denn meine Meinung ist hier nur meine Meinung.
z.B. könnte man auch argumentieren das Dein Gedanke ohne Nachteil ist WENN Du beim Start des Dialogs die markierte Zelle prüfst und von dieser ausgehend die aktuell in der Calc-Tabele zu bearbeitende Zeile zu bestimmen - solchen Code gibt es auch bereits in Deiner ursprünglichen Datei, ich fand den nur unzweckmäßig weil er Dich nötigt jedes einzelne Mal wenn Du den Dialog aufrufst aufzupassen das die richtige Zeile markiert ist.
Der Königsweg wäre vielleicht die Zellmarkierung vor Dialogstart auszuwerten und zu prüfen ob die Zeile bereits Daten hat, dann würden diese Daten eingelesen, ansonsten würde ein leerer Dialog gezeigt der bereit ist einen neuen Datensatz aufzunehmen.


Gruß
Stephan
kalle05
**
Beiträge: 38
Registriert: So, 19.10.2014 18:13

Re: getControl

Beitrag von kalle05 »

Hallo Stephan,
nun werde ich anfangen zu basteln :lol: .
Nochmals vielen Dank
Kalle
:lol: Win 10
Antworten