[gelöst] Inhalte Dialog/ListBox bleibend ändern mit Makro?

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

Moderator: Moderatoren

evemaria
*
Beiträge: 12
Registriert: Do, 10.06.2010 21:56
Wohnort: schweiz

[gelöst] Inhalte Dialog/ListBox bleibend ändern mit Makro?

Beitrag von evemaria »

Hallo Zusammen

Ich habe da was zusammengebastelt, um über einen selbst eingefügten Menüpunkt via Dialog/ListBox das Erstellen von Kopfzeilen in Calc nach einem bestimmten Muster zu automatisieren. Funktioniert soweit schon mal.

Mittels der Befehle "additem" und "removeitems" kann ich die vorgegebenen Listen-Einträge der ListBox auch nach Belieben abändern. Diese Änderungen gelten aber nur, bis ich den Dialog wieder schliesse. Beim nächsten Öffnen des Dialogs, geschweige denn beim nächsten Start von Openoffice, sind wieder die ursprünglich vordefinierten Einträge vorhanden.

Ich möchte aber neue Projekt hinzufügen können, die für längere Zeit vordefiniert bestehen/gespeichert bleiben und dann irgendwann bei Nichtgebrauch wieder gelöscht werden.

Habe ich per Makro die Möglichkeit, die vordefinierten Werte unter "Listen-Einträge" in "Dialog/ListBox" bleibend zu verändern?

Für einen Schubs in die richtige Richtung wäre ich sehr dankbar.
Gruss, eve

(absoluter beginner)

Code: Alles auswählen

' dialog "global" definieren, damit in den einzelnen makros klar ist worum das es geht
Private kopfDialog

Sub kopfdialogdefinieren
  kopfDialog = LoadDialog( "Standard" , "projektauswahlkopfzeile" )
End Sub





' dialog kopfzeile starten via eingefügtem menüpunkt
Sub kopfzeilendialog
  DialogLibraries.LoadLibrary( "Standard" )
  kopfDialog = CreateUnoDialog( DialogLibraries.Standard.projektauswahlkopfzeile )
  kopfDialog.Execute()
end sub





'inputbox für neues projekt mit entsprechendem button starten und projekt an bestehende liste anhängen
'funktioniert im moment nur, bis der dialog geschlossen wird, beim nächsten aufruf
'ist wieder die ursprüngliche auswahl eingetragen
Private bauvorhaben

sub neuesprojekt
  bauvorhaben = InputBox("neues Projekt hinzufügen:",, "b a u v o r h a b e n")
  
  Dim nCount As Integer
  kopfDialogModel = kopfDialog.getModel()
  kopflistbox = kopfDialog.getControl("projektliste")
  nCount = kopflistbox.getItemCount()
  kopflistbox.addItem( bauvorhaben, nCount )
end sub
  
  
  
  
  
  
 
'ausgewähltes projekt mit entsprechendem button löschen
sub projektweg

  kopfDialogModel = kopfDialog.getModel()
  kopflistbox = kopfDialog.getControl("projektliste")
  'auswahl = kopfDialog.getControl("auswahl")
  kopflistbox.removeItems(SelectItemPos, 1)
  
  'Dim objList As Object
'lstEntries = Dlg.getControl("lstEntries")
'lstSelection = Dlg.getControl("lstSelection")
'If lstEntries.SelectedItem > 0 Then
'lstSelection.AddItem(lstEntries.SelectedItem, 0)
'lstEntries.removeItems(lstEntries.SelectItemPos, 1)
  
end sub







'dialogkopfzeile abbrechen-button schliesst einfach nur das dialogfeld
Sub abbrechen
  kopfDialogModel = kopfDialog.getModel()
  kopfDialog.endexecute()
End Sub





'über den ok-button die gewünschte kopfzeile erstellen mit den richtigen schriftformatierungen
sub kopfzeileerstellen
  
'variablen setzen
  Dim document As Object
  Dim StyleFamilies As Object
  Dim PageStyles As Object
  Dim DefPage As Object
  Dim HText As Object
  Dim HContent As Object
  Dim projekt As String
  Dim datei as Object
  Dim seitenzahl as Object
  Dim seitentotal as Object
  Dim ordner as String

  document = StarDesktop.CurrentComponent
  StyleFamilies = document.StyleFamilies
  PageStyles = StyleFamilies.getByName("PageStyles")
  DefPage = PageStyles.getByName("Default")
  datei = document.createInstance("com.sun.star.text.TextField.FileName")
 	datei.setPropertyValue("FileFormat",1)	
  seitenzahl = document.createInstance("com.sun.star.text.TextField.PageNumber")
  seitentotal = document.createInstance("com.sun.star.text.TextField.PageCount")

  kopfDialogModel = kopfDialog.getModel()
  kopflistbox = kopfDialog.getControl("projektliste")
  projekt = kopflistbox.SelectedItem
  
  
'ordnerabfrage 
  ordner = InputBox("in welchem ordner befindet sich die datei?",, "offerten")
  
  
'kopfzeile aufschalten und definieren
  DefPage.HeaderIsOn = True
  DefPage.HeaderIsShared = True

  HContent = DefPage.RightPageHeaderContent
  
'links  
  kopflinksText = HContent.LeftText
  	oCursor = kopflinksText.createTextCursor()
  kopflinksText.String = "k / "
    oCursor.setPropertyValue("CharFontName", "Helvetica Neue")
	oCursor.setPropertyValue("CharHeight", 7)
	oCursor.setPropertyValue("CharWeight", 70)
  kopflinksText.insertString(oCursor, projekt , FALSE)
  kopflinksText.insertString(oCursor," / "& ordner & " / ", FALSE)
'dateiname anhängen		  
  kopflinksText.insertTextContent(oCursor, datei , FALSE)
  kopflinksText.insertString(oCursor, Chr(13) & Chr(13) & Chr(13) & Chr(13) & Chr(13), FALSE)
	 
'mittle leer
  kopfmitteText = HContent.CenterText
  kopfmitteText.String = ""
  
'rechts  
  kopfrechtsText = HContent.RightText
    oCursor = kopfrechtsText.createTextCursor()
  kopfrechtsText.String = "vorname nachname"
    oCursor.setPropertyValue("CharFontName", "Helvetica Neue")
	oCursor.setPropertyValue("CharHeight", 7)
	oCursor.setPropertyValue("CharWeight", 90)
       

    oCursor = kopfrechtsText.createTextCursor()
    kopfrechtsText.insertString(oCursor,Chr(13),FALSE)
    oCursor.setPropertyValue("CharFontName", "Helvetica Neue")
	oCursor.setPropertyValue("CharHeight", 7)
	oCursor.setPropertyValue("CharWeight", 70)
  kopfrechtsText.insertString(oCursor,"adresse" & Chr(13) & "ort" & Chr(13) & "telefon" & Chr(13) & Chr(13),FALSE)

	
'seitenzahlen anfügen
  kopfrechtsText.insertTextContent(oCursor, seitenzahl , FALSE)
  kopfrechtsText.insertString(oCursor,"/", FALSE) 
  kopfrechtsText.insertTextContent(oCursor, seitentotal , FALSE)

  DefPage.RightPageHeaderContent = HContent

'fusszeile ausschalten
DefPage.FooterIsOn = False

'dialog schliessen
kopfDialogModel = kopfDialog.getModel()
kopfDialog.endexecute()

end sub
Zuletzt geändert von evemaria am So, 13.06.2010 09:41, insgesamt 3-mal geändert.
libreoffice 7.1.8.1 auf mac os 11.6.4
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Inhalte Dialog/ListBox bleibend ändern mit Makro?

Beitrag von komma4 »

Willkommen im Forum.

evemaria hat geschrieben:Habe ich per Makro die Möglichkeit, die vordefinierten Werte unter "Listen-Einträge" in "Dialog/ListBox" bleibend zu verändern?
Du meinst, die im Dialogeditor mal eingetragenen Werte? Per Makro: Nein.
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)
evemaria
*
Beiträge: 12
Registriert: Do, 10.06.2010 21:56
Wohnort: schweiz

Re: Inhalte Dialog/ListBox bleibend ändern mit Makro?

Beitrag von evemaria »

Hallo komma4

Danke für deine Antwort.
Genau diese im Dialogeditor eingetragenen Werte -
und das "nein" ist ja eine ganz klare Antwort, wenn auch nicht die, die ich eigentlich zu hören hoffte.

Hier im Forum habe ich irgendwo in einem alten Beitrag gelesen, dass man via Makro auch auf Daten in geschlossene Dateien zugreifen kann, aber nur lesen.
viewtopic.php?f=18&t=490
Wenn ich nach schreiben in ein geschlossenes File frage, kriege ich wohl wieder ein ganz klares "nein"?

Gruss, eve
libreoffice 7.1.8.1 auf mac os 11.6.4
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Inhalte Dialog/ListBox bleibend ändern mit Makro?

Beitrag von komma4 »

evemaria hat geschrieben:Wenn ich nach schreiben in ein geschlossenes File frage, kriege ich wohl wieder ein ganz klares "nein"?
So ist es :D


Lesen geht auch nicht... der zitierte Thread ist nur eine Möglichkeit die geöffnete Datei etwas zu verstecken.

Möchtest Du auf Daten zugreifen oder sogar schreiben, dann MUSS die Datei geöffnet werden.
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)
evemaria
*
Beiträge: 12
Registriert: Do, 10.06.2010 21:56
Wohnort: schweiz

Re: Inhalte Dialog/ListBox bleibend ändern mit Makro?

Beitrag von evemaria »

Hallo komma4

Danke für deine Antwort.
So wird mir über's Wochenende wenigstens nicht langweilig ...

Gruss, eve
libreoffice 7.1.8.1 auf mac os 11.6.4
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Inhalte Dialog/ListBox bleibend ändern mit Makro?

Beitrag von komma4 »

Daten lesen/schreiben geht per Makro natürlich einfachst bei Textdateien... da bekommt ein OOo-Anwender auch nix von mit (=erscheint nicht in der Fensterliste).

Kommt halt darauf an, was Du vorhast.
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)
evemaria
*
Beiträge: 12
Registriert: Do, 10.06.2010 21:56
Wohnort: schweiz

Re: Inhalte Dialog/ListBox bleibend ändern mit Makro?

Beitrag von evemaria »

Hallo komma4

Ganz vereinfacht gesagt, stelle ich mir vor, dass ich irgendwo auf dem Computer eine bleibende Datei fix deponiere, von der ich beim Starten meines Dialogs via Makro die Einträge für die ListBox herkriege und in die ich vor Beenden des Dialogs die eventuell aktualisierten Werte wieder reinschreiben lasse für's nächste Mal.

Vielleicht stelle ich mir das auch viel zu einfach vor, aber ich werde mich jetzt mit neuen Suchbegriffen wieder in die Forumssuche begeben ...

Gruss, eve
libreoffice 7.1.8.1 auf mac os 11.6.4
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Inhalte Dialog/ListBox bleibend ändern mit Makro?

Beitrag von DPunch »

Aloha

Die einfachste Möglichkeit wird tatsächlich ein einfaches Textfile sein.

Ich musste mich mit einer ähnlichen Problematik vor einiger Zeit auch mal auseinandersetzen und bin dabei über folgenden Code im englischen Forum gestolpert:
How to store persistent parameters with OO Basic

Dort wird beschrieben, wie man eigene Registry-Einträge vornehmen kann in einer eigenen Registry und per Code auch wieder auslesen kann.
Ich benutze diese Methode vor allem, um eine Reihe von Benutzer-Einstellungen, die sich nur auf die von mir geschriebenen Makros auswirken, dauerhaft zu hinterlegen, aber man kann natürlich auch problemlos ListBox Einträge etc dort vorhalten.
evemaria
*
Beiträge: 12
Registriert: Do, 10.06.2010 21:56
Wohnort: schweiz

Re: Inhalte Dialog/ListBox bleibend ändern mit Makro?

Beitrag von evemaria »

Hallo DPunch

Danke für deinen Link. Ich werde mir das gerne gleich ausgiebig zu Gemüte führen.
So kurz überflogen sieht das ja genau nach meinem Problem aus und ich knie mich jetzt da mal rein ...

Gruss, eve
libreoffice 7.1.8.1 auf mac os 11.6.4
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Inhalte Dialog/ListBox bleibend ändern mit Makro?

Beitrag von turtle47 »

Hallo Eve,
evemaria hat geschrieben:Habe ich per Makro die Möglichkeit, die vordefinierten Werte unter "Listen-Einträge" in "Dialog/ListBox" bleibend zu verändern?
Nein, aber ich habe das in der Vergangenheit immer so gelöst, dass ich ein INI-File unter den Anwendungsdaten von OO.o, mit definierten Einträgen ablege.
Dieses wird beim erstmaligen Starten gesetzt und abgerufen. Diese Einträge kann man ergänzen, welche dann auch abgespeichert werden. :lol:

Bein Neustart des Dialoges stehen alle Einträge wieder in der Listbox. 8)

Beigefügt mal ein Beispiel.

Funktioniert auch unter Linux. :wink:

Viel Erfolg.

Jürgen
Dateianhänge
Dialog Listbox füllen.ods
(10.8 KiB) 290-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
evemaria
*
Beiträge: 12
Registriert: Do, 10.06.2010 21:56
Wohnort: schweiz

Re: Inhalte Dialog/ListBox bleibend ändern mit Makro?

Beitrag von evemaria »

Hallo Jürgen

Mit einer sozusagen pfannenfertigen Lösung habe ich eigentlich nicht gerechnet - (schon gar nicht bei deiner Signatur, schmunzel). Ich möchte mich herzlichst für die Mühe bedanken.

Ich habe gestern nach komma4's Aussage über Textdateien in der OpenOffice eigenen Basic Hilfe unter Input-Anweisung ein Beispiel gefunden, das mit einer txt-Datei arbeitet.
Im OOWriter habe ich dann ein Textfile mit ein paar Einträgen geschrieben und als "Text kodiert" am gewünschten Ort abgespeichert. Als reines Text-Format gab's Probleme mit den Umlauten und den Sonderzeichen. Und die Input-Anweisung für sich alleine hat damit genau so funktioniert wie gewünscht.
Bei deinem ini-Format funktioniert das ja auch ohne Probleme (und als Mac-User weiss ich nun dank Wiki auch, was eine ini-Datei ist - funktioniert übrigens in diesem Falle auch auf Mac).

Nach DPunch's Beitrag habe ich mir dann den Link ins englische Forum zu Gemüte geführt und schliesslich entschieden, dass ich heute zuerst den begonnenen Weg weiterverfolgen würde.

Bevor ich dazu kam den Code in meine bestehende Struktur einzubauen, zu ergänzen und zu probieren, ob es auch wirklich funktioniert, habe ich nun deine Lösung hier gefunden - jetzt ist es also sicher nur noch eine Frage von ein bisschen Fleiss und Zeit, bis alles so abläuft wie gewünscht.

Gruss und vielen Dank, eve
libreoffice 7.1.8.1 auf mac os 11.6.4
evemaria
*
Beiträge: 12
Registriert: Do, 10.06.2010 21:56
Wohnort: schweiz

Re:Inhalte Dialog/ListBox bleibend ändern mit Makro?

Beitrag von evemaria »

Hallo Zusammen

Dank euch habe ich nun erreicht, was mir vorschwebte!

Ich bin zwar absolute Anfängerin, aber als Abschluss stelle ich den Code trotzdem mal ganz frech hier hin, im Wissen, dass er nicht perfekt ist und man das sicher noch viel eleganter lösen könnte.

Ich war froh über verschiedene Code-Schnipsel, die ich hier im Forum und im Netz verstreut gefunden habe, vielleicht kann ja jemand mal was mit meinem Zeugs anfangen.

Zusätzlich habe ich einen Dialog ("projektauswahlkopfzeile") mit dem Dialogeditor erstellt mit den Buttons "Neues Projekt" (als Ereignis "neuesprojekt" zugeordnet), "Projekt löschen" (als Ereignis "projektweg" zugeordnet), "Abbrechen" (als Ereignis "abbrechen" zugeordnet) und "OK"(als Ereignis "kopfzeileerstellen" zugeordnet). Dem Dialog wurde noch eine Listbox mit dem Namen "projektliste" hinzugefügt.

An einem zentralen Ort für alle Nutzer verfügbar, aber trotzdem niemandem im Wege habe ich eine Liste mit den aktuellen Projekten aus dem OOWriter unter "txt-kodiert" abgespeichert und anschliessend die Endung .txt durch .ini ersetzt.

In OOCalc habe ich einen eigenen Menüpunkt hinzugefügt und mit dem Makro "kopfzeilendialog" verbunden.

Für ein nächste Aufgabe würde ich sicher versuchen, die Variablen geschickter/klarer zu benennen.

Einen ganz speziellen Dank an Jürgen/turtle47 - ohne sein Beispiel hätte ich sicher noch viel, viel länger vor dieser Aufgabe gesessen!

Gruss, eve

Code: Alles auswählen

' dialog das ganze modul definieren, damit in den einzelnen makros klar ist worum das es geht
Private kopfDialog

Sub kopfdialogdefinieren
  kopfDialog = LoadDialog( "Standard" , "projektauswahlkopfzeile" )
End Sub





' dialog kopfzeile starten und listbox befüllen aus ini-datei


Sub kopfzeilendialog

  Dim import As Integer
  Dim zeilevorher As String
  Dim inidatei As String
  Dim kopflistbox as Object
  DialogLibraries.LoadLibrary( "Standard" )
  kopfDialog = CreateUnoDialog( DialogLibraries.Standard.projektauswahlkopfzeile )
  
'dieser teil holt zeilen aus der für alle benutzer freigegebenen ini-datei
  inidatei = "pfad/datei.ini"
  import = Freefile
  Open inidatei For Input As import
  While not eof(import)
  Line Input #import, zeilevorher
  If zeilevorher <>"" then
	TXT_Items = TXT_Items & zeilevorher & ";"
	textvorher = Split(TXT_Items,";")
  end if
  wend
  Close #import
  
'dieser teil füllt die listbox  
  kopflistbox = kopfDialog.getControl("projektliste")
  kopflistbox.additems(textvorher(),0)
  kopfDialog.Execute()
end sub






'inputbox für neues projekt starten und projekt zuoberst in die bestehende liste eintragen
Private bauvorhaben

sub neuesprojekt
  bauvorhaben = InputBox("neues Projekt hinzufügen:",, "b a u v o r h a b e n")
  
  Dim nCount As Integer
  kopfDialogModel = kopfDialog.getModel()
  kopflistbox = kopfDialog.getControl("projektliste")
  nCount = 0
  kopflistbox.addItem( bauvorhaben, nCount )
end sub
  
  
  
  
  
  
 
'löscht das in der liste ausgewählte projekt
sub projektweg

  Dim nPos As Integer
  Dim nCount As Integer
  Dim sSelectedItem As String

  kopfDialogModel = kopfDialog.getModel()
  kopflistbox = kopfDialog.getControl("projektliste")
  position = kopflistbox.getSelectedItemPos()
  nPos = position
  nCount = 1
  kopflistbox.removeItems( nPos, nCount)
    
end sub







'dialogkopfzeile abbrechen-button schliesst einfach nur das dialogfeld
Sub abbrechen
  kopfDialogModel = kopfDialog.getModel()
  kopfDialog.endexecute()
End Sub





'dialogkopfzeile ok--button
sub kopfzeileerstellen
  
'variablen setzen
  Dim document As Object
  Dim StyleFamilies As Object
  Dim PageStyles As Object
  Dim DefPage As Object
  Dim sheet As Object
  Dim HText As Object
  Dim HContent As Object
  Dim projekt As String
  Dim datei as Object
  Dim seitenzahl as Object
  Dim seitentotal as Object
  Dim ordner as String

  document = StarDesktop.CurrentComponent
  StyleFamilies = document.StyleFamilies
  PageStyles = StyleFamilies.getByName("PageStyles")
  sheet = ThisComponent.CurrentController.ActiveSheet
  DefPage = PageStyles.getByName(sheet.PageStyle)
  datei = document.createInstance("com.sun.star.text.TextField.FileName")
 	datei.setPropertyValue("FileFormat",1)	
  seitenzahl = document.createInstance("com.sun.star.text.TextField.PageNumber")
  seitentotal = document.createInstance("com.sun.star.text.TextField.PageCount")

  kopfDialogModel = kopfDialog.getModel()
  kopflistbox = kopfDialog.getControl("projektliste")
  projekt = kopflistbox.SelectedItem
  
  
'ordnerabfrage 
  ordner = InputBox("in welchem ordner befindet sich die datei?",, "offerten")
  
  
'kopfzeile aufschalten und definieren
  DefPage.HeaderIsOn = True
  DefPage.HeaderIsShared = True

  HContent = DefPage.RightPageHeaderContent
  
'links  
  kopflinksText = HContent.LeftText
  	oCursor = kopflinksText.createTextCursor()
  kopflinksText.String = "k / "
    oCursor.setPropertyValue("CharFontName", "Helvetica Neue")
	oCursor.setPropertyValue("CharHeight", 7)
	oCursor.setPropertyValue("CharWeight", 70)
  kopflinksText.insertString(oCursor, projekt , FALSE)
  kopflinksText.insertString(oCursor," / "& ordner & " / ", FALSE)
'dateiname anhängen		  
  kopflinksText.insertTextContent(oCursor, datei , FALSE)
  kopflinksText.insertString(oCursor, Chr(13) & Chr(13) & Chr(13) & Chr(13) & Chr(13), FALSE)
	 
'mittle leer
  kopfmitteText = HContent.CenterText
  kopfmitteText.String = ""
  
'rechts  
  kopfrechtsText = HContent.RightText
    oCursor = kopfrechtsText.createTextCursor()
  kopfrechtsText.String = "Vorname name"
    oCursor.setPropertyValue("CharFontName", "Helvetica Neue")
	oCursor.setPropertyValue("CharHeight", 7)
	oCursor.setPropertyValue("CharWeight", 90)
       

    oCursor = kopfrechtsText.createTextCursor()
    kopfrechtsText.insertString(oCursor,Chr(13),FALSE)
    oCursor.setPropertyValue("CharFontName", "Helvetica Neue")
	oCursor.setPropertyValue("CharHeight", 7)
	oCursor.setPropertyValue("CharWeight", 70)
  kopfrechtsText.insertString(oCursor,"adresse" & Chr(13) & "ort" & Chr(13) & "tel" & Chr(13) & Chr(13),FALSE)

	
'seitenzahlen anfügen
  kopfrechtsText.insertTextContent(oCursor, seitenzahl , FALSE)
  kopfrechtsText.insertString(oCursor,"/", FALSE) 
  kopfrechtsText.insertTextContent(oCursor, seitentotal , FALSE)

  DefPage.RightPageHeaderContent = HContent

'fusszeile ausschalten
  DefPage.FooterIsOn = False


'daten aus listbox nach ini-datei zurückschreiben für nächstes mal
  Dim export As Integer
  Dim inidatei As String
  CtrlCount = kopflistbox.ItemCount
  for i = 0 To  CtrlCount -1
  CtrlIntems = CtrlIntems  & kopflistbox.Items(i)& CHR(13)
  next i
  
  inidatei = "pfad/datei.ini"
  export = Freefile 
  Open inidatei For output As #export
  Print #export, CtrlIntems
  Close #export



'dialog schliessen
  kopfDialog.endexecute()

end sub
Zuletzt geändert von evemaria am So, 13.06.2010 20:04, insgesamt 3-mal geändert.
libreoffice 7.1.8.1 auf mac os 11.6.4
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: [gelöst] Inhalte Dialog/ListBox bleibend ändern mit Makro?

Beitrag von turtle47 »

Hi Eve,
evemaria hat geschrieben:'dialogkopfzeile abbrechen-button schliesst einfach nur das dialogfeld
Sub abbrechen
kopfDialogModel = kopfDialog.getModel()
kopfDialog.endexecute()
End Sub
Das brauchst Du eigentlich gar nicht. Zumal die rote Zeile überhaupt nichts bewirkt und überflüssig ist.

Es gibt eine Möglichkeit für das schliessen des Dialogs ohne Code:
Bei den "Eigenschaften" eines Buttons gibt es unter "Art der Schaltfläche" die Auswahl "Abbrechen".
Diese Auswahl ersetzt obigen Code von Dir.

Was mich persönlich gestern ein wenig gestört hat, dass beim hinzufügen neuer Einträge diese nicht sortiert angezeigt wurden.
Wenn das bei Deinem Projekt keine Rolle spielt, dann lass es so wie es ist. Ansonsten kannst Du folgenden Code zum Sortieren der Ini-Einträge einsetzen:

Code: Alles auswählen

Sub Sort_IniFile
Dim aFile, Temp as String
Dim Count, Count2 As Integer
	aFile = "pfad/datei.ini"

	iNumber = Freefile
	Open aFile For Input As iNumber
	While not eof(iNumber)
	Line Input #iNumber, sLine
	
		If sLine <> "" then
			TXT_Items = TXT_Items & sLine & ","
			LB_Array = Split(TXT_Items,",")
		end if
		
	wend
	Close #iNumber

	Entry() = LB_Array
	For Count = 0 To uBound(LB_Array)
		For Count2 = Count + 0 To uBound(LB_Array)
			If Entry(Count) > Entry(Count2) Then
			Temp = Entry(Count)
			Entry(Count) = Entry(Count2)
			Entry(Count2) = Temp
			End If
		Next Count2
	Next Count
	
	For Count = 0 To uBound(LB_Array)
		if Entry(Count) <> "" then
	    	s = s & Entry(Count) & CHR(13)
	    end if    
	Next Count

	Open aFile For output As #iNumber
	Print #iNumber, s
	Close #iNumber
End Sub
Diesen kannst Du dann am Ende von

Code: Alles auswählen

sub neuesprojekt
  bauvorhaben = InputBox("neues Projekt hinzufügen:",, "b a u v o r h a b e n")
 
  Dim nCount As Integer
  kopfDialogModel = kopfDialog.getModel()
  kopflistbox = kopfDialog.getControl("projektliste")
  nCount = 0
  kopflistbox.addItem( bauvorhaben, nCount )
  Sort_IniFile 'Aufruf der Sub Sort_IniFile
end sub
aufrufen.

Schönes Restwochenende

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
evemaria
*
Beiträge: 12
Registriert: Do, 10.06.2010 21:56
Wohnort: schweiz

Re: [gelöst] Inhalte Dialog/ListBox bleibend ändern mit Makro?

Beitrag von evemaria »

Hallo Jürgen

Danke für deine Korrektur - bei den zusammengeflickten Code-Ausschnitten weiss ich eben manchmal nicht so genau, was nun eigentlich wirklich erforderlich ist. Aber ich versuche zu lernen.
Beim Einfügen der neuen Projekte, jetzt als ersten Listeneintrag und unsortiert, habe ich in diesem Fall den Vorteil, dass die neusten und eben auch meistgebrauchten zuoberst stehen und da wir kaum je mehr als 10 Einträge in der Liste haben werden, bleibt der Überblick eigentlich auch so gewährt. Aber bei einer anderen Anwendung wäre ein Sortieren sicher unbedingt erforderlich um überhaupt eine Übersicht zu behalten.

Auch dir noch einen schönen Sonntag.
Gruss, eve
libreoffice 7.1.8.1 auf mac os 11.6.4
Antworten