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

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

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

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

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

<関連スレ>
Delphi相談室(中級者以上)その12
http://pc5.2ch.net/test/read.cgi/tech/1064420818/
【ドキュメント】Delphi8 for .NET 2【どこ?】
http://pc5.2ch.net/test/read.cgi/tech/1078695271/

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

2 :デフォルトの名無しさん:04/06/21 22:19
<過去ログ>
13 http://pc5.2ch.net/test/read.cgi/tech/1081003641/
12 http://pc5.2ch.net/test/read.cgi/tech/1076610073/
11 http://pc2.2ch.net/test/read.cgi/tech/1074523803/
10 http://pc2.2ch.net/test/read.cgi/tech/1074523803/
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://pc2.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

3 :デフォルトの名無しさん:04/06/21 22:21
3GETするのも面倒

4 :Delフサギコ ◆A6VzDeLphI :04/06/21 22:25
     ∧,,∧,,,,,, )      (´⌒(´
  ⊂ミ゚Д゚⊂,,,,,,,`つ≡≡(´⌒;;;≡≡≡
ズザーーーーーッ    (´⌒(´⌒;;

4げ......



やれやれ・・・
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄
  ポ  ∧,,∧  ポ
  ン  ミ,,゚Д゚,彡 . ン
   (´;) U,U ミ〜 (;;).
(´)〜(⌒;;UU (´ )...〜⌒(`)
              

5 :デフォルトの名無しさん:04/06/21 22:28
>>1


6 :デフォルトの名無しさん:04/06/21 22:48
前スレでアドバイスをくださった方、ありがとうございました。

7 :デフォルトの名無しさん:04/06/21 23:07
新スレお疲れ様です。早速質問をさせてください。
TTrackBarのバーをドラッグ中にOnChangeを発生させない方法はありませんか?
OnChangeに限らず、Positionが変わっていて、マウスボタンが離された時を検出できればいいのですが...

8 :デフォルトの名無しさん:04/06/21 23:35
サブクラス化するという案はどうか。

9 :デフォルトの名無しさん:04/06/21 23:54
>>7
> Positionが変わっていて、マウスボタンが離された時を検出できればいいのですが

TTrackbar がフォームの上に置かれていればサブクラス化の必要はない。フォームで
Orientation が trHorizontal のときは WM_HSCROLL 、trVertial のときは
WM_VSCROLL メッセージを受け取って

private
{ Private 宣言 }
public
procedure WMHScroll(var Msg:TWMHScroll);message WM_HSCROLL;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

uses
CommCtrl;

procedure TForm1.WMHScroll(var Msg: TWMHScroll);
begin
inherited;
if (Msg.ScrollBar = Trackbar1.Handle) and (Msg.ScrollCode = TB_ENDTRACK) then
Label1.Caption := InttoStr(Trackbar1.Position);
end;

のようにする。

10 :7:04/06/22 00:03
ありがとうございます。
解決しました。

11 :デフォルトの名無しさん:04/06/22 01:24
CやPerlのcrypt関数相当(アルゴリズムはDESかな?)の
ことが可能な暗号コンポーネントとかないでしょうか?


12 :デフォルトの名無しさん:04/06/22 02:48
DelphiでCGIを作ってて、画像を動的に生成して
送ると言うところで、ちょっと戸惑ってます。

今はDelphiでプログラミングしていますが、最終的には
Kylixでコンパイルして、Linux上で動かす予定です。

ところが、TBitmapがXWindowなしには利用できない
みたいで困ってます。まあ、何らかのWindowシステムが
ないと、文字を描くのも不可能だから、当然といえば
当然なんでしょうが。

簡単なイメージなんで、最悪、メモリストリームに直接
アクセスして「お絵描き」しようかなとも考えてますが、
何か他にいい方法ある?

13 :デフォルトの名無しさん:04/06/22 03:49
>>11
自分で作ればいいじゃん、とか思った漏れは素人ですか?

14 :デフォルトの名無しさん:04/06/22 04:19
TMainMenuについての質問です
TMainMenuの領域内の色をWindowsの設定を変更しないで変更することはできるでしょうか?

15 :デフォルトの名無しさん:04/06/22 05:12
ストリンググリッドを貼りつけたフォームに、ページめくりボタンをつけたいの
ですが、書き方が分かりません。

VBAでいうところの
SendKeys "{PGUP}"
SendKeys "{PGDn}"
みたいなものでいいんですが。

16 :デフォルトの名無しさん:04/06/22 05:26
>>14
オーナードロー

>>15
キーを送るよりも LeftCol と TopRow を VisibleColCount、VisibleRowCount の
分だけ変化させることで、左上に位置するセルを指定するのがいいと思います。
それぞれ範囲を超えないように注意してください。

17 :デフォルトの名無しさん:04/06/22 05:46
>>16さん
なるほど、とうなずくことができるにはまだまだ遠い未熟さが情けないですが、
とにかくヒントとしていただいた、VisibleColCount、VisibleRowCount
を手がかりにひたすら粘ってみます。

18 :15:04/06/22 05:53
ちょっとだけなるほど

MyList.Row:=MyList.Row + MyList.VisibleRowCount
でいけますね。

あとは、最初の最後どん詰まりの部分の処理の仕方。
たぶん何とかなります。
ありがとうございました。

19 :15:04/06/22 06:33
できました
きっちゃないコードですけど↓

procedure TForm2.PgAtoClick(Sender: TObject);
var
NanGyouMe:integer;
begin
MyList.Col:=0;
NanGyouMe:=MyList.Row+MyList.VisibleRowCount-1;
MyList.TopRow:=NanGyouMe;
MyList.Row:=NanGyouMe;
end;

procedure TForm2.PgMaeClick(Sender: TObject);
var
NanGyouMe:integer;
begin
MyList.Col:=0;
NanGyouMe:=MyList.Row-MyList.VisibleRowCount+1;
if NanGyouMe<1 then
begin
MyList.TopRow:=1;
MyList.Row:=1;
exit
end;
MyList.TopRow:=NanGyouMe;
MyList.Row:=NanGyouMe;
end;

20 :デフォルトの名無しさん:04/06/22 09:02
>>15

procedure TForm1.Button1Click(Sender: TObject);
begin
StringGrid1.Perform(WM_VSCROLL,MakeWParam(SB_PAGEDOWN,0),0);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
StringGrid1.Perform(WM_VSCROLL,MakeWParam(SB_PAGEUP,0),0);
end;

21 :デフォルトの名無しさん:04/06/22 11:32
アップデートした後プロジェクトをコンパイルしたら、
動作がおかしくなっちゃった。
こんなもんです?   そうですか。

22 :デフォルトの名無しさん:04/06/22 13:30
>>11
CのライブラリをBCCでビルドしてリンクするのが手っ取り早い。

23 :デフォルトの名無しさん:04/06/22 13:32
ShowMessageで表示したダイアログを、ボタンを押さずしてプログラムから
自由に閉じる方法はありますか。

24 :デフォルトの名無しさん:04/06/22 13:36
ありますけど、ユーザの心を読めるプログラムはないよ。どのタイミングで
閉じたいと思うの?

25 :デフォルトの名無しさん:04/06/22 13:42
カスタムフォームにしてメーターなり残り時間なりを表示してCloseするのが無難では。

26 :デフォルトの名無しさん:04/06/22 13:50
>>24
あ、ボタンを押さずしては念じてという意味ではないです。すみません。
あるデバイスを「取り外してください」というメッセージを、取り外したのをプログラムが感知したら
勝手に閉じたいのです。
>>25
情けないのですがフォームを二つ作るのに苦手意識がありまして・・・できる限り
そうでないやり方を探したいのです・・

27 :デフォルトの名無しさん:04/06/22 13:55
>フォームを二つ作るのに苦手意識
ふいちまった。

28 :デフォルトの名無しさん:04/06/22 13:57
Delphi製のダイアログとかフォームを開いたとき
ボタンにマウスカーソルが自動的に移動してくれないんだけど
どうにかならないの?

29 :デフォルトの名無しさん:04/06/22 14:00
>>26

if Screen.ActiveForm.ClassName = 'TMessageForm' then
Screen.ActiveForm.Close;

30 :デフォルトの名無しさん:04/06/22 14:08
>>28
「ボタンにマウスカーソルが自動的に移動」させるプログラムがアホなんでは?

31 :デフォルトの名無しさん:04/06/22 14:11
>>30
あわせるのはOS。コンパネ-マウスで設定するやつ。

32 :デフォルトの名無しさん:04/06/22 14:16
>>22
なるほど、そういう手もありますね。

昨夜から検索してて、UCrypt.pasってのが
OpenJane関連で見つかったんですが、
どうもトリップの作成用みたいで、こちらを
まず試してみます。

33 :デフォルトの名無しさん:04/06/22 14:22
>>31

スマートムーブっていうのね。たしかに Delphi 製のボタンには行かないね。
コモンダイアログなら大丈夫だけれど。何が違うんだろう。デフォルトボタンの
設定の仕方かしら?

34 :デフォルトの名無しさん:04/06/22 14:24
日本製は知らないけど、Torrys なんかの VCL コンポのDLサイトでは、暗号化コンポーネント
なんかは山ほどあるよね。そういうのは使えないの?

35 :デフォルトの名無しさん:04/06/22 14:50
暗号やハッシュ周りはOpenSSLのソースパクって使うのが一番安心。

36 :デフォルトの名無しさん:04/06/22 14:57
>>29
できました。ありがとうございます。

37 :デフォルトの名無しさん:04/06/22 15:44
>>28
MLで昔同じ質問があって、中村氏が答えてた記憶がある。
Delのウィンドウ(ボタン等)に問題があるって言ってたような。

38 :デフォルトの名無しさん:04/06/22 15:54
ダイアログリソースやテンプレートをつかった原始的な方法でダイアログをつくって
DEFPUSHBUTTON で指定したものは Delphi でコンパイルしても正常にカーソルが
動くね。むしろ、Delphi のフォームのウィンドウ関数がダイアログプロシージャと
して働いてないのが問題なのでは。

39 :デフォルトの名無しさん:04/06/22 16:07
て言うか、まだそんな現象があるのか。
ま、そんなところがかわいいのだけれど。


40 :デフォルトの名無しさん:04/06/22 16:11
服部さんが、「Cでできる事は、Delphiでもできる」って言ってたけど、
そんなこと言い出したら、VBもだよって言いたくなるレベルだな、デルヒって。

41 :デフォルトの名無しさん:04/06/22 16:12
>>40 意味不明

42 :デフォルトの名無しさん:04/06/22 16:13
HSPもだよ

43 :デフォルトの名無しさん:04/06/22 16:16
> 服部さんが、「Cでできる事は、Delphiでもできる」って言ってたけど

だから、CみたくリソースエディタつかったダイアログをDelphiでつかえば
標準動作になるよ。問題なのは、TForm + TButton なわけで、C とコンパチ
のところではむしろ無問題。

44 :デフォルトの名無しさん:04/06/22 16:18
>>43
40や42のようなアフォに説明しても無駄

45 :デフォルトの名無しさん:04/06/22 16:56
delphiでwaveファイルを再生するにはどうすればいいのですか?
よろしくお願いします。

46 :デフォルトの名無しさん:04/06/22 17:11
>>40-45はHSP信者

47 :デフォルトの名無しさん:04/06/22 18:03
そうか、デルポイは中途半端はげって事ですか。

48 :デフォルトの名無しさん:04/06/22 18:19
なんかさぁ、荒らすにしてももうちょっとこう気の利いた書き込みできんのかな。
あたまわるそうな書き込みで、読む方が恥ずかしくなってきた。

49 :お前がウザい:04/06/22 18:23


50 :デフォルトの名無しさん:04/06/22 18:37
'999,999,999'等のカンマが含まれる文字列からカンマだけを抜き取りたいのですが、
AnsiPos関数以外を使った方法でできないでしょうか?
AnsiPosだと一箇所しか返してくれないので、何かいい方法があったら教えて下さい。
お願いします。

51 :デフォルトの名無しさん:04/06/22 18:38
StringReplace rfAll

52 :デフォルトの名無しさん:04/06/22 18:39
Delphiでプログラムを組んだことすら無い香具師が荒らしてるんでしょ。
何が気に入らないのか分からないけど、放置しときなさい。

53 :デフォルトの名無しさん:04/06/22 18:57
>>51
ありがとうございました。

54 :デフォルトの名無しさん:04/06/22 19:34
PopupMenuと同じようなタイミングで消えるフォームを作りたいんですが
どういったコーディングをすればいいですか?
表示した瞬間は最も手前に表示され
他のアプリやフォームをクリックしたり切り替えたりしたら消えるようにしたいです。

55 :デフォルトの名無しさん:04/06/22 19:53
>>54
ApplicationEvents のOnActivateとOnDeactivate
をうまく利用すればできる。

そのフォームだけで他にもフォームを表示させてるのなら
FormのOnActivateとOnDeactivate

タイマーを利用すればある程度時間を空けて消したりできる。

56 :デフォルトの名無しさん:04/06/22 20:23
DelphiからDOSコマンドを実行したいのですが、どうすればいいのでしょうか?
使用したいこまんどはNET USEです。

Delphiのバージョンは7です。

WinExecをで実行しようとしたのですが、うまくいきませんでした。

よろしくお願いします。

57 :デフォルトの名無しさん:04/06/22 20:31
実行するだけならWindows.CreateProcessかShellApi.ShellExecute。
でもWinExecでもいけるはずだけど。
GetLastErrorの値見るかWin32Checkで囲ってエラーの内容調べてみたら?

58 :デフォルトの名無しさん:04/06/22 20:52
前スレで、データベースデスクトップでメモ型にデータを入力をする方法を
聞いたものですが、データベースエクスプローラーを使えと教えてもらいました。
グラフィック型も同じと思っていたらどうも違うようなのですが、何処で入力すれば
いいのでしょうか?
教えて君ですみません。

59 :デフォルトの名無しさん:04/06/22 21:57
色をString型にしたりその逆はできますか?
TStringListで管理してファイルに保存したいのですが...
色のリストが保存できればなんでもいいのですが。

60 :デフォルトの名無しさん:04/06/22 22:04
ColorToString
StringToColor

61 :デフォルトの名無しさん:04/06/22 22:08
おおっ!ありがとうございます。

62 :15:04/06/22 23:19
>>20さん
遅まきながら感謝です。
>>19 にのせたコードは見直したら不備だらけで、実験を何回か繰り返しながら
どうにかモノにしました。
不細工ながら、それはそれでとりあえず満足。

こちらももちろんありがたくいただいておきます。

63 :デフォルトの名無しさん:04/06/23 09:39
コンポーネントのプロパティの値は
コンストラクタ(create)内では、まだ反映されておらず、
デフォルト値のままなのでしょうか?

64 :デフォルトの名無しさん:04/06/23 10:23
ReadStateで読み込むということ、
またそれがコンストラクタの後だと言うことは分かったのですが、
ReadStateがどのようにしてプロパティから値をとているか教えていただけませんか?

コンストラクタ内でプロパティの値で条件分岐がしたいのです。
どなたかよろしくお願いします。

65 :デフォルトの名無しさん:04/06/23 10:49
>>64
プロパティを読み込むのはTReaderの仕事らしいけど、
それよりも、なぜそういうことをしたいのか詳細を書いた方が回答をもらいやすいかも。

66 :デフォルトの名無しさん:04/06/23 10:56
(´-`).。oO(RPG作りたい…)
      (金も知識もゼロ…)
      (Delphiが良い感じなんでやろうと思う)
        
m9っ`・ω・´)<良い書籍やサイトは有りますか!?
        <誘導して下さい!

67 :デフォルトの名無しさん:04/06/23 10:57
sage忘れスマソ

68 :デフォルトの名無しさん:04/06/23 11:01
>>67
ageても良いんだぜェ!
単発質問スレ乱立を防ごうサ!

69 :デフォルトの名無しさん:04/06/23 11:08
>>66
古い本かもしれないけどSOFTBANKから出てる「遊びのレシピ」って本がお勧め。
Delphiを使ったいろんなジャンルのゲームの作り方が載ってる。

70 :デフォルトの名無しさん:04/06/23 12:38
>>66
そんな貴方にRPGツクール

71 :デフォルトの名無しさん:04/06/23 12:40
>>66
【Delphi】 ゲームつくるぞ(゚Д゚)ゴルァ 【作れば?】
http://pc5.2ch.net/test/read.cgi/gamedev/1051110669/

72 :デフォルトの名無しさん:04/06/23 14:53
DelphiってStringBuilderないの?
まさかMemoryStream使うとか・・・

73 :デフォルトの名無しさん:04/06/23 15:07
>>72
えーと・・・・・・・・・・・・?

74 :デフォルトの名無しさん:04/06/23 15:07
>>66
ぐぐればサイトはなんぼでも出てくる。
れっつとらい。
ただし只で手に入るDelphi6Personalは商用アプリ開発不可なので、
即売会で売ったりダウンロード販売するためには、Professional版を
購入する必要あり。

75 :デフォルトの名無しさん:04/06/23 15:31
PageControlに追加したTabSheetの各タブに出るヒントを、別々の物にする方法は?
現在タブ部分のヒントは、全てPageControlの物が出てしまいます。

76 :デフォルトの名無しさん:04/06/23 15:53
IndyのデモでCGIMailerがコンパイル出来ないんだけど、
[致命的エラー] CGIMailer.dpr(4): ファイル 'IdCompilerDefines.inc' が見つかりません
って出るんだけど、俺だけ?(´・ω・`)ショボーン

77 :デフォルトの名無しさん:04/06/23 15:54
.incファイル探してあったらパス通してみたら。知らんけど

78 :デフォルトの名無しさん:04/06/23 16:03
IdCompilerDefines.incが無いんです。
あきらめます。

79 :デフォルトの名無しさん:04/06/23 16:22
>>72
.NETやJavaは文字列がオブジェクトなので専用の構築クラスを使わないと遅くてやってられないが
Delphiだと+演算子使いまくっても充分なスピードがでるよ
一応TStringStreamってのもある

…ってので満足か?
>>73 多分>>72はよくわかってない煽り

80 :デフォルトの名無しさん:04/06/23 16:24
>>78
C:\Program Files\Borland\Delphi7\Source\Indyに普通に存在するが?

81 :78:04/06/23 17:12
Indyのアップグレードしたらありました。
ありがとう。
それから、Indyのホームページぐぐったら、
Del7のは、バグがあるからDel6が良いってのがあったんですが、
Lクライアントとかサーバーとか勉強して作りたいんですが、使わない方が良い?


82 :デフォルトの名無しさん:04/06/23 17:40
バグによりけりだろうけど、入門レベルなら気にしても仕方ないんじゃない?

83 :デフォルトの名無しさん:04/06/23 17:41
というかIndyでソケット入門ってつらくないか?
ドキュメントがないって言う意味で。分かるならいいけど。

84 :デフォルトの名無しさん:04/06/23 18:31
ちょいと聞きたいんだが。
Del1からDel7をWin2000にインスコってできるのか?

85 :デフォルトの名無しさん:04/06/23 18:33
以下の4000を一発で求めることが可能な動的配列のサイズを求める関数ってありますか?

procedure TForm1.Button1Click(Sender: TObject);
var
 A: array of array of Integer;
begin
 SetLength(A, 10, 100);
 ShowMessage(IntToStr(Length(A) * Length(A[0]) * SizeOf(Integer))); //4000
end;


86 :デフォルトの名無しさん:04/06/23 18:34
ない

87 :デフォルトの名無しさん:04/06/23 18:37
>>86
わかりました。

88 :デフォルトの名無しさん:04/06/23 18:55
>>84
とりあえず6,7,8は共存させて問題ない(私のPCがそうだから)

89 :デフォルトの名無しさん:04/06/23 19:09
>>88
なるほど。
いまPCにインスコされてるやつはDel3とDel5。
Del3が入るならDel4は当然入ると思うから良しと。
そこで、Win2000にDel2.0Jが入るのか疑問に思っているところなんだ。

90 :デフォルトの名無しさん:04/06/23 19:30
確か入る。
2,3,4,5を入れてる人がいた。


91 :デフォルトの名無しさん:04/06/23 19:30
98だったかも・・・

92 :デフォルトの名無しさん:04/06/23 20:15
>>65
TReaderでしたか、ありがとうございます。

タスクトレイにアイコンを表示させるための、コンポーネントを作っているのですが、
コンストラクタ内でFTask(駐屯型かどうか)の値をもとに、
アイコンを登録するかどうかでわけたいのです。
駐屯型でない場合は、最小化時のみ、アイコンを表示させようと思っています。

NID:TNotifyIconData;

constructor TTrayIcon.Create(Owner: TComponent);
begin
  if not (csDesigning in ComponentState) then begin
    ・・・
    with NID do begin
     ・・・
    end;
    // FTray ← の値が常にFalseだから使えない。。。
    if FTray then Shell_NotifyIcon(NIM_ADD, @NID); {アイコン登録}
  end;
end;

既存のコンポーネントで、Visibleの値をもとに、
表示したり、されなくしたりするのはどのようにしているのでしょうか。

93 :デフォルトの名無しさん:04/06/23 20:21
>>75
>PageControlに追加したTabSheetの各タブに出るヒントを、別々の物にする方法は?

uses
CommCtrl;

procedure TForm1.ApplicationEvents1ShowHint(var HintStr: String;
var CanShow: Boolean; var HintInfo: THintInfo);
var
i,itm:integer;
r:TRect;
begin
if HintInfo.HintControl.Name = 'PageControl1' then begin
itm := -1;
for i := 0 to PageControl1.PageCount-1 do begin
PageControl1.Perform(TCM_GETITEMRECT,i,LPARAM(@r));
if PtInRect(r,HintInfo.CursorPos) then itm := i;
end;
if itm <> -1 then HintStr := IntToStr(itm)+'-th tab だよ';
end;
end;

94 :デフォルトの名無しさん:04/06/23 20:34
CとかJavaならHello Worldを出力せよってプログラムを最初にやると思うんだけど
Delphiでそれにあたるようなプログラムは何でしょう?<最初に作れと言われるプログラム

95 :デフォルトの名無しさん:04/06/23 20:35
>>94
コンソール版hello,worldと
ボタンを押すとメッセージが表示されるフォーム版hello,world

96 :デフォルトの名無しさん:04/06/23 20:36
最初に作るアプリはなぜかメモ帳が多いな。

97 :デフォルトの名無しさん:04/06/23 20:38
>>94
http://www.w-frontier.com/delphi/index.html
はどう?

98 :デフォルトの名無しさん:04/06/23 20:39
Delphi6 ProでHTMLを出力したいんだけど
タグの出力等を支援してくれるライブラリってない?

99 :デフォルトの名無しさん:04/06/23 20:41
>>98
入力ならともかく出力は単なるテキストファイルの出力なんだから
私怨とかいらないんじゃないの?具体的にどんな私怨が欲しいの?

100 :デフォルトの名無しさん:04/06/23 20:43
>>99
rubyのCGIクラスやphpみたいなの

101 :デフォルトの名無しさん:04/06/23 20:45
>>98
IntraWeb使ってしまえばぽとぺたでHTML吐けるよ

102 :デフォルトの名無しさん:04/06/23 21:28
ShowWindow(Application.Handle,SW_HIDE);
でタクスバーのアイコンを非表示にしているのですが、
Application.Minimize;
を実行すると、ちょこっとタクスバーに
アイコンが現れてしまって困っています。
解決策はありますか?
どうぞ一つご教示お願いします。

103 :デフォルトの名無しさん:04/06/23 21:29
なんで知られていない(流行っていない)のでしょうか?逆に何故流行らないのかと言いますと、原因は意外とハッキリしています。

MicroSoft社の製品ではない。
「Visual Basic」よりも後に発表された。
名もあまり知られていない言語に手を出したくはない。
参考書があまり出回っていない。
みんながやってるものをやった方が安心する。
企業であまり使用されていない。(使ってる所では使ってますが…)

104 :デフォルトの名無しさん:04/06/23 21:32
やっぱりVB、VC++が最高なのよね。

105 :デフォルトの名無しさん:04/06/23 21:33
>>102
隠すんじゃなくて、WS_EX_TOOLWINDOW属性をつけてやる
>>103
何を今更

106 :デフォルトの名無しさん:04/06/23 22:05
>>105
>103は知っててわざと書いてるんでしょう。
アマチュアか敗北した人にそういうことをする人がいる。


107 :102:04/06/23 22:07
>>105
もう少し詳しく教えて頂けませんか?
お願いします。

108 :102:04/06/23 22:20
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
とアプリケーションが実行する前に読ませてやるとタスクバーに
表示されなくて、その点ではうまくいっているのですが、
最小化をした時に左下にフォームのタイトルバーが現れてしまいます…


109 :デフォルトの名無しさん:04/06/23 22:23
>>106
>>97のサイトからのコピペだよ

110 :デフォルトの名無しさん:04/06/23 22:24
画像をアンチエイリアスつきで回転できるコンポーネントなどありますか。

111 :デフォルトの名無しさん:04/06/23 22:25
>>108
ちょっとややこしいけどイイかな?
それでよかったらコードを掲載可能。

112 :102:04/06/23 22:28
>>108
お願いします。
勉強になりますから是非お願いします。

113 :デフォルトの名無しさん:04/06/23 22:33
>>112
了解。

114 :デフォルトの名無しさん:04/06/23 22:42
>>83
ソケット入門って言うネタが成立するならやってみたいです。
でも、ソケットって言葉では知ってしても実際プログラムとしては
どんなものか分かってないので。
Indyではソケットって無いんですか?

115 :デフォルトの名無しさん:04/06/23 22:58
>>112

メインフォームのInterface部に以下を記述

 //●何も考えずにメインフォームにコレを記述●
 THideTaskBarApplication = class(TApplication)
 public
  constructor Create(AOwner: TComponent); override;
 end;

メインフォームのimplementation部に以下を記述

//●何も考えずにメインフォームにコレを記述●
constructor THideTaskBarApplication.Create(AOwner: TComponent);
var
 WndStyle: Integer;
begin
 inherited;
 WndStyle := GetWindowLong(Handle, GWL_EXSTYLE);
 WndStyle := WndStyle or WS_EX_TOOLWINDOW;
 SetWindowLong(Handle, GWL_EXSTYLE, WndStyle);
end;

//●何も考えずにメインフォームにコレを記述●
initialization
 Application.Free;
 Application := THideTaskBarApplication.Create(nil);

end.

116 :デフォルトの名無しさん:04/06/23 23:03
フォーム上にTEdit、登録ボタンを配置しています。
登録ボタンを押した時にTEdit上に書いてあった内容を
テキストファイルに保存するにはどうしたらいいでしょうか?

117 :デフォルトの名無しさん:04/06/23 23:05
>>115

それって SetWindowLong() でセットするのとどこが違うの?


118 :デフォルトの名無しさん:04/06/23 23:07
>>116
とりあえず、'C:\File.txt'に保存する例。

procedure TForm1.Button1Click(Sender: TObject);
var
 F: TextFile;
begin
 AssignFile(F, 'C:\File.txt');
 Rewrite(F);
 try
  Write(F, Edit1.Text);
 finally
  CloseFile(F);
 end;
end;


119 :デフォルトの名無しさん:04/06/23 23:15
>>108
>最小化をした時に左下にフォームのタイトルバーが現れてしまいます…

procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
begin
Form1.Visible := false;
end;

120 :デフォルトの名無しさん:04/06/23 23:19
>>115
プロジェクトファイルに

SetWindowLong(Application.Handle, GWL_EXSTYLE, GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);

ですむんじゃないの

121 :デフォルトの名無しさん:04/06/23 23:30
> Indyではソケットって無いんですか?

おおまかに言えば Indy はソケットのラッパ。VCL が Win32API のラッパ、という
のと同じような意味で。

Delphi言語でソケット入門っていうのは分かるけど、Indy でソケット入門というのは
ちょっと意味不明な感じ

122 :116:04/06/23 23:35
>>118
できました。ありがとうございます

123 :102:04/06/24 00:05
>>115
>>117
>>119-120
レスありがとうございます。
一応思い通りの事ができました。
115さんのが完全に理解できていませんが
うまくいったので満足です。
また勉強したいと思います。
ありがとうございました。


124 :デフォルトの名無しさん:04/06/24 00:08

application.MessageBox(PChar(文字列),PChar(文字列));

この文字数に上限はあるんでしょうか
実験したところ500,600程度はあっさり表示してしまいます
この文字列部分は変数なんですが、もし上限があるとするなら、そこに
達する直前で切ってしまいたいので(勝手に切ってくれるんだったらそれでも
いいんですけど)

125 :デフォルトの名無しさん:04/06/24 00:13
>>123
結構ややこしくてとにかく理解するには大変だから、とりあえず
これを記述すると表示されなくなることが分ればOK。
今後も必要になった時に貼り付ければイイという感じ。

126 :デフォルトの名無しさん:04/06/24 00:27
>>124
何文字あれば十分ですか?2ギガバイトぐらいはいくかもしれませんが
もっと低い制限かましたほうが無難でしょうね

127 :デフォルトの名無しさん:04/06/24 00:37
ここはくだらないスレッドですね

128 :デフォルトの名無しさん:04/06/24 00:50
>>126さん、レス感謝です

2ギガって、そんなにいけちゃうんですか。

商品別の売上履歴をメッセージボックスの形で表示させてるんです。
XXXX年XX月XX日 X点
YYYY年YY月YY日 Y点
・・・みたいな感じ
でもって、データ元は全履歴テーブルから過去一年分だけ抽出したクエリ。
だから365行分あれば充分なんですけど。
実際には画面の大きさがあるからそんなに表示できるわけないし、
365日間、毎日切れ目なく売れる商品があるわけでもない。
たぶん多くても70〜80行といったところだと思います。

とりあえず尻尾切りはしなくても、最悪画面からはみ出すだけと
考えて大丈夫なわけですね。

129 :デフォルトの名無しさん:04/06/24 01:07
>>128
あれは API の MessageBox のラッパでしょ。Delphi というより API の話ね。

普通、StringGrid か ListView かを載せたフォームで表示させるんでは。

130 :デフォルトの名無しさん:04/06/24 01:13
今、TPersistentを継承したTData1,TData2...TDataNという
いくつかのクラスをファイル入出力させるためTHogeというクラスを作り、
Dataプロパティに先ほどのTDataクラスを保持させるようにしています。

THoge = class(TComponent)
published
 property Data: TPersistent read FData write SetData;
end;

WriteComponentできちんと書き込みは出来ているのですが、
実行時のDataプロパティの実際の型が不定のため、
ReadComponentでうまく読み込むことが出来ません。
やはりDataプロパティの実際の型をTHogeにプロパティとして持たせ、
Dataプロパティを偽プロパティを使って、
ストリームからの読み込み時にその型を判別し
個々の読み込みを行うという方法をとるしかないのでしょうか?

なにかスマートな方法がありましたら教えてください。

131 :デフォルトの名無しさん:04/06/24 01:17
>>129さん
>>普通、StringGrid か ListView かを載せたフォームで
そうしようとも思ったんですけど。
ストリンググリッド貼りつけたフォームばかりもう何枚もできちゃって、
何だか疲れちゃいました。
この程度の表示だったらメッセージボックスでいいかな、と。
(自分の職場のちっぽけなDBフロントエンドです)


132 :デフォルトの名無しさん:04/06/24 07:29
バイナリファイルもしくはストリームをRESファイルに落としたいのですが
なんというリソースタイプを指定すればよいのでしょうか?

133 :デフォルトの名無しさん:04/06/24 07:32
RCDATA

134 :デフォルトの名無しさん:04/06/24 08:31
formの設計で、オブジェクトを選択してそのcaptionやnameを変更するときに
オブジェクトインスペクタで行いますが、
このフォーカスの移動をマウスではなくキーで行う方法ってありますか?

135 :デフォルトの名無しさん:04/06/24 10:38
tab
プロパティ名をタイプ
tab

136 :デフォルトの名無しさん:04/06/24 14:03
application.terminate と Close の違いって、
「その場ですぐアプリ終了」と「ウィンドウズに終了予約する
だけなので、すぐ終了とは限らない」って言う認識で良いですか?

137 :デフォルトの名無しさん:04/06/24 14:05
>>136
こんなんあった。
http://alicecafe.jp/d_web/blog/archives/000043.html

138 :ななしへたぐらま ◆XcB18Bks.Y :04/06/24 17:37
>>84,88-91
以前使っていたPCではWinXP上で2,3,5を共存させていました.
古いバージョンから先に入れるのがよいと思います.
古いのを後から入れるとBDEが古いので上書きされます.
>>131
60〜70行だと文字を小さくしても画面をはみ出しそうですね.
フォームにメモかリッチエディットとボタンを貼り付けて
スクロール可能な自前のメッセージボックスを作ってはいかがでしょうか?

(宣言部)

TMyMsgBoxForm = class(TForm)
RichEdit1: TRichEdit; // ScrollBarsをssVerticalかssBothに
Button1: TButton; // ModalResultをmrOKに
end;

procedure MyShowMessage(const s: string);

(実装部)

procedure MyShowMessage(const s: string);
var frm: TMyMsgBoxForm;
begin
frm := TMyMsgBoxForm.Create(Application);
try
frm.Memo1.Text := s;
frm.ShowModal;
finally
frm.Release;
end;
end;

139 :デフォルトの名無しさん:04/06/24 18:54
foo.pas, bar.pasを含むパッケージbaz.bplを作った場合、
ユニットfooを使うアプリのビルドにはどのファイルを検索させればいいの?
baz.bplではなくfoo.dcuへ検索パスを通すのが正解?

140 :デフォルトの名無しさん:04/06/24 19:30
テキストボックスに入力される文字を半角だけにするにはどうしたらいいのですか。

141 :デフォルトの名無しさん:04/06/24 20:31
procedure TForm1.Button1Click(Sender: TObject);
var
Pos: TPoint;
NewItem: TMenuItem;
begin
PopupMenu.Items.Clear;
NewItem := TMenuItem.Create(PopupMenu);
PopupMenu.Items.Add(NewItem);
NewItem.Caption := Edit1.Text;
NewItem.Tag := 1;

GetCursorPos( Pos );
PopupMenu.Popup( Pos.X, Pos.Y );
end;

というようにすると、作られるPopupMenuのItems.String[1]に
Edit1.textの文字列だけではなくて、半角の&がどこかに入ってしまいます。
例えばEdit1.Text := 'onegaisimasu';だったら、
'onega&isimasu'のようになってしまいます。
どうすれば入らなくなりますか?教えて下さい。


142 :デフォルトの名無しさん:04/06/24 20:36
PopupMenu.AutoHotkeys := maManual;

143 :141:04/06/24 20:41
>>142
アクセラレータキーを自動的につけるためのものだったんですか!
こんなに悩んだのに一瞬に解決してくださり助かりました。

144 :デフォルトの名無しさん:04/06/24 21:59
質問させてください。

Aという非表示コンポーネントを作成して色々な処理を行います。
Aコンポーネントの中に、フォームを呼び出し、値を入力して、チェックする処理をしたいと思い
Bフォームを作って、AコンポーネントでCreateさせました。

Bフォームで入力後、Aコンポーネントのメソッドでチェック処理をするときに
どのように書けばいいのかよくわかりません。

Bフォームを作ったときにAコンポーネントのUnitを追加したのですが
Bフォーム上でAコンポーネントのメソッドをどのようにしたら扱える用になるのでしょうか?
教えてくださいお願いします。

流れ
   AコンポーネントCreate
   Aコンポーネントのメソッド(Show)を実行
   AコンポーネントがBフォームをCreate
   Bフォームで入力
   BフォームがAコンポーネントのメソッド(Check)を実施 ←この方法がわかりません


145 :デフォルトの名無しさん:04/06/24 22:34
TEditに入力される物を整数値限定にしてif文で処理したいのですが
整数を表すコードを教えてください。

下のコードの○○(整数値限定)を知りたいという事です。

if Edit1.Text=○○ then
登録する。
else
NGを表示する。

146 :デフォルトの名無しさん:04/06/24 22:51
StrToIntDefのこと言ってるんですか?

147 :デフォルトの名無しさん:04/06/24 22:52
Val(Edit1.Text, value, code); if code <> 0 then NG;
または
try value = StrToInt(Edit1.Text); except on EConvertError do NG end;

148 :デフォルトの名無しさん:04/06/24 23:01
>>145
発想があまりよくない。入力を限定するのはOnKeyPressでやった方がよい。

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
  #08:; //[BackSpace]
  '0'..'9':; //数字
  #$7F:; //[Delete]
  else Key:=#0;
  end;
end;

もしその方法でやるとしても、if文でやるのは余りスマートな方法とはいえない。
例外処理を使った方がずっと楽。

try
  intVar = StrToInt(Edit1.Text);
except
  on EConvertError do
    ShowMessage('整数を入力してください');
end;

こうすると、
数値に変換できる文字列がEdit1に入力されているならばintVarに代入が行われるが、
変換できない文字列だったらメッセージダイアログが表示され代入は行われない。

149 :デフォルトの名無しさん:04/06/24 23:09
>>144
例をあげる

public
HonyaLabel:TLabel;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
HonyaLabel := TLabel.Create(self);
HonyaLabel.Parent := self;
HonyaLabel.Left := 10;
HonyaLabel.Top := 10;
end;

こんなふうにつくった HonyaLabel に Unit2 からアクセスするには

uses
Unit1;

procedure TForm2.Button1Click(Sender: TObject);
begin
Form1.HonyaLabel.Caption := 'HogeHoge';
end;

150 :144:04/06/24 23:56
ありがとうございます。
明日、会社で確認します。
(会社からは2chへアクセス出来ないため家から書き込みしているので)

BフォームではAコンポーネントをCreateしていないので、
どうやって操作するのかイメージがわきませんでした。
どのオブジェクトがCreateしたかは気にしなくていいようですね。


151 :デフォルトの名無しさん:04/06/25 00:57
> どのオブジェクトがCreateしたかは気にしなくていいようですね。

そうですね。重要なことは、書いたコードに部分から HonyaLabel のような
インスタンス参照が見えるかどうかです。上の場合は uses Unit1; が肝心な部分です。
そして、HonyaLabel が Unit1 の interface 部にあり、TForm1 の public フィールド
である、ということが。

152 :デフォルトの名無しさん:04/06/25 09:52
お世話になります
登録ボタンとListBoxとComboBoxをフォーム上に配置しています。
そして、ListBoxとComboBoxにはItemsプロパティにいくつか選択肢を入力しています。
登録ボタンを押したときにそれぞれ選択されている選択肢をテキストに保存したいのですが
以下のコードではエラーが出てしまいます。

begin
AssignFile(F,'C:\File.txt');
Rewrite(F);
try
Write(F,ListBox1.Text,ComboBox1); //エラーが出る
finally
CloseFile(F);
end;
end;

どうしたらいいでしょうか?
また、選択肢以外を手書きで入力したときにメッセージで警告表示を促したいのですが
それも教えてください。ShowMessageは知っています。

153 :デフォルトの名無しさん:04/06/25 10:10
>>152
簡単に言えば
Write(F, 文字列);
とせねばなりません。

154 :デフォルトの名無しさん:04/06/25 10:11
combobox1の何を保存したいんだ?
そのままじゃ保存できない。

155 :デフォルトの名無しさん:04/06/25 10:12
>>152
あとComboBox.Style を csDropDownList にしとけば
そもそも手動入力できないようにできます。

156 :152:04/06/25 10:30
>>153-155

ComboBoxはComboBox1.Textにしたら出来ました。
手動入力はデファルトで入力できる設定になっていましたけど勉強になります。
ただ、手動入力もファイルに保存されてしまうのでShowMessageを使ってNGを出したいです。

157 :デフォルトの名無しさん:04/06/25 10:33
こんにちは。昨日からDelphiを使い始めました。
いろいろ試しているんですが、
DateToStr(Date)
の年と月と日をそれぞれ別の変数に入れたいんですが、
文字列の分割の仕方がよくわかりません。
xBASE言語のleftstrやrightstrのような関数はないんでしょうか。

158 :デフォルトの名無しさん:04/06/25 10:37
>>157
xBASEとやらは知らないけど、その名前の関数はあるよ。
uses に StrUtilsを追加しる。

159 :デフォルトの名無しさん:04/06/25 10:38
>>158
ありがとうございます。
でもHELP見ても出てきません。Delphi 5です。

160 :デフォルトの名無しさん:04/06/25 10:42
> の年と月と日をそれぞれ別の変数に入れたいんですが、

DecodeDate()

> xBASE言語のleftstrやrightstrのような関数はないんでしょうか。

Copy() や AnsiPos() や Length() でもっと柔軟な使い方ができる。

161 :デフォルトの名無しさん:04/06/25 10:45
>>160
うお、こんな関数あるんだ。どもサンクスです。
助かりました。

162 :デフォルトの名無しさん:04/06/25 11:11
FormにEditを複数貼り付けて名前から(Tagでも可)そのEditを探す方法はありますか?

163 :デフォルトの名無しさん:04/06/25 11:13
FindComponent

164 :デフォルトの名無しさん:04/06/25 11:35
>>163
助かりました
ありがとうございます

165 :デフォルトの名無しさん:04/06/25 12:26
アプリ起動時にTedit1にテキストファイルから取り込んだ物を
入力したいのですがどうやったらできますか?

166 :デフォルトの名無しさん:04/06/25 12:48
Edit1.Text := 取り込んだ文字

167 :デフォルトの名無しさん:04/06/25 13:00
>>165
おいら初級者なので間違ってたらごめん(´Д`;)

procedure TForm1.FormCreate(Sender: TObject);
var
sl: TStringList;
begin
sl := TStringList.Create;
try
sl.LoadFromFile('C:\test.txt');
Edit1.Text := sl.Strings[0];
finally
sl.Free;
end;
end;

168 :デフォルトの名無しさん:04/06/25 13:00
>>157
DecodeDateも調べてみてごらん。


169 :デフォルトの名無しさん:04/06/25 13:04
既出だった...スマソ

170 :165:04/06/25 15:19
>>167
ありがとうございます

171 :デフォルトの名無しさん:04/06/25 16:13
ねえ、Delphiって関数ジャンプってないの?
VC++にあるようなやつ。

172 :デフォルトの名無しさん:04/06/25 16:14
exitのことか?

173 :デフォルトの名無しさん:04/06/25 16:33
いや違う。
エディタの話。
自分の作った関数にジャンプできなくない?

174 :デフォルトの名無しさん:04/06/25 16:34
Personalはいろいろエディタ機能削除されてるけど・・・

175 :デフォルトの名無しさん:04/06/25 16:37
>>173
[表示]-[コードエクスプローラ]のこと?

176 :デフォルトの名無しさん:04/06/25 16:40
>>175
それないよ・・・
まあフリーのやつだからしょうがないか。

177 :175:04/06/25 16:46
>>176
俺はPro版だが、使ったことない・・・。

178 :デフォルトの名無しさん:04/06/25 16:48
ALT+↑ とか

179 :130:04/06/25 16:49
スルーされてるっぽいので、他のスレで聞いてきます。
お手数おかけしました。

180 :デフォルトの名無しさん:04/06/25 17:50
>>171
Ctrlキーを押しながらその関数にマウスカーソルを当てるとハイライトする。それをクリックすると
その関数にジャンプする。という機能?
それともCtrl + Alt + ↓のこと?

スレ違いならスマソ


181 :デフォルトの名無しさん:04/06/25 18:30
>>175
最近ごちゃごちゃなコード書いてるせいか
むしょうにその機能が使いたくてしょうがない。
「定義の検索」でなんとか代用してるけど・・

182 :デフォルトの名無しさん:04/06/25 18:39
コードエクスプローラってプロジェクト閉じるたびにツリーも全部閉じるからめんどくさくて使ってられない

183 :デフォルトの名無しさん:04/06/25 21:31
DelphiでシーケンシャルファイルをOPENし、配列に取り込むのはどうやるんですか?
HELPでreadとか見つけたんだけど使い方とか書いてないし・・・

なんかVBよりとっつき悪い感じ・・・

184 :デフォルトの名無しさん:04/06/25 21:42
>>183
何事も慣れです。「シーケンシャルファイル」なんていってる時点で
化石プログラマーな匂いがプンプンしますよ。もっと柔軟に考えないと。
ファイル操作といってもいろいろなやり方がありますから、
バイナリファイルなら TFileStream、
テキストファイルなら TStringList が楽かも。
余裕があるなら File of XXXX, TextFile、
また、Win32 APIを直で使うという方法もあります。

185 :デフォルトの名無しさん:04/06/25 21:58
TFileStreamか、ありがとう。

186 :デフォルトの名無しさん:04/06/25 23:11
ってHELPにも出て来ないし・・・やれやれ

187 :デフォルトの名無しさん:04/06/25 23:38
そのレベルで2chだけで言語習得しようとしているあんたに惚れた

188 :デフォルトの名無しさん:04/06/25 23:39
つうかVBプログラマってホント潰しきかねぇな


189 :デフォルトの名無しさん:04/06/25 23:56
C#とかC++とかDelphiとかやるならオブジェクト指向について
勉強しとかないとつらいよ。

190 :デフォルトの名無しさん:04/06/25 23:58
お前ら"VB"に過剰反応しすぎ。

191 :デフォルトの名無しさん:04/06/26 00:16
なんかVBよりとっつき悪い感じ・・・


192 :デフォルトの名無しさん:04/06/26 00:28
>>188
Cやれ。

193 :デフォルトの名無しさん:04/06/26 00:37
Kylixの話はここでよござんしょか?
Duron1G、メモリ600MBOverの環境でGnome上でKylix Open Edition 3を立ち上げて
ボタン一個の画面作ってそれだけで走らせようとしたら
実行ファイルはできているらしいもののIDEが凍ります_| ̄|○
(で、その実行ファイルは実行されない。ターミナルから起動しようとしても
参照が未解決だとかなんとか……どっかにLIBPATH通さないといかんのかな)
環境的にきついんでしょうか?

194 :デフォルトの名無しさん:04/06/26 01:14
肝心のディストリビューションかいてないし

195 :デフォルトの名無しさん:04/06/26 09:09
Delphiのブロック崩しのサンプルってないんですか?
ぐぐってもでてこないorz

196 :デフォルトの名無しさん:04/06/26 13:06
すいません。
Timerについてなんですが、
OnTimerの処理が終わらずにまたOnTimerが呼ばれた場合、
一体どのような処理になるのでしょうか、、

197 :デフォルトの名無しさん:04/06/26 13:10
>>195
超初心者スレなんで、TShapeとTTimerだけでブロック崩し作ってみたら。
ちょっと面白そうなんでやってみようかな。

198 :デフォルトの名無しさん:04/06/26 13:13
>>196
呼ばれません。

199 :134:04/06/26 13:25
>>135
遅くなりました、ありがとうございます。ネ申よ。。。

200 :デフォルトの名無しさん:04/06/26 13:32
>>196
別スレッドになるわけじゃないしな

201 :デフォルトの名無しさん:04/06/26 19:32
>>197
sinとかcosの使い方が知りたいのです...
どうやったら移動と反射とかができるのか。

202 :デフォルトの名無しさん:04/06/26 20:11
お前ら、布教と救済しる!

203 :デフォルトの名無しさん:04/06/26 23:27
何だよ偉そうに。

204 :193:04/06/27 00:46
ぐは。確かに。 > ディストリビューション
今は最早骨董品と成り果てたRedHat9でござります。
パッチはなーんも当ててないっす。それでも一応、Kylix3の
動作条件は素で満たしていたはずでしたが……
(事実起動はするし、コンパイラも動いてはいるらしいし)

205 :デフォルトの名無しさん:04/06/27 02:27
質問させて下さい。
#define UMA ((hoge*32)+16)
↑みたいな置換え処理をDelphiではどうやるんですか?

206 :デフォルトの名無しさん:04/06/27 02:46
function UMA(hoge: Integer): Integer; register;
asm
  SHL EAX, 5
  ADD EAX, 16
end;

207 :デフォルトの名無しさん:04/06/27 03:12
>>206
スンマセン…ただ単に置換えだけ出来れば良いんです。
#define GIKO hoge[9]
#define UMA hoge[17]
みたいな感じで。

208 :デフォルトの名無しさん:04/06/27 03:27
知ってて言ってないか?w
無いですよ。
あったとしても、DelphiのようなIDEによるソースの自動編集が重要な位置を占めてる環境で
IDEの邪魔を好んでするのはお薦めしない。


209 :デフォルトの名無しさん:04/06/27 03:39
>>208
本当に知らんかったのですよ…
ヘルプ読んでも検索しても見つからなかったので質問した次第です。
どうもお騒がせしました。

210 :デフォルトの名無しさん:04/06/27 10:00
>>205
無い。
Delphiにはマクロもインライン関数も無いです。
素直に関数作るか、定数として定義しておくしかない(コンパイル前に解るような計算式なら定数に出来る)。



211 :デフォルトの名無しさん:04/06/27 10:23
delphiのソースエディタで行ごと削除できるキーはありますか?

212 :デフォルトの名無しさん:04/06/27 10:34
>>205
ちなみにC#にもマクロ、インラインはないです。


213 :デフォルトの名無しさん:04/06/27 11:28
>>211
ctrl+y

214 :213:04/06/27 11:32
追加。
D7だとヘルプのキーワードに「エディタに関するキーボードショートカット」

215 :デフォルトの名無しさん:04/06/27 15:27
ttp://www.wwlnk.com/boheme/delphi/tips/tec1630.htm

MemCheckによればこれに載ってるコードではメモリリークしてるらしいのですが、
どこが原因になってるんでしょうか?

216 :デフォルトの名無しさん:04/06/27 17:35
>>204
ttp://www.geocities.jp/fujimaki691202/download/Linux/KylixTips/installing_unofficial_patch.htm

Kylix3
http://pc5.2ch.net/test/read.cgi/tech/1030031001/l50

217 :デフォルトの名無しさん:04/06/27 17:41
del7,1 + dbexpress での話ですが、どうしても以下のような
エラーが出ます。海外のBBSを見ると、一部に7.1 upedateの
問題みたいな意見もあるんですが。。。

------- ----------- ------------ -------------
[致命的エラー] ユニット SqlExpr は異なるバージョン
SqlConst.SNOERRORによりコンパイルされています
------- ----------- ------------ -------------

SqlConstって、拡張子が「dcu」と「dcu.jp」ってのが
ありますね。後者は7.1でアップデートされている
わけですが。。。

このエラーって、7.1へのアップデートに失敗した結果?

218 :デフォルトの名無しさん:04/06/27 18:49
>>215
別にリークしてるとは思わないけど。ほかの部分に問題があるのでは?

それよりプロセス間をまたいでポインタを渡すなら、GetMem じゃなくて
GlobalAlloc を使ってグローバルヒープに変数を確保しないと駄目な気が
するけど。

219 :デフォルトの名無しさん:04/06/27 20:28
> GlobalAlloc を使ってグローバルヒープに変数を確保しないと駄目な気が

おいおい、GlobalAlloc WM_COPYDATA を知っててそんなこと言ってるのか?

220 :204:04/06/27 21:05
>216
ぐはっ*2。ぐぐればすぐにでも出てきそうなものを、よう探さんかったとは
己の不分明を恥じるのみ。
というわけで216とドイツのスーパーハカーに謝意を表しつつ逝ってきます。

221 :デフォルトの名無しさん:04/06/27 23:45
senderを偽装 というのをやりたいのですが、
(Sender: TObject);のついているプロシージャを呼び出したい時に、
Senderを持ってない関数からSenderなしで呼び出すとエラーになってしまうので、
Senderをとりあえず捏造して呼び出したいのですが、どうするのがよいのでしょう。
googleで探すのは不可能でした。

222 :デフォルトの名無しさん:04/06/27 23:51
適当にselfとかいれとけ

223 :デフォルトの名無しさん:04/06/27 23:56
TObjectっていったらほとんどなんでもOKだよな・・

224 :デフォルトの名無しさん:04/06/28 00:03
>>221
プロシージャ内部で何やってるか調べないとまずいんじゃね?
必要ないのにSenderのメンバ弄ってるとかならいいけど
必要だから弄ってるなら適当なの渡すのもまずいじゃん?

225 :デフォルトの名無しさん:04/06/28 00:25
stringでtabや改行を盛り込むにはどう記述すればいいんでしょう

226 :デフォルトの名無しさん:04/06/28 00:36
制御コード

タブは  #9
開業は  #10

シングルクオーテーションで囲んじゃだめ。ただの文字列になる。

227 :デフォルトの名無しさん:04/06/28 00:36
変換ミスはスルーで・・・

228 :デフォルトの名無しさん:04/06/28 00:46
改行は sLineBreak 定数を使った方がよさげ

229 :225:04/06/28 01:38
ありがとうございました。

230 :デフォルトの名無しさん:04/06/28 07:06
起動すると必ず最大化されてしまうプログラムを、Windowモードで起動するように指示するプログラムを作りたいのですが、
どのように書けば良いでしょうか・・・。

231 :デフォルトの名無しさん:04/06/28 08:22
そういう起動パラメータがあるかどうか調べる

232 :デフォルトの名無しさん:04/06/28 10:51
TDBGridで、商品名 価格 数量 小計 を表示するような
プログラムを作成しています。価格*数量で計算した小計を
静的に作成したColumunsに表示させたいと思いますが、
どうやってセルを指定して入力するかがわかりません。
StringGridとは全く扱いが違うようなのですが、ヘルプを
読んでみてもよくわかりませんでした。

よろしくお願いします。

233 :デフォルトの名無しさん:04/06/28 13:19
>>230
ショートカットの「実行時の大きさ」を変更してもダメなプログラムは
いったん起動させた後でないとウインドウの変更は無理だと思います。


234 :デフォルトの名無しさん:04/06/28 15:00
>>232
TDBGridだけを何とかしようとしても、目的は達成できないよ。
TDBGridのDataSourceプロパティの元になっているTQueryのSQL文で

SELECT 商品名, 価格, 数量
FROM 商品


SELECT 商品名, 価格, 数量, 価格 * 数量 AS 小計
FROM 商品

にして、小計を計算する項目を作成して、小計フィールドをあらかじめ作ってしまう。
小計はTQueryを開くと実行されるからこれで小計は計算される。
あとはTDBGridのColumnsに小計を追加すればOK。

TTableが元になっているならば、このようにすることはできないので、
TTableのOnCalcFieldsイベントを使う必要があるけど、長くなるのでここでは割愛
(もしTQueryを使っていない場合は教えてくれれば後で説明します)。


235 :デフォルトの名無しさん:04/06/28 15:07
>>234さま

早速のご回答ありがとうございます。
TQueryを使っています。教えていただいた方法
早速試してみます!!


236 :デフォルトの名無しさん:04/06/28 16:32
>>235
こういう質問をするときには、
・DelphiのバージョンとEdition (Personalとか・・・)
・データベースの名前(OracleとかAccessとか)
などを付記しておいた方が適切なレスがつきやすいよ。


237 :デフォルトの名無しさん:04/06/28 17:33
Assignedって何か意味あるの?
if p <> nil thenって書いて問題になるケースって存在する?

238 :デフォルトの名無しさん:04/06/28 17:41
Assigned(P) はポインタ変数の場合は P<> nil,
手続き型変数の場合は @P <> nil というテストに相当します。


239 :デフォルトの名無しさん:04/06/28 17:43
で、ポインタ変数のチェックでAssigned使う意味あるの?

240 :デフォルトの名無しさん:04/06/28 20:10
>>239
で、ポインタ変数のチェックでAssigned使わない意味あるの?


241 :デフォルトの名無しさん:04/06/28 20:28
お前の人生に意味は無いよ

242 :デフォルトの名無しさん:04/06/28 21:03
お世話になります。ローカル変数について二点ほど質問があります。

ある関数内で宣言したローカル変数は、使う、使わないにかかわらず
呼び出しが起こる度に、常に確保されるものなのでしょうか?

array[0..255] of Char のような大きい変数が必要な場合、
このように宣言するのと、動的変数を関数内で確保して使うのとでは
速度に差が出ますか?

243 :デフォルトの名無しさん:04/06/28 21:10
自分で確かめれば?

244 :デフォルトの名無しさん:04/06/28 21:12
>>242
スタックにとったほうが速度的には有利。
ただしあまり大きくとるとスタックが足りなくなるので
その時はヒープで確保する。

245 :デフォルトの名無しさん:04/06/28 21:28
どうもありがとうございます。

速度という書き方をしましたが、別に実効速度がどう変化するかを
知りたいわけではありません。
可能ならより効率のいいコードを書きたいと思っただけです。

実はコンピュータのコアな部分のしくみをぜんぜん知らないので、
スタックやヒープというのをまず勉強してきます。

246 :デフォルトの名無しさん:04/06/28 22:57
>>242
正直たった256バイトごときじゃ大差ないだろうね

247 :デフォルトの名無しさん:04/06/28 23:23
文意を汲み取れないアホはもう寝ていいよ

248 :242:04/06/28 23:46
          lヽ、            /ヽ
           i! ゙ヽ、    ,,,..-'"/  ゙i!⌒ヽー-、.,,.-イ''⌒ヽ
            l    ゝ-─‐-/'    i!  ヽ、     i,  ,ノ
         ,/"             i!  .... ゙'';;..   Y"
        ,/'              〈  :::::.  '';;...  'i- 、,,
         i'                'i,  ::::::::   ::::  'i!   ゙"ヽ、
          i! ー-      ,,_         'i  :::::::::  ''':;;;  ヽ、  ゙)
        'i,:::::   ,--、     ̄     ,/ヽ ''''        'i,-‐'"
       /⌒ヽ、 i,_,〉   :::::,,-‐    ゝ   .............    ヽ、
       (    ヽ、   ,,.-‐''"       ,)  :::::::::      '\,
        ヽ、,,  ノ,.-‐''"      ノ-‐''"´( :::::::::::          )
          "~ (       ,. -'"     ヽ、    _,,... -‐─'''"
             ヽ、,,.. -‐'''"
寝る!

249 :デフォルトの名無しさん:04/06/28 23:46
いや、>>246 の指摘は重要。質問者は >>245 で書いているように実行速度が
どうこうではなく、より効率のいいコードを書きたいと言っている。256バイト
程度でぐちゃぐちゃ悩むのは全く効率よくない。

250 :246:04/06/29 00:06
>>247
えーと、あなたは何を汲み取ったのですか?とても興味がありますww


251 :デフォルトの名無しさん:04/06/29 00:26
ttp://mo-retsu.jp/unchi/nagare/musyuu.gif

252 :デフォルトの名無しさん:04/06/29 09:29
ListBoxについて質問させてください。
例えばフォーム上にListBox,EditBoxがある時にListBoxの選択肢をEditBoxに表示
させたいのですがプロパティが見つかりません。教えてください。
ComboBoxのTextのような物が見つからないのです。

253 :デフォルトの名無しさん:04/06/29 09:36
EditBox.Text := ListBox.Items[ListBox.ItemIndex];

254 :デフォルトの名無しさん:04/06/29 10:28
文字を一文字ずつ抜き出すサンプルとかで、
1バイトずつ見ていき、
「2バイト文字の1バイト目ならどうの、そうじゃなかったら」
なんてのがありますがWideStringを使えば、そんな事しなくても
良いと思うのですが、何か理由があるのでしょうか?

255 :デフォルトの名無しさん:04/06/29 10:36
>>254
WideString使えない、使いたくない、あるのを知らない、などなどの理由から

256 :デフォルトの名無しさん:04/06/29 10:51
controlbarにtoolbarをドッキングさせると
toolbar内のspeedbuttonが表示されません
なぜでしょうか?

フォームを移動させたり
controlbarのサイズを変更すると表示するのですが・・・
最初だけ表示されません

257 :デフォルトの名無しさん:04/06/29 15:51
>>254
DelphiはコンポーネントやTStringListなんかがすべてSJISで統一されていて
WideStringで統一的にコーディングできないから。
なので毎回String<->WideStringの相互変換が発生して遅くなる。
例えば
var s: String;
function Foo(ws: WideString): WideString;
...
s := Foo(s);
とやるとString->WideString->Stringと変換されてしまう。
速度を気にしなければ自作のライブラリはすべてWideStringで統一するというのもありといえばあり。

258 :254:04/06/29 21:15
>>257
非常に納得。アリガd

259 :デフォルトの名無しさん:04/06/29 23:14
TStringListのLoadFromFileメソッド使ってファイルを読み込む時の質問です。
File自体が存在しない時の対応処理できるのですが、
Fileは存在するが中身が空の時にエラーが出ます。
「デバッカ例外の発生。リストのインデックスが範囲を超えています。(0)」
ヘルプを読んでもイマイチ解らないです。
このエラーの意味と対策を教えてください。

260 :デフォルトの名無しさん:04/06/29 23:15
1GBのファイルを読みこむにはどうすればいいの?


261 :デフォルトの名無しさん:04/06/29 23:18
>>260
なにがやりたい?

262 :デフォルトの名無しさん:04/06/29 23:20
>>259
普通はLoadFromFileで中身が空のファイル読み込んでもそんなエラーは出ない。
アップデートちゃんと当てているか?

>>260
TFileStream



263 :デフォルトの名無しさん:04/06/29 23:25
>>262
ありがと

264 :デフォルトの名無しさん:04/06/29 23:30
>>259
というか例外処理してる?例えば
try
 sl.LoadFromFile('test.txt');
except
 on E: Exception do ShowMessage(E.Message);
end;
とか。

265 :デフォルトの名無しさん:04/06/29 23:37
単純に、「読み込んだ後の処理」で例外が出てるんでしょ?
「何も無いのにインデックスもへったくれも」ってことでは?

266 :A:04/06/29 23:39
Delphi4 std. で、アプリからユーザーにメッセージを表示したいのですが、
その時に、以下のような動作を期待しています。

メインのフォームとは別の、メッセージを載せたフォームを、画面最前面に表示したい。
このフォームは一定時間後に、自動的に閉じられる(<これは出来てる)
ただし、その際に、現在動作している他のアプリのフォーカスは奪いたくない。
最前面に表示するのは、メッセージフォームのみで、メインフォームは下に置いたまま。

要は、できるだけ、ユーザーの邪魔をせずに、メッセージをそっと通知したいのです。

どういったコードで実現できるでしょうか?

267 :デフォルトの名無しさん:04/06/29 23:41
TWebBrowser を使って表示したページの特定のフレームの Document にアクセスするにはどうすればいいのでしょう?
(TWebBrowser1.Document as IHTMLDocument2).frames.item(pvarIndex) でフレームには行き着いているようなのですが、
その後が分かりません。

268 :デフォルトの名無しさん:04/06/29 23:51
>>265
もしかして読み込んだ後にsl[x]にアクセスしてるということ?
それならアクセス前にsl.Countが0でないかどうかをチェックしろ、ということですな。

269 :デフォルトの名無しさん:04/06/29 23:55
>>268
そーゆーことだと思ったが。違うの?

270 :デフォルトの名無しさん:04/06/30 00:00
>>269
LoadFromFileで冷害が発生してるのかとオモタ

271 :259:04/06/30 00:08
>>262
返事どうもです。
アップデートに関してですが、
インストールしたばかりでBorlandのdelphiダウンロードのそばにあった
バッチファイル2つはあてました。
TstringListでStrings[i]使うとエラーがでます。実際、空なのでi行目には
データは入ってないのですがこれは無視できませんか?

272 :デフォルトの名無しさん:04/06/30 00:17
Form1.FormPaintでImage1を書き換えてるのですが
Image1を書き換えるとForm1,FormPaintが呼び出されて
無限ループになります

Form1が再描写されるときにImage1だけ再描写するにはどうすればいいのでしょうか?

273 :デフォルトの名無しさん:04/06/30 00:19
Image1のOnPaintを使うべきだ

274 :259:04/06/30 00:23
皆さんありがとうございました。

275 :デフォルトの名無しさん:04/06/30 00:23
>>271
だからStrings[i]使う前にCountでちぇっくしろと

276 :デフォルトの名無しさん:04/06/30 00:26
Image1のオブジェクトインスペクタにOnPaintがないのですが
どうすればいいでしょうか?

277 :デフォルトの名無しさん:04/06/30 00:32
PaintBox

278 :デフォルトの名無しさん:04/06/30 00:43
PaintBoxいただきです
ありがとうございました

279 :デフォルトの名無しさん:04/06/30 01:36
ある範囲全体をスペースでずらす事は出来ますか?
新しくif文で入れ子にする時、その中身全体をずらしたいという事です。


280 :デフォルトの名無しさん:04/06/30 01:46
>>279
Delphiヘルプ→キーワード→「キーボードショートカット」→エディタ(デフォルト)
にある「ブロックをインデントする」「ブロックをアウトデントする」でどうぞ。

281 :デフォルトの名無しさん:04/06/30 01:52
>>280
ありがとうございます。
便利なものですな

282 :デフォルトの名無しさん:04/06/30 02:01
>267
確かEmbeddedwbにフレームにアクセスするメソッドがあったと思う。

283 :デフォルトの名無しさん:04/06/30 02:59
>>266
こんな感じでどうですか? 十分にテストしてないのでご了承ください。
Form1 がメインフォーム、Form2 がメッセージ用のサブフォームです。

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.Label1.Caption := 'メッセージをセット';
  SetWindowPos(Form2.Handle, HWND_TOPMOST, 0, 0, 0, 0,
    SWP_SHOWWINDOW or SWP_NOACTIVATE or SWP_NOMOVE or
    SWP_NOSIZE); // 非アクティブで最前面に表示
end;

上記の方法で表示すると Form2 の Close が効かなくなるので、
WM_SYSCOMMAND に応答して以下のコードを書いてください。

procedure TForm2.WMSysCommand(var Message: TWMSysCommand);
begin
  if Message.CmdType = SC_CLOSE then
    ShowWindow(Handle, SW_HIDE); // 非表示にする
  inherited;
end;

284 :A:04/06/30 05:20
>>283
ありがとうございます。
組み込んでみたところ、ほぼ期待通りの動作になりました。

なぜか最初の1回目だけ、メインフォームがアクティブになっちゃうのですが、
他の部分が悪さしてる可能性があるので、一度シンプルなテストを作って
いろいろ動作を調べて見ます。

285 :デフォルトの名無しさん:04/06/30 10:55
TRichEditに64KBまでしか入力できないんですけど、そういうものなのでしょうか?

今までTMemoを使ってたのですが、一行に4000文字くらい表示することになったのでTRichEditに変更しました。
TMemoからRichEditに乗り換えてる人は結構いるみたいなんですが、どうしてるんでしょうか?

よろしくお願いします。

環境
WindowsXP Professional SP1
Delphi 7.0 Professional

286 :デフォルトの名無しさん:04/06/30 11:15
> TRichEditに64KBまでしか入力できないんですけど、そういうものなのでしょうか?

違います

287 :285:04/06/30 11:26
違うんですか、そうですか。
調べてみます。どうもありがとうございました。

288 :デフォルトの名無しさん:04/06/30 11:43
> WindowsXP Professional SP1

XP なら TMemo でも 2GB まで行くはずだけど

289 :デフォルトの名無しさん:04/06/30 11:52
TRichEditって使いにくくない?
漏れは乗り換えようとして乗り切れなかった・・。

290 :デフォルトの名無しさん:04/06/30 11:54
表示だけならWebBrowser最強

291 :デフォルトの名無しさん:04/06/30 12:42
IndyでノンブロッキングでHTTPダウンロードするのってどうやるの?

292 :285:04/06/30 13:06
>>288
いや、なんか一行1KBまでだったんです。

293 :デフォルトの名無しさん:04/06/30 13:24
> 一行に4000文字くらい表示することになったので

????

294 :285:04/06/30 13:59
A NUMBER(3)
B NUMBER(5)
C CHAR(10)
D CHAR(1)
E VARCHAR2(2000)
F VARCHAR2(2000)

↑なテーブルからエクスポートしたCSVを表示したいんで。
表示って書き方がおかしかったですかね。






て有価、俺、なんか勘違いしてる?

295 :デフォルトの名無しさん:04/06/30 14:01
1行に4000文字もあったら管理する気うせる

296 :デフォルトの名無しさん:04/06/30 14:46
>>194
なぜ一行で表示したいのか分からない。TMemo に垂直スクロールバーをつけて表示
しても良いのでは。StringGrid でもよいし。

297 :デフォルトの名無しさん:04/06/30 14:47
× 194
○ 294

298 :285:04/06/30 14:58
>>295-296
激しく同意なんですが、そういう仕様で既に作ってあったんです。
いままでは、1レコード1KB以下だったんで全部TMemoで問題なかったんですが
今回>>294のテーブルを追加してしたんで、RichEdit使うことになったんです。

299 :デフォルトの名無しさん:04/06/30 14:59
virtualなlistviewのがよくないか

300 :デフォルトの名無しさん:04/06/30 15:03
ループで1文字ずつ代入していってどこでバグるか見れば制限がわかるだろ
64kで止まったコード出すか?

301 :デフォルトの名無しさん:04/06/30 15:07
こうやってDelphi製ソフトの評判が落ちていくわけか・・・

302 :285:04/06/30 15:11
>>300
あ、すいません。最初の問題は解決しました。
MaxLenghtを弄ったら大丈夫でした。

303 :デフォルトの名無しさん:04/06/30 15:13
TRichEdit とか TMemo はウィンドウズのコントロールであり Delphi は無関係

304 :デフォルトの名無しさん:04/06/30 15:14
296 の仕様でよいなら TMemo で無問題

305 :デフォルトの名無しさん:04/06/30 15:43
>>301
だからVB製ソフトは評判が悪いのか・・・・

306 :デフォルトの名無しさん:04/06/30 15:52
誘導

>>301>>305
VB vs Delphi @夏厨2004
http://pc5.2ch.net/test/read.cgi/tech/1088578261/

307 :デフォルトの名無しさん:04/06/30 17:18
>>305
そうやって、いきなりVBだしてくるなんて
過剰反応するから・・・。

308 :デフォルトの名無しさん:04/06/30 17:21
VBの話題はスレ違いです

VB vs Delphi @夏厨2004
http://pc5.2ch.net/test/read.cgi/tech/1088578261/

309 :デフォルトの名無しさん:04/06/30 17:38
>>305 >>305 >>305 >>305 >>305
>>305 >>305 >>305 >>305 >>305

VB vs Delphi @夏厨2004
http://pc5.2ch.net/test/read.cgi/tech/1088578261/

310 :デフォルトの名無しさん:04/06/30 17:39
なんかヒステリックな反応が迫害されたΩ信者みたいだな。

311 :デフォルトの名無しさん:04/06/30 18:03
関係ないものに例えて
変なイメージを植え付けようとするのは
詭弁のテクニックだね。

312 :デフォルトの名無しさん:04/06/30 18:05
関係あるものに例えたら例えになりませんが。
Del厨って日本語にも不自由なんだな。

313 :デフォルトの名無しさん:04/06/30 18:39
・Delphiのアプローチ
問題にぶつかる→できない(本人の力不足)→Delphiの評判が落ちる

・VBのアプローチ
問題にぶつかる→できない(言語の力不足)→VBの評判が落ちる

314 :デフォルトの名無しさん:04/06/30 19:08
DelphiとVBとの比較話題はスレ違いです

VB vs Delphi @夏厨2004
http://pc5.2ch.net/test/read.cgi/tech/1088578261/

315 :デフォルトの名無しさん:04/06/30 21:20
挫折したので誰か助けて〜
下のVBを移植してください。

Dim i As Long, FileNum As Integer
FileNum = FreeFile()
Open "map.dat" For Binary As #FileNum
For i = 0 To 40000
Get #FileNum, , map(i)
Next i
Close

316 :デフォルトの名無しさん:04/06/30 21:36
Var
 i: Longint;
 FS: TFileStream;
Begin
 FS := TFileStream.Create('map.dat',fmOpenRead);
 Try
  For i := 0 To 40000 Do
   FS.ReadBuffer(map[i],SizeOf(map[i]));
 Finally
  FS.Free;
 End;
End;

317 :デフォルトの名無しさん:04/06/30 21:46
getmem allocates memory from the RTL memory manager and returns a pointer.
the returned pointer must be freed with freemem.

memproof0948でオブジェクトリストをfreeすると出る警告なのですが
解放できてないのでしょうか?

318 :デフォルトの名無しさん:04/06/30 21:55
>>317

VB vs Delphi @夏厨2004
http://pc5.2ch.net/test/read.cgi/tech/1088578261/

319 :デフォルトの名無しさん:04/06/30 21:55
なんか知らんけどオブジェクトリストにGetMemしたヒープをぶら下げてるとかじゃないの

320 :デフォルトの名無しさん:04/06/30 22:06
オブジェクトリストに オブジェクトリストぶら下げてます
ツリーになってます

321 :315:04/06/30 22:20
>>316
ありがとう〜。
そうやって使うのか・・・

322 :デフォルトの名無しさん:04/06/30 22:21
memproofってなに?

323 :デフォルトの名無しさん:04/06/30 22:31
解決しました
destroyでオブジェクトリストの解放を忘れてました

324 :デフォルトの名無しさん:04/06/30 23:42
ListViewのリストアイテムの追加時にそのアイテムの文字色を
奇数行は赤色、偶数行はオレンジ色というふうにするにはどうすればいいのでしょうか?

325 :デフォルトの名無しさん:04/06/30 23:48
>>316
beginとendのキャップがキモイ

326 :デフォルトの名無しさん:04/06/30 23:50
>>316
var、try、for、to、do、finallyも

327 :デフォルトの名無しさん:04/07/01 00:46
それより質問者は何で 40001 回に分けてコピーしてるか意図不明。
VB って連続バイトのコピーもできないのか?

328 :デフォルトの名無しさん:04/07/01 10:56
まぁまぁ、こっちだって読み込んだだけで使わずにFreeしてるし

329 :デフォルトの名無しさん:04/07/01 13:48
すみません。こんな変数は可能でしょうか?
Tfruits
fruits.kind[1]='ばなな';
fruits.amount[1]= 5;
fruits.price[1]=100;
fruits.kind[2]='みかん';
fruits.amount[2]= 10;
fruits.price[2]=250;

型とか変数とか配列でヘルプを見てるんですけど、いまいちピンと
来ません...。

330 :デフォルトの名無しさん:04/07/01 13:49
= は := です。

331 :デフォルトの名無しさん:04/07/01 13:57
>>329
可能かどうかなら可能だけど、俺ならTfluitsにkind、amount、priceを持たせて
fluitsを配列にする。

332 :デフォルトの名無しさん:04/07/01 14:07
Tfurute = record
kind :string;
amount. praice: Integer;
end;

var
fruits: array[0..2] of Tfuruts;

333 :デフォルトの名無しさん:04/07/01 14:43
>>332
変です

334 :A:04/07/01 18:37
>266 >283

シンプルなテストアプリを作ってやってみたところ、一部に、よく判らない動作が
おきているようです…。

Form2 に pop手続きを作り、そこで、以下のように記述。
タイマーはForm2を自動で閉じるための物です。(ShowWindow(Handle, SW_HIDE);を記述)

procedure TForm2.pop;
begin
 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0,
  SWP_SHOWWINDOW or SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
 Timer1.Enabled := True;
end;

Form1の呼び出し側では、同じくタイマーで、一定間隔で自動的に、Form2.pop; を呼んで
Form2を表示。

この作りで、Form1が、アクティブ、非アクティブ、最小化、いずれの状態でも
Form2は表示され、かつ他ののアプリの邪魔をしないという、期待通りの動作をします。

ところが、Form1が非アクティブかつForm2が表示されている間に、Form2をクリックすると、
1) Form2がアクティブ化、Form1が非アクティブのままトップに表示。
2) タイマーでForm2が、消えると同時に、Form1は、元の位置(アクティブの後ろ)へ。
3) 次のForm2.pop;で、Form2が表示されると同時に、Form1も非アクティブのままトップへ。
4) タイマーでForm2が閉じると、今度はForm1が非アクティブのまま最上面に残ります。
これ以降は、Form1がトップに出たまま、Form2が表示/非表示を繰り返します。

どうしてこんなことになるのか・・・。

335 :315:04/07/01 21:53
>>327
おお!
連続バイトのコピーを使った奴で教えてください。
PLCだと解かるんだが、PCはむずい。

336 :デフォルトの名無しさん:04/07/01 22:43
var
  FileNum: Integer;
  Map: Pointer;
begin
  GetMem(Map, 40001);
  try
    FileNum := FileOpen('map.dat', fmOpenRead or fmShareDenyNone);
    if FileNum >= 0 then
      try
        FileSeek(FileNum, 0, 0);
        FileRead(FileNum, PChar(Map)^, 40001);
      finally
        FileClose(FileNum);
      end;
    // 読み込み後の処理
  finally
    FreeMem(Map);
  end;
end;

337 :315:04/07/01 23:07
>>336
ありがとう。
なるほど、pointerか・・・
それにしても何故HELPでFileOpenとか出て来ないんだ・・・?
あぁ、でも霧が晴れてきた感じ。

338 :デフォルトの名無しさん:04/07/01 23:15
openfileなら出るんじゃない?とか言ってみるテスト

339 :デフォルトの名無しさん:04/07/01 23:38
せっかく316がTFileStream使ったのに水の泡じゃん。
初心者を惑わすなよ。

340 :デフォルトの名無しさん:04/07/01 23:39
Pointer を使ったのは map が何を意味するのかわからなかったからで、
普通は型付きの配列を使った方が簡単だと思うぞ。

FileRead の第二引数は ReadFile API に先頭のアドレスを渡すだけだから、
その先のメモリがちゃんと確保されていれば型は関係ない。

341 :デフォルトの名無しさん:04/07/02 00:48
USBの232C変換アダプターでのシリアル通信で注意することってありますか?
Delphiとは関係ないのですが、今までPC直付けのComで無問題だったのが
USBに変えたらトラブりだしてしまって。

342 :A:04/07/02 04:13
>>334
自己レスです。

Form2がクリック等でアクティブになったときに、Form1をアクティブにしてやることで、
一応問題は回避しました。

それとはたぶん別件で、アプリが、ときどきなぜか、勝手に前面に来る、という症状が
起きています。
Application.OnActiveteが発生しているようなのだけど、一体誰が起こしてるのかが
掴めない…。イベントを発生させた元を突き止める方法は、無いでしょうか?

343 :デフォルトの名無しさん:04/07/02 06:40
EditBoxを複数扱う処理について教えてください。
フォーム上にEditBoxがたくさんありButtonを押した時のイベントハンドラ
でそれらを例えばファイル出力する時に以下のコードを書きました。

for i:=0 to ComponentCount-1 do
begin
if Components[i] is TEdit then
begin
Writeln(F,TEdit(Components[i]).Text);
end;
end;

でも、この場合だとどのEditBoxかが判断できず
もし、2つのEditBoxをフォーム上で入れ替えたら
処理が逆になってしまいます。
どうしたらいいでしょうか?

344 :デフォルトの名無しさん:04/07/02 08:52
>>343
sl:= TStringList.Create;
try
・sl.Sorted:= True;
・for i:=0 to ComponentCount-1 do begin
・・if Components[i] is TEdit then
・・・sl.AddObject(Components[i].Name, Components[i]);
・end;
・for i:=0 to sl.Count-1 do begin
・・Writeln(F,TEdit(sl.Objects[i]).Text);
・end;
finally
・sl.Free;
end;


345 :デフォルトの名無しさん:04/07/02 09:03
>>344
すばらしい!

346 :デフォルトの名無しさん:04/07/02 11:12
>>341
クリティカルな処理をしない限り、基本はCOMだろうがUSBだろうがさほど変わらないように思えるんだけど、
どういうトラブルが発生したか教えてほしい。


347 :デフォルトの名無しさん:04/07/02 12:35
DelphiとVB、どちらが簡単ですか?

348 :デフォルトの名無しさん:04/07/02 12:47
>>347
>>318


349 :デフォルトの名無しさん:04/07/02 13:35
>>331-333
どうもありがとうございます。
こんな感じにしましたけど、なんかムダとかヘンな使い方してるとか
こんな使い方はしないとかありますか?
type
Tfruits = record
name : string;
amount, price : integer;
end;
type
Tfruitsshop = record
name,address,tel : string;
fruits : array[1..100] of Tfruits;
end;
var
tokyoshops : array of Tfruitsshop;
begin
setlength (tokyoshops, 123);
with tokyoshops[1] do
begin
name := 'フルーツパラダイス';
address := '渋谷区横浜1-2-3';
tel := '03-1234-5678';
fruits[1].name := 'みかん';
fruits[1].amount := 100;
fruits[1].price := 50;
fruits[2].name := 'りんご';
fruits[2].amount := 50;
fruits[2].price := 150;
end;
end;

350 :デフォルトの名無しさん:04/07/02 14:11
> setlength (tokyoshops, 123);

念のため。これだと

tokyoshops[0] から tokyoshops[122] まで



351 :デフォルトの名無しさん:04/07/02 16:24
> fruits : array[1..100] of Tfruits;

これも
fruits : array of Tfruits;
にしてSetLengthして使った方が無駄がなくていいと思う。

352 :デフォルトの名無しさん:04/07/02 16:40
てゆーかTObjectList使っとけ

353 :デフォルトの名無しさん:04/07/02 17:04
レコード型だから TList で十分

354 :デフォルトの名無しさん:04/07/02 17:48
VB.NETの方がgenericsが使えて安全ですね。

355 :デフォルトの名無しさん:04/07/02 18:37
でも遅いし、40MBのランタイムいるし。

356 :デフォルトの名無しさん:04/07/02 18:55
TRegistryでReadStringについて質問があるんですが、
値を取得しようとするといつも「""」がついてくるんですが、
これをつけずに読み込む方法はないでしょうか?

357 :356:04/07/02 19:07
すいません、こちらの手違いでした。

358 :デフォルトの名無しさん:04/07/02 21:45
FileListBoxって勝手にアイテムがソートされてしまうのですが、
これを無効にすることはできませんでしょうか。。?

359 :デフォルトの名無しさん:04/07/02 22:02
iriaとかFlashGetとかダウンローダーにあるようなファイルの途中からのリトライ機能ってどうやってるんですかね?
どこかにDelphiに限らず資料とかないですか?

360 :デフォルトの名無しさん:04/07/02 22:03
http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/

361 :デフォルトの名無しさん:04/07/02 22:23
おおっ!
素早く適切な資料をありがとうございます!

362 :215:04/07/02 22:39
ParamStr をローカル変数に代入せずに処理するとうまくいきました。

363 :デフォルトの名無しさん:04/07/02 23:12
ParamStr なんてどこにも使われていないじゃないか。

364 :デフォルトの名無しさん:04/07/02 23:19
いやいや、想像するに、二重起動を禁止して、自アプリの起動済みのヤツに自分の
ParamStr() を知らせるために WM_COPYDATA を使ってるのかと。メモリリークは
どこで起こるか、想像できんが。

365 :デフォルトの名無しさん:04/07/02 23:21
>>353
ヒープにとるならレコードである必要はないだろ

366 :デフォルトの名無しさん:04/07/02 23:23
>>359
https://sourceforge.jp/projects/openirvine/

367 :デフォルトの名無しさん:04/07/02 23:24
theSpoke版でVB.NET始めるのとDelphi Personal買うのとどっちが賢いですか?

368 :デフォルトの名無しさん:04/07/02 23:25
今すぐ完成度の高いものを作りたいならDelphi7Pro
そうでなければC#

369 :デフォルトの名無しさん:04/07/02 23:25
>>365
>>349

370 :デフォルトの名無しさん:04/07/02 23:26
>>367
両方はじめて見識を広げる

371 :デフォルトの名無しさん:04/07/02 23:27
>>369
サイズ固定する意味ないだろって流れだろ

372 :デフォルトの名無しさん:04/07/02 23:27
>>367
Delphiスレで質問するとはいい度胸してるな。



どっちもやっとけ。



373 :デフォルトの名無しさん:04/07/02 23:28
>>371
>>349

374 :デフォルトの名無しさん:04/07/02 23:30
Delphi8にはPersonalはないけどな。

375 :デフォルトの名無しさん:04/07/02 23:30
なんかムダとかヘンな使い方してるとか
こんな使い方はしないとかありますか?

376 :デフォルトの名無しさん:04/07/02 23:30
Delphi6 Personal(無料)

377 :デフォルトの名無しさん:04/07/02 23:32
Delphi8 はすすめない。Delphi6Personal なら無料のはず。

378 :デフォルトの名無しさん:04/07/02 23:33
4830円>>>無料

379 :デフォルトの名無しさん:04/07/02 23:33
>>375
?????

380 :デフォルトの名無しさん:04/07/02 23:42
>>358
FileListBox は Win16 のなごり。つかわないのが吉。

381 :デフォルトの名無しさん:04/07/02 23:59
では、ParamStrとWM_COPYDATAを使ったメモリリークするコードを教えて欲しい。

ParamStrをローカル変数に代入するとリークし、
代入しなければリークしない。

だぞ?

382 :デフォルトの名無しさん:04/07/03 00:38
>>381
他人のコードをさらして、メモリリークの疑いをかけるのは本当に失礼なことだね。

>ParamStrをローカル変数に代入するとリークし、
>代入しなければリークしない。

コードを見ないと皆目見当もつかないけど。

383 :デフォルトの名無しさん:04/07/03 00:41
自分のコードは匿名でもさらさない、か・・・

384 :デフォルトの名無しさん:04/07/03 01:07
そんなにメモリリークが気になるなら、送信したい文字列をINIファイルに保存して
受信側で適当なタイミングにINIファイルを読み込むようにすればどうだ?

タイミングは自分で考えるべし。

385 :デフォルトの名無しさん:04/07/03 01:10
>>380
ということは、ソートを無効にすることはTFileListBoxでは無理なのですね。。
自作コンポの勉強するかな。。

386 :デフォルトの名無しさん:04/07/03 01:25
TFileListBox はソースが付いているでしょ。

387 :デフォルトの名無しさん:04/07/03 01:26
>>384
それはダサ過ぎ。WM_COPYDATA をつかっても、メモリリークは解決したそうだよ。

388 :デフォルトの名無しさん:04/07/03 02:55
>>367
仕事用にC#
趣味用にDelphiやっとくと最高に仕合せです

389 :デフォルトの名無しさん:04/07/03 03:20
>>388
趣味でも C# のほうが幸せになれそうだけど

390 :A:04/07/03 05:12
Form1に、TTimer、TIdHTTP、TUIWebBrowser を置いて、

OnTimer で、
s := IdHTTP.Get(URL);
UIWebBrowser.DocumentSorce := s;
といった、ことをしているのですが、謎の、Application.OnActiveteが発生します。

色々と調べてみたところ、どうやら、UIWebBrowser.DocumentSorce := s; の後に
発生しているようなのですが、毎回発生するわけではなく、
アプリをアクティブにした後、別のソフトに切り替え、その次の最初のOnTimerの時に
Application.OnActiveteが発生し、それ以降のOnTimerでは、発生しません。
再び、アプリ→他アプリの操作を行うと、また発生します。

これは一体どういったことなのでしょうか…? orz

ちなみに、起動直後、これらの処理をしているだけであれば、このApplication.OnActiveteが来ても、
アプリは特に、前面に出ることも、アクティブになることもありません。

391 :デフォルトの名無しさん:04/07/03 05:37
>>367, ついでに>>388-389
>>314
それから、趣味ならソフトウェア板行ってVCLと.NETの評判を探すが良い
大体、VCL≒コンポ頼みなので細かい事できない、.NET≒遅すぎ論外


392 :デフォルトの名無しさん:04/07/03 05:44
>>390
仮に、UIWebBrowserをフォームから消して、タイマーとTIdHTTPだけでやっても、同じ現象が起きますか?

393 :215:04/07/03 08:13
>382
本当にお恥ずかしい事です
コードはこれです
http://venus.aez.jp/uploda/dat/upload8209.zip

394 :デフォルトの名無しさん:04/07/03 10:02
>>391
VCL≒コンポ頼みなので細かい事できない
とかいってるやつは単に知識が足りないだけじゃん。
だってそれいいいだしたらフレームワークやミドルウェア使うなーってことになっちゃうし。
結局アセンブラに近い無印Cがイイ!ってなるだけでさ。

395 :デフォルトの名無しさん:04/07/03 10:43
>>394
禿同!
Delphiではコンポを使うだけじゃなく、作れることもお忘れなく。
使うだけなら初心者レベル。

396 :デフォルトの名無しさん:04/07/03 10:45
両方出来た方がいいに決まってるだろ

と、流れを読まずにレスしてみるテスト

397 :デフォルトの名無しさん:04/07/03 10:49
またこのごろテストするのがはやってるのか?

と、テストレスしてみるテスト

398 :385:04/07/03 11:12
>>386
すいません。当方D6Perのもので。。

orz

399 :デフォルトの名無しさん:04/07/03 12:31
StdCtrls ユニットや Controls ユニットがダウンロードできる
サイトってどこでしたっけ? ちょっと忘れました。

400 :359:04/07/03 13:35
>>366さん
Irvineのソースコードあったんですか・・・orz
ありがとうございます。

401 :A:04/07/03 15:55
>>392
UIWebBrowserを消しては居ないのですが、DocumentSource への代入をコメントアウトすると
どうやら、Application.OnActivate は発生しないようです。
逆に、IdHTTPを、コメントアウトして、定型文を DocumentSource へ代入した場合、
発生するようです。
どうやら、UIWebBrowserが原因のようですね。 といっても使わないわけにはいかないし…。
どうしたものか…。

402 :デフォルトの名無しさん:04/07/03 16:12
大人しくTWebBrowser使うとか。

403 :デフォルトの名無しさん:04/07/03 17:14
>393 begin



404 :デフォルトの名無しさん:04/07/03 17:18
string型の配列について質問させて下さい。
コンパイルは通るのですが「デバッカ例外が発生しました」というエラーが出ます

var TestS : array[1..5] of String;

TestS[1]:='テスト';

上記のような感じなのですがアドバイス下さい。

405 :デフォルトの名無しさん:04/07/03 17:24
>>404
ShortStringで固定長にするか
TStringList使え

406 :A:04/07/03 17:31
追加です。いろいろ調べてみたところ、アプリ起動後の状態では、
UIWebBrowser.DocumentSource をいじっても、Application.OnActivate は発生しません。
ところが、一度、UIWebBrowserをクリックしてから、他ソフトに切り替え、その後に、
UIWebBrowser.DocumentSource をいじると、Application.OnActivate が発生するようです。

よくわからないのは、UIWebBrowserをクリックしても、ActiveControlは、変更にならない。

UIWebBrowserをクリック後、他のコントロールをクリック(ActiveControlはそれになる)しても
Application.OnActivateは発生する。
この時、アプリをアクティブにすると、そのコントロールは、ActiveControlはそのままに、
フォーカスを失っている模様。

UIWebBrowserをクリック後、他のコントロールAをクリック、続けて別のコントロールBをクリック
すると、Application.OnActivateは発生しない。フォーカスもそのまま。

という挙動をするようです。

>>402
そのまま、TWebBrowserを加えて、usesに、MSHTML_TLB を追加したところ…
自分で使っている、Booleanの代入全てに、Booleanは、Integerと互換性が無い、とのエラーが… orz


407 :404:04/07/03 17:34
>>405
アドバイスありがとうございます。
しっかり状況を説明していなかったのですが
上のようなString型をいくつかつかってレコード型で扱いたいのです。
ですからレコード名をAとすると
A.TestS[1]:='test';
という感じです。
ShortStringで固定長にしてもダメでした。
TStringListはレコード内で使えるのでしょうか?

いろいろコンパイルしてみて>>404で書いた部分でエラーが出ることが解ったので
単純に質問したつもりだったのですがどうもすいません。

408 :デフォルトの名無しさん:04/07/03 17:35
知ってるかもしれないけどWebBrowser使うとなると別の不具合が発生するよ。
修正は可能らしいけど。

409 :デフォルトの名無しさん:04/07/03 17:37
また役に立たない情報ですね

410 :デフォルトの名無しさん:04/07/03 17:38
>>407
TSample = record
 TestS: array[1..5] of string;
end;

こんなの??

411 :デフォルトの名無しさん:04/07/03 17:40
>>404
ほんとにそのサンプルコードで落ちるか?

412 :デフォルトの名無しさん:04/07/03 17:42
>>407
レコードを動的に確保してInitializeしてないとか?

413 :A:04/07/03 17:42
>>404
string(TestS[1]) := 'テスト';
で、コンパイルは通った。正しく動いてるかどうかは、判らないけど。

いちおう、その方法で、1〜5に適当な文字列を入れて、
各行を、Memo1.Lines.Add(TestS[1]); とかで出したら、ちゃんと出た。
256文字以上とかのは、調べてない。

414 :404:04/07/03 17:43
>>410
度々スイマセン。
こんな感じです。string型は大丈夫なのですが配列の場合がメモリエラーが出ます。
もしかしてstring型の配列はポインタを使うのでしょうか?

TSample = record
TestS : array[1..5] of string;
TestT : array[1..5] of string;
teleS : string;
numberS : string;
end;

A : Tsample;

415 :デフォルトの名無しさん:04/07/03 17:45
>>414
そのコードじゃどうやってもエラーでないぞ。
新規プロジェクト作ってエラーの発生する最小限のコードを書いてうpしろ。

416 :A:04/07/03 17:49
>>414
TSample = record
 TestS : array[1..5] of string;
 TestT : array[1..5] of string;
 teleS : string;
 numberS : string;
end;
var
 A : Tsample;

って状態で…

procedure TForm1.Button1Click(Sender: TObject);
begin
a.TestS[1] := 'テスト';
a.TestS[2] := 'てすと';
Memo1.Lines.Add(a.TestS[1]);
Memo1.Lines.Add(a.TestS[2]);
end;

が問題なく、実行できたよ。 >413の要らなかったのね…。

417 :デフォルトの名無しさん:04/07/03 17:49
>>414
意外と再起動したら直るかもしれん

418 :404:04/07/03 18:02
皆さんアドバイスありがとうございます。
そして申し訳ございません。
最後のファイル出力コードをコメントアウトしたら動きました。
その原因は少し考えて見ます。
Aさんいろいろ試してもらって本当にすいませんでした。

419 :デフォルトの名無しさん:04/07/03 19:14
JavaScript(JScript)やVBScriptにオブジェクトを追加して使用したいのですがそういうコンポーネントはありますか?
DMonkeyはちょっと遅すぎたのでDMonkey以外でお願いします

420 :デフォルトの名無しさん:04/07/03 19:21
EXEがCOMサーバになってWSHからいじってもらえばいいんじゃないの

421 :A:04/07/03 19:24
Application.OnActivateを来ないようにするほうほうが、見つからないので、
Application.OnActivateが来ても問題無くする方向で、対処することにしました。
>266 >283 >334 >342 の関連です。

現在のテストアプリは、Form1、Form2 を用意して、

---Form2---
procedure TForm2.pop(Sender: TWinControl);
begin
 FSender := Sender;  //呼び出し元を記憶。
 SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0,
  SWP_SHOWWINDOW or SWP_NOACTIVATE or SWP_NOMOVE or
  SWP_NOSIZE); // 非アクティブで最前面に表示
 Timer1.Enabled := True;
end;

procedure TForm2.Timer1Timer(Sender: TObject);
begin
 ShowWindow(Handle, SW_HIDE); // 自動的に隠す
 Timer1.Enabled := False;
end;





422 :A:04/07/03 19:24
(続き)
procedure TForm2.FormActivate(Sender: TObject);
begin
 SetWindowPos(FSender.Handle, HWND_TOP, 0, 0, 0, 0,
  SWP_SHOWWINDOW or SWP_NOMOVE or SWP_NOSIZE); // 呼び出し元をアクティブに
end;

---Form1---
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 UIWebBrowser1.DocumentSource := IntToStr(i);
 Inc(i);
 if (i mod 5)=0 then Form2.pop(Self);
end;

という形になっています。
Form1のタイマーがくると、UIWebBrowserが更新され、 
5回に1回Form2が最前面に表示され、一定時間で自動的に隠れます。

この状態で、1度でも、Form2.pop を使った後に、Application.OnActivate が来ると、
Form1が、非アクティブの状態で最前面に表示されてしまいます。
恐らく、隠れているForm2の、HWND_TOPMOST 設定が悪さをしているような気がするのですが、
隠す前に、Form2や、Form1を、SetWindowPos APIでいろいろ設定を変えても、
思ったような動作になりません。

Form2を使った後、Form1の状態を、使う前のものに戻すには、どうすればいいのでしょうか?

423 :デフォルトの名無しさん:04/07/03 19:43
隠すだけならvisible使ったほうが楽だとおもうけど

424 :デフォルトの名無しさん:04/07/03 19:44
>>420
ありがとうございます
しかしDelphi6 PersonalだとCOMサーバーアプリは作れないみたいです
情報が小出しになってしまい申し訳ありません。

425 :A:04/07/03 19:48
>>423
Visible := False;
だと、隠れないみたいです。

426 :デフォルトの名無しさん:04/07/03 19:52
>>424
だったら
>オブジェクトを追加して
も無理じゃないの?
オブジェクトって自作のってことでしょ。

427 :デフォルトの名無しさん:04/07/03 20:31
TDateTimeに指定できる最も大きい値って何?

428 :デフォルトの名無しさん:04/07/03 21:06
type TDateTime = type Double;

Double の範囲5.0 x 10^-324 .. 1.7 x 10^308

意味があればね


429 :デフォルトの名無しさん:04/07/03 22:02
>>421-422 >>425
TForm2.pop の SetWindowPos〜 の後に
Visible := True; を入れてみたらどうでしょうか?

そして TForm2.Timer1Timer の ShowWindow〜 を Hide;
(または Visible := False;) に変えてみてください。

430 :デフォルトの名無しさん:04/07/03 23:07
>>419
というかJavaScript(JScript)やVBScriptって速いの?

431 :A:04/07/03 23:42
>>429
やってみました。その方法だと、確かに隠れるみたいです。
でも、Application.OnActivate で Form1が最前面に出てきてしまうのは、
同じみたいです…。

432 :デフォルトの名無しさん:04/07/03 23:54
>>215
>>393のソース

確かにメモリリークを起こしていますね。
解放し忘れているのは TConversion で TRichEdit関連。
最初に起動した方を終らせるときにでます。

ファイル名を渡さなくても、
 RichEdit1.Lines.LoadFromFile('C:\hoge\Unit1.pas');
の様に直接読み込んでもリークしますよ。

433 :デフォルトの名無しさん:04/07/04 00:00
>>426
VBScriptやJScriptのパーサーがあれば自由に追加したりできるのではないかと思い質問してみました

>>430
DMonkeyはコンパイルの作業があるのでDMonkeyよりは速いと思います

434 :デフォルトの名無しさん:04/07/04 00:05
ところで、WM_COPYDATAで送るときにGetMemは必要ないよね?
長い文字列型は、GetMemでメモリを確保しているんだし。


435 :デフォルトの名無しさん:04/07/04 00:14
TRichEditStrings.LoadFromFileが原因みたい。
WM_COPYDATAは関係無し。

これだけで二つ解放し忘れてる。

procedure TForm1.FormCreate(Sender: TObject);
begin
RichEdit1.Lines.LoadFromFile('C:\test.txt');
RichEdit1.Lines.LoadFromFile('C:\test.txt');
end;

436 :デフォルトの名無しさん:04/07/04 00:17
メモリリークのバグを修正しました。

procedure TForm1.FormCreate(Sender: TObject);
begin
RichEdit1.Lines.LoadFromFile('C:\test.txt'); Dec(AllocMemCount);
RichEdit1.Lines.LoadFromFile('C:\test.txt'); Dec(AllocMemCount);
end;


437 :デフォルトの名無しさん:04/07/04 01:44
>>433
コンパイルの作業があるから遅いってどういう意味?
普通はコンパイルした方が早くなるのだけど。
だってそうでなきゃわざわざコンパイルなんかしないって。
いっとくけどスクリプト言語は総じて遅いよ。だからCとかでサブルーチン作ったりするわけだし。

438 :デフォルトの名無しさん:04/07/04 10:40
フォルダーと拡張子の無いファイルを見分けるのはどうすればいいのですか?

439 :デフォルトの名無しさん:04/07/04 10:52
FileGetAttr 関数かGetAttribute関数

440 :デフォルトの名無しさん:04/07/04 10:56
>>438
拡張子の有無で判定するのは危険。フォルダにだって拡張しつけられるし。

441 :デフォルトの名無しさん:04/07/04 12:18
>>439
>>440
ありがとうございます無事動作しました

442 :デフォルトの名無しさん:04/07/04 16:32
「デバッカ例外が発生」というエラーに悩まされています。

プロジェクトProject1.exeがEAccessViolationクラスの例外を発生しました。
'Access violation at adress 00404272 in module 'Project1.exe' Read of adress FFFFFFFF'
プロセスは停止しています。再開するにはステップ実行又は実行を選択してください。

というメッセージです。
自分で確認し間違っている所はないと思うのですが・・・
例えば以下のコード(ボタンを押した時のイベントハンドラ)で出ます。
コード自体は只フォーム上にTEditを幾つか配置してそのTEdit内の文字数を
Integer型の配列mojilに入れていくというもので特に意味はありません。
デバックするとfor文2回目のmojil[i]:=… の所でエラーが出ます。
どうかアドバイスを下さい。お願いします

for i:=0 to ComponentCount-1 do
begin
if Components[i] is TEdit then
begin
  mojil[i] := Length(TEdit(Components[i]).Text);
end;
end;

443 :デフォルトの名無しさん:04/07/04 16:59
>>442
そのコード自体は問題ない。新規アプリで試せば動くはず。
ヘルプ読んで思い当たる節ない?

<ヘルプ読もうね>
EAccessViolation 例外は,アプリケーションで次のような動作を実行した場合に生成されます。
・nil ポインタを逆参照した場合
・コードページに書き込もうとした場合
・そのアプリケーションに対して仮想メモリが割り当てられていないメモリアドレスにアクセスしようとした場合

444 :デフォルトの名無しさん:04/07/04 17:00
上のコードだけで推測した場合、mojil[i]の添え字 "i" が、
mojilの要素の数 - 1 "high(mojil)" を超えてしまった事が
例外の原因と考えられる。

445 :442:04/07/04 17:19
>>443
返事ありがとうございます。
「デバッカ例外が発生」のhelpしか読んでませんでした、すいません。
しかし、EacessViolation例外のhelpもポインタ使ってないですし思い当たる節がありません。
元々>>442のコードだけでなく、どこで上記のエラーが出るのか調べていました。
何か全然関係のないコードを削ったりしたらエラーが消えたり出たりでおかしいのです
(これじゃ意味不明だと思いますが)
>>442のコードは新規アプリで実行しています。フォームにはbuttonとTEditを10個程置いてです。
このコードでエラーが出るのは変だと思ったのでここで質問した次第です。
環境はXP-Home、Delphi personal version6.0 Update Pack2 を使用しています。

446 :442:04/07/04 17:54
>>444
仰るとおりです…、ありがとうございます。
元のコードを直しても動きました。
本当に情けない、こっ恥ずかしいです。
俺はこんなミスに丸一日悩んでいたなんて…
元のコードは関係のない所を消したりしたら上記のコード書いていても問題なく出来たのに、
新規アプリで上記のコードだけだとエラーが出るのでかなり迷宮入りしてました。
只、こういうミスで上記のエラーが出ることを知ったのは初心者の私にとって勉強になりました。
丸一日というとても高い勉強代だったような気がしますが。
ほとんど愚痴になってしまってすいません。ちょっと今の気持ちを吐き出したかったので。
本当にありがとうございました。



447 :デフォルトの名無しさん:04/07/04 19:19
最近じゃ自分が書いたコードを見てもさっぱり原理(アルゴリズム)が理解できん。
昔の自分、頭よすぎ・・。



448 :デフォルトの名無しさん:04/07/04 21:15
TTreeView で質問
ImageList に0〜2の三枚の画像を登録し、
Collapsed のとき、ImageIndex := 0
Expanded のとき、ImageIndex := 1
とある TTreeNodeは ImageIndex := 2
としています。ここまでは普通に動きます。

で、とある TTreeNode (ImageIndex=2) をクリックすると
ImageIndex が 0 の画像を表示してしまいます。
このとき、Collapsed, Expandedイベントは発生しないようにクリックしてます。
(実際に発生してません)

OnClick イベントで直接 Selected.ImageIndex := 2 としても反映されません。

どうしてなのでしょうか?また回避方法はありますでしょうか?
Delphi7 を使用しています。

449 :デフォルトの名無しさん:04/07/04 21:32
>>447
ちなみに何歳ですか?

450 :デフォルトの名無しさん:04/07/04 21:50
1年前のコードなんてほとんどわかんねーよ
下手すると3ヶ月前でも危ないぜ

451 :デフォルトの名無しさん:04/07/04 22:01
>>448
もしかしてイベント起こるごとに画像変えてるの?

TTreeNode.ImageIndex  >通常時の画像
TTreeNode.SelectedIndex >選択時の画像

これでどぞー。

452 :デフォルトの名無しさん:04/07/04 22:33
>>451
ありがと。
えーと、伝わりにくくて済みません。
画像は3種類で、
1.展開時の画像(ImageIndex=0)
2.折りたたんだ時の画像(ImageIndex=1)
3.展開時、折りたたんだ時関係なく、一定の場所にある Node の画像(ImageIndex=2)

一定の場所の Node (ImageIndex=2) を選択したときに、
1の画像になってしまう現象です。(常に ImageIndex=2 にしたい)

ImageIndex は フォームクリエイトで設定し、

Expandedイベントと、Collapsedイベントでも
Node.ImageIndex を再設定しています。

453 :デフォルトの名無しさん:04/07/04 22:42
>>452
Node.ImageIndex := 0;
Node.SelectedIndex := 1;

これでNodeは通常時0の画像が、選択時1の画像が自動で表示される。
じゃあ常に同じ画像を表示させるにはどうすればいいでしょう?

454 :デフォルトの名無しさん:04/07/04 22:53
>>453
されは OnClick イベントに書くんですよね。
えーと・・
ちょっと今考えてます。

455 :デフォルトの名無しさん:04/07/04 22:56
>>454
いや、Nodeの作成時に設定すれば後は勝手に通常、選択で画像を切り替えてくれる
イベントとかに記述してた画像切り替えの部分は全削除で

456 :448:04/07/04 23:03
>>455
ありがと。
固定したい Node の
ImageIndex := 2;
SelectedIndex := 2;
とすると、2で固定されたみたい。
正解ですか?


457 :デフォルトの名無しさん:04/07/04 23:05
>>456
激しく正解

458 :デフォルトの名無しさん:04/07/04 23:09
>>449
23です。
ちなみにコードはだいたい1年3ヶ月前ぐらいにかいたもの。

一度だけですが、昔の自分のコードを見てあまりの見事さに
「これを自分が書いたのか」と驚いたことがあります。(アルゴリズムの話)

459 :デフォルトの名無しさん:04/07/04 23:10
>>457
わっマジでありがと。
ImageIndex だけ設定しても
SelectedIndex に値を入れていないと0になっているから
それが表示されていたって事ですね。

SelectedIndex って知らなかったw

460 :デフォルトの名無しさん:04/07/05 00:04
TStringListの文字列リストをCSV形式でテキストファイルに保存するには
どうしたらいいでしょうか?
今まではSaveToFile使って保存していました。
CSV形式で保存するには一度CommaTextプロパティを使って文字列変数に入れて
それを吐き出すしかないのでしょうか?

461 :デフォルトの名無しさん:04/07/05 00:05
それしかない

462 :デフォルトの名無しさん:04/07/05 00:09
CommaTextを別のTStringList.Textに放り込んでSaveToFileするとか。

463 :460:04/07/05 00:13
>>461-462
そうですか。
ありがとうございました。

464 :デフォルトの名無しさん:04/07/05 00:38
>>458
>「これを自分が書いたのか」と驚いたことがあります。

そういうことってあるね。異様に冴えている瞬間があるんだよ。

465 :デフォルトの名無しさん:04/07/05 00:42
>「これを自分が書いたのか」と驚いたことがあります。
違う意味ならある(w

466 :デフォルトの名無しさん:04/07/05 00:56
コードは必ずにコメントを付けておきましょうね

467 :デフォルトの名無しさん:04/07/05 01:06
鬱状態になると、思考力集中力等が落ちて、
今まではどうでもなかったことが、
出来なくなったり、多大な負担を感じるようになる。


と言うのは

468 :デフォルトの名無しさん:04/07/05 01:25
TStringListのLoadFromFileでテキストファイルを読み込むとき
行ごとの扱いはStringsプロパティで
MyStringList.Strings[i]またはMyStringList[i] // Mystringlist : TStringList;
とし、これを使えばいいのは解るのですが
各文字列リストの文字ごとを扱うにはどうしたらいいでしょうか?
例えばMyStringListの一行目の三文字目を指定したい時などです。
MyStringList.Strings[0][3] 違いますよね・・・
教えてください。

469 :デフォルトの名無しさん:04/07/05 01:35
一旦ローカル変数へ代入するのが良いと思います。

470 :デフォルトの名無しさん:04/07/05 01:45
copy(MyStringList.Strings[1],3,x)
とか…。
ちなみにMyStringListが「空っぽ」じゃないことを確かめないと
またいらんエラーが。

delphi「1行目も何も、空だっちゅーの!」

471 :470:04/07/05 01:48
間違えた。「strings[1]→[0]」か…。

472 :デフォルトの名無しさん:04/07/05 01:48
>>469-470
返事どうもです。
一回文字列に代入して扱う事にします。

473 :A:04/07/05 04:07
>>468
やってみたら、
MyStringList.Strings[0][3];
でも、動いたよ。

474 :デフォルトの名無しさん:04/07/05 04:09
ヘルプを読めば一発で解決すると思った。

475 :デフォルトの名無しさん:04/07/05 04:19
| 何について調べますか?
| ┌────────────┐
| |. おまえの消し方        |
| |.                    |
| └────────────┘
| [ オプション(O) ]   [ 検索(S) ]
|
`──────────┐ ┌───
           , '´l,  ..| ./
       , -─-'- 、i_  |/
    __, '´       ヽ、
   ',ー-- ●       ヽ、
    `"'ゝ、_          ',
      〈`'ー;==ヽ、〈ー- 、 !
       `ー´    ヽi`ヽ iノ
                ! /
              r'´、ヽ
              `´ヽノ

476 :デフォルトの名無しさん:04/07/05 04:31
>>475
おまえは画面上ちょろちょろするから好かん

477 :デフォルトの名無しさん:04/07/05 04:44
質問です。
Tmemoからクリップボード使ってチャットに張り付ける「AAコピペツール」を作ったのですが
ときどき「クリップボードを開くことができません」というポップアップが出てしまって困っています。
あまりに高速連続で張り付け過ぎなのか・・・
例外処理しても出てくるんです、こいつ。

しかもソフトの都合上、最前面に表示してるのですが、ポップアップがウィンドウの後ろに隠れてしまうのです。
ポップアップの上にウィンドウが有ると見えないのにポップアップにフォーカスが行くのでウィンドウも移動できず、
強制終了するしかない!ように見えるのが辛い。
 (enterを押すとポップアップのOKが押されるので注意書きには書いてあるのですがイマイチな対処法で・・・)

しかもペースト先がJAVA製の為かクリップボードを使わずwinapi使って文字列を送り込む事が出来ないようで( つД`) (CTRL+V ENTERの情報を送ってます)

検索掛けてもクリップボード監視ソフトが怪しいくらいしか出てなかったのでほとほと困っております。
どなたかこのエラー消す方法を教えてくださいませ。

ウェイト掛けるとこのエラーは出てない気がしますが、高速の時でも出たりでなかったりなので解りません。

478 :デフォルトの名無しさん:04/07/05 05:18
>>475
その質問、入力したことあるw

479 :A:04/07/05 05:57
>266 以来、お騒がせしていた、サブフォームポップアップと、謎のApplication.OnActivate問題が
やっと解決しました…。

結論から言うと、Form2のポップアップに、SetWindowPos APIを使わずに、

 FormStyle := fsStayOnTop;
 Show;

隠す時には、

 FormStyle := fsNormal;
 Hide;

で、OKでした…。
この隠す時に、FormStyleをセットしなおすのが大事だったようで、
>266の質問する以前は、この処理をしていなかったため、Form1が勝手にポップアップする
という現象が起きていたようです。それで、FormStyleは使えないと判断してしまっていました。
あと、fsStayOnTop で、Show しても、アクティブになったり、フォーカスを奪ったりは、
しないんですね…。

1週間かかって、こんな単純な方法でよかったなんて… orz
いろいろお騒がせいたしました。

480 :デフォルトの名無しさん:04/07/05 09:16
TList.Sortを使ってソートしているのですが
ソートを重ねると値が同じところが入れ替わります
ソート結果を安定させる方法は無いでしょうか?

(b,1)(d,2)(d,1)(a,1)(c,1)(a,2)(d,3)
        ↓
(a,1)(a,2)(b,1)(c,1)(d,1)(d,2)(d,3)   1回目のソート
        ↓
(a,2)(a,1)(b,1)(c,1)(d,3)(d,2)(d,1)   2回目のソート
        ↓
(a,1)(a,2)(b,1)(c,1)(d,1)(d,2)(d,3)   3回目のソート



比較はこれで行ってます

function SortCompare(Item1, Item2: Pointer): Integer;
begin
Result := CompareText( Item1.値1, Item2.値1 );
end;

481 :デフォルトの名無しさん:04/07/05 10:02
> ソートを重ねると値が同じところが入れ替わります

クイックソートの仕様。値が同じ項目の順番は保証されない。

482 :デフォルトの名無しさん:04/07/05 10:06
>>477
WinXPのバグ

483 :デフォルトの名無しさん:04/07/05 14:33
>>482 。・゚・(ノД`)・゚・。

484 :デフォルトの名無しさん:04/07/05 15:38
XPでDelphiアプリがよくバグるんですけど

485 :デフォルトの名無しさん:04/07/05 15:49
素直に文字列送ればいいのに。クリップボードより楽だろ。

486 :デフォルトの名無しさん:04/07/05 16:04
文字列よりも愛を送ってほしい・・・

487 :デフォルトの名無しさん:04/07/05 21:07
>>484
またおまえか

488 :デフォルトの名無しさん:04/07/05 21:24
Delphi8買おうとしたら猛反対にあったんですけど、何か悪い点があるんですか?

489 :デフォルトの名無しさん:04/07/05 21:35
猛反対した人はどう言ってるの?

490 :デフォルトの名無しさん:04/07/05 21:36
> Delphi8買おうとしたら

なにをしたくて買おうとしたの?

491 :デフォルトの名無しさん:04/07/05 21:47
まあ確かにVBに負けてるし。

492 :デフォルトの名無しさん:04/07/05 21:48
>>488
そもそも悪い点の無い言語/開発環境なんて無い
どの言語/開発環境も長所・短所がある


493 :デフォルトの名無しさん:04/07/05 21:49
けど、長所短所のバランスが大切だ

494 :デフォルトの名無しさん:04/07/05 21:59
>>492
そんな一般論ではなく、Delphi8 の長所・短所が知りたいんじゃないの

495 :デフォルトの名無しさん:04/07/05 22:04
VB厨の釣りだから無視

496 :デフォルトの名無しさん:04/07/05 22:18
Delphiじゃないと書いてて気持ち良くなれない

497 :デフォルトの名無しさん:04/07/05 22:29
2バイト文字と1バイト文字の識別ってどうすればいいのですか

[]で囲った情報の読み出しをしているのですが
]を探している時に2バイト文字の可能性があるので
1つ前の文字を$80以下かどうか調べてみたのですが

本当に]だった場合で前が2バイト文字だと1つ前の文字が$80以上の時があります

]だけを抽出する方法はありますか?

498 :デフォルトの名無しさん:04/07/05 22:31
一度WideCharに変換してから元に戻すとか。

499 :デフォルトの名無しさん:04/07/05 22:35
ByteType

500 :デフォルトの名無しさん:04/07/05 22:39
LeadBytes

501 :デフォルトの名無しさん:04/07/05 22:44
>>498-500
おお、できた〜!!ありがd

502 :デフォルトの名無しさん:04/07/05 23:42
>>482
WinXPのバグなの?
オレの環境は違うけど、例外出るけど。
結局無視することにした。

>>477
環境は何?やっぱりWinXP?
例外の処理ってどんな感じでやってるの?
オレは

try


except
end;
↑要するに何もしない

503 :デフォルトの名無しさん:04/07/06 00:37
今、DB&Webプログラミングって本見て勉強してます。
ふと疑問に思ったのですが、DBをサーバー側にインストール
するのって通常どうやってるんですか?
インストーラーを実行するんですか?
それとも必要なものをFTPとかで送るんですかね?


504 :デフォルトの名無しさん:04/07/06 00:49
Oracleだったらインストーラー使ってサーバーにインストールするな。
MSSQL鯖でも同じ。


505 :デフォルトの名無しさん:04/07/06 00:51
(´,_ゝ`) プtッ

506 :デフォルトの名無しさん:04/07/06 01:25
>>502 xpですわ。確かにエラー出たって言ってた人もxpだったです。
例外処理は
try

except
StatusBar1.Panels[0].Text:='ゴメンバグッタ( ゚д゚)';
end;//例外エンド
end;
てな感じで。 ゴメンバグッタ( ゚д゚) はちゃんと出る

例外処理は普段使わないから難しいです

507 :デフォルトの名無しさん:04/07/06 01:36
>>506
ふーむ。
オレは前述ので沈黙してくれたがなぁ?<例外

ダメもとで空欄にしてみては?(ステータスバーの記述を無くす)
って、ダメもとな話しちゃアカンかw

508 :>>477:04/07/06 02:27
(゚д゚)解決しました

except
StatusBar1.Panels[0].Text:='ゴメンバグッタ( ゚д゚)';
sleep(1000);
beep;
keybd_event( VK_RETURN, 0, 0 , 0 );
keybd_event( VK_RETURN, 0, KEYEVENTF_KEYUP , 0 );
end;//例外エンド

こぴぺでenter送ってるなら、ポップアップにも送って自動で押して貰おうとか思ってそのままコピペしたら
ウマーくいきました。無理矢理な解決法ですが問題ないようです。

(゚д゚)みなさまありがとうございました。 この解決が誰かの役に立ちますように

509 :デフォルトの名無しさん:04/07/06 02:37
'
を出力するにはどうしたらいいんでしょう?「'」です

510 :デフォルトの名無しさん:04/07/06 02:41
''

511 :デフォルトの名無しさん:04/07/06 07:01
シフトJISの 82A9 を文字の か に変換するにはどうしたらいいでしょうか?

512 :デフォルトの名無しさん:04/07/06 09:21
>>511
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
code:DWORD;
begin
code := $82A9;
s := Chr(code shr 8) + Chr(code and $FF);
Label1.Caption := s;
end;

513 :232:04/07/06 10:08
大変遅くなりましたが、結局>>234さんの助言を元に
OnCalcFieldsイベントを使い、実現できました。ありがとう
ございました。

今回はさらにわからないことがあったので質問させて頂きます。
>>232のプログラムで、小計をさらに足し合わせて、別TEditに
合計という形で出力したいと思います。SQLで毎回問い合わせる
のは、効率が良くないのに加え、できれば合計を入力と同時に
更新できればと思っています。何か方法はないでしょうか?

Delphi 7 Professional
現在はParadoxを使用しています。
ゆくゆくは(私の知識が追いついたら)DBサーバも作りたいと
思っています。

よろしくお願いします。

514 :デフォルトの名無しさん:04/07/06 14:39
Delphiってgenerics使えますよね。
VBでもできるのにDelphiでサポートされてないなんて考えられません。

515 :デフォルトの名無しさん:04/07/06 14:42
> VBでもできるのに

なぁ、釣りはよそでやってくれよ

516 :デフォルトの名無しさん:04/07/06 14:56
釣りに見える理由は?
何か都合でも悪いの?

517 :デフォルトの名無しさん:04/07/06 15:05
釣りは無視

518 :デフォルトの名無しさん:04/07/06 15:08
> VBでもできるのにDelphiでサポートされてないなんて考えられません。

そうですね。
VBでもまだベータでしょ。Delphi も .NET2,0 からサポートされる(はず)

519 :デフォルトの名無しさん:04/07/06 15:15
>>514はベータ版のVBを隅々まで使いこなしている優秀なプログラマもどきだから
もまいらも素直にご教授賜っておけ。

520 :デフォルトの名無しさん:04/07/06 15:19
↓ 514による generics を使ったコード例とその説明

521 :デフォルトの名無しさん:04/07/06 15:21
ShowMessage('ぬるぽ');

522 :デフォルトの名無しさん:04/07/06 15:23
>>521
すごい、すごい、さすがVB.NETは違うなぁ。ShowMessage() が特にすごい。

523 :デフォルトの名無しさん:04/07/06 15:23
TActionで、アクションにEditCopyとかEditCutなど標準アクションを
追加すると、コピーとか切り取りの機能が実現できますが、
ここでTEditとかTMemo以外のコントロール(TDBGridなど)で、
独自に情報をクリップボードに送り込みたいときがあるのですが、
EditCopyのOnExecuteイベントにその処理を書き込もうとすると、
確かに実現できるのですが今度は通常のEditコントロールへの
処理が死んでしまいます。
EditCopy, EditCutなどを残しつつ、その処理を横取りして独自にクリップ
ボード関連の処理はできないでしょうか?
(通常のTActionのOnExecuteでコントロールの種類を判断して処理を
分岐せよと言われてしまえばそれまでですが、ほかに方法はないのかと。。。)

524 :デフォルトの名無しさん:04/07/06 15:27
> コントロールの種類を判断して処理を分岐せよと

これで何が不都合なの?

525 :デフォルトの名無しさん:04/07/06 15:34
>>523-524
EditCopyなんかを使うと、コピーができる適切なコントロール(TEditとか
TMemo, TDBEditなど…)に対して適時Enabledが制御されるし、たとえば
対象コントロールがReadOnlyの場合などは、EditCutやEditPasteが自動的に
Falseに設定されるので、設計者がコントロールに対してEnabledなどを
制御する必要がなくなるんだけどれど、
通常のTActionを使うと、全部自前で判断しなければならなくなるから
じゃないのか?よくわからんし大外しかもしれんが。

526 :デフォルトの名無しさん:04/07/06 15:49
DelphiってGUIアプリ以外に何か適してる分野ってありますか?
最近はVB.NETはウェブアプリが得意のようですが。

527 :デフォルトの名無しさん:04/07/06 15:57
全部適してます。

528 :デフォルトの名無しさん:04/07/06 16:25
DelphiってGUI以外作れないじゃん。

529 :デフォルトの名無しさん:04/07/06 16:26
>>528 君には無理

530 :デフォルトの名無しさん:04/07/06 16:27
Delphi >> Delphi.NET >> VB.NET >> VB

531 :デフォルトの名無しさん:04/07/06 16:30
VB厨の言ってることってVBとは直接関係なくて .NET のライブラリを自慢してるのな。

532 :デフォルトの名無しさん:04/07/06 16:33
VB.NET使いも食わないVCL.NET。(ゲラ

533 :デフォルトの名無しさん:04/07/06 16:33
>>531
言語仕様とライブラリの区別がつかないんだよね。で、ライブラリを自慢しても
言語固有じゃないのが笑える。

534 :デフォルトの名無しさん:04/07/06 16:35
>>532
Delphi8 は VB.NET と同じように .NET ライブラリを使えるよ。むしろこっちがおすすめ。

535 :デフォルトの名無しさん:04/07/06 16:40
んで、超初心者がDel8使ってるの?実際のところ。

536 :デフォルトの名無しさん:04/07/06 16:42
>>535
そう、よく分からないけど使ってるのは超初心者だけのような気がする。

537 :デフォルトの名無しさん:04/07/06 16:44
ちょっと初歩的なこと聞くけど、いい?

try
 **A**
 try
  **B**
 except
  **B'**
 end;
except
 **A'**
end;

ってあるとき、Bで例外が発生すると、
B' が実行されることは分かるけど、
A' も実行される?まあ、自分で試せば
いいことだけどさ。

538 :デフォルトの名無しさん:04/07/06 16:45
書き込んでる間に試せると思うけど

539 :デフォルトの名無しさん:04/07/06 16:47
B'でexceptしない場合、A'が実行される
B'がexceptした場合、
 B'で再raiseするとA'が実行される。
 B'でraiseしないとA'が実行される。

540 :デフォルトの名無しさん:04/07/06 16:47
× B'でraiseしないとA'が実行される。
○ B'でraiseしないとA'が実行されない。


541 :デフォルトの名無しさん:04/07/06 16:55
>>539
ありがと。一瞬戸惑ったけど、>>540読んで、よく分かった。

tryネストの中で例外が発生して、メモリ解放などで
最外のexceptまで実行させたいときは、最外のexceptだけで
例外処理すればいいってことですね。違うかな?

542 :デフォルトの名無しさん:04/07/06 17:14
例外処理なんて今時VB.NET使いでも常識だよね

543 :デフォルトの名無しさん:04/07/06 17:17
> まあ、自分で試せばいいことだけどさ。

喧嘩を売っているとしか思えないな(笑)

544 :デフォルトの名無しさん:04/07/06 17:28
ウィンドウを他のウィンドウとか画面の端にひっつけるのってどうやったら実現できますか?

545 :デフォルトの名無しさん:04/07/06 18:02
delphi始めてまだ半年足らずの新米PGです。
DLLとパッケージの違いがよく分からずに悩んでいます。
プログラミングの質問じゃなくて申し訳ないんですが、色々調べてもこの2つの違いがよく分かりません。
どなたかこんな自分に分かり易く説明して頂けないでしょうか?
宜しくお願いします。スレ違いですみません。

546 :デフォルトの名無しさん:04/07/06 18:07
すれ違いと分かっていながらなんで聞くんですか

547 :デフォルトの名無しさん:04/07/06 18:12
>>545

ここ読むよろし
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=067299

548 :デフォルトの名無しさん:04/07/06 18:19
>>543
そんなこといってたら、ここにある質問の
ほとんどがそうだろ (w

549 :デフォルトの名無しさん:04/07/06 18:22
いやいや、自分で試せば済むことなのを承知していながら質問するのはそんなに多くないよ。

550 :デフォルトの名無しさん:04/07/06 18:25
いやいや>>537は自分で試せばいいはなしだよなぁと思いながらも
自分から確実にエラーをだすようなコードがわからないので
とりあえず質問したという経緯じゃない?

551 :デフォルトの名無しさん:04/07/06 18:30
よくそんな他人をフォローするねぇ。
経緯まで勝手に代弁するとはご立派。

552 :511:04/07/06 18:32
>>512
無事変換することができました
どうもありがとうございました!

553 :デフォルトの名無しさん:04/07/06 18:32
>自分から確実にエラーをだすようなコードがわからないので

StrToInt('1.3'); とか?(笑

554 :デフォルトの名無しさん:04/07/06 18:37
それこそraiseでいいじゃん

555 :デフォルトの名無しさん:04/07/06 18:37
>自分から確実にエラーをだすようなコードがわからないので

N:=1/0;

556 :デフォルトの名無しさん:04/07/06 18:47
自慢気にエラーコード書いてるが奴らがいるが
こいつらはこんなんで優越感に浸っているのだろうか。
>>537がよっぽどのバカなだけなのに。
哀れ。


557 :デフォルトの名無しさん:04/07/06 18:49
>>555
定数式使うとコンパイル時エラーになっちゃいそうだが

558 :デフォルトの名無しさん:04/07/06 18:57
> こいつらはこんなんで優越感に浸っているのだろうか。

それは勘ぐり。>>556 はまじめなんだね。

559 :デフォルトの名無しさん:04/07/06 18:58
554=556 だったら可笑しいね。

560 :509:04/07/06 20:52
一晩考えましたがやっぱりできません。
もう一度質問させていただきます。

stringに「'」を代入するにはどうしたらよいのでしょうか?

561 :デフォルトの名無しさん:04/07/06 20:52
s := '''';

562 :デフォルトの名無しさん:04/07/06 20:54
var
 S: String;
begin
 S:= '''';

563 :デフォルトの名無しさん:04/07/06 20:55
>>510は空気

564 :デフォルトの名無しさん:04/07/06 20:56
>>556
(´-`).。oO(何でこの人ここにいるんだろう…)


565 :509:04/07/06 21:00
>>561-562
おお、できました。
ありがとうございます。
一晩悩んだのが馬鹿みたいだ・・

566 :デフォルトの名無しさん:04/07/06 21:10
こういうのは悩むんじゃなくて調べるんだよ

567 :デフォルトの名無しさん:04/07/06 21:11
510 に回答あるじゃん

568 :デフォルトの名無しさん:04/07/06 21:42
ttp://www.gazo-box.com/waracolla/img-box/img20040531180328.jpg

569 :デフォルトの名無しさん:04/07/06 22:04
PCが死にました
データをすべて失いました
Delphi6はどうやって手に入れればいいのですか?

570 :デフォルトの名無しさん:04/07/06 22:11
ベクターにPersonalならあるよ

571 :デフォルトの名無しさん:04/07/06 22:20
>>569
俺も今日OS再インストールしたよ。1月にPC買ってもう5,6回目・・・
最初の数回は何もわからずにDelphiの作成中プロジェクト死なせてもうた

572 :デフォルトの名無しさん:04/07/06 22:31
>>570
ありがとうございます当方ISDNですので寝ながらDLしたいと思います

>>571
バックアップって取るタイミングが難しいですね
3年平穏に過ごしていたので壊れるなど予想すらしてませんでした・・・

573 :A:04/07/06 22:36
>>572
ISDNでダウンするなら、Delphi6 のCDが付属してる、書籍を1冊買っておくのもいいと思われ。


574 :デフォルトの名無しさん:04/07/06 22:40
今落として焼けばいいじゃん

575 :デフォルトの名無しさん:04/07/06 23:20
キー入力を確実にするにはどうしたらいいでしょう。
GetKeyStateでやっているのですが、時々失敗します。

576 :デフォルトの名無しさん:04/07/06 23:23
> GetKeyStateでやっているのですが、時々失敗します。

コードを見せて

577 :デフォルトの名無しさん:04/07/06 23:27
> キー入力を確実にするにはどうしたらいいでしょう。

質問の意味が不明です。

578 :575:04/07/06 23:38
>>576
if (GetKeyState(VK_PRIOR)<0)then
begin

end;
とやってます。一方でwhileループを動かしてBitmapをコピーしているのですが、
そちらが重いのかキーを5回に1回くらい認識しません。
whileループには application.ProcessMessages;
を入れてます。
よろしくおねがいします。

579 :デフォルトの名無しさん:04/07/06 23:39
>>521
ShowMessage( 'ガッ' );

580 :デフォルトの名無しさん:04/07/07 00:27
>>578
根本から間違ってるような・・・

581 :デフォルトの名無しさん:04/07/07 00:34
>>580
そういうレスをする場合は、正しいと思われる例を出すべきだと思うがどうか。

582 :デフォルトの名無しさん:04/07/07 00:37
DelphiってXPと相性悪くない?

583 :デフォルトの名無しさん:04/07/07 02:02
システムドライブのバックアップくらいきちんと取れよ。

▲▽バックアップソフト徹底比較スレ△▼ No.7
http://pc5.2ch.net/test/read.cgi/software/1078146219/l50

584 :デフォルトの名無しさん:04/07/07 02:23
重い処理があるなら、WM_KEYDOWNで処理した方が良いのでは?
重い処理をしている途中でキーが押された場合でも
Application.ProcessMessagesでメッセージが発生するよ。

585 :デフォルトの名無しさん:04/07/07 03:53
GetAsyncKeyState

これでダメだったらMSDNの説明嫁

586 :デフォルトの名無しさん:04/07/07 05:12
TFormが2つある場合の質問です。
アプリ起動時に1つだけFormを立ち上げ(Visible)
そのForm上にあるTButtonを押すと、
もう一つのFormが現れ元のForm(Buttonがある方)が消えるようにしたいです。
どうしたらできますか? 教えて下さい、お願いします。

587 :A:04/07/07 06:02
>>586
単純な方法でいいなら、

procedure TForm1.Button1Click(Sender: TObject);
begin
 Form2.Show;
 Hide;
end;


588 :デフォルトの名無しさん:04/07/07 06:30
>>587
できました。有難うございます。

589 :デフォルトの名無しさん:04/07/07 08:41
>>578
OnKeyDownでフラグをセットして
ループの中でフラグをチェックするように変更してみては

590 :ななしへたぐらま ◆XcB18Bks.Y :04/07/07 12:47
>>578 = >575
while なんとか do
begin
 処理
 Application.ProcessMessages;
 while かんとか do
 begin
  重い処理(*1)
 end;
 処理
end;
もしこんな構造になっていましたら(*1)の中にApplication.ProcessMessageを移動.


591 :575:04/07/07 12:59
>>589
ありがとうございます。やってみます。
>>590
それをやろうとしたのですが、その重い処理内はBMPのコピーで、入れる隙間がなかったのです。
結局常にフォーカスを持たせたボタンをスペースバーで押す方法にしてます。
正しさとしてこれでいいのかサッパリわかりませんが・・・結果うまく行ってるので

592 :デフォルトの名無しさん:04/07/07 13:05
分割不可能な重い処理はサブスレッドでやるしかない

593 :デフォルトの名無しさん:04/07/07 13:14
> 結局常にフォーカスを持たせたボタンをスペースバーで押す方法にしてます。

GetAsyncKeyState を推奨。最小位ビットはメッセージ処理と無関係に履歴を
見られる。

594 :デフォルトの名無しさん:04/07/07 15:03
MainMenuをALTキーに反応させない方法ってあるでしょうか。

595 :デフォルトの名無しさん:04/07/07 15:08
TTimerコンポーネントについて教えてください。
OnTimerイベントで設定した内容を同じForm上のbuttonを押したときに
リセットしたいのですがその命令(関数?)が解りません。
お願いします。

596 :デフォルトの名無しさん:04/07/07 15:10
Enabled:=False;Enabled:=True

597 :デフォルトの名無しさん:04/07/07 15:12
>>595
リセット?


まぁButtonを押したときにOnTimerを実行させればいいのね?
Timer1.OnTimer(nil);

必要にあわせて変えて。

598 :デフォルトの名無しさん:04/07/07 15:23
>594
FormのonShortCutで
if なんとか=VK_MENU then Handled:= true;


599 :デフォルトの名無しさん:04/07/07 17:55
>>598
うまくいきました。ありがとうございます。

600 :デフォルトの名無しさん:04/07/07 18:16
マルチメディアなどに使うTrackBarの使い方、
どこかに解説がありませんか?

再生中はマウスが押されてる間は位置の自動更新を
しないで、メディア側の位置を動かし続けるというような
方法だと思うんですが、うまくいきません。

よろしくお願いします。


601 :デフォルトの名無しさん:04/07/07 18:36
バイナリ単位で編集するにはどうやったらいいの?
バイナリディタみたいに

602 :デフォルトの名無しさん:04/07/07 18:38
>>601
ファイルとメモリどっち?

603 :デフォルトの名無しさん:04/07/07 18:41
> バイナリ単位で編集するにはどうやったらいいの?

はぁ? TMemoryStream に読み込めば、どのバイトでもどんなバイナリでも書き込めるけど。

604 :デフォルトの名無しさん:04/07/07 18:50
ファイルならMapViewOfFileだな。
ファイルの内容をポインタ使って操作できる。
いちいちTMemoryStremで全部読み込む奴はアフォ。
1GBのファイル開いたらどうするつもりなんだ。

605 :デフォルトの名無しさん:04/07/07 18:56
>>604
別にTFileStream使えばいいだけじゃ?


606 :デフォルトの名無しさん:04/07/07 18:56
ネベツネを消去できるコードを教えて下さい

607 :デフォルトの名無しさん:04/07/07 19:06
文字列操作のPosを反対から検索したいのですがどうしたらいいでしょうか...

608 :デフォルトの名無しさん:04/07/07 19:10
サンプルで合った Rich Edit Control Demo を FormではなくFrameに変更したいのですが
TMainForm = class(TForm) を
TMainForm = class(TFrame) にしてみましたがやっぱり色々エラーが出来てます。

FormからFrameに変更する簡単なやり方はないでしょうか?

なんで、こんなことがしたいかというとRichEditでコピーとか貼り付けなどの
よく使う機能をまとめたいとおもっていました。(ワードパットみたいなもの)
コンポーネントがあったら教えてください。

お願いします。


609 :デフォルトの名無しさん:04/07/07 19:10
野球というじじくさいスポーツを消去できるコードを教えて下さい


610 :595:04/07/07 19:25
>>596,597
返事遅れてすいません
Enabledプロパティ使ってできました。
ありがとうございました。

611 :607:04/07/07 19:45
ごめんなさい。ここのコード見て自分でやってみます。
http://www2.big.or.jp/~osamu/Delphi/Tips/key.cgi?key=40#0234.txt

612 :デフォルトの名無しさん:04/07/07 19:51
>607
そのやり方でいいならReverseStr。
AnsiStrScanで検索しまくるのも手かも。

613 :デフォルトの名無しさん:04/07/07 20:09
データベースにデータを書き込むプロスラムを作っています。
ExeSQLを使って、データをInsertするときKey重複エラー
が発生しても例外が取れなくて困っています。
ExecSQLでKey重複エラーの例外をとることができるのか
教えてください。
使っているDelphiのバージョンは5です。

614 :607:04/07/07 20:29
>>612さん
逆さまに検索する事で、一つ上のフォルダのアドレスを取得することを目的としてました。
ですから、逆向き検索は簡単にできればOKですので、リンク貼ったトコの(2)を使うことにしました。
とりあえず完成はできました。
書き込みに先走りすぎたorz

615 :デフォルトの名無しさん:04/07/07 20:47
DelphiアプリをXPで動かすとよくハングします。どうしてでしょう?

616 :デフォルトの名無しさん:04/07/07 20:50
釣りじゃないなら詳細よろ

617 :デフォルトの名無しさん:04/07/07 20:51
つーか、Delphi製というよりXPって変なバグしょいこんでない?
しょっちゅうエクスプローラが暴走するんだけど・・

618 :デフォルトの名無しさん:04/07/07 20:55
>>615
君の環境だけ? しつこく書き込むなら詳細を書くべきなのでは?
Delphi アプリだけが特殊な API を使ってるわけじゃないでしょ。なぜそう思うの?

619 :デフォルトの名無しさん:04/07/07 20:58
> フォルダのアドレス

??

620 :607:04/07/07 21:03
>>619さん
D:\hogehoge\arekore\といったフォルダアドレスを入れた時に、
D:\hogehogeというアドレスを返す関数です。

621 :デフォルトの名無しさん:04/07/07 21:08
ようわからんがExcludeTrailingOSDelimiter(だったか?)とかExtractFilePathじゃ駄目なのか

622 :デフォルトの名無しさん:04/07/07 21:09
>>620
なんだって!
607からの一連の話題はそういう話だったのか・・

だったらLastDelimiterとか使ったほうが便利じゃない?

623 :デフォルトの名無しさん:04/07/07 21:12
>>620
一つ上のアドレスを返すという形か。


ありそでなさげ

624 :503:04/07/07 22:17
遅レスすみません。。
オラクルみたいなすごいのじゃなくパラドックスなんですが、
最近、Win2003サーバーを使っているレンタルサーバーに申し込んだんです。
で、ここはCGIとかなにしても良いって事なので、データベースを使ったWebアプリ
の練習をしようと思いました。
こういう時って、データベースをどうやってサーバーに設定するのかと思い質問しました。
質問の仕方が悪かったです。すみません。
もう一度教えて下さい。

625 :デフォルトの名無しさん:04/07/07 22:25
>>607
ExtractFileDir は?

626 :デフォルトの名無しさん:04/07/07 22:28
>>624
winはよく知らないけど
LinuxでMySQLでもインストールしてODBCでつなぐとか。

627 :デフォルトの名無しさん:04/07/07 22:28
>>624
そりゃ、レンタル元に聞いたほうが早いでしょ。
レンタル鯖って、普通は鯖ごとレンタルじゃなくて
ディスクスペースのレンタルでしょ。

ユーザにはアプリをインストールする権限がないような
気がするけど。

628 :624:04/07/07 22:34
>>626、624ありがとうございます。
レンタル元に自分のやりたいことがOKか聞いてみてから、
また調べてみます。

629 :デフォルトの名無しさん:04/07/07 23:22
>>621さん
ExtractFilePathは、ファイル名からファイルが存在するフォルダを取得する関数です。
ExcludeTrailingPathDelimiterは\を取って返す関数です(d:\hogehoge\→d:\hogehoge)。
ですからどちらも使えません。

>>622さん
    _, ._
  ( ゚ Д゚) それだ…。

>>625さん
なにかが違うような。。。

630 :607:04/07/07 23:24
ごめんなさい>>629=>>607です

631 :デフォルトの名無しさん:04/07/08 00:05
ExtractFileDir( 'c:\windows\Win.ini' ) は 'c:\windows' を返します。

632 :デフォルトの名無しさん:04/07/08 00:21
もしあれば、最後の'\'を削除して、ExtractFileDirでOK


633 :デフォルトの名無しさん:04/07/08 00:41
>D:\hogehoge\arekore\といったフォルダアドレスを入れた時に、
>D:\hogehogeというアドレスを返す関数です。
そもそもフォルダアドレスの書き方を統一すれば問題解決

634 :デフォルトの名無しさん :04/07/08 00:55
すみません、質問させてください。
コンポーネントを貼り付けたときに、四方と線の中心4点に四角が表示されますよね?
それを実行時にもそのコンポーネントをMouseDownしたときに表示することは可能でしょうか?
また、可能であれば四方の一点をドラッグした時に台形になるように二直線を縮小させたいのですが。。
これをTPanelBoxを継承させた新しいコンポーネントで作成できたらと思っています。
知っている方がいれば、ご教授ください。。

635 :デフォルトの名無しさん:04/07/08 01:08
ExtractFileDir(ExcludeTrailingPathDelimiter('D:\hogehoge\arekore\'));

636 :デフォルトの名無しさん:04/07/08 01:10
>>634
あの点々は、実は一つ一つがウィンドウなのだよ。
同じ事を実行時にしようとするなら、全部自前でやる覚悟が必要です。

637 :デフォルトの名無しさん:04/07/08 01:16
sDirName+".\"+sFileNameとすれば

sDirNameの最後に\が有っても無くても適応可能。

638 :デフォルトの名無しさん:04/07/08 01:19
>>635
ExtractFileDirはルートディレクトリ指定するとバグるよ

639 :デフォルトの名無しさん:04/07/08 01:20
ExtractFileDir(ExcludeTrailingPathDelimiter('D:\hogehoge\arekore\'));
これと
ExtractFileDir(ExcludeTrailingPathDelimiter('D:\hogehoge\arekore'));
は同じ結果

640 :デフォルトの名無しさん:04/07/08 01:21
>ルートディレクトリ指定するとバグるよ

ルートディレクトリの上はないからどっちにしろ例外

641 :デフォルトの名無しさん:04/07/08 01:22
>>640
ExtractFilePathに変えるだけなんだけどね

642 :デフォルトの名無しさん:04/07/08 01:24
ヘルプより

ExtractFilePath( 'c:\windows\Win.ini' ) は 'c:\windows\' を返します。

駄目じゃん

643 :デフォルトの名無しさん:04/07/08 02:02
処理の前に判定付けろよ

644 :デフォルトの名無しさん:04/07/08 02:07
>>600

OnChange が使い物にならないんだよね。OnEndTrack イベントがあればいいんだけど。
さがせばどっかにあるはず。

645 :A:04/07/08 02:40
>>634
それを自作した記事が、Delphiマガジンの12月号に載ってるっぽい。
ソースとサンプルだけなら、サイトからダウンロード可能なもよう。

646 :デフォルトの名無しさん:04/07/08 02:52
すみません、質問です。
ttp://www.yks.ne.jp/~hori/MemCheck.htmlのMemCheck 2.0をダウンロードして
自分のプログラムに追加してみたんですが、実行しても終了時にBEEP音が鳴るだけで
メッセージとか表示されません。ログとかも見当たりません。

メモリリークが発生したかどうかを知るにはどうすればいいんですか?

647 :デフォルトの名無しさん:04/07/08 03:08
>>646

そのページの
>MemCheck を使用するには以下の事をやる必要があります。
は全部やったんだろうな?

648 :デフォルトの名無しさん:04/07/08 03:24
>>647
4番の
>プロジェクトソースで MemCheckInstallExceptionHandler 関数を呼び出して例外ハンドラを登録する。
はやってません。

OnDestroy時にsleep命令とレジストリの消去を実行してるんですが、それが悪さをしてるみたいです。
OnDestroyを無効にすると一応メッセージは表示されました。

649 :デフォルトの名無しさん:04/07/08 04:08
今、自作でクラスを作っているんですが
Constructor Createの処理の中で

inherited Create;

って必要ですか?
手本にしてる本に載ってたので今まで気にせずに書いてましたけど
なんか、なくてもエラーにならないみたいなんですし・・

650 :デフォルトの名無しさん:04/07/08 04:29
TObjectからの直接の派生だったら、コンストラクタの中身は空だからどっちでもよくて
それ以外のコンストラクタに中身があるクラスから派生してるなら
上位クラスでの初期化処理を呼ばないといけないから必要、だっけ。

651 :649:04/07/08 04:51
>>650
なるほど。
1行目の事実は知りませんでした。
おかげでものすごくすっきり納得がいきました。

652 :デフォルトの名無しさん:04/07/08 05:09
こんな事も知らなかった人がクラスを作れるのに俺ときたら。・゚・(ノД`)・゚・。

653 :デフォルトの名無しさん:04/07/08 05:54
逝`

654 :デフォルトの名無しさん:04/07/08 07:13
EditBoxの入力を整数限定にしたいのですが
OnKeyPressで

if not (Key in ['0'..'9',#8]) then
begin
  Key := #0;
end;

という正数表現しか解りません。
一文字だけマイナスも大丈夫とするにはどうしたらいいでしょうか?

655 :デフォルトの名無しさん:04/07/08 07:13
正規表現使え

656 :654:04/07/08 07:20
>>655
正規表現をOnKeyPressで使うのですか?
も少し詳しく教えてください。

657 :デフォルトの名無しさん:04/07/08 07:21
キャレットが先頭にあればマイナスも通すようにすればいいだろうけど
…EDITには最初からそういうウィンドウスタイルがあったんじゃないか?(ES_NUMBER)

ま、整数入力コンポーネントなんて、探せばUpDownボタン付きの含めて大量にありそうだが

658 :デフォルトの名無しさん:04/07/08 07:26
>>636
難しいのですか。。初心者ではきついって事ですね。。

>>645
ありがとうございます。調べてみます。
またわからないことがあればご指導お願いします。

659 :デフォルトの名無しさん:04/07/08 08:17
>>654
それだとコピペが防げないから
OnChangeでEdit1.Textの先頭の'-'と'0'..'9'以外を取り除くコードを書くべし。

660 :デフォルトの名無しさん:04/07/08 08:20
おいらだったらStrToIntDefを使うかな。

661 :デフォルトの名無しさん:04/07/08 08:21
それだと初回の'-'が入力できない

662 :デフォルトの名無しさん:04/07/08 08:25
>>654
http://onigiri.s3.xrea.com:8080/delphi/index.php?%5B%5BTRegExpr%5D%5D

663 :660:04/07/08 08:39
>>661
今試してみたら-もOKだったぞ

664 :デフォルトの名無しさん:04/07/08 10:58
VBアプリをXPで動かすとよくハングします。どうしてでしょう?


665 :ななしへたぐらま ◆XcB18Bks.Y :04/07/08 11:31
>>615-616
解像度やウィンドウのデザインを変えると落ちます。

666 :デフォルトの名無しさん:04/07/08 11:42
DelphiってXPに対応してないの?

667 :デフォルトの名無しさん:04/07/08 11:48
昨日TTimerについて質問したものです。
TTimerのOnTimerイベントをそのTTimerがあるフォームが開いてからではなく
そのフォームでのラストアクションがあってからにしたいのですがどうしたらいいでしょうか?


668 :デフォルトの名無しさん:04/07/08 11:56
>>667
あいかわらず言ってる意味がよくわからんが
そのラストアクションの最後でEnabledをTrueにしたんじゃダメなのか?ダメなのか?ダメなのか?

669 :デフォルトの名無しさん:04/07/08 11:57
てゆーかさっさとTTimer.Reset付けろや>某

670 :ななしへたぐらま ◆XcB18Bks.Y :04/07/08 13:19
>>620 = >>607
ExpandFileName関数を使うと便利でしょう.

ExpandFileName('D:\hogehoge\arekore\..'); // 'D:\hogehoge' を返します.
ExpandFileName('D:\hogehoge\arekore\..\'); // 'D:\hogehoge\' を返します.

アドレスを指定する文字列の中にある『..』がツボです.
これは『〜の一つ上の階層』(親ディレクトリ)を意味します.
この関数を使うことで『..』を使った指定から
実際のアドレスに変換することができます.

※ドライブの一番上の階層(ルートディレクトリ)を返す場合,
 引数の文字列の末尾に『\』をつけてもつけなくても
 末尾に『\』をつけて返します.
 ExpandFileName('D:\hogehoge\..'); // 'D:\' を返します.
 ExpandFileName('D:\hogehoge\..\'); // 'D:\' を返します.

実際に使うときはこんな感じでしょうか.
ParentDir := ExpandFileName(IncludeTrailngBackslash(CurrentDir) + '..'); // 末尾に\なし(ルートディレクトリを除く)
ParentDir := ExpandFileName(IncludeTrailngBackslash(CurrentDir) + '..\'); // 末尾に\あり


671 :デフォルトの名無しさん:04/07/08 13:30
ListView1.OwnerData := Trueのときある項目を強制再描画したいのですがどうやればいいですか?

672 :デフォルトの名無しさん:04/07/08 13:56
>>669
一回EnabledをFalseにしてからまたTrueにするとか…???

673 :デフォルトの名無しさん:04/07/08 14:04
>671 UpdateItemsではダメなのか?OwnerData?

674 :デフォルトの名無しさん:04/07/08 15:34
>>666
XPで作ってるけど、別に問題ありませんが。

2000で試してみたら?XP特有の現象なら、2000ではバグは出ないはず。
もし2000でバグが出たら、自分が組んだプログラムに問題がある。
もし2000でバグが出ずに、XPでバグが出るんであれば、Delphiに問題があるのかもしれない。

その上で、こういうプログラムを組んだらこういうバグが出ました。
どうすればいいんですか?と質問してみたら?

675 :デフォルトの名無しさん:04/07/08 18:41
Del6Pro+WinXPでマルチモニタ環境で
フォームがセカンダリにある状態でMessageDlg使ってダイアログ出すと
プライマリ側に開いちゃうんだけどそれってどうにかならないの。

676 :654:04/07/08 19:57
>>657,659,660
亀レスです。すいません。
アドバイスありがとうございます。
EditBoxの整数値限定入力について質問したものです。
入力時点で条件に合わないものは入力すらさせたくかったので
OnKeyPressを使いたかったのですが
OnChangeでも入力表示させないようにできるのでしょうか?
どうしても一文字目だけ'-’を含むという条件が解からないので。
お願いします。


677 :デフォルトの名無しさん:04/07/08 21:37
OnChangeは内容が変わった時に処理されるので時すでに遅し。
テンキー判定にしてみては?

678 :676:04/07/08 22:47
>>677
レスありがとうございます。
テンキー判定…ダメだ、よく解らないです。
入力時点での判定はそれでできるのでしょうか?

679 :デフォルトの名無しさん:04/07/08 22:59
質問させてください。
TImageを実行時に黒で囲んで表示させたいのですができますか?
なるべくなら新規作成コンポーネントでTImageを継承させたいのです。
constructor ○○○.create(Aowner:TControl);にソースを書けばいいのでしょうか?
初期サイズは高さ幅とも50で、正方形の黒枠を描きたいのですが。。。
知っている方、よろしくお願いします。

680 :デフォルトの名無しさん:04/07/08 23:24
>679 Helpでcanvas読んで、描画の練習するべし。

681 :デフォルトの名無しさん:04/07/08 23:48
>>675
API使えばいいじゃん。頭悪いね。

682 :デフォルトの名無しさん:04/07/09 00:53
Delphi6でアプリを作ってるんですが、全て開放してる筈なのにメモリリークが必ず1回出ます。
これは別にほっといてもいいんでしょうか?

683 :デフォルトの名無しさん:04/07/09 01:24
必ず1回なら放置してよし

684 :デフォルトの名無しさん:04/07/09 01:27
>>682
パッチ当てたか?
つかリークしたブロックダンプしてみりゃいいじゃん。

685 :デフォルトの名無しさん:04/07/09 01:47
>>683
どんな状況でも必ず1回発生します。
とりあえず放置しときます。

>>684
パッチは一応当ててます。
メモリリークはMEMCHECKを使用してるんですが、使い方がいまいち分からないので
メモリリークの数しか分かりません・・・すみません。

686 :デフォルトの名無しさん:04/07/09 02:46
どんな状況でもと言う事は、
program Project1

uses
 MemCheck;

begin
end.

でも発生?

687 :デフォルトの名無しさん:04/07/09 03:50
Delphiでバイナリエディタ作るのって難しいんですね。
コンポーネントが無い。。。

688 :デフォルトの名無しさん:04/07/09 06:56
コンポーネント使うのとフリーウェア使うのってそう大きく違わないよね

689 :デフォルトの名無しさん:04/07/09 07:29
コンポーネントだってフリーウェアだろバカ

690 :デフォルトの名無しさん:04/07/09 08:31
>>687
フリーウェアを使ってください

691 :デフォルトの名無しさん:04/07/09 08:32
そう言う意味ではないと思うんだが

692 :デフォルトの名無しさん:04/07/09 09:26
たしかPowerWitch the Royalってバイナリエディタが
もろDelphi製だったはず。

難しいといっても不可能ではない。要はやる気しだいでしょ。

693 :デフォルトの名無しさん:04/07/09 10:18
描写時の色をランダムにするにはどうすればいいんですか?

694 :デフォルトの名無しさん:04/07/09 10:57
TColor(Random($1000000))

695 :デフォルトの名無しさん:04/07/09 11:26
VCLのソースコードをダウンロード出来るサイトってあるでしょうか?

696 :デフォルトの名無しさん:04/07/09 11:30
ない。あってもそれを閲覧する権利はない。

697 :デフォルトの名無しさん:04/07/09 11:35
>>695
全部じゃなければありますyo。
ダウンロード可能。

698 :デフォルトの名無しさん:04/07/09 11:46
>>695
ダウンロードできるサイトはちゃんとあるよ。
ちょっとURL忘れたけど・・
すごい見付けにくかった記憶がある。

699 :デフォルトの名無しさん:04/07/09 12:15
素直にPro買うか、
Kylixインストールして(OpenEditionはGPLの元で)CLXの(VCLと共通部分の)ソース見るかしろ

700 :ななしへたぐらま ◆XcB18Bks.Y :04/07/09 12:15
>>687
Windowsの標準にはないインターフェイスのものは
Delphiでなくても難しいかもしれませんが(むしろほかの方が大変だと思います).

一方で,その気になれば初心者でもメモコンポを使って
それなりのバイナリエディタを作るのはそれほど難しくないと思います.
OnKeyPressイベントで0..9, A-F以外の文字入力をブロックしたり
下の桁を打ち込んだらカーソルをさらに1文字右に動かしたりとか.

でも最初は表示だけできるバイナリダンプソフトを作ってみると良いですよ.
これができるだけでもかなり勉強になるのではないかと思います.

#単に無料のバイナリエディタがほしいだけでしたらBzエディタを.
 私も愛用しています.


701 :デフォルトの名無しさん:04/07/09 16:22
DBCtrlGridにて中の文字の色を変えようと思い、
DBCtrlGrid1PaintPanelを利用してやってるんですが
なぜかフォーカスされた行だけ色が思ったものと
違うものになってしまいます。

ちなみにDBCtrlGrid上にパネルを置いてその上に
DBTextを置き、その文字の色を変えようとしています。

どなたか解決方法ご存知のかたおられましたら
教えてください。

702 :デフォルトの名無しさん:04/07/09 18:51
起動後に別ソフトを起動させたいのですが、どうしたらいいでしょうか?
現在はOnActivateでShellExecuteを使って別ソフトを起動しているのですが
起動中に別ソフトが起動してしまいます
それとボタンを押した後にボタンのフォーカスを外す
または、フォーカスがどこにも当たっていない状態にする方法も教えてください

703 :デフォルトの名無しさん:04/07/09 18:55
>>702
起動後=フォーム表示直後に何かするのは結構面倒。Timer使うのが無難。
Form1.ActiveControl := nil;

704 :682:04/07/09 19:19
メモリリークがどんな状況でも発生するとカキコした者ですが、開放し忘れを発見しました_| ̄|○

ご迷惑をおかけしました。

705 :デフォルトの名無しさん:04/07/09 20:46
おう、よかったじゃないか。まず、自分を疑えっていう教訓も得たし。
MemCheck 使ったかいもあったし。

706 :デフォルトの名無しさん:04/07/09 21:57
学校の課題何ですが、質問いいですか?

707 :デフォルトの名無しさん:04/07/09 21:58
いちいちそんなこと聞かれたらレスの数が倍増するので嫌です

708 :デフォルトの名無しさん:04/07/09 22:08
スレ立てます。・゚・(ノД`)・゚・。

709 :デフォルトの名無しさん:04/07/09 22:12
>>708
単発で質問立てるなよ
ここで質問してけ

710 :デフォルトの名無しさん:04/07/09 22:15
>>709
ありがとう・・・どうもありがとう(つД`)
単位落としそうで必死なんだ・・・ホントありがとう。・゚・(ノД`)・゚・。

711 :デフォルトの名無しさん:04/07/09 22:22
こんな問題なんです。

【問題】

英語の試験の点数を、つぎからつぎへと入力して、
その合計と平均(少数第2位まで)、最大値と最小値の点数を求めて表示する。
試験の点数をして999を入力すると点数(データ入力)の終わりとする。
(999は合計に加えない)。

って奴なんです。まず何をするのかさっぱりで・・・お願いします。

712 :デフォルトの名無しさん:04/07/09 22:25
一番のネックは点数を読み取ってつぎつぎ入力するロボットの設計だな。
これはちょっとDelphiの手に余る問題だよ。

713 :デフォルトの名無しさん:04/07/09 22:27
うーむ、初級の文法を練習するのには良い問題だね。自分で解くとよいことがあるかも。

714 :デフォルトの名無しさん:04/07/09 22:27
DelphiというかPascalなんです。
これは不可能な問題なのでしょうか?

715 :デフォルトの名無しさん:04/07/09 22:29
>>711
Pascal?それともDelphi?

716 :デフォルトの名無しさん:04/07/09 22:29
>>713
そうなのですか!じゃあ自分でちょっと分からなくても組んでみます。
できたらここに晒しますので間違いを指摘してもらってもいいですか?

717 :デフォルトの名無しさん:04/07/09 22:29
足し算、わり算、if 文の練習。

718 :デフォルトの名無しさん:04/07/09 22:29
>>715
PascalをDelphiでやるんです。

719 :デフォルトの名無しさん:04/07/09 22:32
必死なわりに何もやってないんだな

720 :デフォルトの名無しさん:04/07/09 22:34
いえ、別のをやってます。6つ問題があるんです。
そのうち4つがわからないのです。
上のはわからないうちの1つです。頭こんがらがっちゃって・・・

721 :デフォルトの名無しさん:04/07/09 22:36
フォームとか Edit とか Button とか使っていいの?

722 :デフォルトの名無しさん:04/07/09 22:37
1つ質問です。
小数第2位までを出すにはどういうふうに定義をしたらいいんですか?

723 :デフォルトの名無しさん:04/07/09 22:38
>>721
習った範囲でやらないといけないのでダメぽです。


724 :デフォルトの名無しさん:04/07/09 22:39
whileで回して入力値が999じゃないなら合計値に足していく、
999なら最高、最低、平均を表示して終了させる。

725 :デフォルトの名無しさん:04/07/09 22:39
>>722
わかりました。

integerではなくrealで定義すればいいんですね。

726 :デフォルトの名無しさん:04/07/09 22:40
>>724
なるほど!ありがとうございます。やってみます。

727 :デフォルトの名無しさん:04/07/09 22:46
ううう・・・わからなくなってきました・・・

728 :710 ◆EbFiUcpS.Q :04/07/09 22:47
IDないのでトリップつけました。

729 :デフォルトの名無しさん:04/07/09 22:48
>>727
さらせ

730 :710 ◆EbFiUcpS.Q :04/07/09 22:48
begin
writeLn;
writeLn;
n:=0;
while n < 999 do
begin
n:=n+1;
a:=n;

ここから下が・・・_| ̄|○

731 :710 ◆EbFiUcpS.Q :04/07/09 22:48
定義は

n:integer
a:real

732 :デフォルトの名無しさん:04/07/09 22:53
>>730
まずは使用者に入力させろ。
話はそれからだ。

733 :710 ◆EbFiUcpS.Q :04/07/09 22:55
writeln(n:=n*2);
writeln(n:=(n*a)/a);

とかやってみたのですが・・・実行できない_| ̄|○

734 :デフォルトの名無しさん:04/07/09 22:56
>>730
あの問題からなんでそんなコードが出てくるのか・・・

735 :710 ◆EbFiUcpS.Q :04/07/09 22:59
その前にまず問題の意味が・・・

999までwhileで出力して1〜999の横に
今までの合計と平均ってのを随時出力していくんですよね?

最大値の点数は999で最小値の点数は1なのでは・・・?
どこの最大値と最小値なんでしょうか・・・

736 :710 ◆EbFiUcpS.Q :04/07/09 22:59
>>734
すでに間違ってますか・・・
こんなんでプログラマーになれるのかな。・゚・(ノД`)・゚・。

737 :710 ◆EbFiUcpS.Q :04/07/09 23:00
それとも自分で1〜999までを入力してそれの平均と合計、
最大値、最小値を出力するんでしょうか?

そうするとwhileは使わないですよね?

738 :デフォルトの名無しさん:04/07/09 23:00
そこから教えないとできんのか・・
delphi以前の問題だ。問題を理解してから来い

739 :デフォルトの名無しさん:04/07/09 23:01
var
 input, min, max, count, total: Intger;
begin
 count := 0; total := 0; min := 999; max := -999;
 
 while True do
 begin
  Write('Input(999 to quit): '); Readln(input);
  if input = 999 then break;
  Inc(total, input);
  if min > input then min := input;
  if max < input then max := input;
  Inc(count);
 end;
 
 if count > 0 then
 begin
  Writeln('min=', min);
  Writeln('max=', max);
  Writeln('average=', total / count:0:2);
 end;
end.


740 :710 ◆EbFiUcpS.Q :04/07/09 23:02
>>737のが問題の答えですね。

ということはwhileは使わないですね。

if文と足し算割り算ですよね。

ちょっと作り直してみますね。

741 :710 ◆EbFiUcpS.Q :04/07/09 23:06
>>739
ありがたいですが・・・
そういう書き方は習ってないですし・・・
僕自身理解ができないので・・・ごめんなさい・・・
初心者風な書き方で頑張ります。

742 :デフォルトの名無しさん:04/07/09 23:10
>>741
答え出たけどひとつだけ問い詰めさせてくれ
なぜ999回回す

743 :710 ◆EbFiUcpS.Q :04/07/09 23:11
>>742
・・・良く分かってないものでして・・・
あと、上記の答えは使えません。

744 :デフォルトの名無しさん:04/07/09 23:14
>>710
やる気もないみたいだし答えを読む気もないどころか問題も理解してない。
やってることは雑談だけ。もう消えろ。

745 :710 ◆EbFiUcpS.Q :04/07/09 23:16
>>744
はい。どうもありがとうございました。失礼します。

746 :デフォルトの名無しさん:04/07/09 23:18
739 はメタコードとしてもよいコードだよ。自分の習っている範囲で書き直せば
そのまま正解になると思うよ。

747 :デフォルトの名無しさん:04/07/09 23:18
>>745
Delphi初心者用サイトとか見ながら>>739を理解しる
そんなに難しくはないから

748 :デフォルトの名無しさん:04/07/09 23:21
>>744
誠に遺憾なことだが、
スレの趣旨としてはこんなやつですらOKゾーンなんだよな・・

749 :デフォルトの名無しさん:04/07/09 23:23
スポーツだと適不適がほとんど客観的に分かるでしょ。陸上でも短距離か長距離か
足が遅くても、ハンマー投げが得意、とか。そもそも陸上に向いてないとか。

プログラミングにも適不適があるんだよ。ある程度の人なら、ほとんどすぐに適不適
を見分けられる。コードがつたなくても、センスのあるなしは分かるもんだ。

750 :デフォルトの名無しさん:04/07/09 23:25
いや〜センスあるなし以前の問題だと思うぞ・・。

陸上で言うなら「どこを走ればいいのかわからない」「靴の履き方がわからない」

751 :デフォルトの名無しさん:04/07/09 23:31
これがうわさのゆとり教育でつか

752 :デフォルトの名無しさん:04/07/09 23:48
プログラム言語以前の国語力の問題だな.
算数の文章問題を何べんも音読させられたのを思い出したよ.

753 :デフォルトの名無しさん:04/07/09 23:52
>>752
激しく同意。 >>711 の題意を理解してないと思われ

754 :デフォルトの名無しさん:04/07/09 23:54
もう見てるか分からんが・・・

readlnはユーザーの入力を読み取れる。
入力された値が0〜100なら点数で、999は終了を表す。この999というのは100以上なら何でもいい。
問題でそう決められているからそれに従っているだけで、999という数字自体に意味はない。
Inc(x, y)はx := x + yと同じ。Inc(x)ならx:=x+1.
それを踏まえて>>739のコード見れ。これで分からなかったらまじでやばい。
だから本気でガンガレ。

755 :デフォルトの名無しさん:04/07/09 23:54
入力するところでループする。そしてループ脱出の条件が999を入力されたとき、
と気がつけば、あとは足し算わり算の問題。

756 :デフォルトの名無しさん:04/07/10 00:05
プログラム板で1番優しいスレはここですか?

757 :デフォルトの名無しさん:04/07/10 00:20
これから、Delphi をやろうと思っているのですが、知り合いの話だと
もう Borland は Delphi に力を入れてないから、やがて消えていくと
言っていましたが、本当なんですか?

それならこれから勉強してもしょうがない感じがするので、誰か本当
のところを教えて下さい。

持っているのは Delphi 5 ですが、これってWindows XP 用のアプリ
をつくれますか?

教えて君ですいませんが、Delphi 初心者なので、宜しく。

758 :デフォルトの名無しさん:04/07/10 00:22
Delphiって何でこんなにXPと相性悪いの?

759 :デフォルトの名無しさん:04/07/10 00:30
>>757
君は若者?
「チャレンジしてみてダメだったらそれはそれ」って
選択肢はあり得ませんか?
誰かに決めてもらうのが最良ですか?
若者なら挫折も良いのでは?

760 :デフォルトの名無しさん:04/07/10 00:36
2005年はVBの年になるからVBやっとけ。

761 :デフォルトの名無しさん:04/07/10 00:43
私も757のようなタイプにはVBが相応しいと思います。


762 :デフォルトの名無しさん:04/07/10 00:46
初めても居ないのに初心者とは此如何に

と、冗談は置いて置いて
これから何かするんならDelphiでもVBでも初歩は変わらない
それから先は言語じゃなくてソース書くやつの腕次第

763 :デフォルトの名無しさん:04/07/10 01:29
>711の問題を>739以外のやり方でやるなんて
ものすごくめんどくさそうなんだけど
いったいどこが「使えない」表現なんだろうか…

764 :デフォルトの名無しさん:04/07/10 01:37
break を習ってないとか

765 :デフォルトの名無しさん:04/07/10 01:37
誤った入力をした時に訂正が効かないのは、
テュウェンティーワンセンチュリープログラミングとしてどうか。

と、最高に頭が悪そうな発言をしてみる。

766 :デフォルトの名無しさん:04/07/10 01:38
たしかに最高に頭が悪そう。

767 :デフォルトの名無しさん:04/07/10 01:41
>>765

http://pc5.2ch.net/test/read.cgi/tech/1085915001/l50

768 :デフォルトの名無しさん:04/07/10 01:41
> もう Borland は Delphi に力を入れてないから、やがて消えていくと
> 言っていましたが、本当なんですか?

本当です。Delphi に限らずどんな言語もやがて消えていくでしょう。
ちゃんとした言語をちゃんと学ぶと、どんな言語にも通じるものを学ぶことが
できます。Delphi はちゃんとした言語であると思います。

769 :デフォルトの名無しさん:04/07/10 01:43
C#ほどはちゃんとしてない古臭い言語。

770 :デフォルトの名無しさん:04/07/10 01:46
> C#ほどはちゃんとしてない古臭い言語。

そうかもしれませんが、現時点では C# より出来ることが多い。
C# からプログラミング入門というのもいいかもね。あと2,3年たったら間違いなく。

771 :デフォルトの名無しさん:04/07/10 01:47
>>757
持っているのは…ってことは、もう買ったのか?

今さらDelphi5を買う奴は無いので昔買ったが眠っていたパターンと推測して、
もしそうならやめとけ、ソフトにしろプラモにしろ小説にしろ、買っても積んでおくだけな奴は
どうせ何やっても長続きしない

772 :デフォルトの名無しさん:04/07/10 02:07
FlileStreamの使い方を、超初心者でもわかりやすく書いたホームページはどこでしょう?
Memo1にOpenDialog1.executeで読み込んだ文章をFileStream使って表示したい。

773 :デフォルトの名無しさん:04/07/10 02:07
せっかくVBをすすめたのに、どうしてVBしないですか?


774 :デフォルトの名無しさん:04/07/10 02:18
>Memo1にOpenDialog1.executeで読み込んだ文章をFileStream使って表示したい。

Memo1.Lines.LoadFromStrem(FS);

775 :デフォルトの名無しさん:04/07/10 02:25
>>772 ヘルプで十分

procedure TForm1.Button1Click(Sender: TObject);
var
FS:TFileStream;
begin
if OpenDialog1.Execute then
begin
FS := TFileStream.Create(OpenDialog1.Filename,fmOpenRead or fmShareDenyWrite);
Memo1.Lines.LoadFromStream(FS);
FS.Free;
end;
end;

776 :デフォルトの名無しさん:04/07/10 03:01
StringListとStream系がわかるようになると
やれることの幅がかなり広くなる。

次はなにを学ぶといいですかね?

777 :デフォルトの名無しさん:04/07/10 03:04
カテゴリ別ルーチン一覧を眺めてどんな機能があるのかを知っておくといいよ。
特に文字列周り。

778 :デフォルトの名無しさん:04/07/10 03:07
> 次はなにを学ぶといいですかね?

なにをしたいかによる。学ぶことが目的ならコンポーネントの自作。
最初は、フリーのソース付きのヤツのソースを見て研究するとよい。

779 :デフォルトの名無しさん:04/07/10 11:32
IMEを制御したり状態を取得するにはどうすればいいでしょう。

780 :デフォルトの名無しさん:04/07/10 11:34
imemode

781 :デフォルトの名無しさん:04/07/10 12:26
>>780
ありがとうございます、他のアプリの状態の取得にはどうすれば?

782 :デフォルトの名無しさん:04/07/10 14:48
動的配列について質問したいのですが
メモリ領域を確保(Setlength)していない時の対応について教えてください。
if文で動的配列のメモリ領域を確保していない場合のコーディングをしたいのです。

var TestS : array of String;

if (…解らず) then 〜



783 :デフォルトの名無しさん:04/07/10 14:57
length(tests)=0

784 :デフォルトの名無しさん:04/07/10 15:01
>>783
どうもです。
lengthってこういう時にも使えるのは知りませんでした。
ありがとうございました。

785 :780:04/07/10 16:21
解決したと思ったのですがもう少し質問させてください。
Setlength(TestS,0)と強制的に長さを0にしてしまう場合にも
>>782の条件に引っかかってしまう事に気づきました。
実際そういう状況にもなるので・・・
説明不足でしたが動的配列宣言してSetlengthを一度もしていない時の
処理をしたかったのです。
この二つの区別は無理なのでしょうか?


786 :デフォルトの名無しさん:04/07/10 16:40
Setlengthを一度もしていない時 = length(tests)=0

どうして区別する必要があるのか?

787 :デフォルトの名無しさん:04/07/10 16:43
>>785
無理。stringが自動的に''で初期化されるのと同様。
どうしてもというなら他にbooleanのフラグを用意しないといけない。

788 :デフォルトの名無しさん:04/07/10 16:56
Del6 Personalで作ったアプリがXP上で変な動きをします。
Del7以上だとお金がかかってしまいます。
嫌がらせですか?

789 :デフォルトの名無しさん:04/07/10 17:07
>>788
嫌がらせですか?
そうじゃないならソース示せ。2ちゃん以外の。

790 :まいど:04/07/10 17:09
嫌がらせではありません。
アホを釣っているんです。

791 :デフォルトの名無しさん:04/07/10 17:09
Delphiアプリってバッファオーバーフロー起こすんですか?

792 :デフォルトの名無しさん:04/07/10 17:25
仕様です。

793 :デフォルトの名無しさん:04/07/10 17:32
>>789
こら、せっかくみんな無視してきたのに、反応するな…

バッファオーバーフローについては、
・Delphi7なら修正済み
・XP側のアップデートでスタックは実行不可になった
Del6以下で、XP以外のOSでも、普通通過しないような箇所にあるので、
わざわざ起こすような酔狂なコーディングをしなければ起きない

ついでに、XPの実行可能属性保護は.NETには無効→.NETのunsafeコードはネイティブアプリより危険
http://msdn.microsoft.com/security/productinfo/XPSP2/memoryprotection/exec_imp.aspx
(Whidbey=2005以降は.NETも保護されるらしい)

794 :ななしへたぐらま ◆XcB18Bks.Y :04/07/10 17:57
>>785
長さに0を指定するとメモリ領域をすべて解放するので
SetLengthを使う前と同じ状態になります.
故に区別できません.


795 :デフォルトの名無しさん:04/07/10 18:08
>>785
おいおい初期状態に戻せないと困るじゃないか

796 :デフォルトの名無しさん:04/07/10 18:24
集合型のpropertyを作っていて気づいたんですが、
集合型のpropertyの場合、includeとか使えない?

試しにTFontStyleについてやってみましたが、
include(Font.Style, [fsBold]); // ダメ
Font.Style := Font.Style + [fsBold]; // OK

つーことは、変数宣言された集合型以外では
includeとかは使えないってことでしょうか?

どちらでもいいんですが、helpによると、includeを
使ったほうがコードの効率がいいって書いてあったもんで。

797 :デフォルトの名無しさん:04/07/10 18:31
それは集合型とは関係ない話
propertyはvarパラメータには渡せない。
例えば
procedure Foo(var s: String);にForm1.Captionを渡すとコンパイルエラー

functino Foo(s: String): String;
Form1.Caption := Foo(Form.Caption);
なら可能

798 :デフォルトの名無しさん:04/07/10 18:37
>>797
速攻レス、thx

なるほど、そういうことですか。
今、includeをhelpで見て、初めて気づきました。


799 :デフォルトの名無しさん:04/07/10 18:37
なぜ渡せないかというと
propery Prop: TProp read GetProp write SetProp;
のようなプロパティには渡すべき実体が存在しないから。

800 :デフォルトの名無しさん:04/07/10 19:36
Win2000 Delphi6 Personalでアプリ作ってますが、会社のXPで実行すると起動と同時に砂時計が出て重いです
スペック的には会社のほうが圧倒的に優れています
それと、XPで実行すれば勝手にルナインターフェースになるのかと思ったらならないんですね
どうしたらいいのでしょうか?

801 :デフォルトの名無しさん:04/07/10 19:38
http://hp.vector.co.jp/authors/VA015850/delphi/tips/etc13.html

802 :デフォルトの名無しさん:04/07/10 19:47
ありがとうございます

803 :デフォルトの名無しさん:04/07/10 19:54
>>799
たとえば

FProp: TProp;
propery Prop: TProp read FProp;

というような場合、FPropの値が渡されるだけってこと?

804 :デフォルトの名無しさん:04/07/10 21:06
デバッガの例外処理について質問です。
Java のように try 〜 except でハンドルされなかった例外だけ
トラップするようにはできないものでしょうか?

デバッガオプションの「Delphi 言語の例外で停止」を外すと、
ハンドルされない例外が発生しても無視されてしまうので…。

805 :デフォルトの名無しさん:04/07/10 21:56
>>804
さらに外側のexceptでトラップするだけヤン

806 :デフォルトの名無しさん:04/07/10 21:59
>>804
無理

807 :ホームラン:04/07/10 22:20
>>772
 >>774,5 のように単にプレーンなテキストファイルを読み込むだけではFlileStreamのあ
りがたみはわからないのではないかな。


808 :デフォルトの名無しさん:04/07/10 22:23
なんかやたらTStrings, TStream系のクラスに固執する奴多すぎだよな。
もう少し状況に応じて使い分けるべきだよ。

809 :デフォルトの名無しさん:04/07/10 22:23
>>807
そうだね。TFileStream は実質何の役にもたってないし。質問の

> Memo1にOpenDialog1.executeで読み込んだ文章をFileStream使って表示したい。

が少々意味不明ではあるし。


810 :デフォルトの名無しさん:04/07/10 22:24
> もう少し状況に応じて使い分けるべきだよ。

はいはい、それは当たり前。プログラミングの練習をしてるんだろうよ。

811 :デフォルトの名無しさん:04/07/10 22:25
> もう少し状況に応じて使い分けるべきだよ。

で、どんな状況のときにはどれを使うのがいいの?

812 :デフォルトの名無しさん:04/07/10 22:35
ボーランドのフリーのコンパイラを使用しているのですが
cppをDLLにコンパイルする方法が分かりませんコマンドに-WDが必要な
必要なあたりまでは分かったのですが、

**に代入した値は使用していない(関数 とか
パラメータ***は一度も使用されないとか

全く分からないエラーが出ます。(C/C++自体ふれたことがない)
ソース自体は配布されているものなので問題がないと判断し、
コンパイルする時点の問題ではないかと思いました。

ここ読めみたいなHPあれば教えてください。

813 :デフォルトの名無しさん:04/07/10 22:35
>>811
とりあえず行単位のフィルタ処理でTFileStreamとかTMemStreamで読み込んで自前で改行コード判定したり
TStringListでいちいち全部読み込んだりする奴はアホ。

814 :デフォルトの名無しさん:04/07/10 22:39
>>812
http://pc5.2ch.net/test/read.cgi/tech/1054390397/

815 :デフォルトの名無しさん:04/07/10 22:40
>>814
thanx!!

816 :デフォルトの名無しさん:04/07/10 22:57
>>801
manifest.resがありませんって言われちゃうのは私だけですか?
プロジェクトと同一ディレクトリだよね?

817 :デフォルトの名無しさん:04/07/10 22:58
.exe.manifestでがまんしとけ

818 :デフォルトの名無しさん:04/07/11 00:17
>>813
じゃ、アホじゃない人は AssignFile Reset Readln Writeln 使うの?
ぜんぜん状況を判断してるようには見えないけどな。

819 :デフォルトの名無しさん:04/07/11 00:19
>>817
そんなもの同封して配布したらかっこ悪いじゃないですか
なんとかならないですかね・・・

820 :デフォルトの名無しさん:04/07/11 00:20
Del厨ってフィルタ処理もできないんですね。
VB.NETならCUIプログラミングもお手の物ですよ。

821 :デフォルトの名無しさん:04/07/11 00:20
813 は300バイトのファイルでもいちいち AssignFile とか使うんだろうな。
メモ帳つくっても決して Memo1.Lines.LoadFromFile とかは使わないんだろな。

822 :デフォルトの名無しさん:04/07/11 00:22
> VB.NETならCUIプログラミングもお手の物ですよ。

でも40MBのランタイムいるし。遅いし。
Delphi でもCUIつくれることしらないの?

823 :デフォルトの名無しさん:04/07/11 00:22
813はVB.NETユーザーだろ。

824 :デフォルトの名無しさん:04/07/11 00:24
DrawOverlay関数が何をするものかわかんねぇ

825 :デフォルトの名無しさん:04/07/11 00:26
Delphi6無料版をこれからやろうと思うんだけどパッチあてないとどうなるの?

826 :デフォルトの名無しさん:04/07/11 00:26
初心者です。
DelphiでUTF8のファイルを読み込んでUTF8のまま編集する
メモ帳を作りたいのですがどうすればいいのでしょうか。
VB.NETであればTextBoxを配置するだけで済んだのですが・・・

827 :デフォルトの名無しさん:04/07/11 00:28
>>819
801のサイトのマニフェストでオレの環境では何も問題ないぞ
何かミスってんじゃないのか?

828 :デフォルトの名無しさん:04/07/11 00:28
>>824
ショートカットアイコンの矢印画像をオリジナルアイコンに重ねて描画する
ときなんかに使う。

829 :デフォルトの名無しさん:04/07/11 00:38
>>827
そうですか、もう一度がんばってみます
サンクス

830 :デフォルトの名無しさん:04/07/11 00:39
>828
にゃるほど、つまり普通の透過描画であって
半透明にしたりとかはしないのですね。サンクス。


831 :デフォルトの名無しさん:04/07/11 00:48
初心者で困ってるんですが、助けてください。

あるコントロールに対して、Click、DblClick、MouseDown、
MouseMove、MouseUpなどのイベントを使ってます。

それで、ダブルクリックすると、まずクリックが検出され、
つぎにダブルクリックが検出されます。たぶん、これが
普通なんでしょう。

ダブルクリック時に、クリック側プロシージャでは、それが
クリックなのかダブルクリックなのか分からず、困っています。

こういう場合、どうしたらいいのでしょうか?

832 :デフォルトの名無しさん:04/07/11 00:52
>>831
>ダブルクリック時に、クリック側プロシージャでは、それが
>クリックなのかダブルクリックなのか分からず、困っています。

クリックされた時点でそれがダブルクリックの最初のひとつかどうかを判断することは
できない。未来を予測できないからね。

833 :デフォルトの名無しさん:04/07/11 00:58
>>822

こっちでやれ。相手にするな。

ミ,,゚Д゚彡フサギコのフサフサDelphi談話室その13
http://pc5.2ch.net/test/read.cgi/tech/1089454618/

834 :デフォルトの名無しさん:04/07/11 00:58
>>832
素早いレス、ありがとうございます。

つまり、1つのコントロールに対して、クリックと
ダブルクリックの両方のイベントを利用することは
できないんですね。

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

835 :デフォルトの名無しさん:04/07/11 00:58
Delphiで64bitアプリは作れますか?
VB 2005でできるのでDelphiでもできると思いますが。

836 :デフォルトの名無しさん:04/07/11 00:59
さっきから悩んでいるのですが
添字[-1]で動的配列にアクセスしてるのにエラーが起きないばかりか範囲チェックにすらひっかからない。
なんでだろう・・?

837 :デフォルトの名無しさん:04/07/11 01:04
あるイベントハンドラ内のコードが長くなったため何個かの手続きに分けて
コーディングする事にしました
そこでちょっと問題が起きて困ってます。
元々そのコードの中でexit()手続きを使っていたのですが
自分で作った手続きに分けるとexitはその自分の手続きを終了するだけで
イベントハンドラ自体を終了する事ができません。
どうしたらいいでしょうか?

838 :832:04/07/11 01:06
>>832
> 未来を予測できないからね。

「未来」で今思いついたけど、どうしてもクリックと
ダブルクリックを検出したい場合、タイマを使うって
手もありますね。

でも、そこまでやるってのも考え物ですが。

ただ、グラフィック関係のツールで、操作上、どうしても
マウスのクリックとダブルクリックを区別したいんで。。。

839 :デフォルトの名無しさん:04/07/11 01:08
>>834
>つまり、1つのコントロールに対して、クリックと
>ダブルクリックの両方のイベントを利用することは
>できないんですね。

やりたいことは、ダブルクリックのときシングルクリックのイベントハンドラを
実行してない、ってことでしょう?

これは、かなりの FAQ なんです。せこい方法では、クリックイベントでタイマーを
起動し、ダブルクリック時間間隔(システム設定)経過したらシングルクリックとみ
なし、そのコードを実行する。OnDblClick ではタイマを止め、ダブルクリックイベ
ントの処理をする、というものです。

これの難点は、本当のシングルクリックのときの処理応答が遅延されることです。


840 :デフォルトの名無しさん:04/07/11 01:08
>>837
自分で作った手続きを関数にして、
本体側で戻り値を判断してexitするとかは?

841 :デフォルトの名無しさん:04/07/11 01:09
>>826
VB.NETを使おう。

842 :デフォルトの名無しさん:04/07/11 01:10
>>837
戻り値で判断しては?

843 :デフォルトの名無しさん:04/07/11 01:12
> グラフィック関係のツールで、操作上、

シフトキーを押しながらクリックとか、Ctrlキーを押しながらクリックとか、
あと右ボタンクリックを使うこともあるよね。

844 :デフォルトの名無しさん:04/07/11 01:13
>>837
・自分の手続きを関数にして戻り値で判断。
・イベントハンドラ内のフラグを利用
procedure TForm1.EventHandler(Sender: TObject);
var
 exitFlag: Boolean;

 procedure MyProc;
 begin
  if xxx then exitFlag := True;
 end;
・Abortする。

845 :837:04/07/11 01:14
>>840,842
なるほど、やってみます。
ありがとうございました。


846 :デフォルトの名無しさん:04/07/11 01:22
>>843
そうですね。

ダブルクリックは押しそこなうこともあるから、
両方使うことは、場合によっては、危険でも
ありますね。

847 :836:04/07/11 01:27
うわ・・大発見かも
特定の型のときだけ範囲チェックをすり抜けるようだ。

848 :デフォルトの名無しさん:04/07/11 01:41
TShellTreeView を使っているのですが、ソースコード側から
特定のフォルダ(のノード)を選択にするにはどうすればよいのでしょうか?


849 :デフォルトの名無しさん:04/07/11 01:43
ググレば見つかるが場所忘れた

850 :837:04/07/11 01:45
>>844
すいません、もう少し質問させてください。
今自分で作った物についてですが
exitが使われている自分で作った関数の戻り値をBoolean型にしました。
そして、イベントハンドラ内で、作った関数をif文の条件文に書き
そこでもう一度exitを使って対処しました。
これじゃ後々何か問題ありますか?
正直今の俺には>>844さんのコードが完全に理解できません。
特にAbort使った事ないんですがやっぱ>>844さんの方がいいんですか?

851 :デフォルトの名無しさん:04/07/11 01:56
動けばなんだっていいよ。
Abortはもともと望んでいた多重Exitと同機能。

852 :デフォルトの名無しさん:04/07/11 01:59
exitしない所を関数に分けてはどうだろう?
あなたのレベルでは最初から作り直すべき。

853 :デフォルトの名無しさん:04/07/11 02:11
いみふめ

854 :デフォルトの名無しさん:04/07/11 02:41
>>850
それでよし。

855 :デフォルトの名無しさん:04/07/11 04:04
暗黙のSelfを一時的に無効にする方法ってないですか?

856 :デフォルトの名無しさん:04/07/11 04:06
ない。何がしたい?

857 :デフォルトの名無しさん:04/07/11 04:17
今作っているクラスのproperty名と
グローバル関数の関数名とが被っているのです。
普段は適切な方が自動判別?されて呼ばれるので問題ないのですが
クラスのメソッド内からグローバル関数の方を呼ぼうとすると
なぜかpropertyの方が呼ばれてしまうらしく
「'['が必要なところに'('があります」というようなエラーがでてコンパイルが通りません・・。

propertyが呼ばれるのは暗黙のSelfのせいだと思うので無効にする方法はないかと思って質問しました。

858 :デフォルトの名無しさん:04/07/11 04:19
グローバル変数を指定したいなら
ユニット名.グローバル変数名
例えばフォームを指定する場合
Unit1.Form1とする。

859 :デフォルトの名無しさん:04/07/11 04:24
う〜ん。同じユニット内にあります。
なぜならそのクラスのために作ったグローバル関数なので・・

function Point(const x,y: integer): TPoint;
のようにクラス専用のrecordを作る関数なのです。

とりあえず今は
メソッド内からグローバル変数を呼ばずに手動でrecordを作成して回避してます。

860 :デフォルトの名無しさん:04/07/11 04:25
同じユニット内であっても明示しないと駄目

861 :855:04/07/11 04:29
>>858
あ、おかげさまでうまくコンパイルが通りました。
ありがとうございます。
またひとつ知識が増えました。

862 :名無しさん@そうだ選挙に行こう:04/07/11 09:38
>>836,847
そりゃ宣言によるでしょ。

たとえばarray[-5..5] of integerで-1にアクセスできなかったらまずことになるぞ。

863 :名無しさん@そうだ選挙に行こう:04/07/11 09:52
動的配列ってマイナスの添字もてたっけ?

864 :名無しさん@そうだ選挙に行こう:04/07/11 09:53
詳細晒す気がないんだからほっとけ

865 :名無しさん@そうだ選挙に行こう:04/07/11 10:05
プログラムからIEを立ち上げる or IEのパスを知るにはどうすればいいのですか?

WinExec( PChar('IEXPLORE'), SW_SHOW );

これだと何の反応もありません・・・

866 :名無しさん@そうだ選挙に行こう:04/07/11 10:12
ShellExecuteの関連付けではなくIEを指名してってことならユーザーにフルパス指定させるしかない。

867 :名無しさん@そうだ選挙に行こう:04/07/11 10:24
>>866
ShellExecuteで
関連付けで起動できました
ありがとうございます

868 :862:04/07/11 11:06
>>863
ああ、動的配列か。普通の配列のことだと思った。
動的配列は使ったこと無いから分からないや。

869 :名無しさん@そうだ選挙に行こう:04/07/11 11:27
Destructor Destroyってさんざん「直接呼ばないように」と言われてる割には
publicにありますよね・・。

870 :名無しさん@そうだ選挙に行こう:04/07/11 11:29
はっきりいって直接呼んでも全然かまわないよ。
はっきりいってFreeの恩恵にあずかったことがない。

871 :名無しさん@そうだ選挙に行こう:04/07/11 11:48
動的配列は必ず0からです。
Professional Version5 に関してですが。

872 :名無しさん@そうだ選挙に行こう:04/07/11 11:56
Professional Version5?

873 :名無しさん@そうだ選挙に行こう:04/07/11 12:10
>>870
NullオブジェクトをFreeしてもエラーにならないけど、
Destoryの場合はEAccessViolationになる。

874 :名無しさん@そうだ選挙に行こう:04/07/11 12:58
>>873
じゃぁ
if Assigned(O) then O.Destroy;
でいいやん。禁止しなくても。

875 :名無しさん@そうだ選挙に行こう:04/07/11 13:46
素直にfree使えばいいじゃん
なぜゆえdestroyにこだわる?

876 :875:04/07/11 13:47
質問させて下さい。
Delphi5Proで顧客管理ツールを
作ろうと右往左往してるんですが、

DBEditに打った内容を
DBGridに反映させる時に。

リアルタイムに打った内容が反映されてしまって、
間違って入力した時に上書きされないように、DBEditに
入力した後、ボタンイベント等を行わない限り。DBファイル
が更新されないようにするには、どうすればいいでしょうか><

877 :名無しさん@そうだ選挙に行こう:04/07/11 14:04
>>876
連動させたくないんだったら普通にEditつかえば?


878 :876:04/07/11 14:17
えっと、普通のエディットに変えてみます。
エディットで入力したデータをDBファイルに
反映させる方法も、もしよろしければ御教授
願いたいです><

879 :名無しさん@そうだ選挙に行こう:04/07/11 14:27
(解らないのなら取り合えず)ボタンイベントでSQL文投げろよ。


880 :名無しさん@そうだ選挙に行こう:04/07/11 15:52
もしかしたらダメかなと思ってやってみたらやっぱりダメだった
StrToInt(00433) とか StrToInt(00876) とか StrToInt(00088) とか

何とか足し算引き算の出来るまっとうな数字に直したいです。

881 :名無しさん@そうだ選挙に行こう:04/07/11 16:02
>>880
なにがしたい?
StrToInt には整数型は渡せないが。
i := 00433 とかやれば普通に 433 の数値が入るが。

882 :名無しさん@そうだ選挙に行こう:04/07/11 16:04
(;゚д゚) ぅぉ、何時の間にか名無しが変わってる…

883 :名無しさん@そうだ選挙に行こう:04/07/11 16:04
>>880
Valは?


884 :名無しさん@そうだ選挙に行こう:04/07/11 16:12
> StrToInt(00433) とか StrToInt(00876) とか StrToInt(00088) とか

00433 は sring じゃないでしょ。 StrToInt('00433') じゃないの

885 :876:04/07/11 18:09
>>879

Appendメソッドを使って
何とかデーターの書き加え出来ました><
普通のエディタ使ってよかったです。アドバイス
ありがとうございました!

886 :名無しさん@そうだ選挙に行こう:04/07/11 18:27
indyをダウンロードしたのですが、指定URLからタイムスタンプを取得するには
どうすればいいのでしょうか?

887 :デフォルトの名無しさん:04/07/11 21:03
>>875
だって、Destroyの直呼び禁止に意味はあるか、という話でしょ。

888 :デフォルトの名無しさん:04/07/11 21:10
GIFを扱えるコンポーネントはありませんか?

889 :デフォルトの名無しさん:04/07/11 21:29
>>888
そこらへんにいくらでも落ちてる

890 :デフォルトの名無しさん:04/07/11 21:31
>indyをダウンロードしたのですが、指定URLからタイムスタンプを取得するには

indyをダウンロードしたことと、指定URLからタイムスタンプを取得することとは無関係

891 :888:04/07/11 21:47
ごめんなさい。TGIFImageで検索したらいっぱいありました。

892 :デフォルトの名無しさん:04/07/11 22:29
>>890
わかりにくい質問ですみません。
indyをインストールしたのですがコンポーネントが多すぎてどれを使えばいいのかわからないんです。
タイムスタンプを取得するにはどのコンポーネントのどのメソッドを使えばいいのでしょうか?

893 :デフォルトの名無しさん:04/07/11 22:43
そもそもネットワークリソースのタイムスタンプなんて無いが。
Last-Modified の事か?
ならTIdHTTPで、GET か HEAD メソッドでリクエストかけてヘッダメッセージ調べればいい。


894 :デフォルトの名無しさん:04/07/11 22:53
>>893
ありがとうございます。

895 :880:04/07/11 23:44
>>881-884サマ
StrToInt の件
ごめんなさい、どうしようもないアホでした
文字列として''でくくってやったらちゃんと出来ました。
'〜'の中はそもそも変数で、他から引っ張ってくる0付き数字の列なんですが、
さてこれがどうやったら数字になるのかと、ためしに StrToInt(00426)
とかやってみたらダメだったので、ついうろたえて書き込んでしまいました。

896 :デフォルトの名無しさん:04/07/12 01:33
本当に初歩的な質問で恥ずかしいんですが、
日本語文字を単位として、文字列中での
ある部分文字列の位置を知りたいんですが。

PosとかAnsiPosとかをどのように使うんでしょうか。


よろしくお願いします。


897 :デフォルトの名無しさん:04/07/12 01:51
そこまでわかってるならヘルプ見れば即決だろう・・

898 :896:04/07/12 03:44
>>897
そうなんですか。。。

LengthみたいにWideCharで型キャストするとか?


899 :デフォルトの名無しさん:04/07/12 03:58
>>896

ちょっと勉強のためにやってみた


procedure TForm1.Button1Click(Sender: TObject);
var str1,str2:string;
a1,a2:integer;
begin
str1:=edit1.text;
str2:=edit2.text;
a1:=ansipos(str2,str1);
a2:=a1 div 2 + 1;
edit3.Text:=inttostr(a2);

end;


Edit1の中に、調べたい文字列を書く
Edit2の中に、Edit1に書かれた内容から何文字目か知りたい文字を書く
Edit3の中に、Edit2の中に書かれた文字が、何文字目かを表示

日本語文字ってことで、2バイトだから、ちょろっと操作→ a2:=a1 div 2 + 1;


こんな感じでできると思うけど、もっといい方法あるかもしれない
(俺も初心者だし)

ただこれ、日本語のみ使ってる場合にしか使えないから
1バイト文字もはいってきたときにどう処理するかが頭使うのかも


900 :896:04/07/12 04:07
>>896
なんかできました。

日本語文字ということで、AnsiPos + WideString で
試してたんですが、Pos + WideString だったんですね。

901 :デフォルトの名無しさん:04/07/12 04:20
procedure TForm1.Button1Click(Sender: TObject);
var str1,str2:widestring;
a1:integer;
begin
str1:=edit1.text;
str2:=edit2.text;
a1:=pos(str2,str1);

edit3.Text:=inttostr(a1);

end;


>>899だけど

899で書いたやつより、896さんがいった感じでやったほうが
日本語と英語まざってても対応できるから
こっちのほうがいいね

勉強になったよ、thx

902 :デフォルトの名無しさん:04/07/12 04:25
ハードディスクのファイルって本当は全部0と1の集まりなんでしょう?
テキストファイルも0と1の集まりだよね?

このスレの文章も本当は0と1の集まりなの?
Delphiで文章を0と1だけの本当の変換する方法を教えてZ!

903 :デフォルトの名無しさん:04/07/12 05:12
>>902
>全部0と1の集まりなんでしょう?

いいえ、違います。
on/offならともかく0と1というのは明らかに間違い。

904 :デフォルトの名無しさん:04/07/12 06:23
本当
という文字は
数字で
96 7B 93 96
と表され、これを二進数(0と1の集まり)で表すと
10010110011110111001001110010110
となる。すべてのデジタル情報はこの表記に変換できる。

905 :デフォルトの名無しさん:04/07/12 07:38
型識別子を引数にしたいのですがどうかけばよいのでしょうか?

function SizeOf(X): Integer;
function High(X);
function Low(X);

の(X)のように書きたいのですが、このまま書いても「パラメータの型が必要です」と言われてしまいます

906 :デフォルトの名無しさん:04/07/12 07:42
function High(var X);
でどんな変数でも取れるけど目的には適わないな。
C#とかののgenericsを使うと実現できるけどDelphiにはない。
IntegerでもStringでもDoubleでもちゃんと処理する関数を書きたいなら
function High(X: Integer): Integer; overload;
function High(X: String): Stirng; overload;
function High(X: Double): Double; overload;
と地道に書くしかない。


907 :デフォルトの名無しさん:04/07/12 07:44
質問したそうそうなんですが、
やりたいことは別の方法で実現できました
スレ汚しすいません。

908 :デフォルトの名無しさん:04/07/12 09:17
バリアント型とか、TypeInfoを受け取ってRTTIで処理するとか、方法はあるけどね

909 :デフォルトの名無しさん:04/07/12 13:48
>>903は笑えるな

910 :デフォルトの名無しさん:04/07/12 16:45
3MBぐらいのビットマップ画像を TImage の Picture プロパティに読み込ませて実行すると

[エラー] RLINK32: Error opening file "C:\Program Files\Borland\Delphi6\Projects\Unit1.dfm"や
[エラー] RLINK32: Error opening file "Unit1.dfm"などのエラーが出てしまいます。

以前は同じ画像を読み込ませても何もエラーが出なかったのですが
なぜか最近エラーが出るようになりました。原因がわかりますでしょうか?よろしくお願いします。
Delphi6のパーソナル版を使用しています。

911 :デフォルトの名無しさん:04/07/12 16:56
TImageだけの新規プロジェクトで試してみたら

912 :デフォルトの名無しさん:04/07/12 17:04
TForm に TImage だけを貼り付けて試してみたら、ということでしょうか?
やってみました。でも、15秒程度Delphiがストールした状態になり、
その後、同じエラーが出てしまいました。

913 :デフォルトの名無しさん:04/07/12 17:05
>15秒程度Delphiがストールした状態になり、
>15秒程度Delphiがストールした状態になり、
>15秒程度Delphiがストールした状態になり、
>15秒程度Delphiがストールした状態になり、
>15秒程度Delphiがストールした状態になり、
>15秒程度Delphiがストールした状態になり、
>15秒程度Delphiがストールした状態になり、
>15秒程度Delphiがストールした状態になり、
>15秒程度Delphiがストールした状態になり、
>15秒程度Delphiがストールした状態になり、
>15秒程度Delphiがストールした状態になり、


914 :デフォルトの名無しさん:04/07/12 17:16
そこでDelphiがぶっ壊れてると思わない思考に萌えます

915 :910:04/07/12 17:19
う〜ん・・・
一応Delphiを再インストールしてみたんですが・・・
それから、ファイルに保存してみようとしたら
「メモリストリームの拡大中にメモリが足りなくなりました」
って怒られました。自分のパソコンの問題なのかな('A`)

916 :デフォルトの名無しさん:04/07/12 17:22
>>910
ハードディスクが逝かれた

917 :デフォルトの名無しさん:04/07/12 17:22
>>915
Del6Pro+パッチ全部の環境では7MBのファイル一瞬でロードできるな。
単にOSのメモリが足りないんじゃないの。

918 :910:04/07/12 17:31
>>916
>>917
やはり自分のパソの問題だったようで。
アドバイスありがとうございました。


919 :デフォルトの名無しさん:04/07/12 17:32
というか最初からエラーメッセージを書けよゴルァ

920 :デフォルトの名無しさん:04/07/12 17:42
↓のような型を自分で作成し、そこに入れたデータをバイナリでファイルにセーブしようと
しましたが、

const CMaxFld = 12;
type TIni = record
TableName: string;
InsertFld: array[0..CMaxFld-1]of string;
UpDateFld: array[0..CMaxFld-1]of string;
UpDateKeyFld: string;
DeleteKeyFld: string;
end;

ファイル型の宣言をした際にコンパイルエラーが発生してしまいます。

var
F: File of TIni;

「'TIni'型は終了処理が必要です。-ファイル型として使うことはできません」
とのメッセージ内容がいまいち分からないのですが、どなたかご教授下さい。
お願いします。

921 :デフォルトの名無しさん:04/07/12 17:45
stringは使えない。ShortString使っとけ
ファイルへの書き込みはTFileSream使っとけ。

922 :920:04/07/12 17:46
ありがとうございました。


923 :デフォルトの名無しさん:04/07/12 18:27
タイトルバーが消せなくて困っています。

フォーム1を親 フォーム2を子にしてるんですが
親のタイトルバーは消せるんですが子フォームのが消せません。

なぜでしょうか?

924 :デフォルトの名無しさん:04/07/12 18:27
>>921
>>808

925 :デフォルトの名無しさん:04/07/12 18:30
>>924
>>808を別に否定はしないが
シーケンシャルなバイナリファイルの読み書きに
TFileStreamが向かない理由とその代案を説明してくれ。

926 :デフォルトの名無しさん:04/07/12 18:31
808は無視してよし

927 :デフォルトの名無しさん:04/07/12 18:36
MDI子フォームのタイトルバーがなかったら不便だろうなー

928 :デフォルトの名無しさん:04/07/12 18:38
ListViewにて任意のセルにユーザー直接文字入力できるよう
設定できるプロパティってありますか?

929 :デフォルトの名無しさん:04/07/12 18:39
任意のセルは無理なんじゃないの

930 :923:04/07/12 18:44
仕様だったんでしょうか?
なぜできないのか疑問だっただけなんで。

931 :513:04/07/12 21:14
>>513の質問、誰かヒントだけでも良いのでいただけない
でしょうか。。。完璧に行き詰まってしまっています。

932 :デフォルトの名無しさん:04/07/12 21:21
>>931
いろんなやり方があると思うが、
普通のグリッド使って、一括処理、というのもありだと思うよ。
例えば最大99行ぐらいの伝票処理なんかだと特に向いてるかも。
同じ伝票を同時に複数人がカキコすることがある、とかだと難しくなってくるけど。

933 :デフォルトの名無しさん:04/07/12 21:50
>>928
つーか、Listviewの各項目はセルとはいわんだろ。


934 :デフォルトの名無しさん:04/07/12 22:13
TMediaPlayerでWaveを再生するとき、ボリュームを変更するってことで、
ネットでいろいろ探したんですが、以下のようなものがありました。
いろんな国のサイトで同じソースが出てたから、これが定番なのかも。

ttp://www.swissdelphicenter.ch/torry/printcode.php?id=618

ところが、これがウチではうまく機能しないんですが?
つまり、音量がまったく変わらないんです。ウチの環境の問題?

935 :デフォルトの名無しさん:04/07/12 23:25
これは純粋にDelphiの問題じゃないのかもしれませんが、
よろしくお願いします。

ビットマップAに背景色と前景色を指定して文字を描画し、
それに少々処理を加えます。ビットマップBには任意の画像が
読み込まれています。

ここでビットマップAの背景色を透明色として、ビットマップAを
ビットマップBにコピーしたいんです。このとき、ビットマップAの
文字のアンチエイリアス処理で生じた半透明の部分も上手く
コピーしたいんです。

こんな場合、どんな方法があるんでしょうか。

936 :デフォルトの名無しさん:04/07/12 23:46
BitmapB.Canvas.Draw(x,y,BitmapA);

937 :デフォルトの名無しさん:04/07/12 23:48
>文字のアンチエイリアス処理で生じた半透明の部分も上手く

Canvas.Draw だとこれがうまくいかないか

938 :デフォルトの名無しさん:04/07/12 23:54
>>935
重ね合わせた後に文字を書くとか?
知らんけど

939 :935:04/07/13 00:00
やっぱアルファブレンドの方法を
ちゃんと勉強しないとだめかな...

940 :デフォルトの名無しさん:04/07/13 00:03
C#でGDI+叩けば一発なんだけどな

941 :デフォルトの名無しさん:04/07/13 00:05
DelphiでもGDI+使えるよ。

942 :デフォルトの名無しさん:04/07/13 00:07
ネットワークドライブの割り当てがされているフォルダがあり
OpenDialogでパスを取得したとき

e:\filder\faile.txt (ネットワークドライブ)ではなく
\\コンピュータ名\filder\faile.txt

にしたいのですがどのようにすればよいでしょうか
おねがいします。

943 :デフォルトの名無しさん:04/07/13 02:18
WNetGetUniversalName


944 :デフォルトの名無しさん:04/07/13 09:41
bccで作ったobjファイルをリンクしようとしているのですが、

コンパイルすると、
"forward または external 宣言された 'sum' が見つかりません"
というエラーが出ます。

具体的なコードは以下のようになってます。

=== sum.cpp ( bcc32 -c sum.cpp ) ===
extern "C" {
int __stdcall sum(int a, int b)
{
  return a + b;
}
}

=== Unit1.pas ( 一部 )==============
{$L sum.obj}

function sum(a: Integer; b: Integer): Integer; StdCall; external;

procedure TForm1.Button1Click(Sender: TObject);
begin
  MessageBox(0, PChar(IntToStr(sum(2, 5))), '', MB_OK);
end;

どのようにしたら解決できるか、教えていただけると嬉しいです。

945 :デフォルトの名無しさん:04/07/13 11:32
恐らく"sum"ではなく"_sum"になってると思われます
.objをバイナリエディタで開いてみてください
(伝統的にC呼びだし規約はアンダーラインが付く)

ついでに、C呼びだし規約に対応するのはstdcallではなくてcdeclです

946 :デフォルトの名無しさん:04/07/13 12:06
Timageをクリックしたときに指定フォルダ(c:\pic\)にある画像(00〜10.bmp)を
ランダムに表示させるにはどうしたらいいでしょうか?

947 :デフォルトの名無しさん:04/07/13 12:47
>>945
レスありがとうございます

いろいろ試してわかったのですが、
sum.cpp を sum.c にして作成した obj ファイルだとリンクできました。
extern "C" をつけてるので大丈夫だと思ったのですが、C++だと駄目なようです。

呼び出し規約については、
stdcall でも cdecl でも Cの関数提供側とPascalの呼び出し側で統一してやれば、
問題ないようです。

C++のobjファイルがリンクできないと自分には不便なのですが、
方法はないのでしょうか?

948 :デフォルトの名無しさん:04/07/13 13:03
>>946
具体的に何が知りたい?

画像の読み込ませ方?
ファイル名をランダムに得る方法?

949 :デフォルトの名無しさん:04/07/13 13:36
誰かTStream のテキストファイル対応版を知りませんか。

950 :949:04/07/13 13:38
ResourceStreamやMemoryStreamから
Readln、Writeln したいのれす。

951 :デフォルトの名無しさん:04/07/13 14:02
ファイル名をランダムに得る方法です。

952 :デフォルトの名無しさん:04/07/13 14:12
>>931
DBGridでやるならば、各DataSetのイベント(又は金額のOnSetFieldだっけ?等)で

1開始にTBookMark等をつかって現在地を保持
2レコードを全て回して小計をだす
3終わったら覚えていたTBookMarkで元の位置に戻る

Paradoxならこのような処理は早いはず
クラサバならTClientDataSet等を使ってローカルにデータを保持して
回せばいいと思いますよ

953 :952:04/07/13 14:17
追記
単純な金額の小計のみならば集合体を使ったほうがいいです

954 :デフォルトの名無しさん:04/07/13 16:20
Picture.LoadFromFileで読み込んだ画像が、TImageのwidth,heightより大きい場合
画像をスクロールさせて表示したいんですが・・

なんかいい方法ありますか?

955 :デフォルトの名無しさん:04/07/13 16:20
>>950
それはアホくさい要求だな。

TStringList.LoadFromStream(Stream);

とすると自動的に改行で区切られるから簡単。

956 :デフォルトの名無しさん:04/07/13 16:24
>>951

'c:\pic\'+Format('%.2d',Random(11))+'.bmp';

FormCreate で Randomize; を実行しておくこと

957 :デフォルトの名無しさん:04/07/13 16:25
まちがった

'c:\pic\'+Format('%.2d',[Random(11)])+'.bmp';

958 :デフォルトの名無しさん:04/07/13 16:40
FDなどにファイルをコピーした後、
ShowMessage('終了しました');
とすると、表示されてからもアクセスが続いています。
完全に終わってから表示したいのですが、
書き込みが終わった事を知る方法をご教示願います。

Delphi6 personal で、OSはMEです。



959 :デフォルトの名無しさん:04/07/13 17:00
ToolButtonのCaptionを変更してもボタンに反映されないのですがどうすればいいのでしょうか?

960 :デフォルトの名無しさん:04/07/13 17:14
>>955
何万行もあるのに一括読み込みはやです。もっと頭のいい人プリーズ。

961 :デフォルトの名無しさん:04/07/13 17:23
数万程度ならそんなに時間掛からんだろ

962 :デフォルトの名無しさん:04/07/13 17:54
>>960
なんでやなの?

963 :デフォルトの名無しさん:04/07/13 17:56
Streamにこだわる理由がわからん

964 :デフォルトの名無しさん:04/07/13 18:01
実は、悩みまくってSysUtils.TTextRec を覗いてみたら
入出力元を自由指定できそうな仕組みになっているじゃありませんか。
そんで多分賢い人が既につくってるだろうと思ったからです。
Delphiって奥が深いですね。

965 :デフォルトの名無しさん:04/07/13 18:10
WM_HotKeyを宣言してそのイベントでEnterキーをTabキーと入れ替えてるのですが
アプリケーションが非アクティブ時も反応してしまいます。
で、コードの頭に if Application.Active then を付け加えると反応しませんが、
例えばメモ帳使用時に改行が出来なくなってしまいます。
正常に作動させるにはどうしたらよいでしょうか。

966 :954:04/07/13 18:18
>>954
事故解決しました

967 :942:04/07/13 18:24
>943

下記のサンプルを見つけたのですが
コンパイル出来ません。
Win APIの使い方がよくわかっていないので
もう少し情報をもらえないでしょうか?

ttp://www.delphicorner.f9.co.uk/articles/wapi9.htm

function GetUNCName(PathStr : String) : String;
var
bufSize : DWord;
buf : TUniversalNameInfo;
msg : String;
begin
bufSize := SizeOf(TUniversalNameInfo);
if (WNetGetUniversalName(PChar(PathStr), UNIVERSAL_NAME_INFO_LEVEL,
buf, bufSize) > 0) then
case GetLastError of
// ・・ 略 ・・・
end
else
msg := buf.lpUniversalName;

Result := msg;
end;

windows2000
Delphi 7

968 :デフォルトの名無しさん:04/07/13 20:06
ついでだからエラーコードと場所まで書けばいいのに

969 :942:04/07/13 20:27
>968
失礼しました。

エラー場所の場所
if (WNetGetUniversalName(PChar(PathStr), UNIVERSAL_NAME_INFO_LEVEL,
buf, bufSize) > 0) then
エラー内容
[エラー] Unit1.pas(33): '_UNIVERSAL_NAME_INFOA' と 'Pointer' には互換性がありません

970 :デフォルトの名無しさん:04/07/13 21:00
くだすれDelphi(超初心者用)その15
http://pc5.2ch.net/test/read.cgi/tech/1087823906/l50


971 :デフォルトの名無しさん:04/07/13 21:02
Pascalの宿題は俺にやらせろ!!Part1
http://pc5.2ch.net/test/read.cgi/tech/1089719714/l50


972 :デフォルトの名無しさん:04/07/13 21:11
>>969
buf → @buf

973 :デフォルトの名無しさん:04/07/13 21:56
>>971
>>706

974 :デフォルトの名無しさん:04/07/13 21:59
>>965
> 正常に作動させるにはどうしたらよいでしょうか。

その動作が正常です。君が正常でないことを期待しているだけ。

975 :デフォルトの名無しさん:04/07/13 22:10
>>964
>そんで多分賢い人が既につくってるだろうと思ったからです。

賢い人は数万行くらいなら悩むことなく >>955 の方法でやる。

976 :デフォルトの名無しさん:04/07/13 22:35
>>971
そのスレにあの学生が降臨してるようだなw

977 :710 ◆EbFiUcpS.Q :04/07/13 22:42
>>976
はい。私です。

978 :デフォルトの名無しさん:04/07/13 22:50
15才以下だったらまあそんなこともあるかと思えるんだが, それ以上となるとな
ぜか暗い気持ちになるな

979 :デフォルトの名無しさん:04/07/13 23:25
>>975
ちゃんとしたレスが貰えなくなるので意味が理解できないなら黙っててください。

980 :デフォルトの名無しさん:04/07/13 23:46
>>975
Streamを避ける理由があるならReadlnでささっと書くよな。

981 :デフォルトの名無しさん:04/07/14 07:46
丸投げしてくるくせになんでこんなにえらそうなんだ?

982 :デフォルトの名無しさん:04/07/14 08:04
質問です。 Delphi6 Personalを使っています。

標準のコンポであるServerSocketとClientSocketを使って
クライアントがサーバーに接続し、サーバーのデータをとりだすことはできました。

ここで、もっと基本的なことになるんですが、サーバーに接続するさいに
パスワードを必要とし、もしパスワードが一致していなければ
サーバーが接続を拒否する。

というプログラムで悩んでいます。
悩んでいるというよりも、いろいろグーグルで調べてみたんですが
きっちりと解説しているHPを見つけることができませんでした。

このへんの通信に詳しいHPがあれば、教えていただきたいですm(_ _)m

983 :デフォルトの名無しさん:04/07/14 08:06
>>982
接続しないとパスワードも送れませんが。

984 :デフォルトの名無しさん:04/07/14 08:13
>>982
単純なものなら

クライアントからサーバに接続。
サーバかパスワード要求送信(例えば「Password:」とか)。
クライアントからパスワード送信。
サーバが正しいパスワードが確認。
間違ってればサーバから切断。正しければ続行。

という手順になると思うけど、どこがわからない?


あ、どなたか次スレよろ。

985 :デフォルトの名無しさん:04/07/14 08:15
>>982です

>>983さん
すいません
それでは、接続したあと、クライアントがパスワードをサーバーに送信し
サーバーに設定しているパスワードでなかった場合に
サーバーが、そのクライアントの接続を切断する。

といった具合で、どうでしょうか?

986 :デフォルトの名無しさん:04/07/14 08:17
>>984さん
あ、すいません、わからない部分を書いていませんでしたね・・・

サーバーがクライアントの接続を切断する

という命令がわからないんです
言葉たらずですいませんm(_ _)m

987 :デフォルトの名無しさん:04/07/14 08:58
Demosの中にあるTCPって言うのを読み込んだら、TTCPがない
って怒られるんだけど、これって何処にあるの?
reademe見たんだけど書いてないみたい。
MLの過去ログ見たらD7でもあるみたいなんだけど、
漏れのにはない。

988 :デフォルトの名無しさん:04/07/14 09:56
>>957さん
ありがとうございました。
それでやってみます。

989 :デフォルトの名無しさん:04/07/14 09:56
>>986
Close

990 :デフォルトの名無しさん:04/07/14 10:15
http://swiss.torry.net/samples_other.htm#3677
でtextstreamなるものを見つけましたが
使い方が分かる方は教えてください。

991 :デフォルトの名無しさん:04/07/14 10:45
TRGBTripleとはどんな変数でしょうか?
三原色をどうにかする変数らしいのですが
使い方がいまいちわかりません。
ぐぐっても解説してるとこないし・・・

992 :デフォルトの名無しさん:04/07/14 10:49
>>991
単にbmpかなんかの画像ファイル中の色並びってだけだった気がする

993 :デフォルトの名無しさん:04/07/14 11:35
TIdHTTPでGetメソッドを実行するとき、タイムアウトはどこで設定出来ますか?

994 :A:04/07/14 11:56
>>993
TIdAntiFreeze を置いて、IdleTimeOut ………かな? たぶん。

995 :デフォルトの名無しさん:04/07/14 12:48
サンクス>>994
をぉ、タイマーで実装したけど、TIdAntiFreezeで作り直しかぁ。
タイムアウト値がプロパティじゃないなんて、ちょっと面倒なつくりだね。

996 :デフォルトの名無しさん:04/07/14 12:50
>>993
素人の意見だけど、設定はできないような気がする。
なんかHTTPプロトコルを使用するときは内部で2000ミリsecondsに設定してるように見える

あくまで素人の意見なので間違ってるかもしれないけど

997 :デフォルトの名無しさん:04/07/14 13:01
リョウカイ>>996
2000ミリsecondsに注意してIndyソースの中の人見てみます。

998 :デフォルトの名無しさん:04/07/14 13:13
普通にReadTimeoutプロパティじゃないのか?

999 :996:04/07/14 13:20
>>998
それだ!
なんで気付かなかったんだろう。
恥ずかしくて顔から火が出る

1000 :デフォルトの名無しさん:04/07/14 13:27
くだすれDelphi(超初心者用)その16
http://pc5.2ch.net/test/read.cgi/tech/1089779142/l50

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

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

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