Programmabsturz beim Speichern (gelöst)

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

Moderator: Moderatoren

Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Programmabsturz beim Speichern

Beitrag von Stephan »

Das Problem ist: Welches Objekt auf der Drawpage von "Übersicht_Test" wird gezählt, ist nicht sichtbar und kann nicht gelöscht werden?
Warum probierst DU es nicht selbst aus? Geraten dazu hatte ich Dir im Übrigen schon gestern:
Prüfe im Zweifel ob das Löschen der Grafiken auch wirklich abgeschlossen ist z.B. indem Du nach dem Löschen testweise versuchst auf eine Grafik zuzugreifen und Dich überzeugst das dass nicht klappt


Ich bin hier raus.

Gruß
Stephan
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Programmabsturz beim Speichern

Beitrag von balu »

Hallo Pit,

ich Plöti hatte tatsächlich doch noch mal hier reingeschaut. Und ich bin jetzt auch leicht ärgerlich. Du wirst auch gleich verstehen warum.
den Befehl "print opage.count" eingebaut.
Du hast wichtiges beim Posten ignorierrt.
So sieht die dementsprechende Sub aus.

Code: Alles auswählen

sub ZeichnungLoeschen (seite)
	oPage=ThisComponent.drawpages(seite)
print oPage.count
sprung
	do while oPage.count>0
    	oGrafik=opage.getbyindex(oPage.count-1)
    	oPage.remove(oGrafik)
	loop 			
end sub
Und, fällt dir da etwas auf?

Richtig!

Das Thema 'seite' ist schon wieder da!
Und was hatte dir Tom (Toxitom) so schön dazu erklärt?
Ich sehe aber in dem Code der aktuellen Datei keine Änderung. Das Thema ist (schon wieder) Gesprächsthema.

Verstehst Du jetzt warum ich leicht ärgerlich bin?

Wenn ich aus "Übersicht" auf "1mal1" klicke steht da "0" und alles ist gut. Starte ich von "Übersicht_Test" das "1mal1" steht da "1" und das Programm stürzt ab.
Bin echt total ausgelaugt.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Programmabsturz beim Speichern

Beitrag von erikafuchs »

Hallo Balu,
nicht liegt mir ferner als dich zu ärgern. Ich habe das mit dem Objekt auf der Drawpage entdeckt und wollte schnell zeigen was ich meine. Da ich in den neuesten hochgelandenen Beispielen diese ominösen =summe(... gelöscht hatte, habe ich auf eine ältere Version zurückgegriffen. Da war halt das mit der Seite noch nicht korrigiert. Sei versichert ich habe diese Doppelt-Definitionen entfernt und auch (seite as integer) geändert (das kannst du auch in der dir vorliegenden Version sehen). Diese Änderungen haben aber nicht geholfen.
Und dann habe ich versucht, Stephans Vorschläge umzusetzen und habe vor dem Speichern den Fokus auf eine Zelle gestzt (das macht "sprung") und dann überprüft, ob alles gelöscht wurde (wie Stephan es vorgeschlagen hat). Wurde es halt nicht (obwohl bei 1mal1 ja kein Zeichenobjekt erzeugt wird, ich habe auch keine Idee wo es herkommt - in deiner bereinigten Datei ist es auch drin) . Es ist ein Objekt da, ich kann auch auf das Objekt zugreifen, ich kann es aber nicht löschen. Wenn ich versuche es zu löschen, oder es auf der Seite bleibt und ich speichere, kommt es zum Programmabsturz. Stephan kann mir jetzt wohl nicht mehr erklären was ich da falsch gemacht habe - ich hatte eigentlich versucht das zu machen was er mir empfohlen hat.
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Programmabsturz beim Speichern

Beitrag von balu »

Hallo Pit,
Es ist ein Objekt da, ich kann auch auf das Objekt zugreifen, ich kann es aber nicht löschen.
Herr im Himmel!
Bist du den nicht mal in der Lage zu sagen um was für ein ominöses Objekt es sich dabei handelt?
Du kannst darauf zugreifen, aber uns lässt Du hier im Regen stehen.


Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Programmabsturz beim Speichern

Beitrag von erikafuchs »

Mit „ich kann darauf zugreifen“ meinie ich, dass „mystery=opage.getbyindex(0)“ keine Fehlermeldung ergibt. Was es ist, kann ich aber nicht feststelle. Ich habe mich jetzt zwei Stunden im Bett gewälzt und bin recht sicher, dass ich jetzt aber weiß, was es ist. Ich hatte das Problem vor vielen Jahren schon mal. Wahrscheinlich hat Stephan recht und ich kann das nur selbst lösen. Ob das ein Fehler in oo ist kann ich nicht sagen. Ich werde meine neue Theorie nach ein paar Stunden Schlaf überprüfen und mich melden.
Wolltest du nicht auch Feierabend machen?
Gute Nacht.
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Programmabsturz beim Speichern

Beitrag von erikafuchs »

Hurra! Ich habe es. Muss man erstmal drauf kommen!
Schade, dass sich die meisten Beteiligten entnervt hier abgemeldet haben und für sie das Geheimnis nicht gelöst wird.
Vielleicht findet das ja aber jemand, der Probleme mit dem Speichern hat nachdem auf der Drawpage nicht alles gelöscht werden Konnte.
Der erste Hinweis ist dieser:
Ich komme auf meine Frage zu diesem Code zurück:

Code: Alles auswählen

Code: Alles auswählen

sub ZeichnungLoeschen (seite as integer)
	oPage=ThisComponent.drawpages(seite)
	do while oPage.count>0
    	oGrafik=opage.getbyindex(oPage.count-1)
    	oPage.remove(oGrafik)
	loop 			
end sub
... ich bin mir sicher, dass ich hiermit schon Probleme hatte.
Der zweite Tipp ist dieser:
Die Aufgaben in Zelle C33 zählen doppelt.
... oder soll ich das Geheimnis gleich auflösen?

Man kann doch sicher (leider kann ich es nicht) rausbekommen, um was es sich bei "mystery" bei "mystery=opage.getByIndex(0)" handelt?
Guten Morgen
Pit
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Programmabsturz beim Speichern

Beitrag von erikafuchs »

Das war's:
Fehler Kommentar.jpg
Fehler Kommentar.jpg (80.56 KiB) 3497 mal betrachtet
nicht die sonderbaren Formeln sonder der Kommentar im Feld "Abbr. & Lsg.". Wie Balu schon richtig bemerkte, sind da nicht nur die selbstgestaltete Grafiken sondern auch die Schaltfelder und halt auch die Kommentare. Dieser Kommentar taucht als Objekt auf der Drwapage auf, der Versuch ihn zu löschen führt entweder zum sofortigen Progarmmabbruch oder u.U. (welchen weiß ich nicht) zum Progarmmabbruch beim Speichern.
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Programmabsturz beim Speichern (gelöst)

Beitrag von erikafuchs »

Der Rechentrainer funktioniert immer noch!
Ich möchte mich hier nochmal bei allen Beteiligten bedanken. Ihr habt viel Zeit mit meinem Problem verbracht.
Im Endeffekt waren es nicht die Definition von Variablen, Fehler im Code oder Reste von Excel. Ich habe aber wieder viel gelernt und habe meinen Code aufgeräumt. Er ist zwar sicher immer noch nicht vorzeigbar, ich finde mich aber selbst besser zurecht und habe einige Einträge neu durchdacht.

Der Fehler ist draußen. Er lässt sich auch klar reproduzieren, nach dem Einfügen eines Kommentars stürzt das Programm bei der Löschschleife mit Sicherheit ab.

Ich würde jetzt aber doch gerne noch wissen, wie man diesen Fehler vermeiden kann, wie man also dafür sorgt, dass ein Kommentar auf einer Seite stehen bleiben kann und nur durch Makro eingefügte Objekte in der Drawpage gelöscht werden, ein Kommentar oder eine Schaltfläche aber stehenbleibt. Sie zu benennen oder durchzuzählen und einige stehenzulassen, scheint nicht zu funktionieren. Ich lasse Kommentare und Buttons ansonsten halt einfach weg.

Und dann weiß ich auch immer noch nicht, wie man rausbekommt um welches Objekt es ich handelt, wenn es zwar da ist, man es mit "mystery=opage.getByIndex(0)" auch ansprechen kann, aber keine Ahnung hat (wie in diesem Fall) um was es ich handelt.
Pit
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Programmabsturz beim Speichern (gelöst)

Beitrag von balu »

Hallo Pit,

tja, das mit dem Kommentar (Notiz) ist meinerseits wohl dumm gelaufen. Hatte wohl in meinem Tool vergessen gehabt das rauszunehmen. Aber nun gut, der Problemverursacher ist ja jetzt eindeutig identifiziert.

Das Problem mit dem Löschen hattest Du hier doch schon mal: Abstürze beim Löschen von Objekten auf einer Drawpage

Bevor ich es vergesse:
Arbeitest Du mit einem Inspektionstool wie XRAY oder MRI?
Wenn nein, dann wirds aller höchste Eisenbahn für dich das zu ändern.

Sie zu benennen oder durchzuzählen und einige stehenzulassen, scheint nicht zu funktionieren.
Das geht schon, man muss sich dafür aber mit MRI oder XRAY befassen um den Weg zu erfahren.
Und dann weiß ich auch immer noch nicht, wie man rausbekommt um welches Objekt es ich handelt, wenn es zwar da ist, man es mit "mystery=opage.getByIndex(0)" auch ansprechen kann, aber keine Ahnung hat (wie in diesem Fall) um was es ich handelt.
Kein Scherz, wenn das Kind keinen Namen hat, dann kann man es nicht ansprechen.
Dein "mystery" sagt nur das da ein Objekt ist, mehr aber auch nicht. Um was für ein Objekt es sich dabei handelt ist extrem schwer herauszufinden, wenn man wissen will ob es ein Button oder eine Notiz ist. Das ist aber in deiner Datei auch gar nicht nötig.

Im Grundprinzip bist Du ja eigentlich schon auf dem richtigen Weg gewesen. Jedoch ohne dementsprechende Vorarbeit und Code Erweiterung gehts nicht.

Als erstes musst Du beim erstellen einer Grafik ihr einen Namen vergeben. Und erst dann die Grafik erzeugen. Also anstatt nur (als Beispiels)

Code: Alles auswählen

With oWinkel
			.CircleStartAngle=(0)*100
			.CircleEndAngle=(aZ/aN*360)*100
			.FillStyle=com.sun.star.drawing.FillStyle.SOLID
			.FillColor=255  
		end with
		oPage.add(oWinkel)
das ganze um eine Zeile erweitern, und zwar so.

Code: Alles auswählen

With oWinkel
			.CircleStartAngle=(0)*100
			.CircleEndAngle=(aZ/aN*360)*100
			.FillStyle=com.sun.star.drawing.FillStyle.SOLID
			.FillColor=255 
			.Name = "Winkel_No1" 
		end with
		oPage.add(oWinkel)
Jetzt hat das Kind einen Namen, und nun kann es auch persönlich mit Namen angesprochen werden.
Dieser Name muss aber so lange wie die dementsprechende Sub, beziehungsweise Rechenaufgabe (oder was auch immer) bearbeitet wird gespeichert werden.
Um etwas genauer zu sein.
Sub Aufruf, einen Namen einer Variablen zuweisen, Aufgabe starten und wenn gelöst (fertig) die Variable auf "" leer setzen. Nicht das die Variable in einer anderen Aufgabe mit dem gleichen Namen einen falschen Zusammenhang für dich erzeugt. Wäre doch Plöte wenn es um Rechtecke geht, aber die Grafik Winkel heißt. Na Du verstehst schon.

Aber wie kann man denn jetzt das dementsprechende Objekt mit Namen ansprechen, wirst Du dich jetzt fragen?
Nun, eines von den zuvor genannten Tools (z.B. MRI) wird dir bei richtiger Handhabung sagen, das man den Namen auch auslesen kann.

Code: Alles auswählen

print oPage.getbyindex(0).getName() 
Und das baust Du in eine Schleife ein, die daraufhin überprüft ob der zu vergleichende Name mit dem gefundenen Namen übereinstimmt. Und wenn ja, dann wird die dementsprechende Grafik wie gehabt gelöscht.

Deine mehrfach gepostete *sub ZeichnungLoeschen* würde dann wie folgt aussehen.

Code: Alles auswählen

sub ZeichnungLoeschen
	oPage=ThisComponent.drawpages(0)
	for ip = 0 to oPage.count
    	oGrafik=opage.getbyindex(ip)
		if oGrafik.getName() = "Pfeile" then
			oPage.remove(oGrafik)
		exit for
		end if		
	next ip 
end sub
Diese habe ich hier unter AOO 4.1.5 erfolgreich getestet.
Hier noch ein paar Infos dazu.
- Die Variable 'seite' konnte ich für meine Testdatei nicht gebrauchen, deshalb durch einen festen Wert ersetzt.
- Deine 'Do..Loop' mit 'opage.getbyindex(oPage.count-1)' musste rausgeschmissen werden. Der Grund dafür war folgender.

Aufm Tabellenblatt war eine Linie mit Pfeilen die auch den Namen "Pfeile" trägt (per Makro erstellt), und ferner ein gezeichnetes Rechteck ohne Name (von Hand gezeichnet). Und bei Ausführung des Test-Codes mit 'Do..Loop....' fand Calc kein Ende. Das Makro ging in eine Art Dauerschleife. Ich musste in der Basic-IDE den Stop-Knopf drücken. Und erst als ich das Makro wie zu sehen abänderte, wurde wie gewünscht die Linie gelöscht, und das Namenlose Rechteck blieb stehen.

Merksatz:
Jede Grafik die das Makro erstellt bekommt vom Makro auch einen Namen, dann ist das ansprechen kein Problem mehr.

Ich hoffe Du weisst jetzt mehr, und hoffentlich kannst Du das jetzt auch alles sicher unterbringen.

Und nein! Ich habe das nicht ausm Ärmel geschüttelt, sondern mir selber mühsam erarbeitet.

Gud Lack :-)



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Programmabsturz beim Speichern (gelöst)

Beitrag von balu »

Hab da doch noch meine Beispieldatei angehängt.

Anfangs ist nur ein Schwarzes Rechteck und 2 Buttons zu sehen, also 3 Elemente auf der Drawpage.
- Button "Zeichnen" zeichnet eine Linie mit Pfeilen.
- Button "Löschen" löscht die Linie wieder, lässt aber die anderen Elemente stehen.


Gruß
balu
Dateianhänge
Linie_zeichnen_und_löschen_in_calc_makro0.ods
(13.67 KiB) 140-mal heruntergeladen
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Programmabsturz beim Speichern (gelöst)

Beitrag von erikafuchs »

Hallo Balu,
da hast du dir ja wieder eine Menge Arbeit gemacht. Aber das mit der Benennung von den einzelnen Objekten auf der Drawpage kann ich doch schon und nutze es auch, das kannst du im Code ja auch sehen, je nach Objektname setze ich z.B.verschiedene Farben. Und mir ist auch klar, dass man die Objekte mit Hilfe des Namens löschen kann, das ist kein Problem. Mein Problem war ja aber dieses letzte Objekt auf der Drawpage 3, das nun mal nicht gelöscht wurde und bei dessen Löschversuch das Programm abstürzt. Wenn ich mein Koordinatensystem per Makro erstelle, ist das zunächst der Hintergrund, dann ziemlich viele Linien als "kariertes Papier", dann wird das Koordinatenkreuz erstellt, alle Einteilungen mit Beschriftung , sogar die Pfeilspitzen bestehen aus je zwei Linien, jedes Kreuzchen bsteht aus zwei Linien und Beschriftung ... da kommt gut was zusammen. Das Löschen dauert ja jetzt schon einen Moment, wenn ich die alle einzeln über ihre Namen löschen würde, dauerte das noch länger, das wollte ich nicht. Ich gruppiere dieses ganze Koordinatensystem ja zu einem Objekt, damit ich über einen Button im Menü das ganze Ding kleiner machen kann, da einige Schüler klagten, dass Teile der Grafiken auf ihrem Bildschirm nicht zu sehen seien. Wenn ich das ganze gruppierte Objekt aus geschäzt Hundert Teilobjekten komplett löschen könnte, wäre das ja noch ok, das geht aber soweit ich das sehe nicht.
Das ist ja auch nicht das wirkliche Problem. Es blieb halt dieser Kommentar in der Zelle G55 übrig, bei dem der Löschversuch zum Absturz führte. Ich wusste, dass es da ist, wusste aber nicht aus was es besteht. Da war was mit XrayTool, das hätte ich wohl mal rauskramen sollen und lernen, wie man damit umgeht - da hast du Recht!
Ich wusste ja sogar (eigentlich), dass das Löschen auf der Drawpage auch die Kommentare löscht, denn wenn ich beim Zeichnungloeschen (seite) die Seite nicht auf 1 oder 3 setze, die Objekte auf der "Daten"-Seite gelöscht werden, da diese halt den Index 0 hat. Dabei sind auch alle mühsam erstellten Kommentare, was hier jeweils gezählt wird, gelöscht worden. Dort wurden sie gelöscht, auf der Seite 3 in Zelle g55 aber führte es zum Programmabsturz. Ich vermute (habe es nicht überprüft), das liegt daran, dass auf Seite 3 der Kommentar sichtbar war und auf Seite 0 nicht. Meines Erachtens ist dieser Prorammabbruch ein Bug - macht es Sinn diesen zu melden?
Das Problem mit dem Löschen hattest Du hier doch schon mal: Abstürze beim Löschen von Objekten auf einer Drawpage
Jawohl, auch da hast du Recht. Darauf habe ich ja auch schon mehrmals hingewiesen:
hier geht es nur um dieses:

Code: Alles auswählen

Code: Alles auswählen

sub ZeichnungLoeschen (seite as integer)
	oPage=ThisComponent.drawpages(seite)
	do while oPage.count>0
    	oGrafik=opage.getbyindex(oPage.count-1)
    	oPage.remove(oGrafik)
	loop 			
end sub
ich kann mich erinnern, dass ich damit schon früher Probleme hatte und es zu Programmabstürzen kam wenn auf einer Seite keine Grafiken vorhanden waren. Könnt ihr mir dazu was sagen?
... du hast es gefunden, das war 2007! Wenn ich das richtig sehe, habe ich das Problem damals nicht wirklich lösen können, ich habe die Seite damals einfach anders aufgebaut - aber jetzt habe ich es ja.
Ach und das noch:
Deine 'Do..Loop' mit 'opage.getbyindex(oPage.count-1)' musste rausgeschmissen werden.
Ich hatte die Schleife vor langer zeit mir "for ... to oPage.count" ausprobiert. Da habe ich in Erinnerung, dass das nicht funktioniert hat, da bei jedem Durchlauf die Anzahl der Objekte sich verringert und daher die Schleife sich aufhängt. Aber vielleicht erinnere ich mich falsch, deine Version scheint ja zu funktionieren.
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Programmabsturz beim Speichern (gelöst)

Beitrag von balu »

Hallo Pit,

meine Schleife bezog sich ja auf ein einzelnes Objekt, und von daher funzt das ja auch. Wenn jetzt aber nacheinander mehrere Benannte Objekt auf ein und dergleichen Drawpage gelöscht werden sollen, muss die Schleife anders aufgebaut werden oder versuchen es mit 'Do...Loop' zu lösen (Do-loop ist nicht meine Welt).

Ich gruppiere dieses ganze Koordinatensystem ja zu einem Objekt, damit ich über einen Button im Menü das ganze Ding kleiner machen kann, da einige Schüler klagten, dass Teile der Grafiken auf ihrem Bildschirm nicht zu sehen seien. Wenn ich das ganze gruppierte Objekt aus geschäzt Hundert Teilobjekten komplett löschen könnte, wäre das ja noch ok, das geht aber soweit ich das sehe nicht.
Du kannst also per Makro mehrere Zeichenobjekte Gruppieren.
Ist doch Prima!
Und hast Du das auch mal von Hand direkt aufm Tabellenblatt selber ausprobiert?
Wenn ja, dann müsstest Du feststellen das man einem Gruppiertem Zeichenobjekt auch einen Namen zuordnen kann.
Und was bedeutet das jetzt?
Du hast einen Verfügbaren Namen mit dem Du WAS machen kannst?
Und dadurch dürfte wohl der Unterstrichene Teil deiner Aussage nicht mehr gültig sein.

Wieder zurück zur Schleife.
Ein Gruppiertes Zeichenobjekt ist ein einzelnes benanntes Zeichenobjekt. Also muss dafür die Schleife nicht kompliziert geändert werden, sie bleibt wie sie ist.
Wenn aber wirklich unterschiedliche Grafiken nicht gruppierbar sind, und sie gelöscht werden müssen, dann muss die Schleife dementsprechend aus(um)gebaut werden. Das bedeutet, entweder 2 unterschiedliche Löschroutinen, oder aber die Routine so umbauen das sie für beide Fälle nutzbar ist.

Da war was mit XrayTool, das hätte ich wohl mal rauskramen sollen und lernen, wie man damit umgeht - da hast du Recht!
Sag ich doch ;-)
Und mach das ab SOFORT.

Und vor allem, teste erstmal in einer leeren Datei, damit Du in Ruhe feststellen kannst wie das denn so mit den Gruppierten Zeichenobjekten verhällt, und wie dir XRAY dabei behilflich sein kann.
Meines Erachtens ist dieser Prorammabbruch ein Bug - macht es Sinn diesen zu melden?
Ist deine Entscheidung.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Programmabsturz beim Speichern (gelöst)

Beitrag von erikafuchs »

Hui, jetzt sind wir bei mir schon auf der 5.Seite!
Da war was mit XrayTool, das hätte ich wohl mal rauskramen sollen und lernen, wie man damit umgeht - da hast du Recht!
Sag ich doch ;-)
Und mach das ab SOFORT.
Also, habe ich gemacht. Aber Stephan sagte weiter oben, ihr (Stephan, Tom, Balu ...) wüsstet auch nicht alles.
xRay.jpg
xRay.jpg (162.71 KiB) 3674 mal betrachtet
wenn ihr das versteht, erstarre ich in Erfurcht. Für mich könnte das auch chinesisch sein und ich komme mir klein vor. Ich habe schon auch versucht die Erklärung dazu zu lesen, das macht die Sache nicht besser. Gibt es da ein xRay für Dummies, die nicht wissen was Eigenschaften, Methoden, Structs und Enums sind? Oder soll ich mich da jetzt halt nächste Woche für das oben erwähnte Fernstudium anmelden? Ich hatte vor vielen jahren schonmal das xrayTool aufgemacht - und ziemlich schnell wieder zu.
Hilfe!
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Programmabsturz beim Speichern (gelöst)

Beitrag von balu »

Hallo Pit,

Hast Du es denn mittlerweile geschafft den Gruppierten Objekten einen Namen zu vergeben, und konntest Du sie löschen?

Thema XRAY.
Um etwas zu Untersuchen muss man Systematisch "Schrit-für-Schritt" vorgehen. Am besten von oben nach unten. Beispiel folgt gleich.

Setze in XRAY bei 'Anzeige' => "A..Z" ein Häkchen rein. Dadurch wird die Liste "Name der Eigenschaft" Alfabetisch aufsteigend sortiert. Das ist sehr nützlich.

Zum Beispiel:
Du hast ja schon 'xray mystery' eingetippt.
Das entspricht ja 'xray ThisComponent.drawpages(seite).getbyindex(0)'. Und das ist der komplette 'Pfad' von der obersten bis zur aktuell untersten Stufe.
'ThisComponent' = oberste Stufe
'getbyindex(0)' = unterste Stufe.

Jetzt mach mal folgendes.
In einem neuen Modul in einer Sub einfach; xray ThisComponent, eintippen und schau dir mal an was die Liste "Name der Eigenschaft" dir so alles anbietet.
Dann gehe auf den Namen DrawPages und Du siehst rechts daneben in der Spalte 'Datentyp' den dazugehörigen Eintrag 'object'. Kommt dir dieses Wort nicht irgendwie bekannt vor?
Das muss es! Du brauchst nur an die Variablendeklaration zu denken: Dim .... as Object. Das ist also eigentlich nix neues, und Du wirst in XRAY viele alte bekannte wieder treffen: integer, string, long, double etc.

Liest Du in XRAY das Wort 'object', dann ist damit schon mal garantiert das sich dahinter viele weitere Eigenschaften verbergen.

Wenn Du jetzt also auf DrawPages einen doppelklick ausführst, dann ist die dann erscheinende Liste mit den Eigenschaften wohl recht kurz, aber das macht nix. Denn jetzt klickst Du links oben, im Fenster von XRAY auf den Eintrag "Methods".

In "Methods" kannst Du nachlesen welche Möglichkeiten (Methoden) es gibt was man machen kann:
get = heißt Beispielweise etwas bekommen
getBy = nehmen durch etwas
set = etwas setzen.
etc.

Du erinnerst dich an meinen Code?
'.getName()' => den Namen bekommen.
Und deiner.
'.getbyindex(0)' => Zugriff durch den Index 0.

Und nun folgendes 'xray ThisComponent.drawpages(seite)'. Wobei Du seite jetzt durch eine Zahl ersetzt, z.B. 3. Und dann schaust Du mal was Du alles so zu Gesicht bekommst. Damit Du dich ein wenig damit vertraut machen kannst.

Jetzt 'xray ThisComponent.drawpages(3).getbyindex(0)' (anstelle 0 auch eine andere Zahl ausprobieren). Dann wechselst Du auf "Methods", suchst den Eintrag 'getName' und schaust was xray denn so sagt bei einem doppelklick auf 'getName'. Es gibt nur foplgende möglichkeiten:
- Es popt ein Fernster auf mit einem Textinhalt (der Name).
- xray gibt ne Fehlermeldung aus.

Es ist natürlich vieles komplizierter, was ich auch nicht alles erklären kann. Aber wenn Du dich schon mal intensiver damit befasst, dann wird das alles mit der Zeit leichter. Aber eins kannst Du mir getrost glauben; ich habe noch immer stellenweise meine Probleme passende Infos aus xray rauszukitzeln. Aber für so manches reicht es mir.


Ich frage mich nur wie Du den Rechentrainer erstellt hast, was für Hilfsmittel hast Du benutzt. Buch, WWW?


Ja auch ich hatte mich in meiner Anfangszeit bei der Programmierung (so ab ca. 2009) mich mit meinem Großprojekt, Basic und dem Buch der 7 Siegel (xray) gleichzeitig runschlagen müssen. Und egal ob XRAY oder MRI, beide sind wohl mächtige Tools, zwingen mich aber noch immer schnell in die Knie.


Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Programmabsturz beim Speichern (gelöst)

Beitrag von Toxitom »

Hallo Pit,

um mal etwas kreatives beizufügen:

Wenn Du den "Übeltäter" schon gefunden hast, so kannst Du doch ganz einfach alle Kommentare vom Löschen ausschließen;) Ist an sich auch logisch: Kommentare werden vom Programm als "shapes" realisiert - sind aber direkt verbunden mit dem Kommentarobjekt - und können nicht über den "remove" Befehl so gelöscht werden. Willst Du ja auch gar nicht, oder?

Also: Schliesse Kommentare beim Löschen aus:

Code: Alles auswählen

sub ZeichnungLoeschen
	oPage=ThisComponent.sheets(0).drawpage
	i =  oPage.count
	do while i>0
    	oGrafik=opage.getbyindex(i-1)
    	if not oGrafik.supportsService("com.sun.star.sheet.CellAnnotationShape") then
    	  	oPage.remove(oGrafik)    	  
    	end if	
        i= i - 1
	loop 			
end sub
Du kannst auch andere Shape-Typen ausschliessen - oder nur bestimmte festlegen. Mit XRAY oder MRI kannste Dir alles genauer ansehen. Zur Not auch im Einzelschrittmodus in der IDE und dem Beobachter.

VG
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Antworten