トップへ
<---   取り出しトピック   --->
 
. STEP Kに空白を入れたい&履歴を0にしたい kz 02/13木19:48#r238
. Re: STEP Kに空白を入れたい&履歴を0にしたい DJ TOYO 03/06金22:57#r242
. Re^2: STEP Kに空白を入れたい&履歴を0にしたい kz 03/08日23:33#r243
. Re^3: STEP Kに空白を入れたい&履歴を0にしたい DJxTOYO 03/11水22:39#r244
. Re^4: STEP Kに空白を入れたい&履歴を0にしたい kz 03/13金22:50#r245
. Re^5: STEP Kに空白を入れたい&履歴を0にしたい DJxTOYO 03/27金10:13#r247
. Re^6: STEP Kに空白を入れたい&履歴を0にしたい kz 04/19日20:35#r248
 

上の選択記事
. STEP Kに空白を入れたい&履歴を0にしたい
     kz 2020/02/13木19:48 #r238
編集&削除  
STEP Kを便利に使わせていただいております。
ただ、どうしても実現できないのが、スペースを入れることです。

どのカラムでも同じなのですが、
最後のスペースは半角・全角を問わず入らないようですが
これはUnicodeの仕様でしょうか?

私はある事情で全角スペースのみを入れているカラムがあります。
元祖のSTEPではこれができた(下方向へのコピーもできた)のですが、
STEP Kにしてから、外国の文字が入った音楽ファイルのタグ編集は
飛躍的に楽になりましたが、カラムの文字の最後にスペース、もしくは
スペースのみのカラムが許されないようです。

あと、もう一点、最近使ったフォルダを「0」にできないでしょうか?
私は全アプリについて、履歴を一切残さない設定をしていますが、
数少ない履歴がどうしても残ってしまうのが「STEP」です。

お返事、ご検討よろしくお願いします。
. Re: STEP Kに空白を入れたい&履歴を0にしたい
     DJ TOYO 2020/03/06金22:57 #r242
編集&削除  
> 最後のスペースは半角・全角を問わず入らないようですが

横から失礼します。
ソースを見ましたが
デバッガで動作させたのではなく、机上確認のみで申し訳ありませんが
STEP_Mの作者のソースからそうなっているようです。

右側のスペースをTrim関数で削除しているようです。
これを削除すると通常の人は右側スペースに気が付かず
同じ曲名なのに異なると行った症状に見舞われる可能性があります。
. Re^2: STEP Kに空白を入れたい&履歴を0にしたい
     kz 2020/03/08日23:33 #r243
編集&削除  
DJ TOYO様
リプライありがとうございます。本当に貴重な情報でした。

よく考えれば、ソースが公開されているのですから。自分で勝手ビルドすればいいだけでした。
とはいえ、Cは多少(コンソールの時代)やりましたが、C++は全くわかりませんし、VSなどの高度なIDEもほとんど使ったことがないので結構大変です。
こちらからの連絡が遅れましたのは、作者様と同じVS2017の環境を仮想PC上に作成して、いろいろいじってはビルドしていたためです。

履歴を残さない=iniファイルへのフォルダパスの書き込みを止めるのは、1行コメントアウトするだけで簡単に実現できました。ビルドもOK。
ただ書き込んでいただいた、スペースのTrimは、それっぽい箇所は確かにあるんですが、コメントで殺してみても現状のところは全然ダメです。
左右端の半角スペースもomitしているようなので、もしかすると全角→半角変換をどこかでやって、半角スペースとして消されているのかもとか、その辺を今調べてます。
せめてSQLでいうUpdateがトリガーとなって、どのルーチンが呼び出されているのかがわかるといいのですが、なにせデバッガの使い方が全くわからない(ExcelやAccessのVBAとは全然違う)ので、まだプログラムの全体の流れすらつかめていません。

>右側のスペースをTrim関数で削除しているようです。
>これを削除すると通常の人は右側スペースに気が付かず
>同じ曲名なのに異なると行った症状に見舞われる可能性があります。
なるほど。失礼な言い方かもしれませんが、フールプルーフ的なものなんですかね。

もう今日は9時間くらいソースとにらめっこしてますが、明日もう少し頑張ってみます。
. Re^3: STEP Kに空白を入れたい&履歴を0にしたい
     DJxTOYO 2020/03/11水22:39 #r244
編集&削除  
kz様

> ただ書き込んでいただいた、スペースのTrimは、それっぽい箇所は確かにあるんですが、コメントで殺してみても現状のところは全然ダメです。

机上確認で申し訳ありませんが

MySuperGrid.cpp
L6321
CMySuperGrid::ChangeSubItemText

と言う関数があります。
これはあちこちから呼ばれる共通の各カラムのセルの文字列設定関数だと推測します。
ここのL6375に
strText.TrimRight();
と言う右側スペース削除が見受けられます。

ここをコメントアウトしてもダメなら別の所でも行っているのでしょう
しかし仮にうまく行った場合、あちこちから呼ばれるますので全てに影響があります。
これら全て洗い出して動作確認を行い問題ない事を調査して下さい

製作者再度から見た場合、これら確認したうえでリリースしなければならず。
特に引き継いだソースの場合、簡単に出来るとは言えないのが本音だと思います。


> とはいえ、Cは多少(コンソールの時代)やりましたが、C++は全くわかりませんし、VSなどの高度なIDEもほとんど使ったことがないので結構大変です。

C++とフレームワークであるMFCが理解出来ないとソースを追うのは困難かと重られます。
ここで全てを教える事は出来ませんが要点だけ。

C++はオブジェクト指向言語なのでクラスがあります。
初心者に分かりやすく言うなら
C言語の構造体にメンバ変数だけでなくメンバ関数も定義出来るようになった。
とお考え下さい。
しかしそれだけではC++になりません。
クラスの継承と言うのが出来ます。
継承するだけで色々な挙動をしますのでよく実験して下さい。
ネットにサンプルソースがたくさんあります。

これを理解したた上でMFCがどのようなクラス構成なのか理解します。
そしてもう一つはOSであるWindowsの仕組みも理解が必要です。
Windowsはプロセス(exeファイル)切り替えはタイムスライスですが、
一つのプロセスはイベントドリブン型OSです。

Windowsから色んなメッセージが流れて来ます。
画面初期化、マウスクリックなど・・・
それらMFC内部で受信して自分の作った画面に飛んでくる(関数が呼ばれる)ことを理解して下さい。

後は頑張って下さいとしか言えません。

余談ですが、STEP_Kのdsfファイル対応しましたが、本体のソースは見たくないのが本音でしたw
. Re^4: STEP Kに空白を入れたい&履歴を0にしたい
     kz 2020/03/13金22:50 #r245
編集&削除  
DJxTOYO様
> MySuperGrid.cpp
> L6321
> CMySuperGrid::ChangeSubItemText
>
> と言う関数があります。
> これはあちこちから呼ばれる共通の各カラムのセルの文字列設定関数だと推測します。
> ここのL6375に
> strText.TrimRight();
> と言う右側スペース削除が見受けられます。

返信ありがとうございます。
結果から申し上げますと、おっしゃる通りでした。
実はここも候補の一つだったのですが、後回しにしておりました。

ファイル名をいじると拡張子が付いてしまう現象は公開バージョンでも同じでしたので
特に他に問題はなさそうです。

見落としたポイントとして、
・文字列の左側は全くノーケア、いくらでも半角・全角スペースが入るということ
・C++のTrim系関数は全角、半角関係なしにスペースを削除することを知らなかった
というところです。

たいていTrimというと、どの言語でも半角スペースだけで、全角はどうやって消すの?
みたいな質問が多いのですが、C++は違うのですね。

ただ、この行を殺すと半角スペースも全部許可になってしまうのが難点なので、
最初の文字と最後の文字が半角スペースの場合は、全角も含めてTrimをするように
書いておきました(TrimLeftも入れました)。

これですと、全角スペースが一番外で、その内側に半角スペースがあった場合は
半角スペースが残ってしまいますが、それに対応しようとすると、いろいろやり方は
思いつくのですが、C++の文法が全くわからないので、かなり厳しい道のりに
なりそうであきらめました。

本当にありがとうございました。
. Re^5: STEP Kに空白を入れたい&履歴を0にしたい
     DJxTOYO 2020/03/27金10:13 #r247
編集&削除  
kzさん

> ・C++のTrim系関数は全角、半角関係なしにスペースを削除することを知らなかった

これは少々勘違いされているようです。
VisualStudioでは標準ライブラリ(STD)とは別にマイクロソフトが用意したMFCライブラリがございます。
MFCは画面制御からファイル読み書き、通信制御まで様々なクラスが用意されております。
その中で文字列を扱うクラスは以下となります。

文字列クラス
STD:string
MFC:CString


STEP_KはMFCライブラリで作られており文字列はほぼCStringで作っています。
※stringでgrep検索すれば出て来るかも知れませんが。

よってTrim系関数は全てCStringで実装されているメソッド関数となります。

さらに補足するなら
CStringは#defineで定義されたマクロとなっており
実際の本当のクラスはCStringAとCStringWになります。
Unicodeの定義有無でUnicodeの場合はCStringWクラスが使用されるように作られてます。
STEP_KはkobarinさんがUnicode対応されたわけですからUnicode側の文字列クラス、関数が使用されます。

またCStringTと言うのがありこれは確かC++テンプレートクラスだったかと思います。
マイクロソフトはATLと言う言い方をしています。
atlstr.hをインクルードするだけで使用出来るそうです。
MFCは使ってない、もしくは使いたくない状況だけどCStringが使いたい場合に重宝すると思います。


最後にマルチバイト文字(S-JIS)とUnicodeの切り替えはプロジェクトのプロパティにございます。

マルチバイトではこのようなコーディングですが
CString strText = "ABC";
char cText[] = "ABC";
char val = 1;

Unicodeでは以下のようにコーディングしませんとエラーになります。
CString strText = L"ABC";
wchar_t cText[] = L"ABC";
char val = 1;//バイナリは関係ない

しかしマイクロソフトはどちらでもビルド出来るようにマクロを用意してくれてます。
CString strText = _T("ABC");
TCHAR cText[] = _T("ABC");


このようにコーディングする事でどちらでも大丈夫です。
基本は、文字列定義は_T("")で括る、CHARはTCHARにする。
その他C言語の標準文字列関数を使いたい場合、例えばstrcpyなど全てマクロ関数を使う※MSDNオンラインマニュアル参照
となります。
この辺りが参考になるかと・・・
http://www.02.246.ne.jp/~torutk/cxx/vc/misc_tchar.html
. Re^6: STEP Kに空白を入れたい&履歴を0にしたい
     kz 2020/04/19日20:35 #r248
編集&削除  
ご返事ありがとうございます。
私は全然C++のことがわかっていないということだけはわかりました。

これから少しずつ勉強していきます。

上へ






RAIBPL1.23-wakatiai.halfmoon.jp 2024/03/29金16:57