「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:2343
現在:1


フォントカラー不具合/フォーム位置不具合

ページOpenOffice.org FAQの登録ページ
投稿者S-Osaka
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2010-09-25 09:35:02 (土)
OSvista
依存するページ
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

いつもお世話になります。
不具合出現の条件はわかりません。
Option VBASupport 1でシート関数を使いループ計算、と言うルーチンの計算後同じルーチン内に別のグラフ描画ルーチン実行を指定しています。
グラフ描画ルーチンの方はcalcのグラフではなくセル上にループ専用フォントキャラでバーグラフを作画します。
その際、バーの行ごとに色分けするようにしています。
ところが
Dsp_s.getCellByPosition(11, 11+n).CharColor = RGB(255, 0, 0)
の命令に対して青色を描画します。
計算ルーチンに連続せず単独で実行すれば、ちゃんと赤色を描画します。
赤青が逆転するようで緑は命令どおりになります
ちなみに、
Dsp_s.getCellByPosition(11, 11+n).CharColor ="&Hff0000"
なら問題なく処理されます。
以前フォームコントロールのボタンの編集モードが解除できない件をご相談しましたが、 calcではフォームの位置を固定できないようです。
毎回微妙にずれています。
「位置とサイズ」で固定していますが毎回少しずつずれて、1mm以上動いているようです。
たぶん不具合と思われますのでご報告しておきます。


「フォーム位置不具合」はfaq/6/24

M.Kamataki (2010-09-25 10:49:31 (土))

2つのご質問がありますが、ほとんど関連性がないので「フォーム位置不具合」については別の質問としました。たぶん、当ページでやり取りすると、わけがわからなくなります。「フォーム位置不具合」関連のコメントはfaq/6/24へお願いします。

Excel VBAとの互換性

M.Kamataki (2010-09-25 11:03:12 (土))

「RGB(255, 0, 0)」が青、「RGB(0, 255, 0)」が緑、「RGB(0, 0, 255)」が赤になるという理解でよいでしょうか。さらに「単独で実行すれば」正常ということですね。

Excel VBAとの互換性の問題なので、一つひとつOpenOffice.orgの不具合・要望データベースであるIssueTrackerへ報告しないと直らないと思います。

VBA モードと普通の API を混ぜてはいけません

はにゃ? (2010-09-25 12:24:01 (土))

単独で実行すると正常の理由は分かりませんが、基本的に VBA モードと普通の API 関数を混ぜて利用してはいけません。

Option VBASupport 1 を指定すると Option Compatible が自動的に指定されます。このときランタイム関数は互換モードで動作します。

RGB 関数は OOo Basic の場合、RGB(red, gree, blue) とすると返り値は red * 2 ^ 16 + green + 2 ^ 8 + blue です。VBA の場合、red + green * 2 ^ 8 + blue * 2 ^ 16 らしいです。VBASupport を利用すると計算が後者のものに変わります。

VBA 用の API ではこの色コードを内部で OOo API で利用されているものに変換しなおしてから OOo の API で色を設定しています。

お世話になります

S-Osaka (2010-09-25 14:19:44 (土))

Option VBASupport 1
で作ったプロシージャからooo basicで書いたプロシージャを呼び出しています。(モジュールは別です)
OOo basicのプロシージャ単独では正常です。
はにゃさんの説明でそのあたりかな・・と言う気がしましたが、
10進数でRGB指定したものに赤・青逆転があり、16進数指定は問題ないので不具合かと思いました。

Re: 単独で実行すると問題ない

はにゃ? (2010-09-25 15:07:33 (土))

単独で実行するときには、VBASupport 1 を指定していないモジュールから直接実行しているのであれば、正しく動作しています。

VBASupport 1 は実行されたルーチンや関数のあるモジュールで指定されていると、その後全てのモジュールおよびライブラリで有効になります。

以下の例を実行すると、最初の module2 の関数は 16711680 を返します。module 3 で VBASupport が有効にされて 255 が表示されます。最後にもう一度 module2 の関数を呼び出すと、255 が表示されます。

' module 1
Sub Main
  msgbox RGBMod2 ' 16711680 
  msgbox RGBMod3 ' 255
  msgbox RGBMod2 ' 255 (再度 module 2 
End Sub


' module 2
Function RGBMod2
  RGBMod2 = RGB(255, 0, 0)
End Function


' module 3
Option VBASupport 1
Function RGBMod3
  RGBMod3 = RGB(255, 0, 0)
End Function


VBASupport を有効にする場合には、その関連ライブラリも全て有効な状態で動作するように (Option VBASupport 1 を各モジュールで指定する) すべきです。

RGB関数はVBAモードでも、OOoが解釈する色はOOoのまま

K.Tsunoda (2010-09-25 19:36:24 (土))

VBA互換モードにより、RGB関数が[VBA仕様]で色値(&Hbbggrr)を算出しても、
OOo自体(セル、ダイアログ、グラフ等)が解釈する色値はOOo仕様のまま
(&Hrrggbb)であるという事からくる齟齬ですね。

下記に整理しました。
http://blog.livedoor.jp/addinbox/archives/51223736.html

CompatibilityMode について

はにゃ? (2010-09-25 23:13:31 (土))

あまり利用するべきではないと思いますが、書いておきます。

以下の例では一時 Compatible モードを無効にしています。セル A1 は青色の背景に、無効にした状態の A2 は赤色の背景色が設定されます。

Option VBASupport 1

Sub Main
 oSheet = ThisComponent.getSheets().getByIndex(0)
 oSheet.getCellByPosition(0, 0).CellBackColor = RGB(255, 0, 0)
 CompatibilityMode(False)
 oSheet.getCellByPosition(0, 1).CellBackColor = RGB(255, 0, 0)
 CompatibilityMode(True)
End Sub


Option VBASupport 1 を指定すると、ほとんどの文字列操作関数が互換モードで動作、ReDim やファイル操作関数などの振る舞い、ルーチンのスコープが変更されます。
何度も書きますが、Option VBASupport 1 を指定するときには VBA 互換 API と互換モードでテストしたランタイム関数のみを利用すべきです。

無題

S-Osaka (2010-09-26 10:23:02 (日))

ループ処理が極端に遅いのでいろいろ試しすぎました。
→VBASupport を有効にする場合には、その関連ライブラリも全て有効な状態で動作するように (Option VBASupport 1 を各モジュールで指定する) すべきです。
→何度も書きますが、Option VBASupport 1 を指定するときには VBA 互換 API と互換モードでテストしたランタイム関数のみを利用すべきです。
と言うことなので、
Option VBASupport 1はやめて、処理プロセスが増えそうですが、とりあえず
ShtFnc = CreateUnoService("com.sun.star.sheet.FunctionAccess")
を使います。
今回も大変勉強になりました。
皆さん本当にありがとう。

追)

S-Osaka (2010-09-26 10:31:58 (日))

CompatibilityMode(False)
CompatibilityMode(True)
は、こういうのがあるかどうか知りくて、探していたコードなのでなんか得した気分です。

完了にします

M.Kamataki (2010-09-27 00:25:55 (月))

VBAとOpenOffice.org Basicの色指定に関する仕様の違いが原因のようですので、完了にします。

K.Tsunodaさんのまとめページも紹介しておきます。

RGBのHex並びが逆
http://blog.livedoor.jp/addinbox/archives/51223736.html

お名前:
題名: