Listbox manipulieren

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

Moderator: Moderatoren

hawe
****
Beiträge: 151
Registriert: Di, 05.08.2008 19:47

Listbox manipulieren

Beitrag von hawe »

Hallo zusammen,

ich hab mir einen Dialog mit einer Listbox zusammen gebaut. In die Listbox werden die Namen einiger Objekte(Grafiken, Textboxen) der Drawpage eingelesen und not Visible geschaltet. Der Benutzer klickt durch Auswahl in der Listbox diese Objekte sichtbar.
Ich möchte nun die abgearbeiten Objekte in der Listbox irgenwie kenntlich machen. Mein Plan war dem Nameneintrag zu verändern - ein Zeichen voran zu stellen. Das führt zu Fehlermeldungen.
Hat jemand einen Tipp für mich, wie das Kenntlichmachen von Listeneinträgen gebacken bekomme?

HW
Zuletzt geändert von hawe am Di, 11.12.2012 21:43, insgesamt 1-mal geändert.
Gruss HW
Win7/SuSe 11.2 - LO 3.3
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Listbox manipulieren

Beitrag von Stephan »

Ich fürchte darauf kann man schwerlich anworten ohne das Du die 'Begleitumstände' genauer erklärst weil:

1.
augenscheinlich weist Du wie man prinzipiell eine Listbox mit Einträgen bestückt (ich denke auch per Code denn Du sprichst von "eingelesen")

2.
obwohl Du 1. weißt tritt ein Problem bei der Andersbestückung auf (mehr ist ja ein Vorherstellen bestimmter 'Markierungen' nicht), nur Welches soll das sein?



Gruß
Stephan
hawe
****
Beiträge: 151
Registriert: Di, 05.08.2008 19:47

Re: Listbox manipulieren

Beitrag von hawe »

Hm,

reicht es, wen ich sage, ich möchte die Listeneinträge, die geklickt oder ausgewählt wurden irgendwie Kennzeichnen.
Es soll erkennbar sein, welche Listeneinträge schon abgearbeitet wurden = Haken dran oder Farbe setzen oder...
Gruss HW
Win7/SuSe 11.2 - LO 3.3
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Listbox manipulieren

Beitrag von Stephan »

reicht es, wen ich sage [...]
mir zumindest nicht, denn ich verstehe das grundsätzliche Problem nicht, denn nach Deiner eigenen Aussage ist doch klar das Du weißt wie mal Listeneinträge zuweist und es trotzdem eion Problem gibt, nur Welches?

z.B.:
Du hast die Listeneinträge

aaa
bbb
ccc

zugewiesen, nun ist offensichtlich überhaupt kein anderes Vorgehen nötig um z.B. die Listeneinträge

x_aaa
bbb
ccc

zuzuweisen, wobei "x_aaa" damit der markierte Eintrag wäre.

Also wo ist das Problem? Ohne das zu verstehen kann ich nichts Richtiges antworten.


Es sei denn Du willst wörtlich einen Haken setzen oder die Farbe der Einträge ändern, denn derartige 'Markierungen' gehen meines Wissens hier nicht (In z.B. VB ginge Haken setzen, das ist mir bekannt)

Allerdings schriebst Du ja bereits selbst:
Mein Plan war dem Nameneintrag zu verändern - ein Zeichen voran zu stellen. Das für zu Fehlermeldungen.
und das entspricht ja meinem Vorschlag ein "x_" voranzustellen, nur verstehe ich dann eben nicht welchen Fehler das auslösen sollte.


Gruß
Stephan
hawe
****
Beiträge: 151
Registriert: Di, 05.08.2008 19:47

Re: Listbox manipulieren

Beitrag von hawe »

Alles auf Null...

Ich habe eine Listbox mit Einträgen, ok?
Jetzt klickt der Anwender auf eine Eintrag der Listbox, ok?
Dieser Eintrag soll nun so verändert werden - dauerhaft, dass der Anwender sieht, dass er den Eintrag angeklickt hat, ok?

Code: Alles auswählen

oListboxModel.StringItemList(xx) = "oder was immer ich versucht habe ist scheibgeschützt" 
Änderungen an den Items der Listbox werden schlicht ignoriert...
Ich bin jetzt dazu übergegangen einen Listeintrag raus zu nehmen und neu einzufügen. Allerdings gefällt mir der Code nicht, da eine Änderung der Liste einen neuen StatusEvent auslöst, denn ich nicht brauchen kann und mittels BreakEvent abbreche:

Code: Alles auswählen

Dim oDoc AS Object
Dim oForms AS Object
Dim oShape AS Object
Dim oDlg  AS Object
Dim oCtrl  AS Object
Dim oSheet AS Object 

Sub Click_Listfeld( MouseEvt )
Dim j as Integer
If EventBreak then Exit Sub
' ps= myctrl.selectItemPos(0,true) 
' oCtrl.selectedItemPos & " : " &  oCtrl.selectedItem
oForms = oSheet.drawpage
	for j = 0 to oForms.Count - 1
		oShape = oForms.getByIndex(j)
		if oShape.Name = box( oCtrl.selectedItemPos) then j=oForms.Count+1
	next
	'msgbox oCtrl.dbg_methods 
	oCtrl.Model.removeItem(MouseEvt.Selected,0)
	oShape.visible = not oShape.visible 
	j = MouseEvt.Selected
	if oShape.visible then
		oCtrl.addItem(MARK & Box(j),j)
	else
		oCtrl.addItem(Box(j),j)
	End If
	EventBreak = true 
	oCtrl.selectItemPos(j, true)
	EventBreak = false
End Sub
Gruss HW
Win7/SuSe 11.2 - LO 3.3
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Listbox manipulieren

Beitrag von Stephan »

Ich habe eine Listbox mit Einträgen, ok?
Jetzt klickt der Anwender auf eine Eintrag der Listbox, ok?
Dieser Eintrag soll nun so verändert werden - dauerhaft, dass der Anwender sieht, dass er den Eintrag angeklickt hat, ok?
ja, so verstand ich das.
Änderungen an den Items der Listbox werden schlicht ignoriert...
weiß ich nicht, aber merkst Du das das eine völlig andere Aussage ist als bisher (oder nicht und es gibt doch eine Fehlermeldung?), da wahr nämlich die Rede von:
Das für zu Fehlermeldungen.
und darauf habe ich mich gestützt, denn ich habe das Ganze natürlich konkret durchprobiert ehe ich geantwortet habe:

Code: Alles auswählen

Dim MAK_bib As Object
Dim dialog As Object
Dim akt

Sub Start_Dia()
 BasicLibraries.LoadLibrary("Standard")
 DialogLibraries.LoadLibrary("Standard")
 
 MAK_bib = DialogLibraries.Standard.Dialog1
 dialog = CreateUnoDialog(MAK_bib)
 eintraege = Array("aaa","bbb","ccc") 
 dialog.Model.getByName("ListBox1").StringItemList = eintraege()
 
 dialog.execute()
End Sub


Sub selektieren()
  if akt = 1 Then
    akt = 0
    Exit Sub
  End if
  
  x = dialog.Model.getByName("ListBox1").StringItemList
  
  For i = 0 To Ubound(x())
    If x(i) = dialog.getControl("ListBox1").selectedItem AND Left(dialog.getControl("ListBox1").selectedItem, 2) <> "x_" Then
      x(i) = "x_" & x(i)
      x1 = x(i)
      akt = 1
    End If
  Next i
  
  dialog.Model.getByName("ListBox1").StringItemList = x()
  
  dialog.getControl("ListBox1").selectItem(x1, True)
End Sub
Ich bin jetzt dazu übergegangen einen Listeintrag raus zu nehmen und neu einzufügen.
ja, so dachte ich. (bzw. ich dachte, und nutze in meinem Code, die ganze Liste, das ist aber nur ein Detail, zumal Dein Weg der naheliegendere ist)
Allerdings gefällt mir der Code nicht, da eine Änderung der Liste einen neuen StatusEvent auslöst, denn ich nicht brauchen kann und mittels BreakEvent abbreche:
Dann kann ich Dir nicht weiterhelfen.



Gruß
Stephan
hawe
****
Beiträge: 151
Registriert: Di, 05.08.2008 19:47

Re: Listbox manipulieren

Beitrag von hawe »

Hm,

in meinem ersten Versuchen ListItems zu ändern gab es Fehler. Welchen Pfad ich da gebaut habe bring ich nicht mehr zusammen. Kann auch sein, dass ich von OO zu LO gewechselt hab. OO macht wieder neue Fehler an dem Code, wie er in LO gelaufen ist.
Dann lass ich das mal so...
BTW:
oForms = oSheet.drawpage
oShape = oForms.getByIndex(j)

würde ich noch einen Weg suchen die drawpage Items per name abzuholen.
Hast Du einen Vorschlag dazu?
Gruss HW
Win7/SuSe 11.2 - LO 3.3
juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

Re: Listbox manipulieren

Beitrag von juetho »

hawe hat geschrieben:würde ich noch einen Weg suchen die drawpage Items per name abzuholen.
Hast Du einen Vorschlag dazu?
Wie wäre es damit:

Code: Alles auswählen

oShape = oForms.getByName("Tabelle3")
Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
hawe
****
Beiträge: 151
Registriert: Di, 05.08.2008 19:47

Re: Listbox manipulieren

Beitrag von hawe »

Tja,

das wäre logisch, wenn es so wäre...
ist aber nicht so und ich hätte mir diese Frage gespart ;-)
BTW: Das ein DrawPage-ItemTabelle3 heißt wäre auch sehr ungewöhnlich...
Gruss HW
Win7/SuSe 11.2 - LO 3.3
Antworten