くだすれDelphi(超初心者用)その51at TECH
くだすれDelphi(超初心者用)その51 - 暇つぶし2ch451:デフォルトの名無しさん
10/03/18 17:12:30
Delphi で書かれたアプリがあるんですが
PC 環境を入れ替えたら一部(かつメイン)のファイル出力が出来なくなってしまいました
それ自体は '06-07 ぐらいで開発が止まっています
自分の環境は XP で、最近クリーンインストールしたばかりです
ファイアウォールでの出力禁止はしていません

症状は
「ファイル」メニューから「別名でファイル保存」を選択
ファイル出力のダイアログは出ず、メニューの「別名で…」が選択不能の状態になる
エラーメッセージやイベントログへの吐き出しはありません

替わりになるようなソフトが他にないため、バージョンを遡って試したり
関連情報をググったりしていますが正直お手上げ状態です…
スレ違いかと思いますが、少しでもヒントいただければ助かります

452:デフォルトの名無しさん
10/03/18 18:20:56
>>450
本筋とは外れるけど、フィルタリングみたいなことするならComboBox不向きじゃね?
TEditとTListBoxの方がいい気が

453:デフォルトの名無しさん
10/03/18 21:14:18
>>451
MLで聞いた方が早い気がする。
作者が参加している確率高いだろうし。

454:デフォルトの名無しさん
10/03/18 23:07:43
>451
互換モードでWin2kなり何なり指定してみては?あとは作者に聞くしかなかろう。
Delphiだからどうこういう問題じゃないと思うが。

455:451
10/03/19 00:07:39
>>453-454
レスありがとうございます

そうですね、作者とやりとりできれば最善なんでしょうが
東欧の人だし自分も英語に自信がなく…
ソースは公開されているので、もうちょっとやれるとこまでやってみます

456:デフォルトの名無しさん
10/03/19 07:20:27
ソース公開されてるならリンク書いておけば見てもいいと思う奴もいるだろうに

457:デフォルトの名無しさん
10/03/19 08:58:12
オープンソースなら自分で直せよ

458:デフォルトの名無しさん
10/03/19 10:18:39
>>451
その手の問題って大抵互換モードで解決できるがダメか?
そもそもオープンソースでファイル出力に問題あるとわかっているなら
そこ書き換えるだけじゃないか?

459:デフォルトの名無しさん
10/03/19 22:52:13
あーそうですね

460:451
10/03/19 23:20:30
件のソフトは初代氏と後継氏の二人?がメインで
最新版ソースには初代氏オリジナル部分は含まれず「必要だからここでDLしてくれ」的指示が入っていました
しかし指定サイトは消滅済み
結局、初代氏サイトの旧版ソース(丸ごと)に行き着きました
そこから必要部分をきれいに引き抜けるかどうかは、いまのところ不明
ちなみに初代氏exeのファイル出力はOKでした…。使い勝手も初代と最新で一長一短

とまあ、オープンでも時間が経っていると色々あるんだなぁと思った次第です
以上報告でした。以後名無しに戻ります

461:デフォルトの名無しさん
10/03/20 00:40:52
なんか突っこむ気も起きない
帰ってくれるようだから何も言わないけれども

462:デフォルトの名無しさん
10/03/20 11:05:05
コンポーネントのあるイベントに引数を追加したい時って
コンポーネントを継承した新たなコンポーネントを作らないといけない?
それとも、イベントをオーバーライドして普通のプロシージャーみたいな
使い方って出来る?

463:デフォルトの名無しさん
10/03/20 11:35:48
そのイベントってそのクラス内から呼ばれるんだろ?
だったら持たせたい引数をクラスのメンバーにしてやればいいんじゃないの?

464:デフォルトの名無しさん
10/03/20 11:52:46
>使い方って出来る?
無理です。

OnClick(Sender)に引数追加しようとしたら
呼び出し側もOnClick(Sender, data)とやらないといけないから
どうしてもコンポ側にも手を入れないといけないので。

465:デフォルトの名無しさん
10/03/20 16:36:32
Sender に無理やりポインタ渡すとかの話かと思った。

466:デフォルトの名無しさん
10/03/20 19:25:03
>>462
呼び出し元コンポがそのイベントを呼ぶためにClickやDoClickなどのメソッドを定義していて、
なおかつそれがvirtual、dynamic、messageで宣言されているならオーバーライドできると言えなくもない

実際にClickやDblClickなどのメソッドは仮想メソッドだから、
事実上OnClickやOnDblClickなどの呼び出しはオーバーライドできるし、
それがなくてもウィンドウメッセージがイベントの起点となっているような場合は
そのメッセージハンドラをオーバーライドしてやれば同じことができる

467:デフォルトの名無しさん
10/03/21 11:59:23
>>462
コンポーネントのイベントハンドラから、引数を追加したイベントを発行するってのは?

れい
type TNotifyEventEx = procedure (Sender, Option : TObject) of object;

...

property OnNotifyEx : TNotifyEventEx;

...

procedure THoge.HogeNotifyEvent(Sender : TObject);
var
uge : TUge;
begin
if Assigned(Self.OnNotifyEx) then begin
uge := TUge.Create;
Self.OnNotifyEx(Sender, uge);
uge.Free;
end;
end;



468:462
10/03/21 12:36:02
皆さん、レス有り難うございます。
自分にはレベルの高い話の気がしないでもないですが、
出来る前提で色々試そうとも思います。


469:デフォルトの名無しさん
10/03/21 17:18:14
具体的に何したいんよ
それによっては引数なんか追加しなくてもいい気がする

470:デフォルトの名無しさん
10/03/21 18:15:39
普通に Sender だけで何が不足なのかな?
イベントハンドラ内で Sender を通してそのオブジェクトが特定できれば、public な
プロパティーやらフィールドにアクセスするのは簡単だろうに・・

471:デフォルトの名無しさん
10/03/21 22:16:51
あなたには聞いてませんからw

472:462
10/03/21 23:10:05
ListViewのSubItemの編集をしたくてググったり
MLの過去ログ見たりしたんだけど、編集するセルの
ところにEditを出す方法しか見あたらないんで、
Draw系のイベントにstringの引数を追加したら
簡単に出来ないかなと思って。

473:デフォルトの名無しさん
10/03/21 23:11:13
あなたに回答してませんから

474:デフォルトの名無しさん
10/03/21 23:53:45
あなたに答えてませんから

475:デフォルトの名無しさん
10/03/22 08:02:06
DelphiのGUIアプリから、ApacheHTTPサーバにアクセスし、様々な情報を
やりとりしたいです。

使えそうなコンポーネントありますでしょうか?
(Delphi2010 Pro版を使っています)

476:デフォルトの名無しさん
10/03/22 08:43:55
>>476
Indy?

477:デフォルトの名無しさん
10/03/22 08:44:42
安価違い。>>475だた

478:デフォルトの名無しさん
10/03/22 09:02:02
>>476

説明不足ですみません。
私が探しているのは、Indy(など)の上位層になり、例えばフォームにあるTStringGridのデータとか
TEdit.TextなどをまとめてXMLエンコードしIndyに渡すようなコンポを探しています。
フォームとIndyの中間に位置するようなコンポです。

479:デフォルトの名無しさん
10/03/22 12:25:26
冗談だよね

480:デフォルトの名無しさん
10/03/22 13:20:03
いったい何がしたいんだw

481:433
10/03/22 16:24:22
>>462
>ListViewのSubItemの編集をしたくてググったり
おまえは俺か。
URLリンク(cc.embarcadero.com)
ここのは、キャプションの編集を横取りするタイプ。
BCCの文法が混じっていてコンパイル通らないという
サンプルとしていいんだかわるいんだか。


482:デフォルトの名無しさん
10/03/22 17:26:51
>>478
渡すだけとかそんなの自分でコーディングすればええやん
10行もあれば書けるでしょ…

483:402
10/03/22 21:43:34
すみません。サポート窓口に聞くまでもなく自己解決しました。
結局、店頭で購入した場合は「指名ユーザ使用権」であり、
このライセンスなら、自分の所有する複数のPCにインストールOKでした。

定義されていたのは、下記の3カ所。

License_ja.rtfの第2条
「(略)使用証書で他の種類の権利の取得が特定されていない限り、
お客様の取得した権利は指名ユーザー使用権です。(略)」

License_ja.rtfの第2条第3項
「(略)指名ユーザーが本製品の使用を許可された唯一の個人である場合、
適正な数のコンピュータに本製品をインストールすることができます。(略)」

Database Software and Developer Tools Licensing
URLリンク(www.embarcadero.com)
「指名ユーザー ライセンスは、特定の個人に使用権が与えられるライセンスです。
ソフトウェアは複数のコンピューターにインストールして使用することができますが、
同時に 使用できるのは1つのみです。指名ユーザーライセンスを、
複数のユーザーで共有したり譲渡することはできません。
現在、多くのCodeGear開発ツール が、このライセンス形態を採用しています。」

これで安心してノートPCにもXPmodeにもインストールできます。

みなさんコメントありがとうございました。
では名無しに戻ります。

484:デフォルトの名無しさん
10/03/22 22:32:58


485:デフォルトの名無しさん
10/03/25 14:15:19
TPrinterを使用して印刷しているのですがこの場合印刷データを
ファイルに保存することは出来ないのでしょうか?

TPrinterはBeginDocの時にヌルクリアしたDocInfoを使って
StartDocを呼び出しているのでlpszOutputを指定する方法が無く困っています。
なにかいい案がありましたらお願いします。

486:デフォルトの名無しさん
10/03/25 15:19:48
dekimasu

487:デフォルトの名無しさん
10/03/26 01:19:42
TPrinterから派生したクラスを作って、そのインスタンスをSetPrinterで設定するとか。

488:485
10/03/26 08:42:22
>>487
それも考えたのですがTPrinterを使う他のコンポーネントが存在しており
TPrinterは1プログラム1インスタンスで動作するので躊躇していました
(印刷処理以外でもプリンタの状態確認にTPrinter()を使ってます)

派生したクラスを同時に使っても問題無いのでしょうか?

489:デフォルトの名無しさん
10/03/26 15:05:04
質問です。Delphi2010にて、"Generics.Collections"をusesして
ジェネリクスなオブジェクトのリストのコレクションのメンバにアクセスしたとき、
コンパイルは正しくとおって実行してもエラーなく動作するんですが、左上のエラーが消えません。
例えば TObjectList<TForm> だと、

FL:=TObjectList<TForm>.Create;
FL.Add(Form1);
FL[0].Caption:='abc';

というようにメンバにアクセスすると、コンパイルは正しく通るのですが左上のエラーの欄で

!'TObejectList<TForm>'hは'Caption'という名前のメンバを含んでいません。

というようなエラーが消えません。
どういう理由があってこのような状況になってるか、どなたかご教示いただけないでしょうか?

490:デフォルトの名無しさん
10/03/26 20:15:43
コンパイラは最新だがIDEは最新じゃない、と思っておいた方がいい

491:デフォルトの名無しさん
10/03/27 00:07:38
行き詰っているので相談させてください
環境はDeklphi2007です。
delphiでDBの操作ソフトの修正に関わっているのですが、コンパイルすると
SrtingtoTdatabaseは互換性がありません
とエラーがでてとまります。
変数(A,B,C,D)
という行があり、Aは同じソースファイルの中でString宣言、BはTdatabese
宣言、C,Dは不明でA,Bの宣言を書き換えても駄目でした。
元々はDelphi6で前任者が作成したものを小生がXpで使用する為に2007で
コンパイルしています。6の環境は残っておらず、前任者とも連絡が取れません。
C、Dの宣言を探す以外になにかよい解決は無いでしょうか?

492:デフォルトの名無しさん
10/03/27 01:06:58
>488
普通に印刷するときは通常の(デフォルトの)TPrinterのインスタンスを、ファイルに出力するときは
それ用のTPrinterからの派生クラスのインスタンスを、それぞれとっかえひっかえでSetPrinterすれば
いいんじゃないの?

>489
普通にコンパイルするときとエラーインサイトやコードナビゲーションで使用するコンパイラは
違うものなのでそういう現象がおきる。

>491
プログラミングとかDelphiとかそういうものを理解してる?わからないならわからないって上司に
相談したほうがいいと思うが。できなければソフト屋に外注に出すとか。さもなきゃここに
晒すしかない。すくなくとも
> 変数(A,B,C,D)
> という行があり、
とか
> C、Dの宣言を探す以外になにかよい解決は無いでしょうか?
とか意味不明にもほどがある。

493:デフォルトの名無しさん
10/03/27 03:37:29
うるせーばか

494:デフォルトの名無しさん
10/03/27 11:06:13
>>492
上司に相談して解決するなら最初からここにくる訳が無い。
1の書き込みを鵜呑みにしてここに書いた俺が馬鹿だったって事だな。
金輪際来ませんのでご安心ください。。


495:デフォルトの名無しさん
10/03/27 16:15:22
よかった。もう来ないんだって。

誰だって気違いの相手はしたくないもんね。

496:デフォルトの名無しさん
10/03/27 21:12:04
マジレスすると、おそらく関数のパラメータ並びが変更されているのでそれを直す必要がある。
必要な情報は関数のパラメータそれぞれの型とその意味、現在指定されている(エラーになっている)
パラメータそれぞれの型とその意味(内容)。だからCとDの型とその内容は必須な情報。でも
Ctrl+クリックで探せないか?

497:デフォルトの名無しさん
10/03/28 01:06:08
>>489 明示的にTFormにキャストすれば?

498:デフォルトの名無しさん
10/03/28 03:32:37
それやったらジェネリクスの意味ないだろ
馬鹿か?

499:デフォルトの名無しさん
10/03/28 07:55:03
と、馬鹿が申しております。

500:デフォルトの名無しさん
10/03/28 13:17:30
ジェネリクスとTObjectListの区別がつかない

501:デフォルトの名無しさん
10/03/28 14:17:23
>>499
それ本気で言ってるとしたら頭疑うわ
ジェネリクスって何だか分かってる?

502:489
10/03/28 22:37:31
>>497
はじめはTListやTObjectListに入れてキャストしたのをpropertyにしてたんですけど、
ダウンキャストをしたくないのと、getter setterを一々書くのが面倒なんでジェネリクスを使ってるんですよ。

とりあえず割り切ってエラーは見ないように割り切る他ないんでしょうかね。

503:デフォルトの名無しさん
10/03/28 22:39:27
いろいろ書き直してたら日本語おかしいまま書きこんでしまった・・・
最後の行は脳内修正して読んでください・・・

504:デフォルトの名無しさん
10/03/28 23:11:19
まぁエラーインサイトとかは他でも誤動作するし、気にしすぎないほうがいいと思う。

505:デフォルトの名無しさん
10/03/29 02:38:37
エラーインサイトは実装当時から切ってるな
役に立った試しがない

506:デフォルトの名無しさん
10/03/29 21:54:11
お世話になります。
TMemoで行や桁があふれたときだけスクロールバーを出すにはどうしたら良いのでしょうか。
ScrollBarsをBothに設定すると常に出っぱなしで見苦しいのです。
他のコントロールだと自動で出したり引っ込めたりするのに、なぜ?

507:デフォルトの名無しさん
10/03/29 22:02:16
んー自分でOnChangeイベントあたりで制御するしかないんじゃないかなぁ。何でそうなっているかって?
WindowsのEDITコントロールがそう作られているからだな。

508:デフォルトの名無しさん
10/03/29 22:57:00
>>506
SynEditなんてどう?などと適当なことを言ってみる。

509:デフォルトの名無しさん
10/03/30 01:27:19
>>507
そうなんですか…。
Delphiの構文さえ理解してないレベルの自分には難しそうです。
>>508
SynEdit調べましたが、ちょっと用途が違うような。
ただシンプルにテキストが入出力できれば良いので。

ふと思い立って、TRichEditならどうかと。
これはMemoと違い、あふれたときだけスクロールバーが出るじゃありませんか!
これでヨシ!と思ったんですが、今度はポップアップメニューが出ません orz

510:デフォルトの名無しさん
10/03/30 02:43:38
PopupMenuを設定すれば?

511:デフォルトの名無しさん
10/03/30 09:01:56
>>510
やってみます。スクロールバーを出すよりは難しくなさそうなので。

512:デフォルトの名無しさん
10/03/30 22:44:01
Delphi6 Personalを使用中
ヘルプが変です
キーワード検索すれば出てくるけど、VCLリファレンス目次のルーチン一覧(カテゴリ別)には
見当たらない項目がいっぱいあるんですけど、これは仕様でしょうか
FileAge関数とか、カテゴリMBCSユーティリティの全部とか

MBCSユーティリティは重要視されてないのかな

AnsiCompareFileName関数の説明もよく分かりません
・ AnsiCompareFileName 関数は,大文字と小文字を区別しないで S1 と S2 を比較します。比較演算は,現在のロケールに基づいて行われます。
AnsiCompareText('AA','aa') { 0 を返す }
AnsiCompareFileName('AA','aa') { 0 ではなく 1 を返す }
大文字と小文字を区別しないはずなのに…?

AnsiLastChar関数は、文字列処理ルーチン(ヌルで終わる)に入れるべきかと

513:デフォルトの名無しさん
10/03/31 10:58:29
最小化した時も処理を続けていて、その時のデータに応じて
タスクバーに表示される文字を変更したいんだけど
どうしたらいいですか?


514:デフォルトの名無しさん
10/03/31 11:11:06
フォームのCaptionかApplication.Titleを変更する。

515:デフォルトの名無しさん
10/03/31 13:31:53
>>512
そんな10年も前の終わったバージョンに対して文句言うとか頭おかしいんじゃないでしょうか

516:デフォルトの名無しさん
10/03/31 18:19:57
デザイン時にTPageControlを右クリックすると
「ページ新規作成」や「ページの削除」といった
メニューが表示され、追加・削除が出来ますが
これはどのように実現したらよいのでしょうか?

「子・孫を持つパネル」のような自作コンポーネントを
作成していて、その子・孫パネルを追加するのに、
メニューでやりたいなと思った次第です。

517:デフォルトの名無しさん
10/03/31 19:32:09
目で見たものを真似できない人は何も作れないと思う

518:デフォルトの名無しさん
10/03/31 21:33:33
つまり>>517は自分は何も作れないと宣言したかったんですね、わかります
わかりますがそういうのはチラシの裏にでも書いて下さい

519:デフォルトの名無しさん
10/04/01 02:43:49
>>518
わざわざ自己紹介ご苦労さん

520:デフォルトの名無しさん
10/04/01 03:42:49
顔真っ赤だよ?どうしたの?

521:デフォルトの名無しさん
10/04/01 06:50:33
と、顔を真っ赤にして申しております。


522:デフォルトの名無しさん
10/04/01 09:14:51
>>520
つ 鏡

523:デフォルトの名無しさん
10/04/01 12:10:51
ListViewのことで質問です。
セルをクリックした時に何行目何列のセルかを知りたくて
下記のサンプルを見つけました。
Item部のCaption文字列の上とSubItemの部分をクリックした時はいいのですが、
Item部の余白部分をクリックすると何も取得出来ません。
Item部のどこをクリックしても取得出来るようにするにはどうしたらいいですか?

var
wCtrl : TListView;
wStruct: TLVHitTestInfo;

begin
 wCtrl:= (Sender as TListView);
FillChar(wStruct, SizeOf(TLVHitTestInfo), 0);

// マウスカーソルの座標を取得
GetCursorPos(wStruct.pt);
// スクリーン座標からクライアント座標に変換
wStruct.pt:= wCtrl.ScreenToClient(wStruct.pt);

//repeat
wStruct.pt.X:=10;
// 選択された項目の判定
if wCtrl.Perform(LVM_SUBITEMHITTEST, 0, LPARAM(@wStruct)) >= 0 then
with wStruct do
begin
Item:=(Sender as TListView).Items.Item[iItem];
end;


524:520
10/04/01 13:33:09
>>521-522
>>518に向けて書いたんだけど、ひょっとして思い当たる節でもあったの?

525:デフォルトの名無しさん
10/04/01 13:36:00
結局>516が分からない馬鹿しかいないんですね
レベル低いですねもう来ません

526:デフォルトの名無しさん
10/04/01 17:07:10
逆ギレ乙です

527:デフォルトの名無しさん
10/04/02 01:27:09
なんつーか、回答する気も起こらないつまらん質問ってあるよね。
PopupMenu の使い方を知らんのか、動的にコンポつくる方法が知らんのか
こっちが勝手に想像するのも面倒くさいような質問とか。

528:デフォルトの名無しさん
10/04/02 04:22:45
527 はこのスレの意義を理解できないのか?

>Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、
>もしくは質問者自身何が何だか分からない質問を
>勇気を持って書き込むスレッドです。

回答する気にならないのなら、黙っていなさい。無理にコメントを書くことは無い。

529:デフォルトの名無しさん
10/04/02 07:08:59
>516が知りたいのはToolsAPI(OTA)の話だと思う。ListViewとかTreeViewのように
デザイナ上でそのコンポーネントのカスタム項目を使えるようにしたい、とか。Inside Delphi
あたりに載ってたような。

530:デフォルトの名無しさん
10/04/02 08:01:18
>>528
拍手ーー

531:516
10/04/02 09:01:08
>>529
仰るとおりです。デザイン時の話です。
ToolsAPIというのは初めて聞きました。ググって見た感じでは
まさにそれっぽいのですが、ちょっと私には敷居が高そうだなあ…。

とりあえず子パネルのSetParentと親パネルのValidateInsertを
overrideして他のコンポーネントを(に)置けないようにして
デザイナ上で貼り付けさせるとかしてお茶を濁すことにします。

532:デフォルトの名無しさん
10/04/02 10:35:21
Source\ToolsAPIとSource\Win32\Property Editorsを参考に(場所はDelphiの
バージョンで違ってくるかも)。

533:デフォルトの名無しさん
10/04/02 13:02:05
もう少しちゃんと説明して下さい

534:516
10/04/02 13:33:33
IDが出ないのをいいことに質問者のフリをして煽る人がいるみたいですね。
まあ句読点とかの文体が違うので、皆さんも分かってるとは思いますけど…。

535:デフォルトの名無しさん
10/04/02 14:41:00
13:33:33

536:デフォルトの名無しさん
10/04/02 15:15:12
>>534
そんなのどうでもいいし
帰れ

537:523
10/04/02 23:12:57
また、Listviewで質問なんだけどmousedownとかうpを
受け付けてもらえないんだけど、なんか設定とかある?

538:デフォルトの名無しさん
10/04/04 20:53:06
エクセルオートシェイプの矢印をTImageやTFormに描き、
bmpで保存したいのですが、それは加納ですか?
というか、滑らかで綺麗な矢印がTImageに描ければ
いいだけなんですけど・・・
誰かソース書いてもらえません?

539:デフォルトの名無しさん
10/04/04 21:04:59
化膿です

540:デフォルトの名無しさん
10/04/04 22:53:11
適当なグラフィックツールで2倍とか4倍に描いたものを縮小してBMP形式で保存して
取り込めばいいんじゃね?

541:デフォルトの名無しさん
10/04/06 11:56:00
オートシェイプをPrtScnキーで取り込んでMSペイントで保存してTImageでStretchする。

542:デフォルトの名無しさん
10/04/06 23:29:32
フォームの上にパネルを1個置き、パネルのボーダースタイルをbsSingleにします。
そのパネルの上にボタンを置きます。ボタンのアンカープロパティを[akRight,akBottom]に設定します。
で、フォームの右クリックメニューから「エディタで表示」して、「フォームを表示」で元に戻します。
これを繰り返すとボタンの位置がどんどんずれていきます。マジで堪りません。
プロジェクトを開くたびにどんどんおかしくなっていきます。


543:デフォルトの名無しさん
10/04/06 23:35:15
パネル以外のコンテナでもページコントロールのBorderWidthを設定したり、
スクロールボックスでも発生します。アンカーはデフォルト以外に設定すると
位置がずれていたり、サイズが変わったりします。
ポトペタが売りの製品で基本の部分でバグるなんてあまりにもひどすぎます。
クソツールのようです。



544:デフォルトの名無しさん
10/04/07 01:53:38
そういうのはオッチャスレでやってください
ここは質問スレです

545:デフォルトの名無しさん
10/04/07 02:00:21
一応手持ちの歴代Delphi(6~2010)で試してみたけど発生しないなw
捏造もオッチャスレの受け持ちなんでやっぱりあっちでどうぞ
バージョン書いてない時点で結構怪しかったけど
もしくはパッチあててないだけという情けない落ち?

546:デフォルトの名無しさん
10/04/07 09:52:03
>>545
まじで言ってます?2010でも2005でも発生しますよ。それ以前は試してません。
「エディタで表示」ってのはフォームのDFMをテキスト形式でみるメニューのことです。
で、「フォームを表示」で元に戻すと、1回やるたびに4ピクセル分ずれます。
4ピクセルってボーダーの幅(GetSystemMetrics(SM_CXBOARDER)で、その分、クライアント領域が
小さくなるのにAnchorsなどの配置処理で考慮に入れてないんじゃ?と思ってます。
ソース追っかけ中。

547:デフォルトの名無しさん
10/04/07 10:01:07
環境によって変わるのでわ?

自分もPanelの中に貼り付けたコンポをalclientにしているのに高さが追随してくれない現象を体験しているので。
この現象が出るのはXPでW2Kは問題なしだが、自分以外のXPマシンでどうだかは知らない。
(Del7pro/W2Kでコンパイル/パッチは全部当ててるはず)

548:デフォルトの名無しさん
10/04/07 10:07:20
自分の試した環境ではWinXPモードとWin7とWin2000で発生します。
ここではボタンを配置しましたが、Anchorsプロパティをデフォルトの[akLeft,akTop]以外に
設定したコントロールすべての位置、サイズがどんどんずれていきます。
コンテナの方はパネル、スクロールボックス、ページコントールのタブシートなどです。



549:デフォルトの名無しさん
10/04/07 13:17:22
2k+D7Pro発生せず。
他のコンポでも試したがなんもおこらんよ。
手順は>>542の通りやった。


550:デフォルトの名無しさん
10/04/07 13:42:02
XP+2010で発生せずだなー。
Turboもあるけど試してない

551:デフォルトの名無しさん
10/04/07 14:47:13
よほど特殊な環境なんだろうな
なのに環境情報は後出し、しかも小出し
解決する気のないただのアホにしか見えない

552:デフォルトの名無しさん
10/04/07 16:41:28
URLリンク(www1.axfc.net)
のコメントDelのSc_100990.zipでアップロードしておきました。5秒で再現できるんですが。
上記の操作を繰り返すとボタンの位置がずれていきます。


553:デフォルトの名無しさん
10/04/07 18:38:24
2k+D6Per発生せず。
手順は>>542の通りやった。

554:デフォルトの名無しさん
10/04/07 19:23:08
xp(sp3)+d7ent(sp1)だけど発生しなかった。

HDDを交換でXPをクリーンインストールしたいんだけど
D7のライブラリパスとかを一発で元に戻す事ってできる?

555:デフォルトの名無しさん
10/04/07 20:24:04
>>553
んー。発生しませんか。お手数おかけました。ありがとうございます。
しばらくもうちょっと調べてみます。


556:デフォルトの名無しさん
10/04/07 22:17:01
>554
該当レジストリを持っていくっていう手もあると思うが>設定の引っ越し。

557:デフォルトの名無しさん
10/04/07 22:55:14
xp sp3+turbo delphiで発生しますた

558:デフォルトの名無しさん
10/04/08 10:51:28
発生してた奴はOSとDのバージョンだけじゃなくて
ウィンドウ周りに関する環境設定情報を全部書き出せ

559:デフォルトの名無しさん
10/04/08 10:55:20
そんな書き方じゃまともな情報は上がってこないぞ

560:デフォルトの名無しさん
10/04/08 17:14:14
今のところ再現画像、再現動画等なし

561:デフォルトの名無しさん
10/04/08 19:32:37
オレのところでも発生したわ。
557と同じXPSP3+Turboだけど。

bsSingleとかで検索したら、似て非なる事例が何個か出てくる。

562:デフォルトの名無しさん
10/04/09 11:22:49
自演、乙。
オッチャ盛況だよ。

563:デフォルトの名無しさん
10/04/09 16:00:49
何個かしかないなら挙げればいいのに、しないのは何故なんだろうね

564:561
10/04/09 16:55:56
Win98+Del6Per(XPSP3上のVirtual PC 2007)では発生しなかったわ。
アンカーの両側がオンだと、繰り返すたびにボタンが縮んでいくのが笑える。

まあ確かに、くだすれの話題ではないか。

565:デフォルトの名無しさん
10/04/11 13:25:46
Del7のVCLに直接手を入れて使ってる人いる?
VCLってリコンパイルできるのかな。

566:191
10/04/11 14:21:39
超初心者スレなのにみんなレベル高すぎでついていけませんT_T

567:デフォルトの名無しさん
10/04/11 14:39:48
途中で書き込んじゃった。
最近のバージョンって書籍でリファレンスって出てないんでしょうか。
自分としては首っ引きでページ捲り捲り勉強する方がしっくり来るのですが…
昔はパッケージにちゃんと含まれてたんですよね?

568:デフォルトの名無しさん
10/04/11 15:30:19
>>565
できる
>>566-567
印刷

569:デフォルトの名無しさん
10/04/11 20:14:09
コミュニケーションのとれないおっさんだなw

570:デフォルトの名無しさん
10/04/12 00:41:45
おっさんきもい

571:デフォルトの名無しさん
10/04/12 13:10:21
おっさんかっこいい

572:デフォルトの名無しさん
10/04/12 14:25:42
あっちゃんかっこいい

573:デフォルトの名無しさん
10/04/13 11:51:03
>>569

574:554
10/04/13 22:35:55
ライブラリパスって普通にテキストでコピーしとけば良かったのね。

575:デフォルトの名無しさん
10/04/14 12:56:06
Javascriptはやたら柔軟です。

ブックマークレットの例
Javascript:for(var I=0;I<3;++I){alert(['One!','Two!!','Three!!!'][I]);};

Delphi言語では上記の ['One!','Two!!','Three!!!'][I] みたいなお手軽な書き方はないでしょうか?
オープン配列コンストラクタというのが近いかなと思ったんですが、違ったようです。

576:デフォルトの名無しさん
10/04/14 13:10:11
function getarr(arr: array of string): TStringDynArray;
var
i: Integer;
begin
setlength(result, length(arr));
for i := 0 to high(arr) do Result[i] := arr[i];
end;

getarr(['a', 'b', 'c'])[0]というのはできなくもないけど
今の処理系では手軽表記はないと思う。

いつの日か'one'[2]と同様 ['One!','Two!!','Three!!!'][I] が通るようになるかもしれないけどな。

577:デフォルトの名無しさん
10/04/14 13:29:46
Cだと通るよね

578:デフォルトの名無しさん
10/04/14 13:44:23
>>575
URLリンク(d.hatena.ne.jp)
URLリンク(d.hatena.ne.jp)
この辺を応用すると一応書ける

uses .., Types;

var
 s: string;
 i: Integer;
begin
 for s in TStringDynArray.Create('One!','Two!!','Three!!!') do
  ShowMessage(s);
 for i := 0 to 2 do
  ShowMessage(TStringDynArray.Create('One!','Two!!','Three!!!')[i]);
end;

579:デフォルトの名無しさん
10/04/16 12:32:54
教えてください。D6パーソナル使用です。
EXE自身のアイコンをTImageに表示しています。
アイコンの透過色が透明になってくれるのは良いのですが、白色まで透明になってしまいます。
何がいけないのでしょうか。それとも全部間違っているのでしょうか。
プロジェクトのオプションに設定しているicoファイルはこんな感じです。
URLリンク(www1.axfc.net)

var
Icon:TIcon;
begin
Icon:=TIcon.Create;
Icon.Handle:=Application.Icon.Handle;
if Icon.Handle<>0 then
Image1.Canvas.Draw(0,0,Icon);
Icon.Free;
end;

580:デフォルトの名無しさん
10/04/16 13:46:07
transparent

581:デフォルトの名無しさん
10/04/16 15:39:26
Transparentが関わってそうなことは想像できるのですが、2色が透過してしまうという上記例の場合
どのようにすれば良いのか分かりませんでした。もしよろしければご教示下さい。

結局ですが自己解決しました。以下のように修正。
Image1.Canvas.Draw(0,0,Icon); → Image1.Picture.Icon:=Icon;
やり方が根本的に間違っていたということでした。
しかし、こんな方法↓でもOkでした。
Image1.Picture.Icon.Handle:=Icon.Handle;
Image1.Picture.Icon.Assign(Icon);
一体どれが正しいのか??

さらに、Handleってなんなんだ?と思ったので調べると、32bit整数だと。ならば、
var
Icon:Integer;
begin
Icon:=Application.Icon.Handle;
if Icon<>0 then
Image1.Picture.Icon.Handle:=Icon;
end;
と、やってみたら大丈夫でした。
こんなコードでいいんでしょうか???

582:デフォルトの名無しさん
10/04/18 00:36:03
ListBox.Items.Selectedが画面外の時、
その項目が表示されるようにスクロールするやり方教えてください

583:デフォルトの名無しさん
10/04/18 04:35:59
はい

584:デフォルトの名無しさん
10/04/18 06:47:12
>>582 TopIndex

585:デフォルトの名無しさん
10/04/18 06:51:43
>>581
Image1.Picture.Assign(Application.Icon);
これだけでいいと思う。(D6パーは持ってない

586:デフォルトの名無しさん
10/04/18 16:59:50
>>582
MakeVisible

587:デフォルトの名無しさん
10/04/18 23:10:54
キャプチャーを作ってみたんだけど、ウィンドハンドルからデバイスコンテキストを
取得して指定の画面のキャプチャーを取ってるつもりなんだけど、わざと取りたい画面の上に
別のウィンド置いとくとその別のウィンドもキャプチャーされるんだけどそんなもの?


588:デフォルトの名無しさん
10/04/19 00:14:15
XP以降なら個別にとれる
詳細はググれ

589:587
10/04/19 02:37:57
ググったらで来た。
ありがとう

590:デフォルトの名無しさん
10/04/19 07:57:21
>>589
興味有るから、やり方教えて

591:デフォルトの名無しさん
10/04/19 09:51:25
printwindowを使うんだって。
使い方はググった方が早い。
簡単だよ。

592:デフォルトの名無しさん
10/04/19 14:00:11
>>585
D6パーソナルでもOkでした。正解はスッキリ簡単でしたね。
リソースからアイコン削除してApplication.Iconが無い状態(有り得ないけど)にしても
表示されないだけでエラー無し。
教えてもらってから理解したけど、IDEでImage1.Pictureに画像をセットするのとほぼ同じ動作ということですね。
ありがとうございました。

593:デフォルトの名無しさん
10/04/19 17:55:06
>>591
ありがとう!
がんばってみる

594:デフォルトの名無しさん
10/04/20 23:58:23
IDEのエディタマクロ書きたいんだけどそういう情報ってどこにあるの?

595:デフォルトの名無しさん
10/04/26 17:46:07
RichEditにDephiのソースコードを着色した状態で表示する
サンプルなりコンポなりがあったら教えてください。

596:デフォルトの名無しさん
10/04/26 19:50:22
TParser使え

597:デフォルトの名無しさん
10/04/26 22:45:23
RichEditの使い方が分かりません。
単純に任意の色で文字を書いて、改行を付加する/しない が選べるようにしたいだけ
なのですが、どのようにしたら良いのか分かりません。
こんなイメージで使えるprocedureを作りたいです。
const
CRLF=#$0D#$0A;

RichWrite('エン', clBlue);
RichWrite('バカ', clRed);
RichWrite('デロ', clYellow);
RichWrite('☆', clGreen);
RichWrite('Delphi'+CRLF, clBlack);
RichWrite('Hello'+CRLF, clAqua);

RichEdit1に書かれる結果:
エンバカデロ☆Delphi // 青色赤色黄色緑黒色
Hello // 水色

これを実現するための材料だけでも良いので教えてください。よろしくお願いします。
一応ですが、私は>>595とは無関係です。

598:デフォルトの名無しさん
10/04/26 23:01:57
SelAttribute(ただし遅い)

599:デフォルトの名無しさん
10/04/26 23:34:48
>>598 ありがとうございます。
SelAttributesはヘルプによると、
>テキストを新規に挿入するときには,SelAttributes のフォント属性が適用されます。
とのことなので良さそうなのですが、改行無しで文字列を追加したい場合はどのように
すれば良いのでしょうか?

600:デフォルトの名無しさん
10/04/26 23:36:49
seltext

601:デフォルトの名無しさん
10/04/27 00:06:58
>>600 うーん分からないです。
SelTextプロパティを使ったサンプルをいただけないでしょうか。

602:デフォルトの名無しさん
10/04/27 00:10:21
URLリンク(www.google.co.jp)

603:デフォルトの名無しさん
10/04/27 00:50:57
ああっ、分かりました!
SelStart := GetTextLen;
SelText := 'ABC';
ですね!
「Delphi SelText SelAttributes」でググると一番最初に出てくる
URLリンク(delphi.about.com)
の記事が分かりやすいです。
今までさんざん探してたんですが、こういう単純で基本的な内容のサンプルは初めて見ました。
ようするに、
with RichEdit1 do
begin
SelStart := GetTextLen;
SelAttributes.Color := clBlue;
SelText := 'エンバカデロ';
SelAttributes.Color := clBlack;
SelText := 'Delphi'+CRLF;
end;
みたいな感じにすればOkですね。これをprocedureにしてみます。
ありがとうございました。

604:デフォルトの名無しさん
10/04/27 08:53:22
グループボックスのCaptionがCheckBoxになっているコンポーネントってないでしょうか?

605:デフォルトの名無しさん
10/04/27 09:06:16
グループボックスのキャプションをなしにして、キャプションの位置にチェックボックスを置けば?

606:デフォルトの名無しさん
10/04/27 16:29:52
>>604
ググって一発で出てきたんだけど
URLリンク(www.delphidabbler.com)

607:デフォルトの名無しさん
10/04/27 20:18:13


608:604
10/04/27 23:56:33
>>605,606
トンです。
でけました。

609:デフォルトの名無しさん
10/05/02 08:17:35
del標準の関数でbitmapをjpegに変換すると、低圧縮でも汚いのできれいに変換できるコンポとかってないですか?


610:デフォルトの名無しさん
10/05/02 08:23:04
ないです

611:デフォルトの名無しさん
10/05/02 13:29:03
>>609
JPEGが何なのか調べてくるといいですよ^^

612:デフォルトの名無しさん
10/05/03 15:08:57
正しいことが何なのか、この胸にわかるまで~

613:609
10/05/03 23:15:23
Jpegへ綺麗に変換できるコンポがあって説明を読むと、
delphiのはサンプリングが4:1:1だから汚いと書いてありました。
del7proなんですが、このサンプリングレートを変えることは出来ませんか?

614:デフォルトの名無しさん
10/05/04 00:40:48
c言語の
float range_0[] = { 0, 256 };
float* ranges[] = { range_0 };

をDelphiで書き換えたいのですが
var
range_0: array[0..1] of Float = (0, 255);
ranges: array[0..0] of PFloat;
begin
  ranges[0] := @range_0;
・・・・・・
end;
でいいのでしょうか?

Floatは
type
Float = Single;
PFloat = ^Float;
で作ってあります。

どなたかわかる方おられましたらよろしくお願いします。

615:デフォルトの名無しさん
10/05/04 03:06:22
なんで数字まで変わっちゃうんでしょうか

616:デフォルトの名無しさん
10/05/04 03:41:13
>>613
jpeglib.hのjpeg_component_infoをjpeg.pasに定義してcomp_infoを^jpeg_component_infoにして
TJPEGImage.Compressで
for i:= 0 to 2 do begin
jc.c.comp_info[i].h_samp_factor:=1;
jc.c.comp_info[i].v_samp_factor:=1;
end;
とかすればイケるのかな

つーか、そのコンポとやらを使えば良いんじゃないかな
酔ってるし寝るのであとは知らん

617:614
10/05/04 08:24:11
>>615
レスありがとうございます。
数字は素で間違えました;

618:デフォルトの名無しさん
10/05/04 08:37:43
Cうろ覚えだけど愚直に移すならこんな感じか。

type
Float = Single;
PFLoat = ^Single;
TFloatArray = array [0..High(Integer) div SizeOf(FLoat)-1] of Float;
PFloatArray = ^TFloatArray;

var
range_0: array [0..1] of Float = (0,255);
ranges: array[0..0] of PFloatArray = (@range_0);

ranges[0][0] ==> 0
ranges[0][1] ==> 255


619:614
10/05/04 15:27:34
>>618
こういった書き方は、初めて知りました。
とても勉強になりました。ありがとうございます。

620:デフォルトの名無しさん
10/05/05 09:59:28
>>618
そこまでこだわるならHigh(Integer)じゃなくて(High(Integer)+1)じゃね?
もしくはせっかく定数が用意されてるんだからMaxInt+1でもいいかと

621:デフォルトの名無しさん
10/05/05 14:11:06
ranges: array [0..255] of Single; とどう違うかさっぱりワカンネ

622:デフォルトの名無しさん
10/05/05 23:27:13
何で1足すんだよ

623:デフォルトの名無しさん
10/05/06 01:25:46
>>621
どう違うかどころか全然違うよw
実際に計算してみたら?
>>622
High(Integer) div SizeOf(Float)じゃなくてHigh(Integer) / SizeOf(Float)を計算すれば分かる

624:デフォルトの名無しさん
10/05/06 01:55:41
相変わらずどうでもいい頑張り方だな

625:デフォルトの名無しさん
10/05/06 04:02:03
そのどうでもいいレスよりマシじゃない?

626:デフォルトの名無しさん
10/05/07 10:01:09
WindowsXP SP3
DELPHI7
SQLSERVER2000
BDE

画像ファイル(JPG)を読み込み
SQLServerの画像項目(IMAGE型)に格納したいんですが


AFileName:='IMAGE.jpg';
jp :=TJPEGImage.Create;
jp.LoadFromFile(AFileName);

BDEの画像項目.Assign(jp);

上記を実行すると
「~型が一致しません。VarBytesに対してBlobが渡されました」とエラーが出てしまいます。

blobからVarBytesに変換する処理が必要なのかと思い調べたのですがよくわかりませんでした。

ADOを使用した場合はネットから引用したソースでうまく動いたのですが、
該当システムはBDEで統一させたいので質問させていただきました。
宜しくお願い致します。

627:デフォルトの名無しさん
10/05/07 11:37:45
BDE からの接続形態は?
ODBC ? SQL-Link ?

628:デフォルトの名無しさん
10/05/07 12:08:57
>>627 ODBCです

629:デフォルトの名無しさん
10/05/09 17:07:02
a-zから10桁の文字列生成をしてみようと思って
'', 'a'..'z'の配列から文字列を取り出してつなげていくプログラムを組んでみたのですが、
forを10重にしたコード書いたけど
ぐぐってみたらX種類の文字のN重ループは
for i := 0 to Power(X, N)-1 do begin
 for j := 0 to N-1 do begin
で代用出来ると書かれていたのですが、
文字列の取り出し方がわかりません。
str := mojiretsu[Trunc(i / j) mod High(mojiretsu)] + str;
としてみたらなんとなくそれっぽい感じだったんだけど文字列がループしてしまいました。

mojiretsuにアクセスする式はどうかけばいいのでしょうか?

630:629
10/05/09 17:07:43
コードはこんな感じにしてみました
uses
SysUtils, Math, Windows;

const
StrLenMax = 27;
keta = 10;
var
i : LongWord;
j, k : Integer;
str : String;
mojiretsu : array[0..StrLenMax-1] of string;
begin
{ TODO -oUser -cConsole Main : ここにプログラムコードを書いてください }
mojiretsu[0] := '';
for k := Low(mojiretsu) + 1 to High(mojiretsu) do begin
mojiretsu[k] := Chr(97+k-1);
end;

for i := 0 to Trunc(Power(High(mojiretsu), keta))-1 do begin
str := '';
for j := 0 to keta-1 do begin
str := mojiretsu[Trunc(i / j) mod High(mojiretsu)] + str;
end;
Writeln(str);
Sleep(100);
end;
end.


631:デフォルトの名無しさん
10/05/10 01:55:29
なんで乱数を使わないのかと小一時間

632:629
10/05/10 04:10:41
>>631
期待している動作としては
a, b, c, d ... z, aa, ab, ac .. az, ba, bb
みたいな感じで指定した桁数の文字列を生成したいです。

633:デフォルトの名無しさん
10/05/10 05:36:27
テストとか学校の課題?

>ぐぐってみたらX種類の文字のN重ループは
>for i := 0 to Power(X, N)-1 do begin
> for j := 0 to N-1 do begin
>で代用出来ると書かれていたのですが

元 URL を出していただけるか、元 URL のところに相談を持ち込んだほうがよいかも。

このアルゴリズム断片は、整数を26進数表記で処理するアイデアです。
i が対象となる全整数、j が 26進数変換の変換対象桁数。
i が 32 なら、
32 / 26 -> 1 余り 6 -> 'g'
1 / 26 -> 0 余り 1 -> 'b'
文字列として 'bg' を得る。
となります。

アルゴリズムとしては簡単なほうですが、
* 全組み合わせを整数から生成しているけど 26進数10桁だと 16進で 806406972400 で
32bit に収まらないから int64 にしないと。
* 0-9 が 10進で、a-z で 26進。'a' が 0 を意味するので、このアルゴリズムを単純実装
したときは aaaaaaaaaa から zzzzzzzzzz が生成されます。頭の a を消去(ゼロサプレス)
しても a,b ... y ときて z の次は aa ではなく ba です。
* おそらく、遅い。


634:629
10/05/10 05:58:41
>>633
いえ、ブルートフォースもどきなプログラムを作ろうと思ってまずは文字列生成部分を作ってみようとしました。
参考URLはURLリンク(dobon.net)です。
同じように26進数のことをいわれていたのですけど、
結局わからなかったです。
まさか32bitに収まらないとは・・・
なんとなく10桁って書いたので6桁でも8桁でもいいのですが・・・

635:デフォルトの名無しさん
10/05/10 09:00:01
var table: array [#0..#255] of char;

procedure init;
var i: char;
begin
    for i := #0 to #255 do
        case i of
            'a'..'y': table[i] := succ(i);
            'z': table[i] := 'a';
            else table[i] := #0;
        end;
end;

function getnext(s: string): string;
var
    i: integer;
    c: char;
begin
    result := s;
    for i := length(result) downto 1 do
    begin
        c := table[result[i]];
        result[i] := c;
        if c <> 'a' then break;
    end;
end;


636:デフォルトの名無しさん
10/05/10 09:00:54
init;
getnext('aaa') ==> 'aab'
getnext('zzz') ==> 'aaa'

var s: string;
begin
    init;
    s := 'aaa';
    while true do
    begin
        writeln(s);
        if s = 'zzz' then break;
    end;
end;

最速狙いたいなら普通にCでDLL書いたほうがいい。

637:デフォルトの名無しさん
10/05/10 15:34:26
別にCなんか使わなくてもインラインアセンブラで十分じゃん

638:629
10/05/10 16:20:22
URLリンク(www.ss.u-tokai.ac.jp)
ここを参考にしたらなんとかいけそうでした。
ご協力ありがとうございました。

639:デフォルトの名無しさん
10/05/11 14:28:43
Delphi7だけどバグの修正これでいいかな
Quality Centralの33496
URLリンク(qc.embarcadero.com)

procedure TMenuItem.DoDrawText(ACanvas: TCanvas; const ACaption: string;
.


  with ACanvas do
  begin
    if Text = cLineCaption then//追加2010.05.11 QC33496
      exit;//追加2010.05.11 QC33496
    if IsLine then
    begin
       if Flags and DT_CALCRECT = 0 then
      begin
        R := Rect;
        Inc(R.Top, 4);
        DrawEdge(Handle, R, EDGE_ETCHED, BF_TOP);
      end;
    end

2箇所追加してみたけど(新しいの2010も治っていないけど)

640:デフォルトの名無しさん
10/05/12 01:08:13
//if Text = cLineCaption then
if IsLine then
でしょ

641:デフォルトの名無しさん
10/05/12 10:44:10
フォームのAlphaBlendを使った時に特定のコンポだけは透明化されないようには出来ないでしょうか?

642:デフォルトの名無しさん
10/05/12 12:15:46
AlphaBlendなフォームの上に
Transparentなフォームをぴったり重ねればできそうだけど
アホっぽいなw

643:デフォルトの名無しさん
10/05/12 13:04:26
バイナリデータを文字変数を使って処理しています
以下のようにすると、バイナリ状態のUTF-16LE文字列をWideString文字列に出来ることが分かりました
var
Bytes: AnsiString;
WStr: WideString;
begin
// BytesにUTF-16LEのバイナリを入れる処理が入る…
// 例:バイナリ 71 67 AC 4E 30 00 33 00

WStr:=WideString(PWideChar(Bytes));
// 結果:WStrに「東京03」が入る

質問:

1. コンパイル時に警告が出るんですが、このやり方で問題ないですか?
[警告] Unit1.pas(174): String から PWideChar への型キャストは間違っている可能性があります

2. この逆(WideString → AnsiStringにバイナリ状態のUTF-16LE)の変換は、1文字ずつループを回せば
出来ましたが、もっと簡単に出来ますか?

よろしくお願いします

644:デフォルトの名無しさん
10/05/12 13:11:55
なんでAnsiStringなんかに入れるの・・・
Byte配列でええやん

645:デフォルトの名無しさん
10/05/12 13:34:12
警告ごまかしたいなら
w := WideString(PWideChar(Pointer(s)));
w := WideString(PWideChar(@s[1]));
で行けるんじゃね。
Stringをバイナリコンテナとして使う場合
別に文字コードなんて関知しないから問題ないはず。

646:デフォルトの名無しさん
10/05/12 18:04:55
>>644
何をどうすれば出来て、何が最善なのか分からないんです
実は当初、Byte型の動的配列で検索とかいろいろやってました
TByteDynArrayとかオープン配列パラメータとか使ってみたり
勉強にはなったんですが、配列要素を切ったりつなげたりのやり方が
よく分からなかったのと、いちいちSetLengthするくらいならStringの方が
簡単かつオールマイティで良いではないかと考えたんです
ちなみに配列版の試作途中ソースは誤って削除してしまいました(アホ)

>>645 ありがとうございます
WStr:=WideString(PWideChar(Pointer(Bytes)))
とすることで警告が出なくなりました
さらに、
WStr:=WideString(Pointer(Bytes)) でもOkでした
ということはと考えて、
Bytes:=AnsiString(Pointer(WStr)) とすると逆変換も出来ました
空文字やヌル付きでもそのまんま、ありのまま相互変換するようなので分かりやすいです

ポインタとかの理解度5%程度なのでよく分かってませんが、このPointer(文字型変数)
というのは単なるポインタじゃなくてポインタ型、文字列の長さ情報をも含んでいるんですね
ヘルプ見ても断片的に「型なしポインタ型」としか書いてないし…

配列でなく、オールマイティな?Stringをバイナリコンテナ(カッコ良い言葉なのでこれも拝借)
として使うのは、方向性として間違ってはいませんよね?
それともやはり配列使うべきでしょうか? 配列の利点があれば教えてください

647:デフォルトの名無しさん
10/05/12 19:05:45
>>646
あんたなかなかセンスいいw

648:デフォルトの名無しさん
10/05/12 20:50:44
>>642
それやったことあるw
よっぽど重いアプリでも作らない限り無難に理想の動作はしてくれるよ。
リサイズさせない移動させないサブフォームでなら普通に使える。

649:デフォルトの名無しさん
10/05/12 21:59:47
Del7を使っています。
WinSight32である特定のウィンドハンドルを見たら、そのウィンドウを隠した(スライドさせる)時に
hidden となるのですが、この hidden になっているかどうかはどうすれば分かるでしょうか?

650:デフォルトの名無しさん
10/05/12 22:57:03
IsWindowVisibleとか

651:デフォルトの名無しさん
10/05/12 23:58:52
>>646
使ってるDelphiのバージョンが分からないけど、そのバージョンを一生使い続けるならそれも可
でも乗り換えることがあるなら、string型はすでに仕様が2回ほど変わった過去があるので
そのキャストが今後も使えるとは限らないし、配列を使った方が確実にいいと思う
だからそのコードは偶然動いた程度に考えた方がいいかと
あと利点云々は変換した後何するかによるし、もう少し情報出してくれないと・・・

652:649
10/05/13 00:17:33
ありがとうございました。
状態の取得が出来ました。

新たな質問なのですが、
他のソフトのテキスト描画色を取得したくて、ググったらGetTextColorというのにたどり着きました。

var
CL: TColor;
begin
CL:=GetTextColor(DC);

と、やってもCLには「0」が入ります。
DCの取得は出来ています。
TColorをTColorRefとしてもダメでした。

どなたかよろしくお願いします。

653:デフォルトの名無しさん
10/05/13 01:01:48
0は黒だが

654:デフォルトの名無しさん
10/05/13 01:10:32
WStr:=WideString(PWideChar(Pointer(Bytes)))
による PWideChar->WideString の変換は、
#$0000 が出現するまでのデータを (_WStrFromPWChar によって)
WideString データに変換するけど、

WStr:=WideString(Pointer(Bytes))

Bytes:=AnsiString(Pointer(WStr))
は、ポインタ型のつじつま合わせを行った後に代入(_WStrAsg/_LStrAsg)
するので、後々トラブルが発生するかも。
前者は、バージョンによって、危険な場合があり、、
特に後者は、確実に refCnt いじってメモリーリークしているので危険。


655:デフォルトの名無しさん
10/05/13 06:47:59
>>653
レスありがとうございます。
その描画色はなん色か時間によって変わっていって黒は使われていないんです。
描画されている文字列を取得すると正しく取得できるし、WinSightで見てもハンドルは
間違ってはいないので、デバイスコンテキストも間違ってはいないと思うのですが。


656:デフォルトの名無しさん
10/05/13 07:35:18
>>654
>特に後者は、確実に refCnt いじってメモリーリークしているので危険。

w: WideString;
s: String;

w := '幹事';
s := AnsiString(Pointer(w));

がリークするの?
FastMM4は沈黙してるけど。


657:654
10/05/13 12:26:30
Windows では、WideString は、OLE 文字列や BSTR 互換なので、
AnsiSting とは、メモリ管理方法が異なる。
WideString は、SysAllocStringLen などで
領域確保しているので FastMM4 の管理外。

WideString のオフセット -4 には、長さに相当するバイト数が
格納されていて、それ以外はしらん。
しかし、AnsiString を代入するときは参照カウントが格納されている
オフセット -8 の refCnt フィールドを調べたり、いじったりする。


658:デフォルトの名無しさん
10/05/13 12:39:38
WideString (BSTR) は参照カウンタ管理されていないので、ストリングのコピーが複製になるため「遅い」
という問題を回避するために導入されたのが参照カウンタ付き UnicodeString なわけなので

WideString 側には refCnt なんてフィールドはありませんよ。
UnicodeString と混ざってしまっているかな?

659:デフォルトの名無しさん
10/05/13 13:47:46
なんか疑問だな バイナリを入れるなら byte の配列を用意したほうが自然
Bytes: array of byte; で、WStr := WideString(Pointer(Bytes)); でどうなのか

660:デフォルトの名無しさん
10/05/13 14:14:50
WStr := WideString(Pointer(Bytes))
だと、Bytes配列はヌル終端してる必要ある?


661:デフォルトの名無しさん
10/05/13 14:22:08
>>659
バイト配列の話なんて誰もしてないから

662:646
10/05/13 16:31:53
>>647
どういう点がセンスいいのか言ってもらわないとw 怖いもの知らずっていう意味ですか

>>651 ご意見感謝します
バージョンは6のPersonalです
作成中のアプリのコードを現代のバージョンに持って行くことはまず考えられません
しかし気持ちとしては、現代のバージョンにも転用可能なコードを書きたいと思いますし、
理解できていない・正体のハッキリしないモノ=ポインタ絡みの操作や原理不明のキャスト
も出来れば使用したくない、というのが本音です キャスト成功で手放しで喜んでいるわけではないです
なお、最近のバージョンではTEncodingとかRawByteStringとか、良さそうなものがあるようですね

>乗り換えることがあるなら、string型はすでに仕様が2回ほど変わった過去があるので
すごく承知してます
Stringでなく、AnsiStringと記述してるのは上記のような気持ちからです(あまり意味有りませんが)
自分が調べた限りではこんな感じですが、だいたい合ってますよね
■AnsiStringの系譜  D1:ShortString → D2:AnsiString → D2009:AnsiString(コードページ指定可能)
■Stringのデフォルト D1:ShortString → D2:AnsiString → D2009:UnicodeString
※ UnicodeString=AnsiString(1200)
※ D2:AnsiString、D2009:AnsiString/コードページ指定なし のコードページはシステムのロケールに依存
※ D2009:AnsiString(コードページ指定)では変数ごとに複数のコードページを保持できる
※ RawByteString=AnsiString(65535) コードページの変換をしない

やりたいことは、バイナリファイルを読み込み、特定条件の文字列や数値を検索して抜き出し、
変更を加え再構成して新たなファイルを作成、という操作です ゲーム改造みたいな感じでしょうか
いったんバラバラにしたデータを再構成する、つまり切ったりつなげたりをスマートに行う方法が
分からず、こんなことで悩むなら足し算引き算自由の文字列を使うべきかと結論付けました
配列だと、array[0..n] of Charまたはパック文字列型、StrPCopy、StrPas、Move
このあたりを使用するんでしょうか?

663:646
10/05/13 16:34:38
>>654 ありがとうございます
WStr:=WideString(PWideChar(Pointer(Bytes))) ではヌル除去、
WStr:=WideString(Pointer(Bytes)) だとヌル保存を確認しました
少しだけナルホド、です

でも高度に技術的なお話はちょっと分からないです…
確かにSystem.pasにはそういうのがありますね、としか…
procedure _WStrFromPWChar(var Dest: WideString; Source: PWideChar);
procedure _WStrAsg(var Dest: WideString; const Source: WideString);
procedure _LStrAsg(var dest; const source);
procedure _WStrFromLStr(var Dest: WideString; const Source: AnsiString);
procedure _LStrFromWStr(var Dest: AnsiString; const Source: WideString);


みなさんのご意見をまとめると、「これらのキャストはすべて危険、未来も無いからやめとけ」
ってことですね?
しかし、配列優位とも思えませんので、文字列型を使いつつキャストもしない、という方針で
やってみようかと思います


>>659
えーと、私もそう考えて、というかByte型という名前に惹かれて、当初はTByteDynArrayでした
あと、1byte=Byte型配列の要素1個 というのも気持ち良い感じがしたんですが…
やはりバラバラにして再構成というのが配列の用法と合わないと思いました
>>661
いえ、話の発端の私がしておりますので…

664:654
10/05/13 16:44:54
>660
PWideChar じゃないから危険だって。

PWideChar -> WideString はヌル終端までを変換するけど、
Pointer -> WideString はただの型キャスト。

PChar/PAnsiChar/PWideChar -> AnsiString/WideString/UnicodeString
=> ヌル終端までを変換

AnsiString/WideString/UnicodeString -> PChar/PAnsiChar/PWideChar
=> ヌル終端を保証

PAnsiChar/PWideChar/AnsiString/WideString -> Pointer
=> 型キャスト

Pointer -> PAnsiChar/PWideChar/AnsiString/WideString
=> 型キャスト


665:654
10/05/13 16:52:06
ついで。
Dynamic Array -> Pointer
=> 型キャスト

Pointer -> Dynamic Array
=> 型キャスト


666:デフォルトの名無しさん
10/05/13 21:33:15
>「これらのキャストはすべて危険、未来も無いからやめとけ」

んなこたない。
生ポインタをC文字列とみなしてDelphiの文字列に変換する機能は
Win32APIを叩く際の根幹的な機能だからそんな簡単に仕様変更なんてあるわけがない。
いくらなんでも脅かされすぎ。

667:646
10/05/14 02:20:53
あれ、今までのレスをよく見直すと、
WStr:=WideString(Pointer(Bytes))
は危険な可能性有りだけど、
WStr:=WideString(PWideChar(Pointer(Bytes)))
は問題無いと言う見解ですかね?

>>666
仕様変更は無いだろうというご意見も覚えておきます
どちらにせよ、もうキャストはしないと決めました
「キャスト」なる仕組みは完全に明らかである、という状況ではない以上、
使うべきではないと思いました

668:646
10/05/14 02:23:12
こんな感じの関数で十分でした
これなら不明な点はありませんから問題無いですよね

function BytesToUTF16LE(Bytes: AnsiString):WideString;
var
  I:    Integer;
  WOrd: Integer;
begin
  Result:='';
  for I:=1 to Length(Bytes) div 2 do begin
    WOrd:=(Ord(Bytes[I*2]) shl 8)+Ord(Bytes[I*2-1]);
    if WOrd=0 then break;           // ヌルを含めるならこの行を外す ※ヌルは複数組の可能性もあり
    Result:=Result+WideChar(WOrd);
  end;
end;


function UTF16LEToBytes(WStr: WideString):String;
var
  I: Integer;
begin
  Result:='';
  for I:=1 to Length(WStr) do begin
    Result:=Result+Char(Lo(Ord(WStr[I])))+        // and $00FF
                   Char(Hi(Ord(WStr[I])));        // Shr 8
  end;
end;

キャスト方法のアドバイスをくれた方、ご意見下さった方、ありがとうございました
大変勉強になりました

669:デフォルトの名無しさん
10/05/14 03:12:16
>>666
今までに変更があったという事実は無視なの?

670:デフォルトの名無しさん
10/05/14 04:43:03
コーディングスタイルは人それぞれだね
1行だけのforならbeginもendも不要なのに

671:デフォルトの名無しさん
10/05/14 04:46:14
エンバグの元なのに?

672:デフォルトの名無しさん
10/05/14 06:40:31
既に決着済みではあるけど一言だけ。

>>667
>「キャスト」なる仕組みは完全に明らかである、という状況ではない以上、
明らかに間違った使い方は示されたけど
Delphiの仕様の抜け道を使ったような未定義のやり方はないよ。
少なくともそんな指摘はまったく出ていないように思うが。

曖昧論やらべき論は出てきたが。

673:652
10/05/14 08:14:15
GetTextColorについて質問をしたものです。
あれから色々試していたのですが、例えば赤で描かれたテキストがあって、
その色を取得しようと、GetDCPenColor、GetDCBrushColor、GetBKColorとか
やってみたのですが、赤の値が取れませんでした。
何か他にやり方ってあるのでしょうか。
それとも、アキラメロンなのでしょうか。


674:デフォルトの名無しさん
10/05/14 10:29:38
>>673
座標を取ってGetPixelしてみるとかはどう?

675:デフォルトの名無しさん
10/05/14 21:57:57
描かれてしまったものは単なる絵だから。
描いたときのペンやブラシやテキストカラーの設定が現在も残ってると期待するのは無理

676:652
10/05/14 23:43:02
>>674
ありがとうございました。
GetPixelで何とか出来ました。

>>675
そういうことなんですね。
納得しました。
ありがとうございました。

677:デフォルトの名無しさん
10/05/15 00:08:51
Form1の他にForm2を作ってメニューからForm2の表示、非表示させてるんだけど、
Form2を表示中にメインのForm1を最小化させると一緒に画面から消えちゃうの何とかならん?

678:デフォルトの名無しさん
10/05/15 15:35:35
今デルヒで一番安く手に入る環境(違法じゃないの、新品の)でお願いします?

679:デフォルトの名無しさん
10/05/15 16:10:05
>>678
URLリンク(kaidoku.ocn.ne.jp)

コンポーネントを一緒に買う気があるなら
URLリンク(www.componentsource.co.jp)

680:デフォルトの名無しさん
10/05/15 16:13:24
あ、直販の方が安いのか
URLリンク(www.embarcadero.com)

681:デフォルトの名無しさん
10/05/15 22:29:59
頼む 日本語で

682:デフォルトの名無しさん
10/05/18 11:26:08
Delphi7ですけどIDE終了時AVなるのでコード変更してみました
これでいいでしょうか
_LStrClr関連で調べていたら_LStrFromPWCharLenのBuffersが悪さしてるみたいので
procedure _LStrFromPWCharLen(var Dest: AnsiString; Source: PWideChar; Length: Integer);
var
  DestLen: Integer;
begin
  if Length <= 0 then
  begin
    _LStrClr(Dest);
    Exit;
  end;
  DestLen := CharFromWChar(nil, 0, Source, Length);
  SetLength(Dest, DestLen);
  if DestLen > 0 then
  begin
    CharFromWChar(Pointer(Dest), DestLen, Source, Length);
  end
  else
    _LStrClr(Dest);
end;


683:デフォルトの名無しさん
10/05/18 12:02:46
こっちも変えてみました
procedure _WStrFromPCharLen(var Dest: WideString; Source: PAnsiChar; Length: Integer);
var
  DestLen: Integer;
begin
  if Length <= 0 then
  begin
    _WStrClr(Dest);
    Exit;
  end;
  DestLen := WCharFromChar(nil, 0, Source, Length);
  SetLength(Dest, DestLen);
  if DestLen > 0 then
  begin
    WCharFromChar(Pointer(Dest), DestLen, Source, Length);
  end
  else
    _WStrClr(Dest);
end;


684:デフォルトの名無しさん
10/05/18 22:30:32
カード占いをするソフトを作りたいと思っています。

(1)カードの使用枚数と配置を決める
(2)カードを配置して裏返し、表示させる。

(1)でカードの位置を、マウスでクリックした位置に決めて
カードの裏向きの画像ファイルを表示させたい
のですが、どうすればいいでしょうか。




685:デフォルトの名無しさん
10/05/18 23:04:57
ActiveXのWindowsMediaPlayerコンポーネントで、
動画再生時にビデオの明るさを変更する方法はありますか?

WindowsMediaPlayerの「拡張設定」の「ビデオ設定」にある「明るさ」を変更できる方法があればいいのですが。

686:デフォルトの名無しさん
10/05/19 00:51:54
>>684
その通りにやればいいだけじゃ?
どこで詰まったのかもっと具体的に言わないと答えようがないだろ
一から手取り足取り教えてもらいたいなら金払ってサポートしてもらえ

687:デフォルトの名無しさん
10/05/19 03:56:58
>もしくは質問者自身何が何だか分からない質問を
>勇気を持って書き込むスレッドです。
>Delphi使いが優しくコメントを返しますが

トランプの裏向きの画像は手に入れているとして。

フォームに CardImage という名前の TImage を作成。
Picture プロパティに画像を設定。
Visible プロパティを False に。

*クリックしたら
From の OnMouseDown イベントメソッドを作成

*位置を決めて
引数の X と Y を使う。

* 画像ファイルを表示
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
I : TImage;
begin
I := TImage.Create(self);
I.Parent := self;
I.Picture.Assign(Image1.Picture);
I.Width := Image1.Width;
I.Height:= Image1.Height;
I.Left := X;
I.Top := Y;
end;


688:デフォルトの名無しさん
10/05/19 12:06:14
マルチスレッドのデバッグってどうすればいいでしょうか?
1つのスレッドを動的に複数Createして同時に実行した時に、ブレークポイントで止めていると
Delphiが固まってしまいます。
Del7です。
よろしくお願いします。

689:デフォルトの名無しさん
10/05/19 15:55:47
>ブレークポイントで止めていると Delphiが固まってしまいます。
D7 が現役の頃にはそんな経験無いですけどね。

>Del7です
OS は? CPU は?

Vista/Win7 だとあきらめるしかないかも。

690:デフォルトの名無しさん
10/05/19 16:35:03
起動中のアプリケーションでコマンドラインを受け取るにはどうすればいいのでしょうか?

a.exe -hoge -piyo
が何度か呼び出される感じ(引数は変わる)なのですが・・・
多重起動は禁止にしてます。

691:デフォルトの名無しさん
10/05/19 16:55:10
すでに起動中のアプリケーションに、後から起動された(同一)アプリケーションのコマンドラインオプションを
渡すのかな?

Windows はマルチタスク/マルチインスタンスサポートの OS なので、別々に起動されたアプリケーションは
別々のインスタンスとして管理されます。何らかのアプリケーション間通信をおこなう必要があります。

擬似コードとしては

program A;

begin
if 俺は起動中かな then
begin
  起動中のインスタンスにコマンドラインを渡す( paramstr(1), paramstr(2)...)
end
else
通常実行開始
end;

後から起動されたアプリケーション A2 から、すでに起動しているアプリケーション A1 にデータを送るには、
sendmessage がつかえますが、メッセージを受信するためのウィンドウが必要(非表示でよし)なので
純粋なコマンドラインツールだと余計な手間がかかるでしょう。

692:688
10/05/19 17:05:30
>>689
レスありがとうございます。
説明不足でした。
ブレークポイントで止まってるだけなら何ともないのですが、ステップ実行を何行かすると
フリーズしてPCのリセットボタンを押さないといけなくなります。
マルチスレッドが1つだけの時は、正常です。
ヘルプを見るとマルチスレッドのデバッグの項目はあるのですが、イマイチよく分からないです。


693:デフォルトの名無しさん
10/05/19 17:14:22
>>292
XP+Turbo(2005)のわたしも同じ状況に見舞われてます。
以前わたしも、ここか雑談スレで相談しましたが、解決方法はわかりませんでした。

一応、めちゃくちゃ反応は鈍いですが、操作は可能です(時間的には、リセットで再起動の方が早いと思いますが)。
こちらでは、頻度は低いですが、マルチスレッドというか、シングルスレッドでも起こりますので、
スレッドをデバッグした時になるのだと思います(といっても、メインスレッドは別だから、結局はマルチスレッドなのだろうけど)。

おそらくデバッガーの問題かと。こちらでは、なるべくブレークポイントは使用しないという消極的な回避策で対処してます。

694:デフォルトの名無しさん
10/05/19 17:28:09
>>691
ですです。
だいたいおんなじことを考えていたのですが、
>  起動中のインスタンスにコマンドラインを渡す( paramstr(1), paramstr(2)...)
ここがわかりませんでした。
後出しですみません。

作ってるアプリはGUIアプリです。

695:デフォルトの名無しさん
10/05/19 17:32:15
>>694
あと、コマンドラインを渡したあと、どうやって受け取るのかもわからなかったです。。。

696:デフォルトの名無しさん
10/05/19 18:54:34
>>687
やっぱりああやって書くとレス付きやすいですねw
あざーすww

697:デフォルトの名無しさん
10/05/19 18:57:28
>>694
SendMessageが使えるって書いてあるじゃん
よく読めよ

698:684
10/05/19 21:08:27
>>686,687
ありがとうございます。
やってみます。


699:デフォルトの名無しさん
10/05/19 22:25:41
>>696はいかにもゆとり

700:デフォルトの名無しさん
10/05/20 00:51:52
マルチスレッドのデバッグっていくつか前に書いてなかったか。
俺も参考にさせてもらった。
今は忘れた。w

701:これかな?
10/05/20 01:10:29
178 名前:デフォルトの名無しさん[sage] 投稿日:2009/08/12(水) 10:30:13
OutputDebugString使いまくる

179 名前:デフォルトの名無しさん[sage] 投稿日:2009/08/12(水) 10:38:37
>>175
現状では各スレッドに固有の番号を持たせて(多少面倒だがThreadId等でもいい)、
条件付きブレークでその番号をセットすれば任意のスレッドだけブレークさせることが可能

180 名前:175[sage] 投稿日:2009/08/12(水) 13:48:14
>>178-179、レスありがとうございました。
Delphiがフリーズせずにデバッグできるようになりました。
勉強になりました。

702:デフォルトの名無しさん
10/05/20 05:00:38
>あと、コマンドラインを渡したあと、どうやって受け取るのかもわからなかったです。。。

Google で以下のキーワードで検索。
sendmessage プロセス間通信 Delphi

Delphi では無いが URLリンク(yokohama.cool.ne.jp) はよくまとまっていてよろしい。

それと、目的は複数のプロセスが同じデータを参照すること。と見なせば、
共通のファイルやレジストリにコマンドラインを記録し、
通常起動しているプロセス側がポーリング(定期的に見に行く)する。
という手法も使えます。


703:デフォルトの名無しさん
10/05/20 05:11:24
XP の頃、 MS-IME とデバッガの相性の問題があったはず。

URLリンク(www2.atwiki.jp)

URLリンク(d.hatena.ne.jp)

試してみてくださいな

704:デフォルトの名無しさん
10/05/20 10:38:55
if文の書き方で

if A=B then・・・・・・・・①
if C=D then・・・・・・・・・Ⅰ
E:=F;
else if A<B then・・・・②
E:=G
else A>B then・・・・・・③
E:=H;

①②③を条件分岐のグループで①の時だけ、入れ子のifを実行するつもりなんですが、
どうも、DelphiはⅠと②③をグループと見るみたいで 「E:=F;」 の「;」がだめってコンパイルエラーが
出ます。
begin~endで囲んでいけば欲しい動きにはなるのですが、単純な構文なので無意味に行数を増やしたくないのですが、
ifの中にifを入れる時はbegin~endで囲むのがルールなんでしょうか?

705:デフォルトの名無しさん
10/05/20 10:40:13
インデントしたつもりがされなかったです。
これでどうだ

   if regCurrent=Current then
    if lblCurrent.Font.Color=clWhite then
     lblCurrent.Font.Color:=clYellow;
   else if regCurrent<Current then
    lblCurrent.Font.Color:=clRed
   else if regCurrent>Current then
    lblCurrent.Font.Color:=clLime;


706:デフォルトの名無しさん
10/05/20 11:03:39
素直に begin end でくくれ。


707:デフォルトの名無しさん
10/05/20 11:11:39
>>705
余計な話ですが、最後のelse、意味通りのインデントになってる?

708:デフォルトの名無しさん
10/05/20 11:16:11
; が文の終わりを表す C 系の規則と
; が文の区切りを表す Algol/Pascal の規則の差なのですが、
そういう物だと納得して先に進む方が賢いです。

それとネストした if/else 構造は、どの言語でも分かりにくい表記をすることができる物で、
C 言語でも

if (A)
 if (B)
  process1();
else
 process2(); // A に対する else ? B に対する else ?

さらに変なインデントがついていたりすると、予想外のミスを呼び込むかもしれません。

20年くらい前の構造化言語の導入時には、else がどの if に対応するべきかが議論対象になり、
else にオプションをつけて対応する if を(必要な時は)明示指定したらどうか?という試験的な言語も存在しました。
現在は、単純に直近の if を対象にする。という規則が一般的です。
数行を惜しんで分かりづらくするよりは、begin - end を明示的に入れてあげた方がコードの保守性という見地からも
得策でしょう。
なお、「else は直近の if に対応する」というルールを使って空の else 節を挿入する。というトリックもあり得ます。

 if A=B then
  if C=D then
   E:=F
  else
 else if A<B then
  E:=G
 else if A>B then
  E:=H;

これが「美しい」「わかりやすい」かどうかは、また別の話ですね。

709:デフォルトの名無しさん
10/05/20 11:27:41
皆さん、ありがとうございます。
基本的には begin~end は保守性の面から入れるのですが
今回の質問のような単純で短い構文で、狙った動きにならないので
びっくりしたのと納得できなかったので質問しました。

>直近のifに対応する
こんな規則で動いていたんですね。
納得しました。

ありがとうございました。

710:デフォルトの名無しさん
10/05/20 11:47:07
綺麗さ、かつ Pascal の特性を活用するなら、入れ子関数を作って、
関数名をコメントがいらないくらい分かりやすいものにしてしまう。
というのも実用性の高い手法です。

新しめの処理系なら、日本語関数名も使えますしね。

  procedure SetFontColor(originalColor, modifiedColor: TColor)
  begin
   if lblCurrent.Font.Color = originalColor then
   lblCurrent.Font.Color:=modifiedColor;
  end;

 if regCurrent=Current then
  SetFontColor(clWhite, clYellow)
 else if regCurrent<Current then
  lblCurrent.Font.Color:=clRed
 else if regCurrent>Current then
  lblCurrent.Font.Color:=clLime;



711:デフォルトの名無しさん
10/05/20 12:29:21
なるほど。
ちょっとの手間でスマートですね。
まだ、この辺の手間をかけた方が後々いいのか、どうかの判断が
出来ないレベルなので参考にさせてもらいます。

712:デフォルトの名無しさん
10/05/20 17:43:30
>>697,702
ありがとうございます。
ググりつつコピペしつつ改変しながら
URLリンク(eggrice.no.land.to)
と言うふうに書いてみたんですが、
二度目に起動したときに前のウィンドウがアクティブになるだけで
メッセージの処理は行われませんでした。

winexpでメッセージ監視してみたら
TMainFormじゃなくてTApplicationにメッセージが飛んでいたので
これが問題かな?と思ってFindWindowでハンドル取得してみてもうまくいきませんでした。

どこか間違えているでしょうか?

713:デフォルトの名無しさん
10/05/21 12:56:44
>>704 これあきらかにおかしいじゃん

if A=B then if C=D then E:=F; ここまで1行とコンパイラは理解するから次の else if が文法上間違い

714:デフォルトの名無しさん
10/05/21 14:33:18
質問が紛らわしくてすんません。
①②③の条件分岐のつもりで、①の時にⅠを実行する意図なのですが
「F;」の「;」を取ると
Ⅰ②③がグループと認識して①の入れ子と処理されてしまいます。
Ⅰは単独のif文にする意図で「;」を付けるとコンパイルエラーになるので
「何で?」と言う意味でした。

715:デフォルトの名無しさん
10/05/21 15:00:07
だいじょうぶ。意図を理解している人もいるよ。


716:デフォルトの名無しさん
10/05/21 17:01:10
自作アプリをプログラムから最小化してタスクバーに入れるにはどうすればいいですか。
WindwStataだとタスクバーの上に表示されてしまいます。

717:716
10/05/21 17:07:39
出来ました。

718:デフォルトの名無しさん
10/05/24 07:52:47
Continueってバグを起こしますか?
for i:=0 to max do
begin
if hoge then
begin
continue;
end;
end;

デバッグしているとi = maxの時にcontinueが実行されるとループが進んでしまうのですが・・・

719:デフォルトの名無しさん
10/05/24 12:26:05
あなたの頭がバグを起こしているだけです

720:デフォルトの名無しさん
10/05/24 12:32:28
デバッグしろ

721:デフォルトの名無しさん
10/05/24 14:16:18
max-1が正しかったという罠

722:デフォルトの名無しさん
10/05/24 18:43:28
マルチスレッドが存在するかしていないかって、分かる関数とかってあります?
Createした時に覚えておいて、解放する時はメインの方から明示的にFreeするしかないんでしょうか?

723:デフォルトの名無しさん
10/05/24 19:01:08
>718
ブロック内で、変数Iを使っていないので、最適化されて減少カウンタとして利用されている予感。

724:デフォルトの名無しさん
10/05/24 19:57:31
>722
スレッド終了時に自分で自分を解放

>718
>723のいうとおりだと思う。コンパイルオプションで最適化を外すとデバッグしやすくなる。

725:デフォルトの名無しさん
10/05/25 12:47:56
最後に判定しに行くだけだろ?
Cで書けばfor(i=0;i<=max;i++)なんだからmaxの次に判定があるのは当たり前
アホか

726:デフォルトの名無しさん
10/05/25 17:11:33
>>722
一応IsMultiThreadってグローバル変数が存在してるけど。ソースみりゃわかるけど、
直接Win32のCreateThreadとか呼んだら駄目ぽだけど。BeginThreadかTThreadクラスだけを
使ってる場合だけオk。

727:デフォルトの名無しさん
10/05/25 17:14:10
ああでも、ダメポそうだな。ごめん。

728:デフォルトの名無しさん
10/05/26 00:04:05
>>722
WaitForと言うのがあるらしい。
使い方は分からない。

お知恵をお借りしたいのですが。
今、複数起動が前提のアプリを作っているのですが、
一斉に最小化や復元をしたいと思って共有メモリを
使うところまでは出来たのですが、例えば一斉に最小化の場合は
メニューをクリックされたソフトで共有メモリに「1」を入れる。

他のソフトはその「1」がたったかどうかで最小化すればいいのですが、
お知恵を借りたいのは「1」をどのタイミングで「0」にすればいいかです。
全部が最小化されたかどうかを知るにはどうすればいいかって事です。

考えたのは複数起動した数を共有メモリに記録しておいて、メニューをクリック
されたら「1」ではなく、起動数を入れて(例えば「10」)で最小化したら 
-1 していくと言うやり方です。

他にもっとスマートなやり方があれば教えて下さい。 


729:デフォルトの名無しさん
10/05/26 00:46:32
HWND_BROADCAST

730:デフォルトの名無しさん
10/05/26 13:33:42
e?

731:728
10/05/26 14:07:31
レス、ありがとうございます。

>HWND_BROADCAST
ググってみます

732:728
10/05/26 18:53:43
ググったけど、よう分からんかったです。
SendMessageやPostMessageでHWND_BROADCASTを送ると
関係ないアプリまで最小化や終了をさせてしまうことになりませんか?


733:デフォルトの名無しさん
10/05/26 19:28:16
RegisterWindowMessageって知ってるか?

734:デフォルトの名無しさん
10/05/26 21:25:07
>>733
> RegisterWindowMessageって知ってるか?
おぉ、ありがとうございます。
ググって来ました。
確認させて下さい。

例えば、WM_APP+100は一斉に最小化、WM_APP+101は一斉に終了みたいに決めておいて
アプリ起動時に
RegisterWindowMessage(WM_APP+100);
とかやって登録して
一斉に最小化させたい時は SendMessage(HWND_BROADCAST , WM_APP+100 , 0 , 0);
とやればいいって事ですか?

受け取りは WndProc(ググった先で出てきたので、よく分かってないです。)を使って送られて来た
メッセージによって処理する

こんな感じで良いでしょうか?

735:デフォルトの名無しさん
10/05/26 21:42:18
RegisterWindowMessageの引数は文字列

RegisterWindowMessage(自分だけの文字列)

SendMessage(HWND_BROADCAST, RegisterWindowMessageの戻り値, ここ, とここは自分で決めて振り分ける);

736:728
10/05/27 00:41:49
>>735
思い通りの動きが出来ました。(;゚∀゚)=3
ありがとうございました。

737:デフォルトの名無しさん
10/05/28 23:12:46
var
Form1: TForm1;
days:double;
procedure TForm1.Button1Click(Sender: TObject);
begin
days :=VarToDateTime('28/5/2010') - VarToDateTime('27/4/2010');
showmessage(FloatTostr(days));
end;

これは2010年4月27日と2010年5月28日の日数の差として「31」が表示されます
こんな感じで2010年4月27日から31日経つと「2010年5月28日」のような処理をしたいのですが、どうすればよいのでしょうか?

要はTDateTime 型から日付を求めたいのです


738:737
10/05/29 00:01:44
ごめんなさい自己解決しました

739:デフォルトの名無しさん
10/05/29 20:46:03
>>712ですが、
結局TMainFormというインスタンス名が他のアプリケーションで使われていたようでうまくいかなかったので
メッセージ受信専用ウィンドウを利用する方法を使いました。

メッセージ用ウィンドウプロシージャは
特定のメッセージがきたときだけMainFormにDispatchするようにして
あとはDefWindowProcに渡すようにしたのですが、
処理としてはあっているのでしょうか?
初めはディスパッチのみでDefWindowsProcを呼び出さずにしていたら
終了時にエラーがでました。

740:デフォルトの名無しさん
10/05/29 22:19:45
名前変えればいいだけじゃ・・・

741:デフォルトの名無しさん
10/06/06 20:53:51
下のソースをJavaに移植したいのですが、内容が理解できなくて困っています。
下から7行ほど前からが理解できないので・・・、別言語に書き換えて教えて頂けないでしょうか?
java, c, perl , php, vb, javascript 辺りの書き方であれば理解できます。

function EncodeB32(s: String): String;
const
B32Char: array[0..31] of Char =
('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F',
'G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V');
var
i: Integer;
len: Integer;
begin
if s = '' then begin
Result :='';
Exit;
end;
len := (Length(s) * 8 - 1) div 5 + 1;
s := s + StringOfChar(#0, (len * 5 - 1) div 8 + 1 - length(s));
SetLength(Result, len);
for i:=0 to len - 1 do
Result[i + 1] := B32Char[(MakeWord(Byte(s[(i * 5) div 8 + 1]), Byte(s[(i * 5) div 8 + 2]))
shr ((i * 5) mod 8)) and 31];
end;

742:E- ?
10/06/06 21:31:21
BASE32 だから、検索すれば仕様書があるはず。仕様書から作ったほうが早いよ。私はCで作った。
function EncodeB32(s: String): String;
const
    B32Char: array[0..31] of Char =
        ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F',
        'G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V');
var
    i: Integer;
    len: Integer;
begin
    if s = '' then begin
        Result :='';
        Exit;
    end;
    len := (Length(s) * 8 - 1) div 5 + 1;
    s := s + StringOfChar(#0, (len * 5 - 1) div 8 + 1 - length(s));
    SetLength(Result, len);
    for i:=0 to len - 1 do
        Result[i + 1] := B32Char[(MakeWord(Byte(s[(i * 5) div 8 + 1]),
                                   Byte(s[(i * 5) div 8 + 2])
                                  ) shr  ((i * 5) mod 8)
                                 ) and 31];
end;

743:デフォルトの名無しさん
10/06/06 21:38:01
Javaならライブラリあるだろうに。

744:デフォルトの名無しさん
10/06/06 21:39:03
これで事足りないというなら出直して来るんだ
URLリンク(www.google.co.jp)


745:デフォルトの名無しさん
10/06/06 23:49:13
あれ、関数名はBase32だったので、そう思って組んでみたんですが、結果が違ったので・・・

1. そのソースコードが使われいるexe
$ exec "1c68ee574965514ec9c27a57972719ea"
4NDXFOSLFKFHMTQT2K6LSOGPK

2. Base32エンコード
$ echo "1c68ee574965514ec9c27a57972719ea" | java Base32encode
S0QSUB595BKSK4B0QRLEPJ43A7

>>742
整形ありがとうございます。
やってることは似てそうなんですが、定数が違ってそうなのでもう少し弄ってみます。

746:デフォルトの名無しさん
10/06/07 03:58:40
4NDX と、X が出てくる理由が不明だ。
B595 と、9 が出てくる理由が不明だ。
こうなるはず、
8bit区切り
1c 68 ee 57 49 65 51 4e c9 c2 7a 57 97 27 19 ea
5bit区切り
3 11 14 E 1C 15 1A 9 C 15 8 14 1D 12 E 2 F 9 B 19 E 9 18 19 1D 8

747:デフォルトの名無しさん
10/06/07 09:04:15
Base32(WXYZが使われてる)と、Base32hex(0189が使われてる)があるそうですね。
面白そうなので作ってみたら >>746と同じ結果に。
Base32: DRUO4V2JMVIU5SOCPJLZOJYZ5I======
Base32hex: 3HKESLQ9CL8KTIE2F9BPE9OPT8======
>>745と全然違うなあ。
しかしBase32って超マイナーですね。

748:748
10/06/07 20:34:22
> 1. そのソースコードが使われいるexe
> $ exec "1c68ee574965514ec9c27a57972719ea"
> 4NDXFOSLFKFHMTQT2K6LSOGPK
>
アナタの自作プログラム↑ソース↓
スレリンク(tech板:328番)
>
> 2. Base32エンコード
> $ echo "1c68ee574965514ec9c27a57972719ea" | java Base32encode
> S0QSUB595BKSK4B0QRLEPJ43A7
こっちのソース、またはソースのURLくれ。

749:748
10/06/07 22:36:19
shr ((i * 5) mod 8)) and 31];
 ↓に変更(再コンパイル可能なら、だけど)
shr (11 - ((i * 5) mod 8))) and 31];


750:デフォルトの名無しさん
10/06/08 01:00:38
>>748
今確認したら結果が逆でした・・・汗

1. 移植したいプログラム ( Delphi )
URLリンク(jane.s89.xrea.com)
> nghash.exe "1c68ee574965514ec9c27a57972719ea"
S0QSUB595BKSK4BOQRLEPJ43A7

2. 自作したプログラム ( Java )
スレリンク(tech板:328番)
% echo "1c68ee574965514ec9c27a57972719ea" | java Base32encode
4NDXFOSLFKFHMTQT2K6LSOGPK

Jane2chのNSFiles.txtで使われる、MD5をエンコードした無視画像リストを、
システムに組み込みたくて、移植してる次第です。・・・なんですが、力不足で全く移植できず

751:デフォルトの名無しさん
10/06/08 09:57:52
S0Q..L..はナンチャラは何なの?という疑問 0とL が混じってる。
1.Base32HEX エンコードだけをしてもこの値にはならないので、
  その部分だけのDelphiでは足りない。ソースは受け取ったが、
  ソース全部読む必要があるので、時間と人手がいる。
> nghash.exe "1c68ee574965514ec9c27a57972719ea"
S0QSUB595BKSK4BOQRLEPJ43A7

2.Base32HEX エンコードだけのソースなら、ネット検索すればあるはず。
  1.に関連して、>>749 はバグだと思ったけど、そのソースを生かすなら
  Base32HEXではない。逆にその部分だけを修正すればBase32HEX のソース
  を直せばいい。
また、>>749 shr の使い方を誰かDelphiで合ってるか確認してほしい。

752:747
10/06/08 10:53:30
>>750
やっぱり。どうも変だなと思ってた。あと、ソースの頭にしっかり
//5bitエンコーディング関数 Base32ではない。
って書いてあるじゃない。最初は見落としてたの?

>>751
>>741の function EncodeB32 だけでちゃんと
S0QSUB595BKSK4BOQRLEPJ43A7
になるのを確認したので、これはBase32でもBase32hexでもないと思います。

>また、>>749 shr の使い方を誰かDelphiで合ってるか確認してほしい。
どう確認すればいいのか分かりませんが、そこだけ差し替えたら
D0N6FIA5A575IGMQATBLF69A03
になりましたよ。

Delphi始めて数ヶ月の初心者が頭突っ込んでスマソでした

753:デフォルトの名無しさん
10/06/08 16:32:22
いやいや、可能性が無いなら参考になった。>>752
以下の修正で目的の文字列になった。
参考になるURLがどこかに有ると思うが省略させてもらう。

MakeWord(byte1,byte2) の定義は byte1 | byte2 << 8
それと、shr ((i * 5) div 8)

BASE32の場合は
MakeWord(byte1,byte2) の定義を以下にする byte1 << 8 | byte2
それと、shr (11 - ((i * 5) div 8))

754: ◆/91kCCQXBo
10/06/08 17:41:05
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
char*EncodeB32(char*s){const char B32Char[32]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K'
,'L','M','N','O','P','Q','R','S','T','U','V'};int i,len;char*sa,*Result;if(s==NULL||*s==(char)NULL){return NULL;}len=(strlen(s)*8-
1)/5+1;sa=s;Result=calloc(len+1,1);for(i=0;i<=len-1;i++){Result[i]=B32Char[(((sa[(i*5)/8+0]&0xFF)|(sa[(i*5)/8+1]&0xFF)<<8)>>(((i*5
)%8)))&31];}return Result;}
int main(void){char*ans;ans=EncodeB32("\x1c\x68\xee\x57\x49\x65\x51\x4e\xc9\xc2\x7a\x57\x97\x27\x19\xea");if(ans)puts(ans);free(ans);}

755:747
10/06/08 23:02:43
私も勉強がてらJavascriptに翻訳してみました。
出来る限り元ソースに忠実にしました。
URLリンク(ideone.com)
DelphiもJavascriptもよく分かっていない初心者が書いてるので、激しいツッコミはご容赦下さい。

一応、ブックマークレット版。もちろん、末尾改行は全部除去して使ってね。
Javascript:function EncodeB32(s){function StringOfChar(C,N){var I,Z='';for(I=1;I<=N;++I)
{Z+=C;}return Z;}function MakeWord(H,L){return H|L<<8;}var i,len,B32Char=['0','1','2','3',
'4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V'],
Result=[];if(s==''){return '';}len=(s.length*8-1)/5+1;s+=StringOfChar('\x00',(len*5-1)/8+1-s.length);
for(i=0;i<=len-1;++i){Result[i+1-1]=B32Char[(MakeWord(s.charCodeAt((i*5)/8+1-1),
s.charCodeAt((i*5)/8+2-1))>>>((i*5)%8))&31];}return Result.join('');}
function HexToStr(H){var I,Result='';for(I=0;I<=H.length/2-1;++I)
{Result+=String.fromCharCode(parseInt(H.substr(I*2,2),16));}return Result;}
alert(EncodeB32(HexToStr('1c68ee574965514ec9c27a57972719ea')));

普段はごく簡単なブックマークレットしか作らないので、functionすら滅多に使いません。。。

756:747
10/06/09 07:20:10
DelphiスレなのにJavaやらCやらJavascriptもなんなので、
ideone.comのPascal(FPC:Free Pascal)でDelphiできるか?試してみました。
URLリンク(ideone.com)
結果:プログラム本体の書き換えは一切せずに動作しました。
追加したこと
 1. コンパイラモードをDelphi互換に指定 → {$MODE DELPHI}
 2. Uses節を追加、StrToIntのためにsysutilsを指定
 3. function MakeWordをWindows.pasからパクってきた

以上、初心者の研究コーナーでした
スレ汚しまくってスマソ

757:デフォルトの名無しさん
10/06/09 09:40:11
>>756 君は毎回誤るんかい。
>>745
S0QSUB595BKSK4B0QRLEPJ43A7 誤り
S0QSUB595BKSK4BOQRLEPJ43A7 正しい
だね?

右から左への場合は入力を5の倍数ワード、出力を8の倍数にしなければならないが、
Base32HEX (WXYZを使わない) でエンコードする場合。

Base32を使って、左から右に5ビットで区切ってエンコード
1 c 6 8 e e 5 7 4 9 6 5 5 1 4 e c 9 c 2 7 a 5 7 9 7 2 7 1 9 e a 0 0 0 0 0 0 0 0
3 11 14 E 1C 15 1A 9 C 15 8 14 1D 12 E 2 F 9 B 19 E 9 18 19 1D 8 0 0 0 0 0 0
3HKESLQ9CL8KTIE2F9BPE9OPT8

Encode32を使って、左から右に5ビットで区切ってエンコード
1 c 6 8 e e 5 7 4 9 6 5 5 1 4 e c 9 c 2 7 a 5 7 9 7 2 7 1 9 e a 0 0 0 0 0 0 0 0
1C 0 1A 1C 1E B 5 9 5 B 14 1C 14 4 B 18 1A 1B 15 E 19 13 4 3 A 7 0 0 0 0 0 0
S0QSUB595BKSK4BOQRLEPJ43A7

Base32を使って、右から左に5ビットで区切ってエンコード
0 0 0 0 0 0 0 0 e a 1 9 2 7 9 7 5 7 7 a c 2 c 9 4 e 5 1 6 5 4 9 5 7 e e 6 8 1 c
0 0 0 0 0 0 7 A 3 4 13 19 E 15 1B 1A 18 B 4 14 1C 14 B 5 9 5 B 1E 1C 1A 0 1C
0000007A34JPELRQOB4KSKB595BUSQ0S

Encode32を使って、右から左に5ビットで区切ってエンコード
0 0 0 0 0 0 0 0 e a 1 9 2 7 9 7 5 7 7 a c 2 c 9 4 e 5 1 6 5 4 9 5 7 e e 6 8 1 c
0000008TPO9EPB9F2EITK8LC9QLSEKH3
0 0 0 0 0 0 8 1D 19 18 9 E 19 B 9 F 2 E 12 1D 14 8 15 C 9 1A 15 1C E 14 11 3

758:こまった??
10/06/09 11:40:16
Delphi5 から Delphi2010 に一気に移行したものですが、
たとえば、 TMemo などの既存コンポーネントを継承して、
新しいコンポーネントを作成したとき、
TEST用プロジェクトで動作確認はできるのですが、
いざ、コンポーネントタブ(たとえばsample)に登録しようとしたとき
Delphi5にはあった「コンポーネント」=>「コンポーネントのインストール」
メニューがDelphi2010メニューにありません。
どうやってインストールするのでしょうか?
それとも、プロフェッショナル版ではできない?


759:デフォルトの名無しさん
10/06/09 13:55:35
>>758
URLリンク(mrxray.on.coocan.jp)

760:デフォルトの名無しさん
10/06/09 22:19:20
TOpenDialogとかにボタンを追加したいときはどうするべきなのでしょうか。

761:デフォルトの名無しさん
10/06/09 23:49:42
TOpenPictureDialogのコードが参考になると思う。

762:デフォルトの名無しさん
10/06/10 12:59:36
Synchronizeで実行するプロシージャーで引数が使いたい時って皆さんはどうしていますか?

763:デフォルトの名無しさん
10/06/10 15:02:32
匿名メソッドでいいじゃん

764:デフォルトの名無しさん
10/06/10 16:35:12
>>762
そのためにわざわざフィールド変数を用意して、それ経由してる。


765:デフォルトの名無しさん
10/06/10 17:16:57
mixiにログインして情報をとってくるようなアプリケーションを作りたいと思っています。
そこで、TIdHTTPコンポーネントを使用してログイン部分をいま作成中なのですが、Cookieが無効
になっているため、ログインできませんと言われてしまいます。
(URLリンク(mixi.jp)が返ってくる)

TIdHTTPコンポーネントのCookieManagerには該当のTIdCookieManagerを指定し、
AllowCookiesはtrueの状態にしています。

IdHTTP1.Postの第一引数は以下の通りです。
'URLリンク(mixi.jp)'

IdHTTP1.Postの第二引数にはstringlistで以下のようなデータを渡しています。
'next_url=/home.pl'
'email=メールアドレス'
'password=パスワード'

TIdHTTPコンポーネントを使用して、mixiへのログインに成功した方、どのようにされたかアドバ
イスいただけないですか?

766:デフォルトの名無しさん
10/06/10 21:38:02
オミトロンとかLiveHTTPHeaderなんかで
ブラウザでログインしたときの状況を確認したほうが早いと思ふ

767:デフォルトの名無しさん
10/06/11 11:13:50
>>764
無名メソッドを使えば、わざわざフィールド変数を用意する必要はない。
URLリンク(edn.embarcadero.com)

procedure TNewThread.Execute;
var
i: Integer;
A,B: Integer;
begin
{ スレッドとして実行したいコードをここに記述してください }
for i := 0 to 99 do
begin
A := Random(10000);
B := Random(10000);
Synchronize(procedure
begin
Form1.Memo1.Lines.Add('NT : ' + FormatFloat('#,##0',A-B));
end);
end;
end;



次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch