2011年12月10日土曜日

wordで年賀状づくり。


やりたいこと

wordで web上にある 写真フレームの素材を使って年賀状をつくりたい。


いままで

paint.netをつかって四苦八苦しながらやってました。


ここをさんこうにしたらできた。。。

http://cp.c-ij.com/ja/otasuke/nenga/howto/word2010.html#no3

2011年11月23日水曜日

google app engine さわってみる

こちらを参考に、して途中までやってみる。
http://techblog.ecstudio.jp/tech-tips/freewebsite-with-google-app-engine.html


くろうしたところ、
1.Google App Engineを登録する
のところで登録したアプリ名と違う名前のアプリを

3.Google App Engine Launcherを使ってファイルをアップロード
で作ったので、

アップロードできずに、Helloworldがでるまで時間がかかった。。。

2011年11月5日土曜日

c# splitcontainerの位置を保存

やりたいこと

ウィンドウのサイズや、スプリットしたウィンドウのそれぞれの位置関係を保存しておいて、再起動したときに同じサイズで表示させたい。

次のようなformを考えてます。
左ペインにツリービュー、右ペインにデータグリッドビューがはっつけてあります。

ウィンドウサイズ

ウィンドウサイズはこちらを参考にすると簡単にできた。

Windowsアプリケーションの位置やサイズを保存するには?[2.0のみ、C#、VB]



スプリットのサイズ
こっちがよくわからんかったんですが、できたのでメモしておきます。

1.プロパティウィンドウで、ApplicationSetings -> ProperyBindeing
-> ...ボタン -> アプリケーション設定にて、SplitterDistanceを設定する。
2.ツリービューとデータグリッドビューのプロパティで"Dock"をFillに設定。

これでOK

こちらのページを参考にしました。
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard18.htm

3.Form1_FormClosing()で
Properties.Settings.Default.Save()を実行。
苦労した点
当初ツリビューとデータグリッドビューのプロパティで、Dockではなく、Anchorを上下左右に設定してました。この設定でもウィンドウサイズやスプリッターの位置に応じてツリビューとデータグリッドビューのサイズが変わるのですが、SplitterDistanceを設定するとなんだかうまくうごかなくなります。





2011年11月3日木曜日

コピーするソフト

コピーするソフトができたので、vectorに投稿。 http://www.vector.co.jp/soft/winnt/util/se493659.html

アイコン memo

やりたいこと
いままでこちらを参考にアイコンづくりをささっとやってたのですが、
icofxが2になって15回しか保存できなくなった?ようなので別の方法がないかなぁ。

http://blogs.wankuma.com/mayuki/archive/2007/04/21/72325.aspx

あと、自分のPCの入れ替え時にword/excelだけにしたので、そこも別のほうほうがないかなぁと。


ためした結果
アイコンウィザード
http://www.vector.co.jp/soft/winnt/amuse/se430751.html



Excelでにたようなことができた。

やった。
参考ページのほぼまんまのアイコンです。すみません。。。



ポイント
Excelは"図として保存"がないので、どうすればよいか?


手順
1.Excelで参考ページと同じようにアイコンのもととなるものをオートシェイプで作成する。
2.Excel上でコピーする。
3.アイコンウィザードを立ち上げ、クリップボードから貼り付けボタンを押す。
4.あとはウィザードに従って次へをやってくとできあがり。

便利や!


2011年11月1日火曜日

clickonce 初回起動 D&D

ファイルをD&Dするとコピーが作成されるソフトを作ってみました。

で、clickonceでインストーラを作成し、インストールしてみたところ、
ドラッグアンドドロップができない。。。

アプリを再起動すると普通に動く。。。なんで?


開発環境をVisual Studio 2005から Visual Studio 2010に替えたら発生しなくなった。
う~ん。

2011年9月23日金曜日

maxmem windows7

やりたいこと
XPでは、boot.iniに、/maxmem=numberと書くことで、使用可能なメモリの最大値を制限できる。 とのことで、似たようなことをwindows7でやりたいなぁと
方法
1.msconfig.exeを起動。  スタートメニューの検索窓に、msconfigと打ち込んでenter
2.ブートタブで詳細オプションボタンを押す。
3.最大メモリの値を適当な値にする。 (4096 -> 1024に変更してみた。)
こんな感じになる。
コンパネ->システム
タスクマネージャ

2011年4月24日日曜日

2011年4月23日土曜日

サーバー 入門してみる。

やりたいこと
2008サーバーをためしにいれてみる。

やってみたこと
サーバー2008の評価版をダウンロード
http://technet.microsoft.com/ja-jp/evalcenter/cc137123

VMWarePlayerダウンロード
https://www.vmware.com/jp/tryvmware/?p=player&lp=1

そうしてVMWarePlayerにサーバー2008をインストール

※VirtualPCをいれたかったんだけど、うちのPCにはいらなかったので、VMになりました。

できた。

2011年4月21日木曜日

android2

日経ソフトウェア通りにすすめたところ、
エミュレータの起動までできた。




うれしい。

簡単にまとめ

JDK



eclipse



android sdk



eclipseにandroid plug in インストール


エミュレータ作成

詳細は日経ソフトウェア2月号をみてください。

2011年4月20日水曜日

android

にちょっと興味がでてきました。

iPhoneもちょっときょうみがあるのですが、そっちはmacが必要だし、アプリの登録等で金もかかりそうなので。

ということで、まずは、日経ソフトウェアの2011/2月号を引っ張り出してきました。

えーっと。まずはJDKとEclipseがいるわけだな。

とりあえずやってみます。

2011年4月9日土曜日

フリープログラマの華麗な最終回

中條達雄さんの日経ソフトウェア誌の連載"フリープログラマの華麗な生活"がついに終わってしまいました。

華麗というよりは、食べ物とかの記事が多かったような気がしてますが、
そんな記事に惹かれていつも最初に呼んでました。

ついつい、ほかの記事はよまずに放置して、また買って、ここだけ読んでみたいな。

終わるのはさみしいです。

最初に買った日経ソフトウェア2003年12月号を掘り起こしてみたところ、
ご飯の炊き方について熱く語ってました。

連載が再開することを待ち望んでいます。

2011年3月13日日曜日

C#でアイコン取得2 (マイコンピュータ)

やりたいこと
前回の方法で、ファイルやフォルダのパスがわかれば、そのアイコンを取得することが可能になりました。

ただ、この方法だとマイコンピュータのアイコンがとれない。。。

で、いろいろ調べたら方法がわかったのでまとめておきます。

こんなのをつくる。
OKボタンを押すとマイコンピュータのアイコンが表示される。

ポイント

前回との差異を中心に説明すると。

①SHGetFileInfo()の第一引数がポインタのものを準備する。またフラグにpidl用のフラグを追加。
※ここがよくわからず、ずっとpidlをstringに変換して渡そうなどとして壁にぶつかっていた。。。

②SHGetSpecialFolderLocation()にて、mycomputerのpidlを取得。
※pidlはパスの代わりになるようなものという理解でよさそう。

③ウィンドウハンドルはFormがもっており、this.handleで取り出すことができる。
これをapiにわたせばよい。(GetActiveWindowなどでとろうとしてちょっと苦労した。。。)

④pidlは解放する必要がある。

コード
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace GetMyComputerIcon
{
    public partial class Form1 : Form
    {
        private int nIndex = 0;

        public Form1()
        {
            InitializeComponent();
        }
        //===================
        // ボタン押下時のイベントハンドラ
        //===================
        private void button1_Click(object sender, EventArgs e)
        {

            IntPtr hImgSmall; //the handle to the system image list
            IntPtr hImgLarge; //the handle to the system image list
            SHFILEINFO shinfo = new SHFILEINFO();

            listView1.SmallImageList = imageList1;
            listView1.LargeImageList = imageList1;

            FolderID startLocation = FolderID.MyComputer;
            IntPtr pidlRoot = IntPtr.Zero;

            Win32.SHGetSpecialFolderLocation(this.Handle, (int)startLocation, out pidlRoot);

            //Use this to get the small Icon
            hImgSmall = Win32.SHGetFileInfo(pidlRoot, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), Win32.SHGFI_ICON | Win32.SHGFI_SMALLICON | Win32.SHGFI_PIDL);

            //Use this to get the large Icon
            //hImgLarge = Win32.SHGetFileInfo(pidlRoot, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), Win32.SHGFI_ICON | Win32.SHGFI_LARGEICON | Win32.SHGFI_PIDL);

            //The icon is returned in the hIcon member of the shinfo struct
            System.Drawing.Icon myIcon = System.Drawing.Icon.FromHandle(shinfo.hIcon);

            imageList1.Images.Add(myIcon);

            //Add file name and icon to listview
            listView1.Items.Add("my computer", nIndex++);

            // pidlを解放する。 
            if (pidlRoot != IntPtr.Zero)
            {
                Win32.IMalloc malloc;
                int nret = Win32.SHGetMalloc(out malloc);
                malloc.Free(pidlRoot);
            }
        }
    }

    [StructLayout(LayoutKind.Sequential)]
    public struct SHFILEINFO
    {
        public IntPtr hIcon;
        public IntPtr iIcon;
        public uint dwAttributes;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
        public string szDisplayName;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
        public string szTypeName;
    };

    //===================
    // win 32 api dll import
    //===================
    class Win32
    {
        // SHGetFileInfo用のフラグ。 
        public const uint SHGFI_ICON = 0x100;
        public const uint SHGFI_LARGEICON = 0x0; // 'Large icon
        public const uint SHGFI_SMALLICON = 0x1; // 'Small icon
        public const uint SHGFI_PIDL = 0x8; // pidl

        //[DllImport("shell32.dll")]   こちらはパスからアイコン取得するときに必要。今回は不要。
        //public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);

        [DllImport("shell32.dll")] // これが重要。
        public static extern IntPtr SHGetFileInfo(IntPtr pIDL, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);


        [DllImport("Shell32.DLL")] // こちらで特殊フォルダのpidlを取得する。
        public static extern int SHGetSpecialFolderLocation(IntPtr hwndOwner, int nFolder, out IntPtr ppidl);

        // pidlのfree用 
        [InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
           Guid("00000002-0000-0000-C000-000000000046")]
        public interface IMalloc
        {
            [PreserveSig]
            IntPtr Alloc([In] int cb);
            [PreserveSig]
            IntPtr Realloc([In] IntPtr pv, [In] int cb);
            [PreserveSig]
            void Free([In] IntPtr pv);
            [PreserveSig]
            int GetSize([In] IntPtr pv);
            [PreserveSig]
            int DidAlloc(IntPtr pv);
            [PreserveSig]
            void HeapMinimize();
        }
        [DllImport("Shell32.DLL")]
        public static extern int SHGetMalloc(out IMalloc ppMalloc);
    }

    //===================
    // SHGetSpecialFolderLocationに使用するFolderのIDの定義。
    // ここをかえるといろいろな特殊フォルダpidlが取得できる。
    //===================
    public enum FolderID
    {
        Desktop = 0x0000,
        Printers = 0x0004,
        MyDocuments = 0x0005,
        Favorites = 0x0006,
        Recent = 0x0008,
        SendTo = 0x0009,
        StartMenu = 0x000b,
        MyComputer = 0x0011,
        NetworkNeighborhood = 0x0012,
        Templates = 0x0015,
        MyPictures = 0x0027,
        NetAndDialUpConnections = 0x0031,
    }
}

参考
・Visual C# を使用して [フォルダの参照] コモン ダイアログ ボックスをラップするマネージ コンポーネントを実装する方法
http://support.microsoft.com/kb/306285/ja

・シェルネームスペースとPIDL
http://yokohama.cool.ne.jp/chokuto/urawaza/com/shell3.html

2011年3月8日火曜日

C#でアイコン取得(フォルダ)

やりたいこと

フォルダやドライブのアイコンを取得したいと思い、
ググってたところ、こちらのページにたどりつきました。


記載の通りに書いたところアイコンがとれました。

こんなのができる。


コード


参考のページの通りに書いてみたもの。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace GetIconSample
{
    public partial class Form1 : Form
    {
        private int nIndex = 0;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            IntPtr hImgSmall; //the handle to the system image list
            IntPtr hImgLarge; //the handle to the system image list
            string fName; //  'the file name to get icon from
            SHFILEINFO shinfo = new SHFILEINFO();

            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.InitialDirectory = "c:\\temp\\";
            openFileDialog1.Filter = "All files (*.*)|*.*";
            openFileDialog1.FilterIndex = 2;
            openFileDialog1.RestoreDirectory = true;

            listView1.SmallImageList = imageList1;
            listView1.LargeImageList = imageList1;

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                fName = openFileDialog1.FileName;
                //Use this to get the small Icon
                hImgSmall = Win32.SHGetFileInfo(fName, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), Win32.SHGFI_ICON | Win32.SHGFI_SMALLICON);

                //Use this to get the large Icon
                //hImgLarge = Win32.SHGetFileInfo(fName, 0, 
                //    ref shinfo, (uint)Marshal.SizeOf(shinfo), 
                //    Win32.SHGFI_ICON | Win32.SHGFI_LARGEICON);

                //The icon is returned in the hIcon member of the shinfo struct
                System.Drawing.Icon myIcon = System.Drawing.Icon.FromHandle(shinfo.hIcon);

                imageList1.Images.Add(myIcon);

                //Add file name and icon to listview
                listView1.Items.Add(fName, nIndex++);
            }
        }
    }

    [StructLayout(LayoutKind.Sequential)]
    public struct SHFILEINFO
    {
        public IntPtr hIcon;
        public IntPtr iIcon;
        public uint dwAttributes;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
        public string szDisplayName;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
        public string szTypeName;
    };

    class Win32
    {
        public const uint SHGFI_ICON = 0x100;
        public const uint SHGFI_LARGEICON = 0x0; // 'Large icon
        public const uint SHGFI_SMALLICON = 0x1; // 'Small icon

        [DllImport("shell32.dll")]
        public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);
    }
}

2011年3月5日土曜日

office 2010 段落番号が振りなおされて あわわわとなるとき

■あわわわとなったとき
(こうしたいのに)
1.1 ABC
1.2 CDE
あいうえお
1.3 FGH
1.4 GHI

(こうなった)

1.1 ABC
1.2 CDE
あいうえお
1.1 FGH
1.2 GHI


あわわわわ。

■こうする
ホーム -> 段落 -> アウトライン -> 新しいアウトラインの定義
で"リストを開始するレベルを指定する"をOFFにする。



■参考にしたページ
Word 2007/2010: 段落番号を振り直すことができない
http://www.office-qa.com/Word/wd220.htm

2011年2月24日木曜日

PDFのぺーじのサイズを変更する2

ようやく着手しました。C#で作り始めました。
UIはこんな感じ。

コンボボックスに用紙サイズを登録する部分で
サイズをひとつづつ追加してたらとてもパフォーマンスが悪くなってしまいました。

以下のような変更ではやくなったので、メモ。

コントロールへの項目の追加にはaddrange()を使用すべきという
記述がこちらにあったので、まずはそれを実施。
http://msdn.microsoft.com/ja-jp/magazine/ee221437.aspx

for文のなかで配列を作って、最後にコンボボックスにaddrange()で代入。という風に作り変えてみたがあまり変化がなかった。

その後、コレクションを配列に変換できることがわかり、そのように手直ししたところ
パフォーマンス的な問題はなくなった。for文もなくなりとてもすっきり。

■変更前のソース
PaperSize pkSize;
for (int i = 0; i < printDoc.PrinterSettings.PaperSizes.Count; i++ )
{
    pkSize = printDoc.PrinterSettings.PaperSizes[i];
    comboPaperSize.Items.Add(pkSize);
}
■変更後のソース
PaperSize[] pkSizearr = new PaperSize[printDoc.PrinterSettings.PaperSizes.Count];
printDoc.PrinterSettings.PaperSizes.CopyTo(pkSizearr, 0);
comboPaperSize.Items.AddRange(pkSizearr);
★ついでにコレクションから配列に変換する方法もわかったので、メモ
コレクション.CopyTo(配列, 0)

0は何番目からコピーするかをしていする。

2011年2月22日火曜日

perlでCSVファイルの読み込み。2

------------------
■概要
------------------
前回のものをText::CSV_Xを用いて書き換える。

Text::CSV_Xを使用すると、「セルの中にコンマが含まれてる場合」や「引用符""で囲まれている場合」
などのめんどくさいケースを考慮する必要がなくなる。

らしい。
------------------
■コード(全部)
------------------
use strict;
use warnings;
use Text::CSV_XS;
#-------------------------

open(FH," < team.csv");
my @list = ;
close(FH);

my $csv = new Text::CSV_XS({binary => 1}); 
my %hash;
foreach my $line( @list )
{
 $csv->parse($line) || die "parse失敗: " . $csv->error_input() . "\n";
 my ( $key, @items ) = $csv->fields();
 $hash{$key} = [@items];
} 

printarrayhash( %hash );


#-------------------------
sub printarrayhash
{
 my %hash = @_;
 foreach my $key( keys( %hash ) ) 
 {
     print "キー値 : $key\n";
     my @val = @{$hash{$key}};
     
     my $length = @val;
     print "length =$length\n";
     print "val = @val\n";
  }
}

fontを選択する

fontを選択するときに、フォントのファイル名ではなく、font名?でやりたいなぁと考えている。

InstalledFontCollectionを使うと、フォント名の一蘭がとれそうだけど、
それとフォントファイル名まではとれなそうだなぁ。

2011年2月19日土曜日

perlでCSVファイルの読み込み。

概要
CSVファイルを読み込み、それを配列のハッシュにする方法について簡単にまとめます。

よみこむファイル
住所録や名簿てきなものではなく、キーによっては要素数が変わるようなものを想定してます。

ベアーズ,山田、鈴木、佐藤、
タイガース、田中、中田、中島、トム
ライオンズ、マイケル、ジャクソン、トーマス、ディック

住所録的なものはこちらで、
http://codezine.jp/article/detail/904?p=1

コード
my %hash;
foreach my $line( @list )
{
 chomp $line; 
 my ( $key, @items ) = split( /,/, $line );
 $hash{$key} = [@items];
}

ポイント(苦労した点)は9行目と10行目です。

まずは、my ( $key, @items ) = split( /,/, $line );です。
このような書き方で、CSVの最初の文字列を$keyという変数に、
2つ目の文字列以降を配列に代入することができます。

次に、$hash{$key} = [@items];です。
これでハッシュにキーとアイテム(配列)を追加しています。
※とりあえず動いてます。

コード(全部)
use strict;
use warnings;
#-------------------------

open(FH,"  < team.csv");
my @list = ;
close(FH);


my %hash;
foreach my $line( @list )
{
 chomp $line; 
 my ( $key, @items ) = split( /,/, $line );
 $hash{$key} = [@items];
} 

printhash( %hash );


#-------------------------
sub printhash
{
 my %hash = @_;
 foreach my $key( keys( %hash ) ) 
 {
     print "キー値 : $key\n";
     my @val = @{$hash{$key}};
     
     my $length = @val;
     print "length =$length\n";
     print "val = @val\n";
  }
}


出力結果
キー値 : タイガース
length =4
val = 田中 中田 中島 トム
キー値 : ベアーズ
length =3
val = 山田 鈴木 佐藤
キー値 : ライオンズ
length =4
val = マイケル ジャクソン トーマス ディック

perl 備忘録

■連想配列
・初期化
%Hash = () ;
・値を代入
$Hash{key} = value;
■その他
・コメント
#コメントです。
・変数
$abc   # $をつけると変数となる。

・文字列
シングルクォートとダブルクォートがあり、どっちでもよいみたい。

・おまじない。
以下の文字列をファイルの先頭につけると、実行時に警告がでるようになる。やったほうがよい。
use strict;
use warnings;