[gelöst] Grafiken in Formular einfügen, skalieren bzw. a

Das Textverarbeitungsprogramm

Moderator: Moderatoren

yeti
*****
Beiträge: 324
Registriert: Mi, 20.10.2004 12:11
Wohnort: Emmendingen

[gelöst] Grafiken in Formular einfügen, skalieren bzw. a

Beitrag von yeti »

Hi,

ich glaube ich habe mich irgendwie in was verrannt. Wollte eine Grafik in ein Formular pressen, habe hierfür auch einen entsprechenden Tipp von Toxitom bekommen:

Kannst du programmieren? Also möglich ist das schon. Du wählst eine "Grafische Schaltfläche" aus, die kann ein Bild aufnehmen. Dort gibt es die Eigenschaft "ScaleImage", wenn du die auf True setzt, dann wird das Bild in die Fläche passend skaliert.

Ich hab das gemacht, nur sorgt die Eigenschaft "Skalieren = Ja" dafür, daß das Bild die Proportionen verliert. Das darf unter keinen Umständen passieren. Kann ich das da irgendwie lösen? Oder hab ich da was falsch verstanden?

Ginge das nicht auch in einer normalen Tabellenzelle? Zumindest wird das Bild beim Einfügen dann der Breite der Zelle angepasst. Allerdings ändert sich daruch auch die Höhe der Zelle und das sollte wiederum nicht passieren. Demnach müsste die Tabelle irgendwie fixiert werden können.

Also sagen wir mal so, ich brauche auf einer DIN A4 Seite die Möglichkeit ein Bild per Mausklick auf eine Schaltfläche auszuwählen, welches dann "proportional" skaliert in einen vorgegebenen Rahmen passen muss. Will heißen, die Anordnung der Elemente auf der kompletten Seite darf sich nicht verändern.

Eine vorherige Prüfung des Bildes auf Größenverhälnisse ist nicht erwünscht. Wenn ein Bild zu breit ist, muss es proportional an die vorgegebene Breite angepasst werden, wenn es zu hoch ist, proportional an die Höhe. WIchtig ist, daß sich dadurch die Größe des "Bildrahmens" nicht verändert, damit die Seite im Layout nciht verändert wird.

Ich hoffe ich konnte meine Frage verständlich formulieren. Ich denke da glaube ich ziemlich im Kreis rum ;)

Gruß Yeti

[Edit]
Hier mal noch ein Bild. Links, Bild in Tabellenzelle, rechts Bild in Grafischer Schaltfläche
Bild
[/Edit]
Zuletzt geändert von yeti am Di, 28.02.2006 14:27, insgesamt 1-mal geändert.
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hallo Yeti,
Ich hab das gemacht, nur sorgt die Eigenschaft "Skalieren = Ja" dafür, daß das Bild die Proportionen verliert. Das darf unter keinen Umständen passieren. Kann ich das da irgendwie lösen? Oder hab ich da was falsch verstanden?
Nein, das war schon alles richtig. Nur: Für die richtigen Proportionen bist du selbst verantwortlich. Da bleibt dir nur:
Zunächst die Bildgröße auslesen, Proportionen berechnen, Grafische Schaltfläche entsprechend anpassen (Seitenverhältnis), Bild einfügen.

Ist halt ein wenig Programmieraufwand :wink:

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
yeti
*****
Beiträge: 324
Registriert: Mi, 20.10.2004 12:11
Wohnort: Emmendingen

Beitrag von yeti »

Ich dachte ich ziehe eine "Grafische Schaltfläche" in einer vorbestimmten Größe auf und das Bild wird dann wie in einer Tabellenzelle automatisch an die erforderliche Breite angepasst.

Dann ist das klar.

Ich hab da in ein paar Dokus zu Starbasic quergelesen. Da kann ich aber nichts zu Grafischen Schaltflächen und überhaupt zu Grafiken finden. Gerade was die Größe auslesen angeht und das Einfügen von Grafiken.

Eventuell suche ich nur nach den falschen Begriffen. Hast Du einen Tipp für mich oder einen Link zum entsprechenden "Kapitel"? Ach ja, in deutsch wäre sehr angenehm ;)

Gruß Yeti
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Yeti,
Eventuell suche ich nur nach den falschen Begriffen. Hast Du einen Tipp für mich oder einen Link zum entsprechenden "Kapitel"? Ach ja, in deutsch wäre sehr angenehm
Das Thema direkt ... nein. Musst du dir über diverse Dokumentationen zusammensuchen. Ein bischen etwas findest du in meinem Makro-Buch - immer eine gute Investition.

Im Übrigen ist das nicht so einfach. Ich würde folgenden Weg gehen:
Die Grafik zunächst ins Dokument einfügen (als Shape), dann kannst du die Größe auslesen, und das Objekt gerade wieder entfernen. Mit der Größe selbst kannst du dann das Verhältnis berechnen, und im gleichen Verhältnis die Schaltflächen oder grafische Fläche dimensionieren.
Leider stimmen die Masseinheiten der Grafik (meist pt) und der Controls (Twips) nicht überein - also bleibe beim Verhältnis. Das stimmt dann immer :-)
Der folgende Code liest bsw. eine Grafikdatei in ein Writerdokument ein und liefert dir die Größe. Mit der kannst du dann weiterarbeiten:

Code: Alles auswählen

Sub GrafikGroesse
	oDoc=thisComponent
	oDrawpage = oDoc.drawpage
	oForm = oDoc.drawpage.forms(0)
	oCtr = oForm.getByName("ct")
	oGraph = oDoc.createInstance("com.sun.star.drawing.GraphicObjectShape")
	oGraph.GraphicURL = "file:///d:/daten/puffer/tiger.jpg"
	dim oBitMapSize as new com.sun.star.awt.Size
	oDrawpage.add(oGraph)
	oBitMapSize = oGraph.GraphicObjectFillBitmap.getSize
	oDrawpage.remove(oGraph)
	msgbox ("Höhe = " & oBitMapSize.height & chr(13) & "Breite = " & oBitMapSize.width)
	'...
        REM hier folgt dann die Dimensioniereung des Controls oCtr

End Sub
Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
yeti
*****
Beiträge: 324
Registriert: Mi, 20.10.2004 12:11
Wohnort: Emmendingen

Beitrag von yeti »

Hi,

ich hab den Code von Dir bei mir eingebaut und bekomme beim Aufruf des Makros die Meldung:

"Basic Laufzeitfehler. Es ist eine Exception aufgetreten Type: com.sun.star.container.NoSuchElementException Message: . "

Hab daraufhin dem Formular einen Namen gegeben und dann die Zeile in dem Makro entsprechend geändert. Kommt jedoch der gleiche Fehler.

Hier die aktualisierte Zeile:

Code: Alles auswählen

   oCtr = oForm.getByName("korrekturabzug")
Das Formular heißt auch "korrekturabzug"

Kannst Du mir da nochmal einen Tipp geben?

Vielen Dank,
Yeti
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey yeti,
Code von Dir bei mir eingebaut und bekomme beim Aufruf des Makros die Meldung
weist darauf hin, dass du kein Kontrollelemet mit dem Namen im Formular hast.
Hab daraufhin dem Formular einen Namen gegeben
Das war unnötig. Das Formular wird über "forms(0)" schon angesprochen (das erste Formular im Dokument - ast du noch mehr drin?
Das Formular heißt auch "korrekturabzug"
Nicht das Formular muss "korrekturabzug" heissen, sondern das Kontrollfeld, das du ansprechen willst. Und: Gross- und Kleinschreibung ist hier absolut zu beachten. Ein Kontroll mit Namen "ct" ist nicht identisch mit einem Control mit Namen "Ct"!

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
yeti
*****
Beiträge: 324
Registriert: Mi, 20.10.2004 12:11
Wohnort: Emmendingen

Beitrag von yeti »

Hi Thomas,

vielen Dank für die Hilfe.
Das Makro läuft jetzt. Wobei ich noch Probleme habe hinter die Logik zu schauen. Das wird sich aber noch geben. Ich versuche mich an der weiteren Umsetzung.

Hab mir grad die Leseprobe Deines Buches angeschaut. Ich bin begeistert und werde mir das zulegen.

Gruß Yeti
Antworten