[SOLVED] Zmiana źródła istniejącego obrazu

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO
Awatar użytkownika
krolik
Posty: 10
Rejestracja: śr lis 20, 2019 6:21 pm

[SOLVED] Zmiana źródła istniejącego obrazu

Post autor: krolik »

Witam,
z pomocą dostępnych przykładów, skleiłem kod który po wpisaniu w pole formularza 13 cyfr kodu kreskowego wystawia ten kod do dokumentu. Jednak za każdym razem jest to nowy kod, a zależy mi żeby podmieniać tylko źródło tego jednego kodu (nie mam pojęcia jak to zrobić). Wiem, że można podmienić to z poziomu menu, ale mam zamiar aby to makro ( z kodem kreskowym) scalić z posiadanym przeze minie już kodem.

W innym makrze które mam, żądany obiekt jest szukany za pomocą nazwy/id i po jego odszukaniu jest wstawiany do niego tekst. Domyślam się (?), że w/w przykładzie powinno działać to podobnie (?) jednak nie wiem jak to można zrobić.

pozdrawiam
Załączniki
forum.odt
(12.08 KiB) Pobrany 202 razy
Ostatnio zmieniony pt kwie 10, 2020 7:12 pm przez krolik, łącznie zmieniany 1 raz.
OpenOffice 4.1.7, Windows 10
Jan_J
Posty: 4578
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Zmiana źródła istniejącego obrazu

Post autor: Jan_J »

Podmiana źródłowego obrazu w obiekcie z poziomu makra API jest bardzo słabo udokumentowana. Mogę spróbować, ale bez gwarancji że coś wyjdzie.

Podmiana pliku z obrazem w zewnętrznym dokumencie odt powinna być z kolei łatwa. Toć to zwykły zip, a wszystko co ma być o obrazie png wpisane, tj. referencja w Manifest.xml oraz odwołania w kodzie dokumentu, zostało już zrobione. Wystarczy znać nazwę pliku z obrazem (powinna zostć taka samas), więc w *nieotwartym* dokumencie wystarczyłoby zapakować go do zip-a zamiast poprzedniego obrazu.

Istnieją makra generujące kod kreskowy za pomocą fontów. Na przykład projekt użytkownika @OooUser46, czyli https://forum.openoffice.org/pl/forum/v ... 629#p19629 – jest to nawet dodatek do pakietu.
Ale pewnie to stosujesz.

W wolnej chwili zajrzę jak się podmieniało źródło grafiki w obiekcie; o ile znajdę.
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Awatar użytkownika
Rafkus
Posty: 527
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Zmiana źródła istniejącego obrazu

Post autor: Rafkus »

zamień swoją linijkę kodu:

Kod: Zaznacz cały

 oDP = ThisComponent.DrawPage.add(oImagen_obj) 
następującymi:

Kod: Zaznacz cały

  Dim oDrawPage As Variant
  Dim oObj1 As Variant

  oDrawPage = ThisComponent.DrawPage  
  if oDrawPage.Count = 1 then 				'jeśli w dokumencie jest tylko przycisk
     oDrawPage.add(oImagen_obj)			'wstaw nowy obiekt
     oDrawPage.getByIndex(1).name = "kod"	'nazwij wstawiany obiekt
  else 								'jeśli w dokumencie jest więcej obiektów (w założeniu konkretnie 2)
     oObj1 = oDrawPage.getByIndex(1)		'przycisk ma indeks 0
     oObj1.GraphicURL = oImagen_obj.GraphicURL	'zamień obiekt
  end if	
Te dodatkowe linijki kodu będą działały gdy wstawiany obiekt będzie miał nadaną jakąś nazwę. Podczas prób u mnie wyświetlany kod zmieniał się dopiero po najechaniu na niego myszką.

W przypadku, gdyby w dokumencie było kilka obiektów graficznych, proponuje wykorzystać poniższy kod:

Kod: Zaznacz cały

  Dim oDrawPage As Variant
  Dim oObj1 As Variant
  oDrawPage = ThisComponent.DrawPage
	i=0
	do while oDrawPage.getByIndex(i).name <> "kod" 	'czy dany obiekt nosi nazwę "kod"
	  i=i+1 		'jeśli obiekt nie nazywa się "kod" przejdź do następnego elementu
	  if i= oDrawPage.Count  then			'jeśli sprawdzono wszystkie obiekty 
	    oDrawPage.add(oImagen_obj)		'wstaw nowy obiekt
	    oDrawPage.getByIndex(i).name = "kod"   'nazwij wstawiany obiekt  
	    exit sub		'zakończ makro
	  end if	  
	loop	
	oObj1 = oDrawPage.getByIndex(i)      'Znaleziony obiekt kod
	oObj1.GraphicURL = oImagen_obj.GraphicURL   'zamień obiekt  
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
ODPOWIEDZ