Staticコントロールの文字の折り返しがされない?

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: Staticコントロールの文字の折り返しがされない?

by Cursol » 2006年3月04日(土) 00:30

お答えいただきありがとうございます。
コントロールのスタイルを動的に変更したときは、InvalidateRect関数を使ってコントロールを再描写する必要があります。
なんとなくそんな気はしてたんですがやっぱり更新に関する関数がありましたか。どうもありがとうございました。

コード: 全て選択

Style = GetWindowLong(GetDlgItem(hMainWnd,Static1), GWL_STYLE) And &HFFFFFFFC
あと、このコードの&HFFFFFFFCの意味はGetWindowLongで得た32bit値との論理積を求めて最後をCにすることで現在設定されているSS_LEFT, SS_CENTER, SS_RIGHTがStyleに反映されないようにするためと考えればよいのでしょうか?

by 高信期 » 2006年3月03日(金) 23:27

亀レスですが、
>ボタン1を押した後に文字をEditに入れボタン2を押してもSS_CENTERが反映されません。
コントロールのスタイルを動的に変更したときは、InvalidateRect関数を使ってコントロールを再描写する必要があります。
また、SS_LEFT, SS_CENTER, SS_RIGHT は互いに排他です。
以上をまとめて,MainWnd_CommandButton1_Clickイベントを以下のように変更すると意図したとおりに動きます。

コード: 全て選択

Sub MainWnd_CommandButton1_Click()
  Dim Style As LONG_PTR
  Style = GetWindowLong(GetDlgItem(hMainWnd,Static1), GWL_STYLE) And &HFFFFFFFC
  SetWindowLong(GetDlgItem(hMainWnd,Static1), GWL_STYLE, Style Or SS_CENTER)
  InvalidateRect(GetDlgItem(hMainWnd,Static1), ByVal NULL, 1)
End Sub

残念ながらどうやっても無理そうですorz

by Cursol » 2006年3月03日(金) 01:52

色々試してみましたがどうやっても折り返されることがなさそうですのであきらめます。ただ、試行錯誤していて気づいたことを最後に記入しときます。

プロジェクトでWindowを一つつくりEditBoxをひとつとボタンを二つとStaticを1つ用意します。そこに以下のようにコードを記入します。

コード: 全て選択

Sub MainWnd_CommandButton1_Click()
  SetClassLong(GetDlgItem(hMainWnd,Static1),GCL_STYLE,SS_CENTER)
End Sub

Sub MainWnd_CommandButton2_Click()
  Dim str2 As String
  GetWindowTextStr(GetDlgItem(hMainWnd, EditBox1), str2)
  SetWindowText(GetDlgItem(hMainWnd,Static1),str2)
End Sub
ボタン1を押した後に文字をEditに入れボタン2を押してもSS_CENTERが反映されません。文字を先に入れボタン2→ボタン1でも無理でした。使い方が間違っているのかもしれませんが気になったので記入しておきます。

by Cursol » 2006年2月25日(土) 12:46

お応えいただきありがとうございます。
staticテキストを折り返しす際(折り返しなしのチェックが外れている場合)、折り返し表示に必要な分、縦幅を多めにとっておく必要がありますので、そちらも再確認してみてください。
とのことですが、十分に縦横とも幅が有るのですがやはり1行でしか表示されません。

by 山本 » 2006年2月25日(土) 09:18

staticテキストを折り返しす際(折り返しなしのチェックが外れている場合)、折り返し表示に必要な分、縦幅を多めにとっておく必要がありますので、そちらも再確認してみてください。

by Cursol » 2006年2月24日(金) 21:16

これは、RADツール上での表示が対応していないという認識でよろしいでしょうか?コンパイル&実行を行うと、スタイルの指定通り、折り返しのON/OFFがされていると思います。
うーん…ひょっとして自分の考えてる「折り返し」が間違っているのでしょうか?OSをXP(SP2)とMeどちらでやっても駄目だし最新版にしても駄目だったので…。当然リリースコンパイルもしてみたのですが駄目でした。とりあえず自分の考えてる折り返しは下の用に[]がStaticの両端だとした場合

コード: 全て選択

[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa]AAAAAAA
これのAAAAAAAの部分が

コード: 全て選択


[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa]
[AAAAAAA                                     ]
となることを期待しているのですが実際はAAAAAAAの部分が表示されない状態です。
因みにXPの方はPen4(クロック数忘れた、今手元にない物で)メモリも1Gあったはず。Meの方はCel(700MHz) メモリ320Mです。環境によっている訳では無いようなのでバグかと思ったんですが。

 

by 山本 » 2006年2月24日(金) 17:32

Cursol さんが書きました:Staticコントロールに文字列を表示させるとき「折り返しなし」を選択していないのに文字が右端まで行っても折り返されず表示されない部分が出来るんですがバグかと思いこちらに書き込みします。
ご報告ありがとうございます。

これは、RADツール上での表示が対応していないという認識でよろしいでしょうか?コンパイル&実行を行うと、スタイルの指定通り、折り返しのON/OFFがされていると思います。

RADツール側での折り返し表示に関しましては、次回のバージョンアップで修正しようと思います。

Staticコントロールの文字の折り返しがされない?

by Cursol » 2006年2月22日(水) 18:09

Staticコントロールに文字列を表示させるとき「折り返しなし」を選択していないのに文字が右端まで行っても折り返されず表示されない部分が出来るんですがバグかと思いこちらに書き込みします。

いろいろ試してみましたが(SetWindowLong SetClassLongで後からSS_LEFTにしても折り返しされず。また、SS_CENTERやSS_RIGHTでも折り返しは出来なかった)変化がないようなので…。一応MSDNの記述によると

SS_LEFT 単純な四角形を指定し、指定されたテキストをその中に左揃えで表示します。テキストは書式設定されてから表示されます。テキストの長さが 1 行の長さよりも長い場合は、自動的に次の行に折り返され、新しい行も左揃えで表示されます。

となっているので文字が折り返されるものと思っているんですが違うんでしょうか?

ページトップ