スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

F#入門Windowsアプリケーション ラベル

今回から色々フォームに部品をのっけていきたいと思います。
まずは部品をのっけるフォームを定義しておきます。
 
open System
open System.Windows.Forms
open System.Drawing
 
let mainForm = new Form()
mainForm.Show() |> ignore
 
ここまでをF#Interactiveに送ると空のフォームが表示されます。
 
ラベルをのっけてみます。
 
>let myLabel = new Label() //インスタンス作成
mainForm.Controls.Add(myLabel)//のっける
;;
 
この状態では、表示文字列がない為、何も表示されませんので、Textプロパティを設定します。
 
>myLabel.Text <- "hello world";;
 
これで表示がなされました。
 
次に位置を変更してみます。
 
>myLabel.Location <- new Point(100,100);;
 
使われているフォントを調べてみます。
 
> let cur_font = myLabel.Font;;
 
val cur_font : Font =
  [Font: Name=MS UI Gothic, Size=9, Units=3, GdiCharSet=128, GdiVerticalFont=False]
  
サイズだけ2倍にしたフォントを作成してみます。
 
> let new_font = new Font(cur_font.Name, (2.0f)*cur_font.Size);;
 
val new_font : Font =
  [Font: Name=MS UI Gothic, Size=18, Units=3, GdiCharSet=1, GdiVerticalFont=False]
  
このフォントに変更します。
 
>myLabel.Font <- new_font;;
val it : unit = ()
 
ただこれでは、ラベルの幅不足でhello woまでしか表示されないので、全部表示するようにします。
その前に変更前のラベルの情報を表示してみます。
 
> myLabel;;
val it : Label =
  System.Windows.Forms.Label, Text: hello world
    {AccessibilityObject = ControlAccessibleObject: Owner = System.Windows.Forms.Label, Text: hello world;
     AccessibleDefaultActionDescription = null;
     AccessibleDescription = null;
     AccessibleName = null;
     AccessibleRole = Default;
     AllowDrop = false;
     Anchor = Top, Left;
     AutoEllipsis = false;
     AutoScrollOffset = {X=0,Y=0};
     AutoSize = false;
     BackColor = Color [Control];
     BackgroundImage = null;
     BackgroundImageLayout = Tile;
     BindingContext = seq [];
     BorderStyle = None;
     Bottom = 123;
     Bounds = {X=100,Y=100,Width=100,Height=23};
     CanFocus = true;
     CanSelect = false;
     Capture = false;
     CausesValidation = true;
     ClientRectangle = {X=0,Y=0,Width=100,Height=23};
     ClientSize = {Width=100, Height=23};
     CompanyName = "Microsoft Corporation";
     Container = null;
     ContainsFocus = false;
     ContextMenu = null;
     ContextMenuStrip = null;
     Controls = seq [];
     Created = true;
     Cursor = [Cursor: Default];
     DataBindings = seq [];
     DisplayRectangle = {X=0,Y=0,Width=100,Height=23};
     Disposing = false;
     Dock = None;
     Enabled = true;
     FlatStyle = Standard;
     Focused = false;
     Font = [Font: Name=MS UI Gothic, Size=18, Units=3, GdiCharSet=1, GdiVerticalFont=False];
     ForeColor = Color [ControlText];
     Handle = 266184n;
     HasChildren = false;
     Height = 23;
     Image = null;
     ImageAlign = MiddleCenter;
     ImageIndex = -1;
     ImageKey = "";
     ImageList = null;
     ImeMode = Disable;
     InvokeRequired = false;
     IsAccessible = false;
     IsDisposed = false;
     IsHandleCreated = true;
     IsMirrored = false;
     LayoutEngine = System.Windows.Forms.Layout.DefaultLayout;
     Left = 100;
     Location = {X=100,Y=100};
     Margin = {Left=3,Top=0,Right=3,Bottom=0};
     MaximumSize = {Width=0, Height=0};
     MinimumSize = {Width=0, Height=0};
     Name = "";
     Padding = {Left=0,Top=0,Right=0,Bottom=0};
     Parent = System.Windows.Forms.Form, Text: New Title;
     PreferredHeight = 30;
     PreferredSize = {Width=119, Height=30};
     PreferredWidth = 119;
     ProductName = "MicrosoftR .NET Framework";
     ProductVersion = "4.0.30128.1";
     RecreatingHandle = false;
     Region = null;
     Right = 200;
     RightToLeft = No;
     Site = null;
     Size = {Width=100, Height=23};
     TabIndex = 0;
     TabStop = false;
     Tag = null;
     Text = "hello world";
     TextAlign = TopLeft;
     Top = 100;
     TopLevelControl = System.Windows.Forms.Form, Text: New Title;
     UseCompatibleTextRendering = true;
     UseMnemonic = true;
     UseWaitCursor = false;
     Visible = true;
     Width = 100;
     WindowTarget = System.Windows.Forms.Control+ControlNativeWindow;}
 
サイズを自動変更させるにはAutoSizeプロパティを利用します。
 
>myLabel.AutoSize <- true;;
 
これで、hello worldと全部表示できました。
 
もう一度プロパティをみてみます。
 
> myLabel;;
val it : Label =
  System.Windows.Forms.Label, Text: hello world
    {前略
     AutoSize = true;
     略
     Bottom = 130;
     Bounds = {X=100,Y=100,Width=119,Height=30};
     略
     ClientRectangle = {X=0,Y=0,Width=119,Height=30};
     ClientSize = {Width=119, Height=30};
     略
     DisplayRectangle = {X=0,Y=0,Width=119,Height=30};
     略
     Font = [Font: Name=MS UI Gothic, Size=18, Units=3, GdiCharSet=1, GdiVerticalFont=False];
     略
     Height = 30;
     略
     PreferredSize = {Width=119, Height=30};
     PreferredWidth = 119;
     略
     Size = {Width=119, Height=30};
     略
     Width = 119;
     略
 

Bottom,Width,Heightなどが変化していることが分かります。
 
> mainForm.Controls.Clear();;
val it : unit = ()
 
とすることで、部品がクリアされます。
 
システムにインストールされているフォントの一覧を所得して、それとフォントのサイズからラベルの配列を作る関数を定義してみます。
 
> let makeLabelsArray (size:float32) =
    (new System.Drawing.Text.InstalledFontCollection()).Families
    |> Array.filter(fun ff -> ff.IsStyleAvailable(FontStyle.Regular))
    |> Array.map(fun x -> x.Name)
    |> Array.map(fun fName -> new Font(fName,size))
    |> Array.map(fun font -> let tl =new Label()
                             tl.Font <- font
                             tl.Text <- font.Name
                             tl.AutoSize <- true
                             tl) ;;
 
val makeLabelsArray : float32 -> Label []
 
次にフォームとフォントのサイズを引数として、フォームにフォント名をテキストとしたラベルを次々に張り付けていく関数を定義してみます。
 
> let putLables (form:Form) (fontSize:float32) =
    Array.fold (fun curYpos (lab:Label) -> lab.Location <- new Point (10,curYpos)
                                           form.Controls.Add(lab)
                                           curYpos + lab.Height + 5)
              0
              (makeLabelsArray fontSize)  ;;
 
val putLables : Form -> float32 -> int
 
では
mainForm.AutoScroll <- true
としておいてから
mainFormとフォントサイズ16.0fに対してこの関数を適用してみます。
 
> putLables mainForm 16.0f;;
val it : int = 5752
 
実行例 
 
801-1.jpg  
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

T GYOUTEN

Author:T GYOUTEN
F#と英単語とフリーソフトと読書に興味があります。
ホームページでフリーソフトも公開しています。どぞ御贔屓に。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
フリーエリア
フリーエリア
blogram投票ボタン
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。