Visual Studio extensions 作成でひっかかった

ひさしぶりに Visual Studio 機能拡張を作成した。

ひっかかった点1:

Product Architecture を指定で、Vs2022用で x86 指定したら エラーになった。

重大な変更を参照していない場合でも、拡張機能は Any CPU または x64 プラットフォームでコンパイルする必要があります。 x86 プラットフォームは、Visual Studio 2022 の 64 ビット プロセスと互換性がありません。

Visual Studio の拡張機能を更新する - Visual Studio (Windows) | Microsoft Learn

※ arm64は分からん。


ひっかかった点2:

メニューを追加してアイコンつけようとしたが、うまくいかなかった。

アイコンサイズが 16x16 である必要があった。

learn.microsoft.com

Visual Studio 機能拡張:Search within Solution

Search Within Solution

  • Visual Studio の機能拡張
  • 開いているドキュメントタブの右クリックメニューに「Search within Solution」を追加しています。
  • 「Search within Solution」を選択すると、ソリューショ内の対応したドキュメントが選択されます。フォルダ内にある場合はフォルダが展開されます。

usage

タブの右クリックメニューから実行

ドキュメント上のどこかで、右クリックメニューから実行


Privacy Policy

PrivacyPolicy


Download

marketplace.visualstudio.com

DataGridTemplateColumn でのテンプレート

メモ:

Winui & CommunityToolkit 環境の Datagrid でヘッダーに何かしらコントロールを置きたかった。

↓ ココにあるように、DataGridTemplateColumn.HeaderStyle に対して、DataTemplate でも ControlTemplate 動作した。

github.com

DataTemplate の場合、右側のマージンを消す方法がわからなかった。

ControlTemplate にしたら 右側のマージンは無かった。

InDesign の無限オーバーライド

InDesign の無限オーバーライド

先日、こんなツイートを見た。

そういえば昔、似たような現象に遭遇した。

↓ オーバーライドしている(コピペじゃないよ!


結論(たぶん)

  • InDesignがプリセットで用意してくれているA4の幅は、210mmより すこーーーーしだけ小さい
  • 大抵は問題ないけど「ページをまたぐ」「ページサイズと同じフレーム」関連の作業時は注意
  • マスターとかオーバーライドで変な挙動になるのは分からん

主な不具合と、それが発生しやすい不具合の2つ

2つの不具合(仕様?)が発生しているので、分かりにくかった気がする。

  1. マスターやオーバーライド関連で、アイテムが変な挙動をする
  2. ドキュメントサイズのフレームを作成しノドピッタリに配置すると1の挙動が発生しやすい

1. マスターやオーバーライド関連で、アイテムが変な挙動をする

主要因だけど、こっちは分かりません。

マスターやオーバーライド関連でアイテムがおかしな挙動をするのは色々あるみたい。

dtp-bbs.com


2. ドキュメントサイズのフレームを作成しノドピッタリに配置すると1の挙動が発生しやすい

こちらは何となく分かる気がする。

ツイ主の ぬまっこ さんが ほぼ答えを言っています。

「ドキュメントより0.1mm小さいフレームだと1回で消える。ページをまたいだのオブジェクトは残り続ける事あるけど、ドキュサイズでも残り続けるの…?」

オブジェクトではなく、ドキュメントサイズの方に要因があるのだと思います。


なぜか

Sugarさんが検証しています。

  • A4のドキュメント
  • 座標(0,0)で、幅210mmのフレーム

上記だと フレームはページをまたぎません。でも またいだ時と同じような挙動をする。

ということは、どっちかが210mm じゃないんです。


たぶん:A4のドキュメント ← ★ こいつが210mm ピッタリじゃない

スクリプトなど使ってドキュメントサイズを取得すると「209.999999999936 」みたいな数値が取得できます。

実際はこんな感じなんだと思います。

  • A4のドキュメント(幅は209.999999999936 mm)
  • 座標(0,0)で、幅210mmのフレーム

ミクロンより更に小さい値になると思うけど、またいでいます。

参考:

p-makes-p.hatenablog.com


InDesignが作ってくれる A4のドキュメント 幅はピッタリ210ではないかも

InDesign の準備しているプリセットのA4で作成すると、A4(209.999…)になってしまいます。

とか

とか。

※ 元々 ミリ/ポイント変換等で本当にピッタリにはならないけど、今回のは「またぐ/またがない」に影響してしまってる感じ。

※ 昔から(Csの時代から?)ずっと変わってない気がする。

※ 「bigsur/InDesign2022 環境の方に試してもらったら直っていたのですが…」ってのは、新規ドキュメントの作り方が違ったんだと予想してる。


回避するには、ユーザーがドキュメントサイズを直接入力する

ただ、プリセットのA4(209.999…)で作成した後、手入力で 210mm と入力しても駄目かも。

InDesignに「サイズ変更してないよね?」って判定されちゃうのか、209.999...のままになる気がする。

(この辺はあんまり試してない)


結論(たぶん)

  • InDesignがプリセットで用意してくれているA4の幅は、210mmより すこーーーーしだけ小さい
  • 大抵は問題ないけど「ページをまたぐ」「ページサイズと同じフレーム」関連の作業時は注意
  • マスターとかオーバーライドで変な挙動になるのは分からん

予想だけど・・・

オーバーライドの際、所属ページが左右でおかしくなっている…ようなイメージ

(数年前なので忘れた)


おまけ:

チェックしたスクリプト

main();

function main()
{
    var openedDocCount = app.documents.length;
    if(openedDocCount < 1)
    {
        alert("ドキュメントを開いてから実行してください", "終了");
        return;
    }

    try
    {
        // 開かれているかチェック
        var activeDoc = app.activeDocument;

        // 処理本体
        var msg = this.CheckActiveSpread(activeDoc);
        alert(msg);
    }
    catch(e)
    {
        alert(" エラーっぽい \r\n" + e);
    }
}
function CheckActiveSpread(activeDoc)
{
    try
    {
        var results = [];

        // アクティブなスプレッドが対象
        var targetSpread = app.activeWindow.activeSpread;

        // Page情報(複数)
        var resultTxt = this.MeasurePageSize(targetSpread, activeDoc);
        results.push(resultTxt);

        // Page情報からタイトル作成
        var pageTxt = "Pages: ";
        for(var i = 0; i < targetSpread.pages.length; i++)
        {
            pageTxt = pageTxt + targetSpread.pages[i].name + ","
        }

        // タイトル
        results.unshift(pageTxt);

        // --- --- ---
        return results.join("\r\n");
    }
    catch(e)
    {
        return (" エラーっぽい \r\n" + e);
    }
}

function MeasurePageSize(mSpread)
{
    try
    {
        var ASOBI = Math.pow(0.1, 12);

        var msg = "";

        var pgNum = mSpread.pages.length;
        for(var i = 0; i < pgNum; i++)
        {
            var pg = mSpread.pages[i];

            var W = pg.bounds[3] - pg.bounds[1];
            var H = pg.bounds[2] - pg.bounds[0];

            var msgPage =
                " Page: [" + pg.name + "]\r\n" +
                " - Page:W [" + W + "]\r\n" +
                " - Page:H [" + H + "]\r\n\r\n";

            // A4判定
            // if(210 - W > ASOBI || 297 - H > ASOBI)
            // {
            //     msgPage = "A4 か???\r\n" + msgPage;
            // }
            // else
            // {
            //     msgPage = "A4 だ!\r\n" + msgPage;
            // }

            msg = msg + msgPage;
        }

        return msg;
    }
    catch(e)
    {
        //alert(" エラーっぽい \r\n" + e);
    }

}

まる

アプリ上のリンクから、ローカルのHTMLを開くようにしたい

アプリ上のリンクから、ローカルのHTMLを開くようにしたい

  • HTMLファイルはアプリ内部にもたせる
  • macOS アプリ
  • ObjectiveC / Xcode11

こんな感じのリンク

  • 開く処理は、通常のボタンクリックで開くかたち
  • 見た目はテキストボックスっぽく変更( Interface Builder で少しいじった)
  • リンクっぽい見た目はNSMutableAttributedString でNSLinkAttributeName をつかった
- (void)viewDidLoad {
    [super viewDidLoad];

//  見た目用にNSMutableAttributedStringのNSLinkAttributeName を使う
    NSMutableAttributedString *attrStr = [[NSMutableAttributedString new] initWithString:@"リンクをブラウザで開く"];
    [attrStr addAttribute:NSLinkAttributeName value:@"Dummy" range:NSMakeRange(0,[attrStr length])];

    [self.openLinkButton setAttributedTitle:attrStr];
}

- (IBAction)pushLinkButton:(id)sender {

// 実際に開く処理はボタン押下で実施
    NSBundle *bundle = [NSBundle mainBundle];
    NSString *path = [bundle pathForResource:@"Docs/index" ofType:@"html"];
    NSURL *localHTMLUrl = [[NSURL alloc] initFileURLWithPath:path isDirectory:false];

    [NSWorkspace.sharedWorkspace openURL:localHTMLUrl];
}

●最初はNSMutableAttributedString のみで実現したかった

やり方がわからなかった。

NSURLで file://... を設定すると、ファイルのある場所が開かれてしまった…。(ブラウザで開いてほしい)

見た目のために NSMutableAttributedString 処理は残した

●ローカルファイルを階層を維持した状態で含めたい

含めたいフォルダ/ファイルをプロジェクトに追加する際、Create groups ではなく、Create folder references を選択して追加する

参考:

stackoverflow.com

Microsoft Store アプリの証明書の更新

メモ:

ひさしぶりに Microsoft Store アプリを更新した。

証明書の有効期限が切れていた。

Visual Studio マニフェスト デザイナーで アプリの紐づけし直すだけ・・・だと思っていたが、うまくいかなかった。

アプリケーション パッケージに署名する証明書が見つかりません 的なメッセージが出てしまう。

  1. アプリの紐づけし直し
  2. アプリケーションパッケージを別途追加 してみる
  3. 自己署名証明書 を作成してみる

などなどを何度かしていたら、有効な証明書が作成されて選択できるようになった。

何が影響したのか不明・・・。

f:id:kawaishi2:20220405194949p:plainf:id:kawaishi2:20220405194944p:plainf:id:kawaishi2:20220405194947p:plain