5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

くだすれDelphi(超初心者用)その23

1 :デフォルトの名無しさん:05/03/11 01:08:15
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。

<前スレ>
くだすれDelphi(超初心者用)その22
http://pc5.2ch.net/test/read.cgi/tech/1107332482/

<その他>
ボーランド
http://www.borland.co.jp/
DelWiki
http://onigiri.s3.xrea.com:8080/delphi/

2 :デフォルトの名無しさん:05/03/11 01:09:51
過去スレ

21 http://pc5.2ch.net/test/read.cgi/tech/1104511938/
20 http://pc5.2ch.net/test/read.cgi/tech/1101530485/
19 http://pc5.2ch.net/test/read.cgi/tech/1097454588/
18 http://pc5.2ch.net/test/read.cgi/tech/1093996761/
17 http://pc5.2ch.net/test/read.cgi/tech/1091671391/
16 http://pc5.2ch.net/test/read.cgi/tech/1089779142/
15 http://pc5.2ch.net/test/read.cgi/tech/1087823906/
14 http://pc5.2ch.net/test/read.cgi/tech/1085239007/
13 http://pc5.2ch.net/test/read.cgi/tech/1081003641/
12 http://pc5.2ch.net/test/read.cgi/tech/1076610073/
11 http://pc5.2ch.net/test/read.cgi/tech/1076609666/
10 http://pc2.2ch.net/test/read.cgi/tech/1074523803/

3 :デフォルトの名無しさん:05/03/11 01:12:12
>>2の続き

09 http://pc2.2ch.net/test/read.cgi/tech/1071294733/
08 http://pc2.2ch.net/tech/kako/1068/10682/1068201045.html
07 http://pc2.2ch.net/tech/kako/1065/10651/1065195699.html
06 http://pc2.2ch.net/tech/kako/1063/10632/1063202727.html
05 http://pc5.2ch.net/tech/kako/1061/10610/1061090908.html
04 http://pc2.2ch.net/tech/kako/1058/10588/1058834815.html
03 http://pc2.2ch.net/tech/kako/1055/10559/1055986736.html
02 http://pc2.2ch.net/tech/kako/1053/10537/1053757982.html
01 http://pc2.2ch.net/tech/kako/1051/10518/1051882835.html

4 :デフォルトの名無しさん:05/03/11 01:51:27
おつ

5 :デフォルトの名無しさん:05/03/11 03:02:37


6 :デフォルトの名無しさん:05/03/11 04:53:38
begin

7 :デフォルトの名無しさん:05/03/11 06:21:54
end

8 :デフォルトの名無しさん:05/03/11 11:22:07


9 :デフォルトの名無しさん:05/03/11 12:23:16
キタ━━━━(゚∀゚)━━━━ッ!! 
「Delphiリファレンスガイド 6&7対応」

10 :デフォルトの名無しさん:05/03/12 17:10:47
任意のフォルダに新規テキストファイルを作るにはどうしたらいいんですか?

11 :デフォルトの名無しさん:05/03/12 18:25:12
var F: Text;
begin
AssignFile(F, "C:\Hoge\Huge.txt");
Rewrite(F);
Write(F, "テキスト");
CloseFile(F);
end;

もしくは、TStringList.SaveToFile とか TFileStream を使う。

12 :デフォルトの名無しさん:05/03/12 18:25:33
任意のフォルダに新規テキストファイルをセーブする

13 :11:05/03/12 18:26:18
あー、さっきまでC書いてたから間違えた…
"" → '' で。

14 :デフォルトの名無しさん:05/03/12 20:47:47
>>11-12
できました。ありがとうございました。

15 :デフォルトの名無しさん:05/03/12 23:36:16
Delphiで、日本語文字列に対し正規表現を使うには
どういう方法があるのでしょうか・・・
お願いいたします。

16 :デフォルトの名無しさん:05/03/12 23:41:38
http://onigiri.s3.xrea.com:8080/delphi/ を一通り読むとタメになるよ。
俺はActiveXコンポを使ってる

17 :15:05/03/13 00:04:07
>16
ありがとうございます。ポータルからの検索しかしておらず、見逃していました。すみません。

18 :デフォルトの名無しさん:05/03/13 01:44:09
パソ歴一週間の超初心者です。EXCELでA1÷A2をA3に表示したいのですが分かりません
誰か救済してください。

19 :デフォルトの名無しさん:05/03/13 01:58:19
また"超初心者"の文字だけ見た来訪者だな!
ActiveXの質問ではあるまい。

20 :デフォルトの名無しさん:05/03/13 02:22:16
>>18
EXCELが何を意味するか分かりませんが、
A1,A2,A3がTEditとすると、以下のようにやればできます。

if StrToInt(A2.Text) <> 0 then
 A3.Text := IntToStr(StrToInt(A1.Text) div StrToInt(A2.Text));

21 :デフォルトの名無しさん:05/03/13 02:25:54
>>20
Microsoft Excel でしょ。とネタにマジレス。

>>19
A3 に =A1/A2 と書く。とやっぱりマジレス。

22 :デフォルトの名無しさん:05/03/13 04:43:34
>>21 ありがとうございます。
Microsoft Excelを詳しく教えてくれる板どこにありますか?
A3の数値を小数点以下切り捨てにして、かつ最大数を1410までにしたいんですが・・・
本当にすいませんでした。


23 :デフォルトの名無しさん:05/03/13 04:58:59
>>22
http://find.2ch.net/?BBS=ALL&TYPE=TITLE&STR=Excel

24 :デフォルトの名無しさん:05/03/13 05:16:04
>>23 ありがとうです。あなたたちみんな神です。

25 :デフォルトの名無しさん:05/03/13 06:40:14
.

26 :デフォルトの名無しさん:05/03/13 06:49:16
OpenJaneやGikoNaviのレスエディタのコンポは同じなんでしょうか?
右クリックメニューがまるで同じなんですけど。

27 :デフォルトの名無しさん:05/03/13 11:08:22
メモ帳と同じ

28 :デフォルトの名無しさん:05/03/13 12:24:17
なんかこのスレ、ノートンが反応するんだけど...

29 :デフォルトの名無しさん:05/03/13 13:55:14
>28
どうも>>25のメール欄がUnix.Penguinとみなされるみたい

30 :ななしへたぐらま ◆XcB18Bks.Y :05/03/13 14:02:13
遅ればせながら>>1乙です.

>>19
次スレからは>>1

「このスレはボーランド社の『Delphi(デルファイ)』の質問スレです」

などと明確に書いた方が良さそうですね.
PCの初心者さんはおそらくせっぱ詰まった状態でいらしてくると思いますので,
「Delphiとはなんなのか」ということまで考える余裕もないのでしょう.

>>26
どちらも使っていないのでわかりませんが
Windows標準のポップアップメニューかもしれません.
フォームにエディットコンポを貼り付けただけのものを実行してみて,
このエディットコンポを右クリックしたときに出てくるポップアップメニューがそれらと同じなら
標準のポップアップメニューだと思われます.

>>28-29
VBSのラブレターウィルスのコード貼り付けと並ぶ,
ノートン先生が誤反応させる嫌がらせ行為です.

IEなどでご覧の場合は… http://info.2ch.net/wiki/pukiwiki.php?%A5%CE%A1%BC%A5%C8%A5%F3%C6%FE%A4%EC%A4%BF%A4%E9%A3%B2ch%A4%CB%BD%F1%A4%AD%A4%B3%A4%E1%A4%CA%A4%A4%BF%CD%A4%D8#faq08
Open Janeなどの専用ブラウザをお使いの場合は… http://info.2ch.net/wiki/pukiwiki.php?%A5%CE%A1%BC%A5%C8%A5%F3%C6%FE%A4%EC%A4%BF%A4%E9%A3%B2ch%A4%CB%BD%F1%A4%AD%A4%B3%A4%E1%A4%CA%A4%A4%BF%CD%A4%D8#faq12
後者の場合はログファイルが削除されてしまうので要注意.


31 :デフォルトの名無しさん:05/03/13 18:11:09
>>30
> このエディットコンポを右クリックしたときに出てくるポップアップメニューがそれらと同じなら
> 標準のポップアップメニューだと思われます.
 そのようです。で、TMemo(というよりその上位のTCustomEdit)も右クリックメニ
ューでIMEのオン・オフと再変換ができるのですがTCustomEditのソース(StdCtrls)
をみてもそれらを実現しているコードが見あたりません。StdCtrls.pasはImm.pasを
usesさえしていません。これはどういうことなんでしょ?


32 :デフォルトの名無しさん:05/03/13 18:38:39
>>30
> >>28-29
> VBSのラブレターウィルスのコード貼り付けと並ぶ,
> ノートン先生が誤反応させる嫌がらせ行為です.
削除依頼出してきます。

33 :デフォルトの名無しさん:05/03/13 18:53:55
>>31
コンポーネントではなく Wondows の EDIT コントロールのレベルで実装されている。

34 :デフォルトの名無しさん:05/03/13 19:13:32
Wondows

35 :33:05/03/13 19:18:50
orz

36 :デフォルトの名無しさん:05/03/13 20:26:19
みなさま、有難う御座います。

37 :デフォルトの名無しさん:05/03/13 23:27:00
恐縮ですが、質問です。
環境は、デルファイ6+WIN2k(SP4)です。
デスクトップの向かって右端に居座るタイプのランチャーを自作しています。
他のアプリケーションのウィンドウを最大化したときにランチャーに覆い被さらないようにしたのですが、どこを調べたらいいのかわかりません。
(タスクバーで「自動的に隠さない」+「常に手前に表示」にしたときのようにしたいのです)
ウインドウズシステムにデスクトップの幅を誤認させれば何とかなりなりそうだと考え、レジストリを調べましたが、それらしい項目は見つかりませんでした。
自宅に「Delphi Win32 APIリファレンス」という本があったので調べましたが、必要な情報はありませんでした。
Tscreen.widthは、読み出し専用なので、APIをつかわなければならないと思うのですが、setscreenやsetdesktopで検索しても該当の情報は出てきませんでした。
直接の実装方法でなくても、どのAPIを使えばいいかだけでも教えていただきたいと思います。
よろしくお願いします。

38 :デフォルトの名無しさん:05/03/13 23:40:31
AppBar アプリにする

39 :デフォルトの名無しさん:05/03/14 00:31:56
>>前スレ1000
利用者がクラッカーでなくても、コマンドラインさえクラッカーが流せば誰でも使えるじゃまいか

40 :デフォルトの名無しさん:05/03/14 00:44:51
クラッカーはクラックしたアプリを流せばやはりだれでも使えるんじゃないの?

ところで、デバッガを使ってどうやって「秘密のパラメータ」を知ることができるの
かを教えて

41 :デフォルトの名無しさん:05/03/14 00:50:35
怪しいexeを使うよりはコマンドラインスイッチ指定するほうが明らかに利用する奴が多いだろう…てか
誰もそこまで考えてねーだろな。フサギコも二重起動防止を回避できる一つの案としてああいうコードにしてるだけだろうし。

>>40
デバッガ使ったことないんか。APIでブレークすれば引数なんて全部丸見えだ。

42 :デフォルトの名無しさん:05/03/14 00:54:57
> APIでブレークすれば引数なんて全部丸見えだ。

単体のデバッガって使ったことないです。そうなんですか。ありがとう。



43 :デフォルトの名無しさん:05/03/14 01:01:08
デバッガ使わなくても、詳細な情報を取得できるツールはあるよ

44 :デフォルトの名無しさん:05/03/14 01:08:22
> デバッガ使わなくても、詳細な情報を取得できるツールはあるよ

うひゃ、そうなんだ。実は、ある言語の勉強のために専用 IDE RAD を使わないで
アプリをつくってるんだけど、コンパイラのパラメータの説明はあるんだけど、
理解できないんです。で、実際に IDE RAD を使った場合、コンパイラにどんな
パラメータを送っているのかを知りたいと思っていました。

Delphi の場合、IDE で CTRL+F9 でコンパイルしたとき、実際に dcc32.exe
にどんなパラメータを設定しているのかを簡単に見るには、どうした
らいいか教えてください。お願いします。

45 :デフォルトの名無しさん:05/03/14 01:23:25
> 二重起動防止を回避できる一つの案

二重起動防止のためにミューテックスを使っている場合は、CloseHandle() して
ミューテックスを破棄してから、自分を起動すると、パラメータを渡さなくても
いいよ。

46 :デフォルトの名無しさん:05/03/14 01:58:28
IDEでコンパイルした場合、dcc32.exeは使わないのでは?

47 :デフォルトの名無しさん:05/03/14 02:09:03
えっ、そうなの? IDE が dcc32.exe でコンパイルしてるんだと思ってた。
じゃなんでコンパイルしてるの? delphi32.exe はコンパイラを持ってない
と思うけど、持ってるの、なかに?

48 :デフォルトの名無しさん:05/03/14 02:28:02
dcc32.exeを削除してIDEでコンパイルしてみ。

49 :デフォルトの名無しさん:05/03/14 02:30:18
dcc??.dllってのがあると思う。

50 :ミ,,゚Д゚彡 ◆A6VzDeLphI :05/03/14 04:45:06
Batが万能とかいうつもりはないが、

> だって自分自身なんだから、適当なコマンドラインパラメータを渡せば
> 二重起動禁止ロジックを迂回できるようにすることができるでしょ? なぜ、バッチ?
> そうですか? 起動パラメータを使えば起動されるとき二重起動チェックをするかどうか、
> とか、任意秒のSleep()をすることも簡単に設定できますけどね。

iniにしてもregにしても、設定を終了時書いて起動時読むような
オブジェクトの永続化(って最近は言うかな?)コードともかぶらなくてすむ。

それに、秘密パラメータやCloseHandleで
二重起動防止解除してたらそれはそれで
起動時の処理コードやデバッグが面倒じゃなくてか?

51 :デフォルトの名無しさん:05/03/14 10:22:51
>>48-49

さんくす。Del6per だと dcc60.dll っ手言うのがたしかにある。知らなかった。

52 :デフォルトの名無しさん:05/03/14 13:38:42
今日トライアルをダウンロードしたばかりの
超初心者なのでお手柔らかにお願いします。
IEを扱うコンソールアプリを作りたいのです。

delphi7で新規作成でその他、
コンソールアプリケーションをえらんで
program IECALL;
{$APPTYPE CONSOLE}
uses
SysUtils;
var objIE:variant;
begin
objIE:=CreateOleObject('InternetExplorer.Application');
objIE.Quit;
Writeln('IE called!');
end.
と書いても[エラー]未定義の識別子 : 'CreateOleObject'って
出てしまいます。


53 :デフォルトの名無しさん:05/03/14 13:41:31
>>52
っ[ VCLリファレンス ]

54 :デフォルトの名無しさん:05/03/14 14:39:26
>>52
uses節にComObjを追加
必要なユニットをusesしないと起こる

55 :デフォルトの名無しさん:05/03/14 15:21:23
>>53-54
アドバイスありがとうございます。
VCLリファレンス。。
そうですね。
これが読めないとですね。。
uses
SysUtils,
ComObj;
としてみましたら上記エラーは出なくなりました!
が、次はEOleSysErrorが出ました。
ここで、VCLリファレンスですね。。


56 :デフォルトの名無しさん:05/03/14 15:39:05
EOleSysErrorとかEConvertErrorとか
EなんたらっていうのはDelphiが出す例外

>>52のソースが何をしたいか理解できないが
兎に角何かおかしな処理をしてるのだろう

57 :デフォルトの名無しさん:05/03/14 15:48:20
>>56
ソースは呼び出して閉じてるだけですが
成功すれば、.Navigateでurlを指定して
.document.body.innerHTMLでソースを
取得したいんです。


58 :デフォルトの名無しさん:05/03/14 15:56:27
>>52のソース打ち込んでもIEが起動しない・・
objIEがUnassignedじゃないんだろうか

if objIE = unassigned then
ShowMessage('バリアント空')

59 :デフォルトの名無しさん:05/03/14 16:02:32
TWebBrowserでも使ったほうがいいんじゃ無いだろうか・・・

60 :デフォルトの名無しさん:05/03/14 16:09:49
uses
  ComObj, ActiveX;
var
  objIE: Variant;
begin
  CoInitialize(nil);
  objIE := CreateOleObject('InternetExplorer.Application');
  objIE.Visible := True;
  objIE.Navigate('http://www.2ch.net');
  CoUninitialize;
end.

61 :デフォルトの名無しさん:05/03/14 16:26:11
>>60
ありがとうです。処理できました!
いやーなんとなくわかってきましたよ。
ShowMessageで未定義の識別子エラーがでれば
ヘルプでShowMessageを検索してユニットが
Dialogsであればuses節に指定するんですね。
基本もいいとこですが(笑)
トライアル期間はあと30日なんでがんばります!


62 :デフォルトの名無しさん:05/03/14 17:47:50
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。


63 :デフォルトの名無しさん:05/03/14 17:53:49
>トライアル期間はあと30日なんでがんばります!
Delphi6 Personalで十分じゃないか?

64 :デフォルトの名無しさん:05/03/14 19:00:42
>Delphi6 Personalで十分じゃないか?
あ!そんなのあったんですねー。
もちろん商用じゃないし。。
インストールしなおします。

で、>>60さんのをソースをそのまま
procedure化しました。
メイン関数内で呼び出しに成功しましたが
呼び出し行以降が処理されずに
コンソールごと終了してしまいます。
CoUninitialize;をメインに書くと
次行以降も実行されますが、最後に
EAccessViolation例外エラーがでます。
CoUninitializeをコメントアウトすると
滞りなく動くのですがダメですよね?

65 :デフォルトの名無しさん:05/03/14 19:55:31
>>64
initialization 節で CoInitialize
finalization 節で CoUninitialize
じゃだめなん?

66 :デフォルトの名無しさん:05/03/14 20:16:55
ComObjをusesすれば自動的に初期/終了ルーチンが呼ばれるようになる

67 :37:05/03/14 20:56:51
>>38
回答に感謝。さっそく調べてみます。

68 :デフォルトの名無しさん:05/03/14 22:05:33
TMediaPlayerなんですが、ビデオCDの画像ファイルの拡張子がdatですと
エラーします。拡張子をwmvとかmp2にファイル名を書きかえるとちゃんと
再生できるのですが、CDの動画はおおよそ拡張子がdatになっていますから
困ってます(実用にならない)。皆さんはどの様にされているのでしょう?
MCI_sendcommandを使えなんて言わないで下さいね。


69 :デフォルトの名無しさん:05/03/14 22:49:54
MCI_sendcommandを使え

70 :68:05/03/14 23:32:18
>>69
語るに落ちたな69。mciSendCommandじゃ。愚か者め。だいたい
お前のような出来の悪いのが・・・やめておきます。皆さん
失礼しました。
この件は解決しているようなのですが何方かご存知な方は
いらしゃらないでしょうか?


71 :デフォルトの名無しさん:05/03/15 00:00:45




72 :デフォルトの名無しさん:05/03/15 02:53:06
>>70 「語るに落ちた」の使い方が変

73 :デフォルトの名無しさん:05/03/15 09:24:14
むしろ >>70 が 語るに落ちてますから。 ぷぷ

74 :デフォルトの名無しさん:05/03/15 09:48:01
ありがちですよ。自分もつい最近まで誤用してました。

語るに落・ちる
〔「問うに落ちず語るに落ちる」の略〕何気なく話しているうちに、
うっかり本当のことを言ってしまう。

75 :デフォルトの名無しさん:05/03/15 11:25:29
HTTPダウンロードをするクラスはどこかに落ちてませんか?

76 :デフォルトの名無しさん:05/03/15 11:42:28
>>75
TIdHTTP

77 :デフォルトの名無しさん:05/03/15 11:48:22
>>65
>initialization 節で CoInitialize
>finalization 節で CoUninitialize
すみません。具体的にどの位置に指定するのでしょうか?



78 :デフォルトの名無しさん:05/03/15 11:55:57
>>77
> すみません。具体的にどの位置に指定するのでしょうか?

だからInitializationとFinalizationの位置だって!


79 :デフォルトの名無しさん:05/03/15 12:02:18
InitializationとFinalizationを置く位置の質問でないか?

■ コンソールアプリケーションでInitializatonは使用できますか?
http://homepage1.nifty.com/MADIA/delphi/delphi_bbs/200311_03110042.html

80 :デフォルトの名無しさん:05/03/15 12:04:46
ヘルプより

ユニットの構造と構文

unit Unit1;

interface

uses { ここにユニットを指定する }

{ インターフェース部を記述する }

implementation

uses { ここにユニットを指定する }

{ 実現部を記述する }

initialization
{ 初期化部を記述する }

finalization
{ 終了処理部を記述する }

end.

81 :デフォルトの名無しさん:05/03/15 13:38:56
ファイルを先頭から100バイト読んで確保したメモリに格納したいのですが、
どこが間違ってるかわからないので教えてください

var
 DataFile: file;
 AmtTransferred:Integer;
 Data: Pointer;
begin
 GetMem(Data,100);

 AssignFile(DataFile, 'c:\test.dat');
 Reset(DataFile, 1);
 BlockRead(DataFile, Data, 100);
 CloseFile(DataFile);

 Dispose(Data);
end;


82 :デフォルトの名無しさん:05/03/15 13:45:27
procedure BlockRead(var F: File; var Buf; Count: Integer [; var AmtTransferred: Integer]);
の var Buf;に注意

83 :デフォルトの名無しさん:05/03/15 13:48:58
BlockRead(DataFile, Data^, 100);
FreeMem(Data);

84 :デフォルトの名無しさん:05/03/15 13:54:18
ありがとうございます。うまくいきました!

85 :デフォルトの名無しさん:05/03/15 13:55:36
>>81
さらに、

GetMem ⇔ FreeMem
New ⇔ Dispose

という対応関係もあるから、使い終わったメモリの解放は FreeMem(Data); にするといいでしょう。

86 :デフォルトの名無しさん:05/03/15 13:59:15
>>78-80
ありがとうございました。
79さんの言うとおりの症状&意味でした。
わかりづらくてすみませんでした。
Unit1を作成してUses節にAxtiveXを指定し、
initialization 節で CoInitialize
finalization 節で CoUninitialize
を指定しました。

もとのプロジェクトのuses節に
Unit1 in 'Unit1.pas'と指定すれば
できました!



87 :デフォルトの名無しさん:05/03/15 14:01:44
 ぱいチンコびろーん
   ∩___∩     
   | ノ      ヽ/⌒) 
  /⌒) (゚)   (゚) | .|  
 / /   ( _●_)  ミ/
.(  ヽ  |∪|  /
 \    ヽノ /   
  /      /  
 |   _つ  /    
 |  /UJ\ \       
 | /     )  )       
 ∪     (  \    
        \_)


88 :デフォルトの名無しさん:05/03/15 14:31:39
ttp://forum.nifty.com/fdelphi/faq/00049.htm

>上述した5つの方法を、列挙型の変数で分岐させて実行する手続きを作ってみます。

なんでわざわざこんな複雑なコードにするんだろう。
自慢なら他でやれと言いたい。 シンプルなコードのほうがありがたいんだよヴォケ。

89 :ミ,,゚Д゚彡 ◆A6VzDeLphI :05/03/15 14:53:49
別に複雑じゃないが?
共通処理があるのに5関数作るのがヤだったんでしょ。

必要ならシンプルなコードを自分で抽出して
公開して自慢して、他の人からありがたがられるのが
よいでしょう。

...他のスレで書き込めよといいたい。

90 :デフォルトの名無しさん:05/03/15 15:21:34
88の脳の処理能力が低いだけでしょう

91 :デフォルトの名無しさん:05/03/15 15:49:47
およそ9年前の記事に文句をつける人がいるスレはここですか?

92 :デフォルトの名無しさん:05/03/15 16:10:03
テキストエディタを作っていますが
テキストファイル内の文字コードを取得する方法はないでしょうか?

一応、適当に読み込んである文字コードに従ってエンコードして
一致すればその文字コードという方法は思いついたのですが
もっとスマートな方法なないですか

93 :デフォルトの名無しさん:05/03/15 16:21:33
TButton.Create(Self)
で生成したButtonのprocedure OnClickは、何処に書けばいいんでしょうか。
何か別のスレで聞いたらこっちに飛ばされました…

94 :デフォルトの名無しさん:05/03/15 16:35:19
>>93
http://forum.nifty.com/fdelphi/faq/00134.htm

95 :ミ,,゚Д゚彡 ◆A6VzDeLphI :05/03/15 16:36:33
B := TButton.Create(Self);
B.OnClick := Button1Click;

ではないかと。

Button1Click手続きは自分で記述する必要がありますよ。



96 :デフォルトの名無しさん:05/03/15 17:55:02
captionに一定文字数以上の文字列が代入されるとき、超した分を「・・・」みたいな感じで省略したいんだが、どうすればいい?
ヒントキボン

97 :ミ,,゚Д゚ミノ ◆A6VzDeLphI :05/03/15 17:59:36
ほい
http://www.wwlnk.com/boheme/delphi/tips/tec1220.htm

98 :デフォルトの名無しさん:05/03/15 18:38:13
dクス

99 :デフォルトの名無しさん:05/03/15 18:39:35
ありがとうございます。

100 :ななしへたぐらま ◆XcB18Bks.Y :05/03/15 18:44:13
>>67
http://www.cmagazine.jp/bookreview/19990402.html
この本に解説が載っているのですが残念ながら絶版の模様.


101 :ミ,,゚Д゚彡 ◆A6VzDeLphI :05/03/15 19:53:06
http://www.asahi-net.or.jp/~GV4J-SGUR/narik/stp001.htm#SHAppBarMessage
SHAppBarMessage関数の項

uses ShellAPIをしてから動かしてみたけど
タスクバーとドッキングして動くようなものでは
ないんですね。

> モジュール 'user32.dll' のアドレス 読み込み違反
がたくさん出るので、やめときます。

その本は持っているけど難しくて理解できなかったや。

102 :デフォルトの名無しさん:05/03/15 19:59:57
すいません。前スレで自身を再起動する方法を見かけたのですが、
別途実行ファイルを用意せずに行う方法ってあるんでしょうか。
興味が沸いたので是非知りたいですッ!

103 :ミ,,゚Д゚彡 ◆A6VzDeLphI :05/03/15 20:41:16
こんな感じでしょうか,,,

procedure TForm1.Button3Click(Sender: TObject);
begin
 Application.MainForm.Close;
 //もしくは、Application.Terminate;

 WinExec(PChar(Application.Exename), SW_SHOW);
end;


104 :毛の生えたブリーフ:05/03/15 21:34:17
いまさらの話題です

D7のIDEのメニューバーの件ですが、起動後すぐは、すべてのメニューにアクセラレータキーが
表示されません。・・・・たとえば「ファイル」のみ
しかし、何かメニュー操作すると「ファイル(F)」のように表示されます。
それから選択されたメニュー項目はバックがブルーに反転しますが、別メニューを
選んでも前の反転がそのまま当たり前に二三箇所残る場合があります。

みなさんの環境ではどうですか? 別に支障がないけどすこし気持ち悪いです。
My環境は AMDK6-2、300MHz(笑)、PenV、500MHz(笑)
OSはWin2000sp4です。メモリは256MBです。

105 :68:05/03/15 21:41:07
TMediaPlayerなんですが、ビデオCDの画像ファイルの拡張子がdatですと
エラーします。拡張子をwmvとかmp2にファイル名を書きかえるとちゃんと
再生できるのですが、CDの動画はおおよそ拡張子がdatになっていますから
困ってます(実用にならない)。皆さんはどの様にされているのでしょう?
MCI_sendcommandを使えなんて言わないで下さいね。

106 :68:05/03/15 21:47:31
追加:TMediaPlayerは結構使えるみたいです。



107 :デフォルトの名無しさん:05/03/15 22:36:02
>>92
SJIS EUC JIS の3種類でよければ

 1. とりあえず EUC だと仮定する。
 2. エスケープシーケンスが出てきた -> JIS
 3. $80 〜 $A0 の範囲の文字が出てきた -> SJIS
 4 2 にも 3 にも引っかからなかった -> EUC の可能性大

SJIS の半角カナは無視してるけど、大抵はこれで判別可能。
昔書いたソースがどっかにあったはずだけど見つからない…。

108 :ミ,,゚Д゚彡 ◆A6VzDeLphI :05/03/15 22:43:40
>>104
ハードウェアアクセラレータのトコの問題っぽい感じがしますが

2台ともだとすると違うかな...



109 :102:05/03/15 23:46:37
>>103
こんな事できたなんて・・・!びっくりです。
ありがとうございますッ!

110 :ミ,,゚Д゚彡 ◆A6VzDeLphI :05/03/16 00:03:40
D2005です。
DMonkeyのHELPの[使用法][4.実行例]にしたがって

procedure TForm1.Button1Click(Sender: TObject);
var retval: TJValue;
begin
if DMS1.Compile('function f(a){ println(a);}') then
begin
DMS1.Run;
DMS1.CallFunction('f',['hello'],retval);
ShowMessage(retval.vString);
end;
end;
としたら、CallFunctionの所で
---------------------------
デバッガ例外通知
---------------------------
プロジェクト Project1.exe は例外クラス EJReturn (メッセージ 'return')を送出しました。
---------------------------
ブレーク(B) 次へ(C) ヘルプ
---------------------------
と、なるのですが、どうしたらええもんですかと…

・・・スレ?板?違い?

111 :デフォルトの名無しさん:05/03/16 00:06:52
>>88
自慢というか、思い付きでは?
ちゃんとしたアプリケーションでこんなコードは書かないでしょ。
必要ないだろうし。

112 :デフォルトの名無しさん:05/03/16 00:16:51
>>110
デバッグすりゃいいだろ

113 :デフォルトの名無しさん:05/03/16 02:43:04
>>110
ソース見た限りだと、必ず生成するっぽいね。
特に処理しなくてもいいんちゃう?
IDEからじゃなくて、普通に実行する分には問題なし。

ちなみに、そのスクリプトじゃ、helloとは表示されないのはわかってるよね?
'function f(a){ return a;}'
じゃないと。

114 :デフォルトの名無しさん:05/03/16 10:23:25
>>107
遅ればせながらありがとうございます
その手法で認識させて、後は文字コードを指定する機能を設けて
対応していこうと思います。

ブラウザでも文字コードを指定する機能があることから
まだまだ文字コードの自動認識は難しいようですね

115 :68:05/03/16 13:00:39
>>74
おもしろい。はい。私がバカでした。でも>>69は話にならないよ。


116 :デフォルトの名無しさん:05/03/16 13:44:26
さもしい

117 :デフォルトの名無しさん:05/03/16 14:10:12
QRLabel で印刷しようとしています。
Labelのフォントに取り消し線っていうのがありますが、
線1本なので困っています。
2重線をひくにはどうしたらいいですか?

118 :デフォルトの名無しさん:05/03/16 14:16:04
>>117
親WinControlのWindProc乗っ取ってWM_PAINTで自前で書く

119 :118:05/03/16 14:17:39
>>118
は取り消し

120 :デフォルトの名無しさん:05/03/16 14:22:07
splitterって幅を1にするとドラッグしにくくなるけど、
見た感じでの幅は1で、ドラッグできる範囲を2
とかにするのは不可能?

121 :デフォルトの名無しさん:05/03/16 17:05:14
Delphi7で、TStringListのn行目の文を
TSL[n]で取り出そうとするとエラーになるんですが、
どうやってとりだせばよいですか

122 :デフォルトの名無しさん:05/03/16 17:37:38
>>121
n-1

123 :デフォルトの名無しさん:05/03/16 17:37:44
>>121
Strings[n]
だけどその前に大きな勘違いをしていると思われ。
というか釣られたんですか私?

124 :デフォルトの名無しさん:05/03/16 17:54:56
(・∀・)ニヤニヤ

125 :デフォルトの名無しさん:05/03/16 19:35:45
DelphiのStringにVBでいうvbNullStringみたいなのって無いのでしょうか?

126 :デフォルトの名無しさん:05/03/16 21:33:16
>>125
'' とか #0 とか array[0..0] of Char = #0 とか?
何に使うの?

127 :Delフサギコ ◆A6VzDeLphI :05/03/16 22:15:37
    ∧ ∧  >>125-126
    ミ ゚Д゚彡
  〜ミ,,,,uuミ
SysUtilsに
 EmptyStr: string = '';
と定義されてるぞよ

128 :Delフサギコ ◆A6VzDeLphI :05/03/16 22:23:00
    ∧,,∧   センクス
   ,,ミ,,゚Д゚ミ   >>113さん
  .とミ,,,,,U,,U

EJReturnは無視する冷害にいれました。
この設定使ったの、何年ぶりだろう....

例外が発生しているので
てっきりスクリプトが誤動作orSyntaxErrorでも起こしているのかと思て
スクリプト側はあまり変更テストしていなかったのですが
正常動作を確認しましたです。

ありがとう。

DelWiki追記しとかないと...

129 :デフォルトの名無しさん:05/03/16 22:28:54
>>127
vbNullString はただの空の文字列じゃないよ。

130 :デフォルトの名無しさん:05/03/16 22:44:34
Delphiへの愛が感じられるスレですね

131 :デフォルトの名無しさん:05/03/17 00:52:04
var
 FList,GList: TList;

 Delphi5のTListにはAssignがないのですが
 FList.Assign(GList);
の代わりは
 for i := 0 to GList.Count-1 do
  FList.Add(GList[i]);
でいいのでしょうか?


132 :デフォルトの名無しさん:05/03/17 01:07:23
それでいいはず。

余談だが、TListのassignメソッドって、デフォルトパラメータが二つもあるんで、
一度、D6以降のヘルプも読んだ方が良いよ
知っておくと応用が楽

133 :125:05/03/17 01:10:58
>>126-127

vbNullStringというのを無理矢理Delphiで表現すると、

PChar(vbNullString) = Nil

です。ポインタがNil(=0)になる文字列が使えたら便利だなと思いまして。
DLLを良く使うプロジェクトに現在居る物で。

134 :デフォルトの名無しさん:05/03/17 01:46:42
カラーダイアログの基本色の色変更をしたいのですが、どうすればいいでしょうか?



135 :デフォルトの名無しさん:05/03/17 05:02:05
>>134
基本色はシステム依存なので変えられない。

MSDN より
The basic colors represent a selection of the colors
available on the specified device. The actual number
of colors displayed is determined by the display driver.
For example, a VGA driver displays 48 colors, and a
monochrome display driver displays only 16.



136 :デフォルトの名無しさん:05/03/17 09:18:14
>>135
ありがとうございます。 自分で簡易なパレットを作ってみます。

137 :デフォルトの名無しさん:05/03/17 15:36:08
TListView(vsReport)で選択中のアイテムが何行目か知りたいんだけど
どうやって取得すればよいのでしょうか?

138 :デフォルトの名無しさん:05/03/17 15:38:27
>>137
index

139 :デフォルトの名無しさん:05/03/17 18:05:28
すいませんIndexと聞いて某小説を思い浮かべてしまったんですがどうすればいいでしょうか?

140 :デフォルトの名無しさん:05/03/17 18:34:10
シリアルキー解析集「ALTEA」
大好評発売中!

http://openuser10.auctions.yahoo.co.jp/jp/user/dancexxx1960?


市販SOFTやオンラインSOFTのパスワード集です。
オークション関係から画像・OS・表計算・CAD・・・・etc
国内・国外のあらゆる分野のSoftを解析済です。


これを初めて手にされた時には、驚愕される事でしょう。
そして・・・手当たり次第にインストールを始める筈ですw
パソコンをご使用の方なら、必ず!満足されると思います。

解析結果のデータベースには15,000点を越えるパスワードが入ってます。
このパスワード集から検索するだけで、登録や制限解除が出来てしまいます。
シェアウェアを購入して、正規登録したのと同じ状態になります。
余りにもデータが多すぎる為、辞書引のようなパスワード検索SOFTで提供します。

シェアウェア以外にもパッケージ版をVectorなどでオンライン販売してるSOFTにも
多数対応しています。これらをダウンロードして無期限に試用する事も可能です(^^;

WindowsXPやOfficeなどのCDキー(プロダクトキー)ジェネレーターを使えば複数のパソコンに
インストールする事も可能です。デスクトップとノートPCなど2台以上持ってる場合は特に有効ですね。

オンラインSOFTを購入した経験は有りますか?
ありとあらゆる分野の優れたSOFTが、数多くありますよね。
しかし、ほとんどが試用期間や機能制限をして、「気に入ったら購入してください」です。

もう少し使いたいが使用期限切れで、削除・・・再インストールを繰り返していませんか?


141 :デフォルトの名無しさん:05/03/17 18:45:42
入札一件もねーじゃん

て思ったけど、評価見たら売れまってんな。
うはwwwぼろ儲けwwwwおkwwwww

142 :デフォルトの名無しさん:05/03/17 20:08:36
あふぉ

143 :デフォルトの名無しさん:05/03/17 21:07:51
こいつタイーホされるんじゃないの?

144 :デフォルトの名無しさん:05/03/17 22:00:57
ハングル

├−韓国マスコミ今日のホームラン
│ │
│ 竹島に続き対馬も韓国領と言い始めたぞ

プログラム技術

├−くだすれDelphi(超初心者用)
│ │
│ ├−コンポ編
│ │
│ └−アプリ編
│   │
│   └−グラフィックス

プロ野球

 TreeViewが維持しているNode.Textをこういう風に出力したいのだけど、どうしたらいい?


145 :144:05/03/17 22:08:26
procedure TForm1.TreeStructureSave(FName: String; Flg: Boolean);
var
 Temp: TStringList;  i: Integer; TreeStr,S: string;
 procedure StructureAdd(Node: TTreeNode);
 var
  j: Integer;
 begin
  if Node.Data <> nil then
  begin //ここで│'や'└−'を付加する処理を書けばいいような気がするがごちゃごちゃしてわかりまへん
   //TreeStr := hogehoge  S := TreeStr+S;
   Temp.Add(S);
   TreeStr := '';
  end else
   Exit;
  if Node.GetFirstChild <> Nil then
  begin
   for j := 0 to Node.Count-1 do
   begin
    Inc(i);  StructureAdd(Node.Item[j]);
   end;
  end;
 end;
begin
 Temp := TStringList.Create;
 TreeStr := ''; i := 0;
 while i < DataTree.Items.Count do
 begin
  StructureAdd(DataTree.Items[i]); Inc(i);
 end;
 Temp.SaveToFile(FName); Temp.Free;
end;


146 :デフォルトの名無しさん:05/03/17 23:18:45
tu-ka、>>144形式が統一されて無いじゃん

兄弟は

─兄者
  │
  弟者

なのか、それとも

─┬兄者
  │
  └弟者

なのか

147 :デフォルトの名無しさん:05/03/18 00:02:03
>>137
ItemIndexでしょ?
~~~~~
いや別に揚げ足取りじゃないけど。
「indexなんて無いよー」ってことにならぬように。

148 :Delフサギコ ◆A6VzDeLphI :05/03/18 00:23:44
 ∧,,∧
ミノ゚Д゚ミノ

http://onigiri.s3.xrea.com:8080/delphi/index.php?%A5%BD%A1%BC%A5%B9%C3%D6%A4%AD%BE%EC

149 :146 1/3:05/03/18 00:25:04
暇なんで作ってみた
形式は後者であると仮定

function ChkVerticalLine(Node: TTreeNode): String;
begin
 // ノードの左を通過する、親とその弟を繋ぐ縦線を再帰的に取得

 if Node.Parent <> nil then
 begin
  Result := ChkVerticalLine(Node.Parent);
  if Node.Parent.getNextSibling <> nil then
   Result := Result + '│ '
  else
   Result := Result + '  '
 end
 else
  Result := '';
end;

150 :146 2/2:05/03/18 00:26:48
リロードし忘れるは 1/3 とか書いてるは… orz

procedure OutputNode(Node: TTreeNode; Strings: TStrings);
var
 s: String;
begin
 // ノードの線と文字列を取得
 // 呼び出し側で TTreeNodes.Items 使ったほうが楽なので子の存在は無視

 s :=  ChkVerticalLine(Node);
 Strings.Append(s + '│ '); // ノードとノードの間の空行

 if Node.getNextSibling <> nil then
  s := s + '├'
 else
  s := s + '└';

 Strings.Append(s + Node.Text);
end;

151 :デフォルトの名無しさん:05/03/18 03:18:26
TThreadでExecuteを一回完了した後にクラスの状態をそのままにしたまま
何度もExecuteを呼び出せるようにするのは可能でしょうか
Resumeは効かないみたいなので…

152 :144:05/03/18 06:55:16
>>149
 おお! サンクス! すばらしい!!
 一番最初のノードの処理を少し変更して利用させてもらいます。


153 :デフォルトの名無しさん:05/03/18 12:04:53
>>151
やったことないけど、FreeOnTerminateをFalseにすれば、
Classのインスタンスを保持したまま、何回もExecute実行できないかな?

154 :デフォルトの名無しさん:05/03/18 14:44:42
やったことないなら、日記はチラシの裏に書け

155 :デフォルトの名無しさん:05/03/18 15:33:50
>>151
Execute内で一時停止かな。

156 :デフォルトの名無しさん:05/03/18 16:10:47
今日のチラシは裏も印刷されていて書けません。どうしたら良いですか?

157 :デフォルトの名無しさん:05/03/18 16:33:05
>>156

これにでも書いてろ、な!(AA略)

ttp://yuukiremix.s33.xrea.com/chirashi/

158 :デフォルトの名無しさん:05/03/18 17:25:29
Delphi製か・・

159 :デフォルトの名無しさん:05/03/18 18:51:38
コンソールアプリ自体に戻り値を設定するにはどうしたらいいのでしょうか?
他のアプリから結果をリダイレクトしたいのですが。

160 :デフォルトの名無しさん:05/03/18 19:17:47
>>159
ファイルに書き出すとか。

161 :デフォルトの名無しさん:05/03/18 19:42:29
そういう時の為の標準入出力じゃないのか

162 :151:05/03/18 19:51:54
>>153 >>155
レスありがとうございます。
Executeを無限ループにしてループ毎にイベント発生させてSuspend、Resumeで再開
こんな感じでそれっぽくできました。 助かりました

163 :デフォルトの名無しさん:05/03/18 20:37:10
Suspend,Resumeは推奨しない。
きちんと同期オブジェクトを使用するか、
Executeのループの中からSynchronizeを使って
メインアプリの方の終了フラグかなんかを読みに行きなさい。

164 :デフォルトの名無しさん:05/03/18 21:58:44
同期のため、とは書いてないんだが・・・

165 :デフォルトの名無しさん:05/03/19 01:48:59
パズルの16分割みたいな状態を実現したいのですが、
画像の分割ってどのような方法で分割してるのですか? 
どなたかご指導ください。

166 :デフォルトの名無しさん:05/03/19 02:02:43
例えばビットマップで横に2分割するときは、元画像の横幅半分のビットマップ
二つつくって、後は該当部分をコピーするだけ。

167 :デフォルトの名無しさん:05/03/19 10:19:57
>>166
ありがとうございました。
コピーしてみます。

168 :デフォルトの名無しさん:05/03/19 21:34:43
 コマンドラインコンパイラ DCC32.EXE で GUI の dpr ファイルをコンパイルするには
どうしたらいいのでしょ。
 オプションを確認したら
 -CG = GUI target
となっていたので
 DCC32 -CG abc.dpr
とやったのですが致命的エラーが出てダメでした。エラーの内容を確認するため
 DCC32 -CG abc.dpr > Erroor.txt
とやったのですが上記致命的エラーのために Erroor.txt が作成できませんでした。


169 :デフォルトの名無しさん:05/03/19 22:16:07
>>168
コマンドラインオプションを全部取ってコンパイルしてみる。

…それ以前にパスが通っていない悪寒。

170 :デフォルトの名無しさん:05/03/19 22:30:19
いや、パスは通っています。
DCC32 > option.txt でオプションを確認したわけですし。
オプションを摂ってコンパイルしても同じでした。

171 :デフォルトの名無しさん:05/03/20 00:46:26
プログラムがダメなんだろ
普通にIDEでは成功する?

172 :デフォルトの名無しさん:05/03/20 03:58:27
プロジェクトの内容にかかわらずエラーが出るって事だよね!?
.cfgファイルにおかしな設定をしているのかな。

173 :デフォルトの名無しさん:05/03/20 07:41:23
>>171
知らないなら黙っててください

174 :デフォルトの名無しさん:05/03/20 08:06:58
>>168
コンソール画面からのコピーの方法をご存知ですか?もし知っていたら
致命的エラーの内容を、コピーアンドペーストで間違えずに転記してもらえませんか?

または標準エラー出力をリダイレクトするために
DCC32 abc.dpr 1>stdout.txt 2>stderr.txt
とやってみましょう。もし NT 系 OS を使っているなら。

171 さんの指摘のように、IDE でコンパイルできるかどうかは試してみましたか?


175 :デフォルトの名無しさん:05/03/20 09:34:48
TStringListのStringsに直接アクセスしたいのであらかじめCountの個数を
指定したいのですが、今は下のように書いています。
for i:=0 to n do
  sl.Add('');
又は
sl.Text:=StringOfChar(#10,n);
特に不便でもないのですが、ほかのやり方はないでしょうか?参考までに。

176 :デフォルトの名無しさん:05/03/20 14:08:21
for i:=0 to n do



sl.Text:=StringOfChar(#10,n);

じゃ個数が違うわけだが

177 :デフォルトの名無しさん:05/03/20 16:22:51
今までCを少しとC#を使ってきて、Delphiも使えるようになりたいのだが、
オススメの書籍はあるだろうか?あれば教えて欲しい。

178 :毛の生えたブリーフ:05/03/20 18:31:18
>>177
Delphiの入門本は久しく出ておりませんでしたが、最近、最新版のDelphi2005
用の入門本がカットシステムからでました。
中身は本当に初めてdelphiを使う人向けですので、立ち読みしてご検討して
みてはどうでしょうか。


かなり古い書籍で、まだ入手可能かどうかわかりませんが、

「プログラマのためのDelphi2入門」(ゲーリー・コーレル著/小山裕徳 訳)
東京電機大学出版局

原題「Delphi Nuts&Bolts:For Experienced Programmers Second Edition」

私のお勧めはこれです、最新のDelphiではありませんが、とても分かりやすかった
です。



179 :毛の生えたブリーフ:05/03/20 18:35:21
「Delphi4プログラミング技法Vol1,Vol2」
(ザビエル・パチェコ+スティーブ・テイクセラ著/日向俊二 訳)
ピアソン

原題「Borland Delphi4 Developer's Guide」

これまた古いですが、入門本が終わったら次に読む本だとおもっています。
まだ入手可能だと思います。

180 :ななしへたぐらま ◆XcB18Bks.Y :05/03/20 18:50:51
>>175
Delphi 6以降はわからないのですが特になかったような.
プログラムの中のあちこちで使うようでしたら下のような手続きを用意して使ってください.
procedure SetCount(Strings: TStrings; Count: cardinal);
var
 i: integer;
begin
 Strings.Clear;
 for i := 1 to Count do
  Strings.Add('');
end;

もし文字列リスト固有のメソッドやプロパティを使わないのでしたら
つまり単に文字列の値を読んだり書いたりするだけなら
文字列リストではなく配列変数を使うことも検討してみて下さい.


181 :デフォルトの名無しさん:05/03/20 19:21:30
ちょっとずれるけどTStringListのCapacityプロパティってどうやって使うんでしょうね。
変更可能だけどCountより小さくしてはダメで、大きくしても領域を確保してくれない・・・

182 :デフォルトの名無しさん:05/03/20 19:26:29
確保するでしょ。カウントが増えないだけで。

183 :デフォルトの名無しさん:05/03/20 19:28:39
これ以上増えないのがわかっているなら、Capacityに最大値を設定
しとけば無駄な領域確保要らなくなるということでしょ?

184 :デフォルトの名無しさん:05/03/20 19:29:46
実際に使ってる量と確保してる量は違う。TStringList だけでなく、TList なんか
にもある。予めバッファとして割り当てておいて、その以下の項目増加では割り当て
直す必要がなくなって、パフォーマンスが改善するってことだ。

185 :デフォルトの名無しさん:05/03/20 19:42:02
Countが増えないだけで確保してるんですか。
例外でるのはCountをチェックしてるからか・・・。
空の文字列返してくると思ってたら例外でたもので。
ありがとう

186 :デフォルトの名無しさん:05/03/20 19:49:07
VCLソース持ってるなら嫁

187 :デフォルトの名無しさん:05/03/20 22:50:44
Classes.pas は誰でも持ってる

188 :デフォルトの名無しさん:05/03/20 23:03:31
んなことはない

189 :175:05/03/20 23:12:34
>>180
わざわざサンプルまでありがとうございます。
自分のニーズとしては、
・長さが不定な文字列の、数が不定な(実行時にはわかる)リスト
・文字列の途中に改行があることもある
・1つのリストを複数のTThreadの下位クラスのメンバー入れて複数のスレッドからアクセスしたい
というのなんですが。

type TMyStringArray = array[0..65535] of AnsiString;
type PMyStringArray= ^TMyStringArray;
みたいなのをつくって、GetMem()で配列に必要なメモリを確保して
配列のポインタだけ扱う方法も考えたのですが、
AnsiString型の仕様がいまいち理解できてないのでやめました。

190 :デフォルトの名無しさん:05/03/20 23:15:53
動的配列知らんのか?

191 :デフォルトの名無しさん:05/03/20 23:16:34
> ・文字列の途中に改行があることもある

TStringList は使えない

192 :デフォルトの名無しさん:05/03/20 23:19:26
>>189

string 型の動的配列を保持するクラスをつくって、CriticalSection でアクセスメソッド
を保護するといい

193 :デフォルトの名無しさん:05/03/20 23:21:47
初めからほんとの目標を明示しないで見当違いの質問して、結局遠回りするってよくあるんだよな

194 :175:05/03/20 23:34:02
>>191
>>TStringList は使えない
使えます。

>>動的配列知らんのか?
もちろん動的配列も試しましたけどヘルプ見ても「暗黙にポインタ」と書いてあるだけなので、
普通の変数のように代入したりしてもいいのかわからなかったので避けていたのですが。


195 :デフォルトの名無しさん:05/03/20 23:41:56
普通に使える。5分で確認できるでしょ。

procedure TForm1.Button1Click(Sender: TObject);
var
  sa: array of string;
  i: Integer;
begin
  SetLength(sa,5);
  for i := 0 to 4 do
    sa[i] := Format(' No of string = %d',[i]);

  for i := 0 to 4 do
    Memo1.Lines.Add(sa[i]);
end;

>>TStringList は使えない
>使えます。

自動的に改行されて、データの数と行数が一致しなくなるけど。それでもいいなら使える。
スレッドセーフな TStringList クローンのコードはどっかにあったはず。


196 :デフォルトの名無しさん:05/03/20 23:57:58
Addで改行を含む文字列を追加した場合、その改行は考慮されないよ。


197 :デフォルトの名無しさん:05/03/21 00:00:16
おお、そうなんだ。しらんかった。TMemo なんかと勘違いしてた。さんくす

198 :175:05/03/21 00:09:46
>>195
レスありがとうございます。
単純に各々の文字列を入れたり出したりするリストなので、トータルの行数が問題になったりはしません。
なので、TStringListでも間に合いそうです。

上にも書きましたが、複数のTThreadの下位クラスで使いたいので、
大もとのスレッドにある動的配列を他のTThreadのメンバーに代入したいわけなんですが、
sa: array of string;
のような宣言では代入互換性がないので使えません。
type TMyArray=array of string;
のような形で動的配列用の新しい型を宣言することになるわけですが、
a,b:TMyArray;
SetLength(a,10);
a[3]='ABC';
b:=a;
SetLength(a,20);
のように動的配列を他の動的配列に代入して、その後の元の配列を変化させた場合の仕様がよくわかりません。
とりあえず、テストしてみて動いていても、そのときたまたま動いてるだけで、
C言語のrealloc()みたいに、メモリが足りないときは別のポインタ割り当てられたりするかもしれないですし。
Delphiの動的配列の細かい仕様が書いてある説明でもあればいいのですが。
静的配列なら領域を確保してそのポインタをやり取りするだけなので、
安全だと思ったのでそちらを使おうとしたのです。

199 :デフォルトの名無しさん:05/03/21 00:27:19
> スレッドセーフな TStringList クローン

を使ってみては? インスタンスは、その内容が変化しても、参照変数自体が変わることはないし。

ttp://www.swissdelphicenter.ch/en/printcode.php?id=2167

200 :175:05/03/21 00:40:46
>>199
ありがとうございます。
TThreadListを使うのかと思っていたのですが、こっちの方が楽そうですね。
参考にさせていただきます。


201 :デフォルトの名無しさん:05/03/21 03:31:25
動的配列の勉強をしているのですが^^;

var a: array of integer;
begin
setlength(a,1);
a[5] := 3;
showmessage(inttostr(a[5]));
end;

を実行したら3と表示されてしまいます。
予想ではsetlength(a,1)と、添え字は0-1の範囲しか指定していないので
エラーとなるはずなのですが、なぜか動いてしまいます。
何か勘違いしているのでしょうか。
よろしくお願いします。


202 :デフォルトの名無しさん:2005/03/21(月) 08:50:00
>>201
動的配列はただのポインタなので、静的配列のようにコンパイル時は添え字の範囲のチェックまではやらないということだろう。
というか、動的に変化するからコンパイル時に範囲のチェックはできない。
a[5] := 3; は、たまたまその領域(この場合はaより20バイト先)が、安全な領域だったので
偶然使えただけだろう。
ためしに、a[50000] := 3;にしてみると、たぶん動かない。
また、以下のようにbっていう動的配列を一緒にすると値が変になる。
おそらく、メモリ領域がバッティングするんだろう。
var
a,b: array of integer;
begin
setlength(a,1);
setlength(b,1);
a[5] := 3;
ShowMessage(IntToStr(Integer(a)));
ShowMessage(IntToStr(Integer(b)));
showmessage(inttostr(a[5]));
end;




203 :177:2005/03/21(月) 12:14:04
>>178
サンクス。参考にしてみるね。

204 :デフォルトの名無しさん:2005/03/21(月) 22:06:41
>202
早速ためしてみました。
まず、A5000では>>202さんのいうとおり実行時エラーとなりました。

また202のソースをコンパイルして確認してみました。
確かに変な数が入ってきますね。(a[5]=22となりました)

以上をふまえてsetlengthは配列で利用する範囲を保障するための
手続きと考えるとすっきりしました。どうもありがとうございます。


205 :デフォルトの名無しさん:2005/03/21(月) 22:25:50
マルチスレッドを試してみたんだけど
Form1: TForm1;
BmpWork: TBitmap;
で定義したBmpWorkが他のユニットのスレッドでも使えるけどもプログラムを終了するときにエラー(例外発生)が出る
何ででしょう?

206 :205私はバカです:2005/03/21(月) 23:36:57
ごめんなさい、publicで宣言したら直りました。

207 :デフォルトの名無しさん:2005/03/21(月) 23:41:20
>>205
その前に、その質問の仕方で答えられる人は
そうそういないと思うよ。
煽りでも何でもなく。

56 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)