ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 00:31

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 8 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2006年2月22日(水) 18:09 
Staticコントロールに文字列を表示させるとき「折り返しなし」を選択していないのに文字が右端まで行っても折り返されず表示されない部分が出来るんですがバグかと思いこちらに書き込みします。

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

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

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


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2006年2月24日(金) 17:32 
オフライン
Site Admin

登録日時: 2005年5月30日(月) 15:08
記事: 535
引用:
Staticコントロールに文字列を表示させるとき「折り返しなし」を選択していないのに文字が右端まで行っても折り返されず表示されない部分が出来るんですがバグかと思いこちらに書き込みします。
ご報告ありがとうございます。

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

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


通報する
ページトップ
 記事の件名:
投稿記事Posted: 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です。環境によっている訳では無いようなのでバグかと思ったんですが。

 


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2006年2月25日(土) 09:18 
オフライン
Site Admin

登録日時: 2005年5月30日(月) 15:08
記事: 535
staticテキストを折り返しす際(折り返しなしのチェックが外れている場合)、折り返し表示に必要な分、縦幅を多めにとっておく必要がありますので、そちらも再確認してみてください。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年2月25日(土) 12:46 
お応えいただきありがとうございます。
引用:
staticテキストを折り返しす際(折り返しなしのチェックが外れている場合)、折り返し表示に必要な分、縦幅を多めにとっておく必要がありますので、そちらも再確認してみてください。
とのことですが、十分に縦横とも幅が有るのですがやはり1行でしか表示されません。


通報する
ページトップ
   
投稿記事Posted: 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でも無理でした。使い方が間違っているのかもしれませんが気になったので記入しておきます。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 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


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 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に反映されないようにするためと考えればよいのでしょうか?


通報する
ページトップ
   
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 8 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: Ahrefs [Bot] & ゲスト[7人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean