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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を
勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが
お礼はDelphiの布教と初心者の救済をお願いします。

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

<過去スレ>
DelWiki避難所(Delphi 関連の過去スレッド)
http://delwiki.info/?%E3%83%AA%E3%83%B3%E3%82%AF%2F%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%2FDelphi%20%E9%96%A2%E9%80%A3%E3%81%AE%E9%81%8E%E5%8E%BB%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89
2デフォルトの名無しさん:2008/11/03(月) 00:52:24
<関連スレ>
【Delphi】 Indyコンポーネント 【C++Builder】
http://pc11.2ch.net/test/read.cgi/tech/1093654251/
Delphi初心者のための寺子屋
http://pc11.2ch.net/test/read.cgi/tech/1132756268/
delphiで作った有名ソフトって何があるの?
http://pc11.2ch.net/test/read.cgi/tech/1135654787/
Delphi持ってるならGLSceneを使え
http://pc11.2ch.net/test/read.cgi/tech/1163269079/
【Delphi互換!?】FreePascal【GPL】
http://pc11.2ch.net/test/read.cgi/tech/1137051510/

【Delphi】 ゲームつくるぞ(゚Д゚)ゴルァ 2【Delphi】
http://pc11.2ch.net/test/read.cgi/gamedev/1097836469/
Delphiでアクションゲームが作りたい!! Part2
http://pc11.2ch.net/test/read.cgi/gamedev/1027482533/
ネットワークゲーム作成のお勉強(Delphi専用スレ)
http://pc11.2ch.net/test/read.cgi/gamedev/1028278884/
delphiでMMO
http://pc11.2ch.net/test/read.cgi/gamedev/1072515100/
3デフォルトの名無しさん:2008/11/03(月) 03:39:45
おう
4デフォルトの名無しさん:2008/11/03(月) 04:41:51
デルッピィ
5デフォルトの名無しさん:2008/11/03(月) 04:57:56
Delphiがんばれ、というか、Borlandがんばれw
昔のUIがDelphi、処理がCとか懐かしいな・・
お、1.0のディスクが出てきた。。。
6デフォルトの名無しさん:2008/11/03(月) 07:43:12
Borlandは星になりましたが?
7デフォルトの名無しさん:2008/11/03(月) 10:03:17
case文でhresultの値を扱おうとすると$80000000で警告が発生します。
hresultは本来、$00000000〜$FFFFFFFFまで取り得ると思うのですが
なぜ、"範囲を超えました"となるのでしょうか?

//ケース1
case hresult(0) OF
$7fffffff:;
end;

//ケース2
case hresult(0) OF
$80000000:;
end;
//[警告] Unit1.pas(33): 定数式が範囲を越えました
8デフォルトの名無しさん:2008/11/03(月) 10:27:13
HRESULTはSystem.pasでtype Longint;と定義されてるが?
9デフォルトの名無しさん:2008/11/03(月) 17:22:40
無料の某6使ってるけど
アクションマネージャってなに?アクションリストとは全然違うの?
10デフォルトの名無しさん:2008/11/03(月) 17:32:27
つヘルプ
11 ◆XcB18Bks.Y :2008/11/03(月) 17:39:41
>>1
乙であります。
12デフォルトの名無しさん:2008/11/03(月) 17:46:20
>>10
ごめんヘルプ見ても理解不能
アクションバンドとか出てきたし
3行でいいから特徴をおせーてプリーズ
13デフォルトの名無しさん:2008/11/03(月) 17:59:27
>>12
タイトル見ようぜ
> 新しいアクション機能(Professional 版および Enterprise 版)
14デフォルトの名無しさん:2008/11/03(月) 18:42:41
>>13
それはわかっとる
Personalで使えないからどんなもんか知る術がない
15デフォルトの名無しさん:2008/11/03(月) 18:43:20
>>13
それはわかっとる
Personalで使えないからどんなもんか知る術がない
16デフォルトの名無しさん:2008/11/03(月) 18:44:17
どうあがいても使えないものを必死に使いこなそうとする男の人って・・・
17デフォルトの名無しさん:2008/11/03(月) 18:46:56
いや使えないことはわかっとるがな
どんなもんかちょっと聞いてみただけやがな
ちょっと3行で教えてーなプリーズ?
18デフォルトの名無しさん:2008/11/03(月) 22:47:07
>>9
Office2000形式のメニューとか作れるんじゃなかったか。
Actionをドラッグ&ドロップして。
19デフォルトの名無しさん:2008/11/03(月) 22:51:52
>>5
昔はCで書かれてたのかぁ
無料のTurboDelphiインストールしようとしたら、.NetとかJ#とかMSですら使ってない
ような物を入れさせられて嫌だったなぁw
ちゃんと全部Delphiで書いて貰いたいものだ
20デフォルトの名無しさん:2008/11/03(月) 22:54:36
>>19
> 昔はCで書かれてたのかぁ

Delphiは最初からDelphi製でしょ。

> 無料のTurboDelphiインストール

今はそうでも無いよ。
21デフォルトの名無しさん:2008/11/03(月) 22:56:42
「今は」ってどういう意味?
Delphi2009が.NETいらなくなってってこと?
それがどうTurboDelphiに掛かってるのか良く分からない
22デフォルトの名無しさん:2008/11/03(月) 22:58:35
>>20
あ、そういう事ね
自分でアプリ作るときにUIだけDelで作って、処理はCで書いてたって意味かな?
23デフォルトの名無しさん:2008/11/03(月) 23:02:50
>>17
使った事ないんであれだけど、動的UI作れるんじゃないのかな?
D&Dでメニューやツールバーを動的に構築できるとかいう話かなと、わからんけど
24デフォルトの名無しさん:2008/11/03(月) 23:16:02
>>21
> Delphi2009が.NETいらなくなってってこと?

.NET SDKはほぼ100%要らない。
ヘルプビューワーのみ。ドキュメントのインストールも無し。
.NET ランタイムは要る。
25デフォルトの名無しさん:2008/11/03(月) 23:32:52
>>24
で、「無料」のTurboDelphiへの批判レスにはそれが妥当だと思ったわけだね
26デフォルトの名無しさん:2008/11/04(火) 00:08:27
話しかみ合ってる?
27ななしへたぐらま ◆XcB18Bks.Y :2008/11/04(火) 17:45:15
データベースに関する質問です。
画像を格納できるテーブルを作成・編集するアプリを開発中なのですが
クライアントの要望で音声も格納できるようにしようとしています。

しかし音声にはDBImageコンポみたいなコンポがありません。
ググってもTorryをみてもそれっぽいコンポを見つけらなかったのですが
何か良いコンポはありますでしょうか。
28デフォルトの名無しさん:2008/11/04(火) 19:49:25
バイナリーで保存するんじゃねーの。
29ななしへたぐらま ◆XcB18Bks.Y :2008/11/04(火) 21:42:32
やはり自前で実装ですかね。
DBWaveコンポ(仮称)つくってみます。
30デフォルトの名無しさん:2008/11/04(火) 23:54:23
SQliteでバイナリも保存できるんじゃね?
31デフォルトの名無しさん:2008/11/05(水) 16:24:46
>>27はDB awareなコンポーネントないか聞いてるのにバイナリだの
なんだの見当違いなこと言ってる秋の夕暮れ
32デフォルトの名無しさん:2008/11/05(水) 22:47:04
「じゃね」使いはアホ。
33デフォルトの名無しさん:2008/11/06(木) 06:03:05
俺Jane使ってるよ
使いやすくてオススメ!
34デフォルトの名無しさん:2008/11/06(木) 10:42:06
既存のデータの入ってる実際に使っているテーブルに
新たにフィールドを追加する必要がでてきました。
TTableで

フィールドA
フィールドB

があるテーブルに
「フィールドCがなければフィールドCを追加」
という処理をしたいんですがどのようにすればいいんでしょうか?

TQueryのSQLを使ってALTER TABLE ... ADD ...すればフィールドは追加できますが「フィールドCがなければ」という処理をどう書いていいかわかりません。
Table.FindField('フィールドC') = nil
で調べれるのかとも思ったのですが、これはTFieldがあるかどうかを調べるだけで、データベース内にフィールドがあるかまでは調べてくれません。

いったんテーブルを削除して作り直せば簡単には出来ますが
レコードは残したままでやりたいのです。
何かいい方法はありますでしょうか?
35デフォルトの名無しさん:2008/11/06(木) 11:44:59
TableXXX.FieldDefs.IndexOf('フィールドC') < 0
36デフォルトの名無しさん:2008/11/06(木) 12:13:11
引継ぎもなく、古いDelphiの修正しろといわれたのですが、
実行してみようとすると
wwDataInspector, wwrcdpnl, wwdblook,TwwDBLookupCombo
などがないと言われます。

これらはどういうコンポーネントを入れればいいのでしょうか?
Delphi2006をいれたのですが、元のプロジェクトはどのバージョンか不明です。

37デフォルトの名無しさん:2008/11/06(木) 12:14:05
Explorer終了すると

---------------------------
Error
---------------------------
Runtime error 217 at 019CF57D
---------------------------
OK
---------------------------

とかいうエラーが出るんだけど常駐しているDelphi製アプリと関係ある?
38デフォルトの名無しさん:2008/11/06(木) 12:19:26
>>36
そのくらいググレカス
39デフォルトの名無しさん:2008/11/06(木) 22:25:47
>>37
Explorer終了ってつまりシャットダウンとかログアウトだよな
40デフォルトの名無しさん:2008/11/07(金) 01:23:44
>>34
Firebird / Interbaseならrdb$relations
Oracleならuser_tab_columns
を検索

ほかのDBはシラネ
4136:2008/11/07(金) 12:25:08
>>38
いやまじググッてもでなくて。

DelphiてVerごとの上位互換とか結構高いんですか?
42デフォルトの名無しさん:2008/11/07(金) 12:26:40
検索して出てこないなら内部で作ったコンポなんじゃないの。
CDだかPCだかを全grepしてみたら。
43デフォルトの名無しさん:2008/11/07(金) 14:48:46
>>41
wwと接頭辞付いてるところ見るとInfoPowerのコンポーネントかな。
ttp://www.woll2woll.com/index.html
44デフォルトの名無しさん:2008/11/07(金) 15:06:01
質問です。

procedure EdiToolCdExit(Sender: TObject);
begin
if ( ( BitBtnEnd.Focused   = False ) and
( BitBtnCancel.Focused = False ) and
( RadGrpKey1.Focused = False ) and
begin
//キー部の入力チェックを行う
if ( LFncKeyCheck ) then
begin
LProUseToolTblCtrl;
end;
end;
end;

このようなExitイベントがあり、特定のボタン(終了、取り消しなど)を
押下された時には入力チェックを行わないようにしています。
ですがBitBtnEndとBitBtnCancel.押下時は入力チェックが走らないで正常に動作するのですが
RadGrpKey1を押下時はなぜか入力チェックが走ってしまいます。
どなたか分かりますでしょうか?
ちなみにRadGrpKey1はRadioGroupです。
45デフォルトの名無しさん:2008/11/07(金) 15:09:30
>>44
なんか色々とおかしいぞ・・・
46デフォルトの名無しさん:2008/11/07(金) 15:21:17
つーかなんのためにsender持ってんだ
47デフォルトの名無しさん:2008/11/07(金) 15:46:51
endが変な位置に行ったのはコピペしたからですwすいません。
Sender使ってif(Sender <> RadGrpKey1)then
を追加してみたけどだめでした。。。
48デフォルトの名無しさん:2008/11/07(金) 18:41:41
DELPHI6での
コンポーネントとパッケージとパレットの関係を教えてください。
DELPHIは拡張子が多すぎて初心者の方は混乱しませんか?
49デフォルトの名無しさん:2008/11/07(金) 22:57:21
>>44
RadioGroupの場合、フォーカス持ってるのは中のRadioButtonだから。
ActiveControl is TRadioButtonかどうか見て、さらにそのParentを調べるか
RadioGroupのOnEnterとOnExitでフラグ立てるかお好きな方で。
50デフォルトの名無しさん:2008/11/08(土) 04:46:04
ちょいと教えて欲しいんですが、Captionを欧文フォントにして
全角(漢字とか)入れると急激に重くなるのはどういうことでしょうか。
これをC++Builderで書くと、ほんの少し軽くなる。
これってDelphiが悪いのか、WINDOWSが悪いのか
良くわからないんですけど、誰か知ってたらお願いします。
51デフォルトの名無しさん:2008/11/08(土) 08:40:35
Delphi/C++Builderのバージョン、OSを明示すべし。
5241:2008/11/08(土) 09:29:32
>>43
ありがとうございます。
DelphiってBorlandしかコンパイラーとか作ってないのかと思ってましたが、
別のIDEとかもあるんですね。
しかし、前任者はなぜこれを使ってたのか。。

53ななしへ(ry ◆XcB18Bks.Y :2008/11/08(土) 09:38:43
>>50
OpenTypeの欧文フォントで文字セットを日本語にすると
日本語の文字が出てくるたびに
あらかじめ関連づけられた日本語フォントファイルからフォントを持ってくるという
面倒なことをやっていますのでガクッと重くなるのかもしれません。
(駅の売店でものを売るときに奥の棚から商品を引っ張り出すような感じでは?)

BCBが若干軽いのはBCB未経験ゆえにわかりませんが
DelphiとBCBとでは文字列処理の実装が異なるとすれば影響するかもです。
54デフォルトの名無しさん:2008/11/08(土) 12:56:18
>>19
今思えばJ#使ってるのってヘジたんのせいだったんだな
55デフォルトの名無しさん:2008/11/08(土) 18:38:22
JBuilder こコードを流用しただけだろ
56デフォルトの名無しさん:2008/11/08(土) 18:39:06
× JBuilder こコードを流用しただけだろ
○ JBuilder のコードを流用しただけだろ
57デフォルトの名無しさん:2008/11/08(土) 19:31:15
ヘジは、J#開発者だが、
そのころにはすでにBorland去ってるからなあ
Delphi2の開発時にMSにいっちゃったんだっけか
58デフォルトの名無しさん:2008/11/08(土) 20:13:15
delphi2009のことについてききたいんだが
活発なスレどこ?
59デフォルトの名無しさん:2008/11/08(土) 20:19:52
そんなものない
ML池
60デフォルトの名無しさん:2008/11/08(土) 20:33:23
欧文フォントで文字セットを日本語にすると、フォントマッパによって
フォントフェイス名より文字セットの方が優先されると思うから、
実体化で指定したフォントと異なるフォントが大抵選択されていると思うが。
61デフォルトの名無しさん:2008/11/08(土) 20:40:08
だから?
62デフォルトの名無しさん:2008/11/09(日) 06:36:37
>>58
【Embarcadero】CodeGearオッチャ その12
http://pc11.2ch.net/test/read.cgi/tech/1221142134/
63Delフサギコ ◆A6VzDeLphI :2008/11/09(日) 18:58:30
    ∧ ∧  いまさらながら、
    ミ ゚Д゚彡 BDEの使い方について
  〜ミ,,,,uuミ   ききたいのですが。。。
詳しく知っている人いらっしゃるでしょうか....

環境はD2007と付属のInterbaseを使いたいのですけれども
うまく接続できません。

コンパネのBDE Administratorを起動すると

databaseとして
  dBASE Files
  DBDEMOS
  Excel Files
  GlobalCar
  IBLocal
  MS Access Database
  Visio Database Sample

とあるのですが(初期状態?)
これ、それぞれ、どうやって接続すればいいんでしょうか。
64Delフサギコ ◆A6VzDeLphI :2008/11/09(日) 19:06:46
IBLocalはどうやら
ユーザー名:SYSDBA
パスワード:masterkey
らしいのですが(ネットで調べると)

データベース エンジン エラー
IDAPI サービスライブラリをロードできません。
ファイル:SQLINT32.DLL
エリアス:IBLocal

と、表示されて接続できません。

BDEのエリアス設定方法、特にInterbaseやら
paradoxやら、ExcelFilesやらが、わかったらうれしいかなと
思ってます。

    ∧ ∧ オシエテ.... 
    ミ ゚Д゚彡
  〜ミ,,,,uuミ
65Delフサギコ ◆A6VzDeLphI :2008/11/09(日) 21:49:31
誰もいないからいまのうち。
          _____________
   .∧,,∧  /
@'"ミ,,゚Д゚ミ < どんどん質問してしまうぞ。
 UU''UU   \___________

世界のすべてのDelphi質問を俺の質問だけで埋めてシマヘ

IB2007付属のIBConsole2007ならつながったんだけど
DEKOさんのIBConsole、Firebird対応版で
D2007Pro付属のIB2007に対して接続するには
どうしたらいいんじゃろーか。

ローカルのInterbaseとしては
インスタンスがgds_dbという名前で存在するんですが
それを設定するのがどこにあるのかしらと。。。
66デフォルトの名無しさん:2008/11/09(日) 22:23:15
>63
なぜIBにつなぐのにBDEなの?IBXなりdbExpressでいいじゃない。
67Delフサギコ ◆A6VzDeLphI :2008/11/09(日) 23:05:03

    ∧ ∧  比較をしたいんです。
    ミ ゚Д゚彡
  〜ミ,,,,uuミ

しっかし、DB系の技術はわけわかですね。

dbExpressで接続しようとしてもなっかなかうまくいかない。

みつけた文章がこれ。

http://www.borland.com/resources/jp/pdf/products/delphi/delphi_bde_to_dbexpress_jp.pdf

プロバイド/リゾルブアーキテクチャ…
なにこの奇天烈な用語は。
68デフォルトの名無しさん:2008/11/09(日) 23:28:55
ん〜D2007ではBDEはParadox/dbase用に残されている、という状況だったはずなんで。
今試してみたけどうまく繋がらんね(XPSP3+D2007+IB7.1)。
69Delフサギコ ◆A6VzDeLphI :2008/11/10(月) 00:19:28
上記のURLの
Borland Database EngineアプリケーションのdbExpress への移行

    ∧,,∧  なんて読みにくい
   ,,ミxдxミ  くず文章だ....
  .とミ,,,,,U,,U   頭イタイ...

このサンプル見て、サンプル通りに物を作れるとおもっておんのか....

サンプル構築手順と説明文書が
合わさって書いてあって、ものすごい読みにくい。
せっかくのdbExpressが台無しだな…

>>68さん
調べてくださってありがとうございます。
70デフォルトの名無しさん:2008/11/10(月) 19:50:13
Delphi7 ProでBuild 4.453ってちゃんとパッチが当たってる状態ですか?
使っている人いたら最新のビルド番号教えてください。
7168:2008/11/10(月) 20:52:16
>69
DEKOさんがお答えくださってるようなのでそちらへドゾ。
72デフォルトの名無しさん:2008/11/12(水) 16:14:35
Delphiにて、ハッシュテーブル的(Dictionary的な)クラスはありませんでしょうか?

THashedStringList というのを見つけたのですが、ヘルプを呼んでもイマイチ使い方がわかりません。

TStringListと同様につかえる、という記述をネットで拝見したのですが、
文字列をキーにして、文字列を得たい場合、

 Hash.Values["Hoge"] := "Value of Hoge";

のような感じで、使ってよいものなのでしょうか?
73デフォルトの名無しさん:2008/11/12(水) 17:17:51
PopupMenuとその中のitemを動的生成した場合って、PopupMenuを解放すれば
中のアイテムも解放されるんでしょうか?
それとも個別にfree?
74デフォルトの名無しさん:2008/11/12(水) 19:05:51
>>72
文字列をシングルクオートで括ってるならいいと思うよ

>>73
ソースを読めば分かるとおり、解放される
75デフォルトの名無しさん:2008/11/12(水) 20:18:27
>>73
やってみればわかるだろw
76デフォルトの名無しさん:2008/11/12(水) 20:28:40
以下のinterfaceを使ったコードにおいて、メモリーリークが発生するのですが、対処法はありませんでしょうか?
こちらのdSpec http://delphixtreme.com/wordpress/?p=15 で同様のコードがありどうしたものかと困っております。

program circular_reference;
{$APPTYPE CONSOLE}
uses SysUtils, Classes;
type
  ITest = interface
    ['{38C68C6A-7CBD-42FE-9249-0ED869119A29}']
    procedure Foo;
  end;

  TTest = class;
  TSubTest = class
    FTest: ITest;
  public
    constructor Create(NewTest: ITest);
    destructor Destroy; override;
  end;

  TTest = class(TInterfacedObject, ITest)
    FSubTest: TSubTest;
  public
    constructor Create;
    destructor Destroy; override;
    procedure Foo;
  end;

procedure CallFoo(Test: ITest);
begin
  if Assigned(Test) then Test.Foo;
end;
77>>76 続き:2008/11/12(水) 20:29:13
{ TSubTest }
constructor TSubTest.Create(NewTest: ITest);
begin
  FTest := NewTest;
  CallFoo(FTest);
end;

destructor TSubTest.Destroy;
begin
  inherited;
end;

{ TTest }
constructor TTest.Create;
begin
  inherited;
  FSubTest := TSubTest.Create(Self);
end;

destructor TTest.Destroy;
begin
  FreeAndNil(FSubTest);
  inherited;
end;

procedure TTest.Foo;
begin
  Writeln('TTest.Foo!!');
end;
78>>76 続き:2008/11/12(水) 20:31:35
procedure Main();
var Test: ITest;
begin
  Test := TTest.Create;
  CallFoo(Test);
end;
begin
  ReportMemoryLeaksOnShutdown := True;
  Main;
//  Writeln('push ENTER key to end!!'); Readln;
end.

--------------------
で終わりです。

TSubTest.FTestをTTestにし、TSubTest.Create(NewTest: TTest)にした場合は大丈夫のようなのですが、
どうようの入れ子構造にし、TSubSubTestが、ITestを持っていると駄目?なようです。
7976:2008/11/12(水) 21:00:52
なんとなく、わかてきた・・・
Delphiのinterfaceが参照カウンタ実装でGCがないので、interfaceを循環参照にするとメモリーリークを起こす、
という奴でしょうか?

TTestのフィールドにTSubTestを持たせないようにすれば、いけそうな気がしてきました。

弄ってみたいと思います。
何か助言あればぜひお願いします
80デフォルトの名無しさん:2008/11/12(水) 21:05:27
バッチファイルで処理していたことをDelphiのボタンを押した際に処理する
ようにする場合、以下の文はどのように書くのでしょうか?

AAA remove root\BBB
AAA install BBB.inf root\BBB

どなたか力を貸して下さい。
よろしくお願いします。
81デフォルトの名無しさん:2008/11/12(水) 21:27:19
>>80
調べる気もないなら使うな
82デフォルトの名無しさん:2008/11/12(水) 22:00:49
>>81
調べてみたのですが分かりませんでした。
バッチファイルの操作でしたら
WinExec('AAAt.bat',SW_SHOW);
で可能でしたがバッチファイルの中身を操作することが出来ませんでした。
83デフォルトの名無しさん:2008/11/12(水) 22:37:06
>>82
Tmemo.loadfromfile(aaa.bat)
84デフォルトの名無しさん:2008/11/12(水) 23:01:10
そもそも以下の様なドライバのインストールはDelphiで可能なのでしょうか?
AAA install BBB.inf root\BBB

>>83
すいません!未熟なので内容が伝わりません。
85デフォルトの名無しさん:2008/11/12(水) 23:03:14
>>83見たいな奴のソースとか読みたくねえ
86デフォルトの名無しさん:2008/11/12(水) 23:33:02
>>75
それが判る初心者なら質問しませんって・・・
次いでと言ってはなんですがどうやったら判るんです?
解放されてるかどうかの判定。
87超初心者:2008/11/12(水) 23:38:50
Delphiでビンゴゲームを作ろうと思っているのですが、1〜80のランダムな数を1回ずつだけ表示させるやり方がわかりません
Random()だと同じ数が出てきてしまうので…
超低レベルな質問なんでしょうが調べてみても良く分からなかったので勇気を持って書き込んでみました
Delphi使いの皆様、どうかご教授ください。お願いします
88デフォルトの名無しさん:2008/11/12(水) 23:43:00
stringlistに1-80入れて
行をシャッフルして上から見てけば?
89Delフサギコ ◆A6VzDeLphI :2008/11/12(水) 23:57:00
    ∧ ∧  >>68さん
    ミ,,。_。彡  >>DEKOさん
  〜ミ,,,,uuミ
ありがとです
90Delフサギコ ◆A6VzDeLphI :2008/11/13(木) 00:09:24
   ∧,,∧    / ̄
\,,,,ミ,,゚Д゚彡 < しつもんす!
⊂,,,,,,,,,つつ.    \_

配列定数初期化は、ここにあるようにかっこよくかけるんだけど
http://delfusa.main.jp/delfusafloor/opensource/emeditorplugin/20070830170942/Product/DelphiCommentDelete/DelphiCommentDelete.dpr.txt
braceTable: array[TBraceType] of TBraceInfo = (
(beginMark: ''''; endMark: ''''; remove: false),
(beginMark: '{$'; endMark: '}'; remove: false),
(ry

動的配列の初期化は下記の風にしかかけないのかな。
var
braceTable: TBraceTable;
begin
SetLength(braceTable, 5);
with braceTable[0] do
begin beginMark := ''''; endmark := ''''; remove := False; end;
with braceTable[1] do
begin beginMark := '{$'; endmark := '}'; remove := False; end;
with braceTable[2] do
begin beginMark := '{'; endmark := '}'; remove := True; end;
(ry

なんだか、配列定数風にかけたらかっこいいと思うんだけど方法ない?

動的配列に配列定数をほりこむとかでもいいから、なんかきれいな記述方法があればオシエテくで。
91デフォルトの名無しさん:2008/11/13(木) 01:09:09
ActiveXコントロールを「スクリプトを実行しても安全だとマークする」
http://homepage3.nifty.com/LILILIN/HOWTO/activex_safe.htm

Delphiで作ったActiveXに同様の措置をしたいのですが、どうすればいいかわかりませんか?
Del2007を使ってます。
92デフォルトの名無しさん:2008/11/13(木) 04:45:02
>>86
FastMMとか

>>90
俺は綺麗な方法なんて知らんので関数作るな

procedure SetBraceInfo(var Brace: array of TBraceInfo; beginMark, endMark: String; remove: Boolean);
var
I: Integer;
begin
for I := Low(Brace) to High(Brace) do
begin
Brace[I].beginMark := beginMark;
Brace[I].endMark := endMark;
Brace[I].remove := remove;
end;
end;
93デフォルトの名無しさん:2008/11/13(木) 08:51:51
自分ならTBraceTableをTBraceInfoを保持するTObjectList/array ofベースのgenericなコンテナにして

TBraceInfo = record or object
public
  constructor Init(beginMark, endMark: String; remove: Boolean);
end

function BraceInfo(beginMark, endMark: String; remove: Boolean): TBraceInfo;
begin
  Result.Init(beginMark, endMark, remove);
end;

braceTable[0] := BraceInfo('''', '''', False);
braceTable.Add(BraceInfo('''', '''', False));
braceTable[1].Init('{$', '}', False);
braceTable.Add('{', '}', True);

なんて書けるようにするな。どこまで書きやすくするかは利用頻度次第。
Delphiの定数表記は貧弱だからあまりがんばる余地がない。
94ななしへたぐらま ◆XcB18Bks.Y :2008/11/13(木) 18:14:12
>>76-79
条件がよく分からないのですが別のオブジェクトに所有されるときに参照カウントが0になって勝手に解放されてしまうようですね。
手っ取り早い解決法は参照カウントが無効なクラスを用意してTInterfacedObjectの代わりに使うことです。

// 参照カウントを無視するインターフェイスクラス(TObject版)※TInterfacedObjectのコピペ改造
TNoRefCountInterfacedObject = class(TObject, IUnknown)
protected
 function _AddRef: Integer; stdcall;
 function _Release: Integer; stdcall;
public
 function QueryInterface(const IID: TGUID; out Obj): HResult; virtual; stdcall;
end;

function TNoRefCountInterfacedObject.QueryInterface(const IID: TGUID;
 out Obj): HResult;
const
 E_NOINTERFACE = HResult($80004002);
begin
 if GetInterface(IID, Obj) then Result := 0 else Result := E_NOINTERFACE;
end;

function TNoRefCountInterfacedObject._AddRef: Integer;
begin
 Result := -1; // これで参照カウントが無効になるらしい
end;

function TNoRefCountInterfacedObject._Release: Integer;
begin
 Result := -1; // これで参照カウントが無効になるらしい
end;
95ななしへたぐらま ◆XcB18Bks.Y :2008/11/13(木) 18:41:43
>>90
レコード型変数は直接代入できますので配列定数からコピペする場合は

const cBraceTable: array[TBraceType] of TBraceInfo = (ry

var e: TBraceType;

SetLength(BraceTable, Length(cBraceTable));
for e := Low(TBraceType) to High(TBraceType) do
 BraceTable[ord(e)] := cBraceTable[e];

…くらいにはできそうです(一応テスト済み)。
9676:2008/11/13(木) 19:41:55
>>94
勝手に開放される側の話じゃなく、開放されないっていう話なのですが・・・('A`)

>>94の方法はDelWikiにある奴ですよね
97ななしへたぐらま ◆XcB18Bks.Y :2008/11/13(木) 22:52:12
>>96
なるほどそれは失礼しました。
TSubTest.DestroyでFreeAndNil(FTest)(自分で解放する)では駄目ですか?
せっかくの自動解放システムを捨てるのももったいない話ですが…

>>94はDelWikiを見る前からやっていましたが
もし知っていたら余計な苦労をしなくて済みましたね。
98デフォルトの名無しさん:2008/11/13(木) 23:00:29
TMemoに読み込んだファイルの内容を操作したいんだけど
行を指定するのはMemo1.Lines[i]といった形でできる。
では行の中のさらに文字の部分を指定するのはどうすればいいんでしょうか?

99Delフサギコ ◆A6VzDeLphI :2008/11/13(木) 23:58:29
    ∧,,∧   >>92さん
    ミ,,゚Д゚,彡  ありがと....
   ミ(旦⊂ ミ  
    (~,,(~,,,ミ@   でも、そのコード、動かんがな...

>>93さんもありがと。
>TObjectList/array ofベースの
いや、そこまでは。。。

>Delphiの定数表記は貧弱だからあまりがんばる余地がない。
そのようですね。

とりあえずBlogに書いてみたので、この程度の使い道っす。

>>DEKOさん
内緒ですし、あと、猫の耳が
Λ∧
ラムダになってます。
耳は"および"のほうがカワイイですよ。
MSPゴシックだとわかりませんが。明朝だとわかる思います。

100Delフサギコ ◆A6VzDeLphI :2008/11/14(金) 00:02:20
>>98さん
    ∧,,∧   こんな感じかしら
    ミ゚Д゚,,彡 
   ミ(旦⊂ ミ  操作なので。
    (~,,(~,,,ミ〜   
これ動かして慣れてみてください。

procedure TForm6.Button1Click(Sender: TObject);
var
 i: Integer;
 j: Integer;
 s: String;
begin
 for i := 0 to Memo1.Lines.Count - 1 do
 begin
  s := Memo1.Lines.Strings[i];
  for j := 1 to Length(s) do
  begin
   s[j] := '*';

//読み出しだけならこんな書き方もできたり。
// s := s + Memo1.Lines[i][j];

  end;
  Memo1.Lines[i] := s;
 end;
end;
10198:2008/11/14(金) 00:32:08
>>100
助かりました。
ありがとうございます!
おかげで色々と操作ができまして懸念が1つ解消されました。
10287:2008/11/14(金) 09:25:46
>>88
ご回答ありがとうございます。やってみます
103デフォルトの名無しさん:2008/11/14(金) 11:16:40
>102
えぇ、
普通にRandomで、出てきた数字を覚えておいて重複したら却下すれば良いだけじゃないの?
104デフォルトの名無しさん:2008/11/14(金) 11:19:55
>>103
時間の無駄。
105デフォルトの名無しさん:2008/11/14(金) 11:32:56
ざくっと書いて見た。

procedure TMainForm.Button1Click(Sender: TObject)
var
o: array[0..79]of Boolean;
i, n: Integer;
function AllOut: Boolean;
var
i: Integer;
begin
result := false;
for i := 0 to 79 do
if( not( o[i] ) )then exit;
result := true;
end;
begin
for i := 0 to 79 do
o[i] := false;

while( not( AllOut ) )do
begin
n := Random( 80 );
if( not( o[n] ) )then
begin
o[n] := true;
// ここに新たに数字が出たときの処理
end;
end;
end;

106デフォルトの名無しさん:2008/11/14(金) 16:28:47
この流れちょっと前にも見たな
10776:2008/11/14(金) 18:45:47
>>97
つきあってくれてありがとう。質問者側じゃないようなレスしてスマソ

ReportMemoryLeaksOnShutdown の出力結果張り忘れてました。
はっときます。


つまり、両方(TTestとTSubTest)のDestroyが呼ばれてないんです。

どちらかの開放の責任を循環参照の外側に出せば、開放されるはずなので、
いろいろ弄繰り回して試してみたいと思います。
10876:2008/11/14(金) 18:48:23
出力結果張る前に投稿しちゃった・・・
以下は、>>76-79 の ReportMemoryLeaksOnShutdown の出力結果です。

---------------------------
Unexpected Memory Leak
---------------------------
An unexpected memory leak has occurred. The unexpected small block leaks are:



1 - 12 bytes: TSubTest x 1

13 - 20 bytes: TTest x 1


---------------------------
OK
---------------------------
10976:2008/11/14(金) 18:51:32
Delphi2009をお持ちの方にお聞きしたいのですが、
こちらの記事にて、

Delphi 2009で追加された3つの便利な機能をコードで検証 − TechTargetジャパン
http://techtarget.itmedia.co.jp/tt/news/0811/11/news02.html

> 注4.関数内関数を匿名関数型の変数に代入することもできる。

とあるのですが、これは本当でしようか?

今までは関数内関数の参照は取得できず、
以下のサイトのようなテクニックで無理やり実現していました。

λ with INNER FUNCTION
http://hp.vector.co.jp/authors/VA028375/delphi/delphipascal_xx_lambda.html

もし、「関数内関数を匿名関数型の変数に代入」ができると、
さらなる可能性が広がるのですが・・・
110109:2008/11/14(金) 18:52:16
名前欄消し忘れたorz 76と関連性はないです。
111デフォルトの名無しさん:2008/11/14(金) 18:58:02
それが2009の拡張なんだろ
112デフォルトの名無しさん:2008/11/14(金) 19:46:00
>>106
procedure Main();
var Test: ITest;
begin
  Test := TTest.Create;
  CallFoo(Test);
end;
Test変数がスコープ外れた後、参照カウンタが-1されるが、まだ、TTestクラスのインスタンスは
自身の内部変数FSubTestによって参照されているので、参照カウンタ1のまま、TTest.Destroyが永遠に呼ばれず
メモリリーク。
113Delフサギコ ◆A6VzDeLphI :2008/11/15(土) 00:38:14
  ∧,,∧  たぶんね
  ミ,,゚ 3 ゚彡  遅いかも>>103さん、105さん
  ミ つ旦)~~
〜と,,,~),,~) 

いや、パフォーマンスを気にする必要が無い場面は
多々あるんだと思うだが、この場合、

1000個目の乱数を出すために大変だよ。
出力済みの999個は重複しているから。
何を出力してもほとんどははじかれる。

こういう時には>>88さんのいうように
リストでも配列でもいいんだけど
1 2 3 4 5 6 …
を用意しておいて、
1番目の箱を乱数1-1000で決めた他の番号の箱と中身を入れ替えて、
2番目の箱を乱数1-1000で決めた他の番号の箱と中身を入れ替え。。
と、1番目から1000番目の箱を入れ替えていくのがセオリーかと。

>「関数内関数を匿名関数型の変数に代入」ができると、 さらなる可能性
そうなの?
面白い事やってますね。
114デフォルトの名無しさん:2008/11/15(土) 02:49:14
>>105のソース読みにくそうだな
115デフォルトの名無しさん:2008/11/15(土) 04:31:58
TListViewでOwnerDataがTrueの場合、複数選択はどのように取得すればいいんでしょうか

OwnerDataがFalseのときはItemIndex番目からSelCount個見つかるまで
一つずつItems[i].Selectedを調べていたんですが使えないみたいです。

ヘルプの例に従い以下のようにやってみても駄目でした。
選択数が1個の時だけ検出されます。複数になると1個目すら検出できません。
(Ctrl+クリックのときだけいけるっぽい)

OnSelectItem内で
ListItem := ListView1.Selected;
while ListItem <> nil do begin
ほげほげ
 ListItem := ListView1.GetNextItem(ListItem, sdAll, [isSelected]);
end;

よろしくお願いします
116デフォルトの名無しさん:2008/11/15(土) 05:24:09
OnDataStateChangeにも同じコード書いたら行けたみたいです

今度はCtrl+クリックに反応しなかったんで両方でコード実行しないと駄目ぽいけど・・・
117デフォルトの名無しさん:2008/11/15(土) 08:40:53
>>113
でもさぁ、たかがビンゴでパフォーマンス云々言われてもねぇって感じ。
見た目簡単なほうが良いんじゃね?

まぁ、何でビンゴなのに80まであるのかの方が疑問ではあるのですがね。
118デフォルトの名無しさん:2008/11/15(土) 08:44:16
>>117
>まぁ、何でビンゴなのに80まであるのかの方が疑問ではあるのですがね。

9 × 9 - 真ん中1つ = 80
じゃない?
119デフォルトの名無しさん:2008/11/15(土) 09:00:04
間違ってたらごめんね。
ビンゴって1−75じゃなかったっけ?
その数字が5*5のマスの真ん中以外にランダムに配置されてるんじゃ?

あ、ビンゴにもいろいろあるんですか??

120デフォルトの名無しさん:2008/11/15(土) 10:30:13
全員にすべての数字が揃ってるわけじゃない
121デフォルトの名無しさん:2008/11/15(土) 14:15:30
TEditを継承したクラスをつくるって方法を使わず、FormCreate時にEdit1をキャレット非表示のものにする方法をどなたか教えてください!
122デフォルトの名無しさん:2008/11/15(土) 14:22:15
>>121
Edit1.Enabled:=False;
123デフォルトの名無しさん:2008/11/15(土) 14:40:02
Create時じゃないが
procedure TForm1.Edit1Enter(Sender: TObject);
begin
HideCaret(Edit1.Handle);
DestroyCaret(Edit1.Handle);
end;
でどうだ
124デフォルトの名無しさん:2008/11/15(土) 16:38:28
>>123

それでやってみるようにします。
ありがとうございます。
125デフォルトの名無しさん:2008/11/15(土) 16:40:58
うまく説明できないかもしれませんが、

・どんなときでもForm1のKeyDown(Press)がメッセージを取る

ようにするにはどうすればいいんでしょうか?

126デフォルトの名無しさん:2008/11/15(土) 16:42:43
KeyPreviewプロパティかな?
127ななしへたぐらま ◆XcB18Bks.Y :2008/11/15(土) 16:47:28
>>117
人間が手でやるとしたら1から80までのカードを作ってかき混ぜるでしょうから
コンピューターでもそうやるほうが自然ではないかと思います。(作ってみたらこっちの方がわかりやすいとオモウ)
// Num1 と Num2 の値を入れ替える
procedure SwapNumbers(var Num1, Num2: integer); //inline;
var
 TempNum: Integer;
begin
 TempNum := Num1;
 Num1 := Num2;
 Num2 := TempNum;
end;

// Numbers のシャッフル:奥村先生のコードを移植.
procedure Shuffle(var Numbers: array of integer);
var
 i1, i2: Integer;
begin
 for i1 := High(Numbers) downto 1 do
 begin
  i2 := Random(i1 + 1);
  SwapNumbers(Numbers[i1], Numbers[i2]);
 end;
end;

var
 Numbers: array [1..80] of integer;
begin
 Randomize;
 for iNum := Low(Numbers) to High(Numbers) do
  Numbers[iNum] := iNum;
 Shuffle(Numbers);
128125:2008/11/15(土) 16:50:40
>KeyPreviewプロパティかな?

うまくいきました。
どうもありがとう。
129デフォルトの名無しさん:2008/11/15(土) 17:18:36
>>127
玉を一個一個出すビンゴゲームの雰囲気ではないですけど、いいですね。
わかりやすい。
130125:2008/11/15(土) 18:15:17
Form1をKeyPreview:=trueにして、Form1.OnKeyDownでButton1.SetFocusとかでフォーカスを設定しようとしたのですが、

Tab移動のほうに処理が取られるようでうまくいきません。
Tab移動を眠らせてOnKeyDownの中でフォーカスを移すにはどうすればいいんでしょうか?
131デフォルトの名無しさん:2008/11/15(土) 19:18:23
>>127
玉を一つ一つ取り出す随時抽選方式のビンゴ風に改造してみました。
var
Numbers: array[0..74]of Integer;
LotNumber: Integer; 当選番号
LotCount: Integer; 抽選回数 74->0

procedure BingoStart;
var
 i: Integer;
begin
 LotCount := 74;
 for i := 0 to LotCount do
  Numbers[i] := i;
end;

procedure BingoLot;
var
 n: Integer;
 procedure SwapNumber(var a, b: Integer);
 var
  c: Integer;
 begin
  c := a; a := b; b := c;
 end;
begin
 n := Random( LotCount );
 LotNumber := Numbers[n];
 SwapNumber( Numbers[n], Numbers[LotCount] );
 Dec( LotCount );
end;
132デフォルトの名無しさん:2008/11/16(日) 02:53:54
Delphi2009高いな
商用不可でいいから
低機能だけどコンポは使えて
9800でだしてくれんかな。
シェア広げることも大事だと思うんだが
133デフォルトの名無しさん:2008/11/16(日) 02:58:58
Del6personalでDelユーザーを増やせたのにねー

Del8以降の迷走で損してるわ。
134デフォルトの名無しさん:2008/11/16(日) 09:45:48
Delphiはもうガラパゴス諸島化してるだろ。
135デフォルトの名無しさん:2008/11/16(日) 10:24:23
.NETバブルにのって崩壊
136デフォルトの名無しさん:2008/11/16(日) 10:42:27
>>134
つまり手厚く保護されるということだな
137デフォルトの名無しさん:2008/11/16(日) 10:45:02
TurboDelphiExplorerがあるじゃない
138デフォルトの名無しさん:2008/11/16(日) 12:43:20
>>137
Turboは、.net1.1に依存してるのと、
コンポが使えないのがネック。
商用不可でいいから6Personalみたいな形で
だしてほすい
139デフォルトの名無しさん:2008/11/16(日) 12:57:36
http://www.itwriting.com/blog/a-simple-delphi-wrapper-for-sqlite-3

上記サイトのDelphiラッパーを使おうと思い、まず同梱のTestSqlite.dprを実行させようとしたところ
エラーが出てコンパイルできませんでした。どこを修正するといいのでしょうか?

[エラー] SQLiteTable3.pas(470): 'TSQLite3Destructor' と 'Pointer' には互換性がありません
[エラー] SQLiteTable3.pas(627): 'TSQLite3Destructor' と 'Pointer' には互換性がありません
[エラー] SQLiteTable3.pas(787): 'TCollateXCompare' と 'Pointer' には互換性がありません
[致命的エラー] uTestSqlite.pas(7): 'SQLiteTable3.pas' ユニットはコンパイルできませんでした
140デフォルトの名無しさん:2008/11/16(日) 15:39:40
>>139
問題無くコンパイル出来た@Del6
141デフォルトの名無しさん:2008/11/16(日) 15:47:12
>132
シェアを広げることが(企業としての)利益を増やす、ということに繋がるのかどうか、が問題みたいですね。
これをCodeGearの人たちに納得させられればいいのですが。
Borlandから独立することによってBorland(ALM/Together)の連中がやっていたIDEの安売り、投げ売りから
解放されて自分たちの技術、製品が正当な利益、正当な評価を生み出すことを実感している、という
現状からすると、しばらくの間は難しいんじゃなかろか、というのが個人的な意見です。
142デフォルトの名無しさん:2008/11/16(日) 16:00:15
某もたいして安くなかったのにね
マイナー言語のくせに偉そうだな
143デフォルトの名無しさん:2008/11/16(日) 17:16:34
>解放されて自分たちの技術、製品が正当な利益、正当な評価を生み出すことを実感している、という
>現状からすると、

ソースぷりーず
144デフォルトの名無しさん:2008/11/16(日) 17:19:11
>自分たちの技術、製品が正当な利益、正当な評価を生み出すことを実感している、

糞ヘルプ、バグだらけの正当な評価だろうけどな。
145デフォルトの名無しさん:2008/11/16(日) 17:20:09
起きたらオッチャスレ落ちてたんだけど誰か立てないのか
146デフォルトの名無しさん:2008/11/16(日) 17:53:31
>143
forum(private含む)でのCodeGear関係者の発言からはそう読めるけどね。ディスカウントとか無料とか
なんでそんなことしなきゃいけないの?利益に貢献するの?ってな感じ。
ソースは脳内なので当たっていないと思うなら無視してくれて構わないよ。

>142
Personal/Turbo Explorerはただでこれ以上安くできないけど?バージョンアップとかも新規に比べりゃ
安いもんだったしな。でも今はマイナーだからこそ稼がないと消滅しちゃうわけで。MSみたいに
ボッタクリ部門があるわけじゃないからな。

>145
あら、ほんとだ。
147デフォルトの名無しさん:2008/11/16(日) 17:59:20
http://pc11.2ch.net/test/read.cgi/db/1220581676/100

100 名前:NAME IS NULL[sage] 投稿日:2008/11/16(日) 12:56:23 ID:???
http://www.itwriting.com/blog/a-simple-delphi-wrapper-for-sqlite-3

上記サイトのDelphiラッパーを使おうと思い、まず同梱のTestSqlite.dprを実行させようとしたところ
エラーが出てコンパイルできませんでした。どこを修正するといいのでしょうか?

[エラー] SQLiteTable3.pas(470): 'TSQLite3Destructor' と 'Pointer' には互換性がありません
[エラー] SQLiteTable3.pas(627): 'TSQLite3Destructor' と 'Pointer' には互換性がありません
[エラー] SQLiteTable3.pas(787): 'TCollateXCompare' と 'Pointer' には互換性がありません
[致命的エラー] uTestSqlite.pas(7): 'SQLiteTable3.pas' ユニットはコンパイルできませんでした
148ななしへたぐらま ◆XcB18Bks.Y :2008/11/16(日) 18:09:10
>>138
データベース(に接続して読み書きする機能)で差を付けられなくなってしまった現在では
有料版とどこかで差別化しなければならなかったわけで落としどころとしては悪くないと思います。

またコンポは設計時に貼り付けられないだけで実行時にコードで生成することはできますので
私はここ1〜2年はこれで頑張っています。

フレームを積極的に使い始めたためか標準でないビジュアルコンポーネントをポトベタしたくなる場面が
かなり減ったのでそんなには困っていませんがさすがにそろそろポトベタできる有料版が欲しいです…
149デフォルトの名無しさん:2008/11/16(日) 18:11:08
俺の不満はDelphiのシェア低いから使えるライブラリの種類少ないことだな。
Delphiのクラスライブラリが.NET並とはいかないまでも、もっとリッチならまぁ気にならないが。
正規表現にしてもDelphiのVCLに標準で用意されていないし。まぁ、PCREや鬼車使えるけど、
アプリに静的リンクしようとかなるとたちまち、メンドくさいし。
前はDelphiで構文解析やろうとして、Delphiのソース吐くやつが余りないから、
C#のコードを吐くパーサジェネレータをDelphiのコードを吐くように改造したり。
めんどくせぇ。




150デフォルトの名無しさん:2008/11/16(日) 18:19:07
隔離スレに帰れ
151デフォルトの名無しさん:2008/11/16(日) 19:07:36
まじでめんどくさいぉ。
152デフォルトの名無しさん:2008/11/16(日) 21:15:48
オッチャなくなったので、こちらで活動開始。

オッチャすれ アンチ対策テンプレ v1.0(案)
(p)http://codegearwatcher.web.fc2.com/faq/anti.html

> オッチャすれ アンチ対策テンプレ v1.0(案)
> 以下はオッチャすれに出没する、アンチの持ちネタです。
> これらのネタは、4年以上にわたる不毛な議論と逆予言により終息しています。
> しかしアンチは自作自演を交えつつ、無限ループを続けています。
>
> このスレでアンチを見かけた場合は、このテンプレを提示しましょう。
153デフォルトの名無しさん:2008/11/16(日) 21:46:51
マンセがうるさいので、これからここに質問に来た初心者をけなしてDelphiユーザーの
妨害活動をしますのでよろしく。
154デフォルトの名無しさん:2008/11/16(日) 22:01:33
>>152 はまんせじゃなくて最凶アンチ。きもい。
155デフォルトの名無しさん:2008/11/16(日) 22:36:45
【Embarcadero】CodeGearオッチャ その13
http://pc11.2ch.net/test/read.cgi/tech/1226842439/
156デフォルトの名無しさん:2008/11/16(日) 23:00:46
既存のコンポを継承したコンポを使いたいんですけども
どうやって呼び出したらいいんでしょうか?

例えば、TCustomEditを継承したTEditExを作ったんですけども
フォームへの貼り付け方法がわかりません。

環境はTurboDelphi Explorerです。
157デフォルトの名無しさん:2008/11/16(日) 23:11:13
TDEじゃ無理です
158デフォルトの名無しさん:2008/11/16(日) 23:12:03
あ、FormのOnCreateで
EditEx1 := TEditEx.Create(Self);
EditEx1.Parent := Self;
とすれば貼り付けじゃなくてもおk
159デフォルトの名無しさん:2008/11/16(日) 23:57:34
>>158
ぬぉぉぉ
できました。
ありがとうございます!
160デフォルトの名無しさん:2008/11/17(月) 01:24:56
「→」や「→」などを「→」のように文字に変換する方法はありますか?
161デフォルトの名無しさん:2008/11/17(月) 01:29:15
全部同じにしか見えない
162デフォルトの名無しさん:2008/11/17(月) 01:29:28
ミスったorz
「&#8594;」や「&#8594;」などを「→」のように文字に変換する方法はありますか?
163デフォルトの名無しさん:2008/11/17(月) 01:32:26
再び・・
「&#8594;」や「&#rarr;」です
164デフォルトの名無しさん:2008/11/17(月) 01:35:29
「&#8594;」や「&#rarr;」を「 → 」に置き換えればいいんじゃないの?
165デフォルトの名無しさん:2008/11/17(月) 01:39:22
全ての全角文字と記号がこの形式になっているもので・・
166デフォルトの名無しさん:2008/11/17(月) 02:06:06
キーボードが壊れてしまって「あ」が「あ」になってしまうんです。

思い出した。

167デフォルトの名無しさん:2008/11/17(月) 03:19:21
classとinterfaceを継承したclass(例えば TTest = class(TObject, IInterface))があるとき、
自身を、IInterfaceを引数に取る関数に渡す場合はどうすればいいんでしょうか?
168デフォルトの名無しさん:2008/11/17(月) 03:36:48
>>167
Self as IInterfaceとかじゃね?
169デフォルトの名無しさん:2008/11/17(月) 03:39:16
>>168
「この型には指定した演算子は使えません」と出ます
170デフォルトの名無しさん:2008/11/17(月) 03:50:52
>>169
そのままSelfか、IInterface(Self)でどう?
171デフォルトの名無しさん:2008/11/17(月) 04:01:29
>>170
それも無理でした
172デフォルトの名無しさん:2008/11/17(月) 04:50:18
interfaceを使うときは一般的にはTObjectじゃなくTInterfacedObjectから継承する。
そうでなければQueryInterfaceや参照管理を自前できちんと実装しないといけない。
分かってやってるならいいけど。
173デフォルトの名無しさん:2008/11/17(月) 04:57:07
あちゃ、本当は class(TObject, IDispatch)ってやってたんですけど、
キャストする時はIInterfaceも追加しないといけないんですね

>>172
http://tobysoft.net/wiki/index.php?Delphi%2Finterface%A4%F2%BB%C8%A4%AA%A4%A6%2F%C9%AC%BF%DC%A4%CE%A5%B5%A5%DD%A1%BC%A5%C8%A5%E9%A5%A4%A5%D6%A5%E9%A5%EA
のようにやってました
参考にしておきます
174デフォルトの名無しさん:2008/11/17(月) 12:24:35
OSを替えたんでDELPHI6を再インストールしたら
前の使用許諾コードが入らないんです。それで新たに発行してもらおうとしたら
以前に使ってたメアドで登録してたんで、今の使ってるメアドで登録しなおそうと思っても
シリアル発行終了してるんでどうしたら良いのか困ってるんです。
一度は登録済みだから未許諾ままでも良いですかね。
フリーソフトとかで配布したいんですけど
175デフォルトの名無しさん:2008/11/17(月) 13:08:01
ポップアップメニューがポップしてるかという判断ってどうやればいいですか。
ポップしている間にTimerイベントが発生してしまい
ちょっと望ましくない挙動になってしまうのでif文を追加したいのです。
176デフォルトの名無しさん:2008/11/17(月) 13:09:04
HKEY_CURRENT_USER\Software\Borland\Delphi\6.0のLMKEYを前のとあわせたらどうかな
でもバックアップ取ってないよね
まあ登録しようがしまいが構わんさ
それでソフト配ってる奴なんか山のようにいる
177デフォルトの名無しさん:2008/11/17(月) 13:09:56
LMKEYじゃなくてLMかも分からんね
178デフォルトの名無しさん:2008/11/17(月) 14:52:48
>>175
WM_ENTERMENULOOPでフラグ立ててWM_EXITMENULOOPでフラグ降ろす
179174:2008/11/17(月) 14:56:10
>>176 >>177
バックアップのと照らし合わせたら同じでした、と言う事は
インストール番号とキーは今のOSでは使えない(インストールだけは出来る)ので
メールでインストール番号とキーを書いて送って帰ってきた
使用許諾コードも使えないと言う事ですよね、困ったなぁ

>それでソフト配ってる奴なんか山のようにいる
EXEの中に未許諾の情報とか入ってないんですか
180デフォルトの名無しさん:2008/11/17(月) 15:02:29
>>179
むむ・・・すまん
じゃあもういっその事レジストリ全部上書きでもいいと思うよw

> EXEの中に未許諾の情報とか入ってないんですか
Kylixにはあると思う(System.pasにそんなことがちらり)けど、Delphiにはないんじゃないかなあ
181174:2008/11/17(月) 15:56:17
>>180
上書きは項目が沢山あるんで諦めましたw
情報はDELPHIの方には入って無いんですか、じゃあそのままにしときます。
一応登録する意思はあるんで、出来ないんじゃどうしようも無いですし。
自分せいじゃあ無いんでしょうがないです。
色々ありがとうございます、ちょっと安心しました。
182デフォルトの名無しさん:2008/11/17(月) 17:21:40
OSとか換えなくてもDel6入れ直しただけで前の使用許諾コード使えなくなったな
俺はそのまま赤いまま
183デフォルトの名無しさん:2008/11/17(月) 19:26:44
Delphiのimplements指令がいまいちわかりません。

下記サイトでサンプルコードがあったのですが、
An Introduction to COM Programming with Delphi (3 / 6)
http://delphi.about.com/library/weekly/aa120704a.htm

結局、implementsを書いたクラスは一度interfaceにキャストしないと
メソッドよめないんでしょうか?

var
 Test: TTest;
 Foo: IFoo;
begin
 Test := TTest.Create;
 Foo := Test;
 Foo.Bar;  // FooにキャストしないとBarに呼べない
184デフォルトの名無しさん:2008/11/17(月) 19:27:26
> メソッドよめないんでしょうか?
メソッド呼べないんでしょうか?
185デフォルトの名無しさん:2008/11/17(月) 20:01:50
>>174
登録コードの数字と使用許諾コードがあればレジストリでLMの最後にある数字を
元の登録コードの数字に書き換えれば登録できる
186ななしへたぐらま ◆XcB18Bks.Y :2008/11/17(月) 22:04:12
>>162
こんな時こそ正規表現ライブラリを使うべし。
正規表現ライブラリはいろいろありますけど今回はskRegExpで。
日本語のヘルプもあるので比較的使いやすいと思います。

そのものズバリのコードも書いてしまったのですが勉強にならないと思うので
今回は変換したい部分を特定するコードのサンプルだけ。

const
 cSample = 'I want to convert "→" and "&#rarr;" into right arrow!';
var
 exp: TSkRegExp;
 Converted: string;
begin
 Writeln('Sample:"', cSample, '"');
 exp := TSkRegExp.Create;
 try
  exp.Expression := '&#[0-9]+;|&#[A-Za-z]+;'; // 見つけたいパターンは「&#,0から9のどれかが1文字以上,;」または「&#,A〜Zかa〜zが1文字以上,;」
  if exp.Exec(cSample) then // 先頭からパターンに一致するところを探せ.もし見つかったなら…
   repeat
    Writeln('見つけた!: 「', exp.Match[0], '」 ', exp.MatchPos[0], '文字目から', exp.MatchLen[0], '文字分');
   until not exp.ExecNext; // 次を探せ.見つからなかったらループを抜ける.
 finally
  exp.Free;
 end;
end.

>>168-169
as 演算子によるインターフェースへのキャストはGUIDを付けないと使えないみたいです。
でも今回はそれが原因ではない気もします。
187デフォルトの名無しさん:2008/11/18(火) 01:11:12
>>183
TestはあくまでDelphiのオブジェクトなので実装されていない
メソッドが呼べないのは当たり前じゃないでしょうか。
188デフォルトの名無しさん:2008/11/18(火) 01:28:33
>>181
・SerialNumber:インストール番号と
・AuthorizationKey:インストールキーは、そのまま使える
ってか使えるからインスコ出来る訳で

インスコし直し(とかD6RegClean.exe実行)すると
・RegistrationKey:登録コード が変わる

その登録コードで有効な許諾コードを取得
https://reg.codegear.com/srs6/sanctone_serial_number.jsp

メアドはDeveloper Networkのアカウントにログインして変えれば良い

Borlandの時の返信Mailは登録コードも書いてあったけど
Embarcaderoのには書いてない。
念のため事前に数字メモっとかないと。。。
189デフォルトの名無しさん:2008/11/18(火) 05:07:48
OOPについての基本的な質問なのですが・・・
オブジェクト"objA"からオブジェクト"objB"を生成するとします。

procedure TMain.foo();
begin
 objA := TObjA.create();
 objA.foo();// objBを生成
end;

procedure TObjA.foo();
begin
 objB := TObjB.create();
end;

この場合、objAからobjBにメッセージを送ることはできますが、
その逆(objBからobjAにメッセージを送る)はできないと思います。
(objBは、どのオブジェクトから生成されたか知らないため)

objBが、生成元のオブジェクトobjAにメッセージを送れるようにするには、
どうすればいいでしょうか?
190デフォルトの名無しさん:2008/11/18(火) 05:09:52
コンストラクタで生成元を渡すような仕様にしたらいいんでは?
191デフォルトの名無しさん:2008/11/18(火) 05:16:04
メッセージが何のことやら
192189:2008/11/18(火) 05:16:24
>>190
ありがとうございます。

procedure TObjA.foo();
begin
 objB := TObjB.create(self);
end;

などとして、引き回すということですよね?
この方法が一番スマートですかね…?
193174:2008/11/18(火) 05:55:54
>>182 >>185 >>188
返事遅れてすいません、>>185 さんの方法で上手く出来ましたw
OSの違いじゃなくて登録コードが合ってなかったんですね。
入力欄に入れようとしても変えられなかったんで関係ないと思ってました。
いや本当に助かりました、これでスッキリとDELPHI6を使い続ける事ができます。
本当にありがとう御座いました。
194デフォルトの名無しさん:2008/11/18(火) 11:36:24
これはいいライブラリになるかも。試してないけど。

309 名前:View ◆AcQTmXmylo [sage] 投稿日:2008/11/18(火) 05:25:01 ID:bqCSxa7a
今回導入した鬼車もオープンソース(BSDライセンス)なので、それに対する貢献はなんだろうと考え、
delphiから鬼車を使うためのラッパークラスTOnigRegExpのソースを公開しました。

ttp://www.geocities.jp/jview2000/oniguruma.html

OnigRegExpは、Km氏が作成したdllラッパーのoniguruma.pas, onig.pasの改造品を
さらにラップしてクラス化したものです。
ttp://homepage2.nifty.com/Km/onig.htm
195デフォルトの名無しさん:2008/11/18(火) 12:39:51
人によってクセがあるので自分で書いたほうが
使い易かったりもするけどね
196デフォルトの名無しさん:2008/11/18(火) 12:55:40
>>189 なんでそんな面倒なことするの? メンバ変数で記録すればいいじゃないか

procedure TMain.foo();
begin
 objA := TObjA.create();
 objA.foo();// objBを生成
end;

↑これobjB作れてないじゃん objAとかobjBは結局ポインタなんだけどわかってる?
197デフォルトの名無しさん:2008/11/18(火) 15:50:45
procedure TForm1.Button2Click(Sender: TObject);
var
lp: PChar;
str: String;
ch: Char;
begin
ch := 'A';
str := 'A';
lp := PChar(str);
if lp = ch then begin
Caption := 'equal';
end;
end;

delphi2009だと、lp = chでstring->ShortStringな警告が出るんですが、
そういうものでしょうか?思いっきり、'A'を文字数だと思って比較しています。
198デフォルトの名無しさん:2008/11/18(火) 16:33:58
>>196
全部読めよ
199デフォルトの名無しさん:2008/11/18(火) 16:36:05
>>197
lp^じゃねぇの?
200デフォルトの名無しさん:2008/11/18(火) 17:35:53
>>199
漏れもそう思ったんだが、両方文字列に変換してから比較るらしい。
D5だとequal言うんよね。
201デフォルトの名無しさん:2008/11/18(火) 17:43:46
あの、流れ無視でごめん。
所でDelphi2009は.Net対応?
みんなは.Netに移行するんですか?Win32維持ですか?
Delphiはその流れに付いて行っているんですか?
202デフォルトの名無しさん:2008/11/18(火) 18:48:36
いまのDel使いは.NETに乗り遅れた人達なんだよ・・
203デフォルトの名無しさん:2008/11/18(火) 19:07:13
oniguruma.pasに接頭辞Tで始まるデータタイプを定義してほしい。
もうね、
var
RegExp: OnigRegExp;
Windows.pasも例えばTLogFont = tagLogFont;と別名定義してんだし、
合わせろよ。
と、>>195に同意。
204デフォルトの名無しさん:2008/11/18(火) 20:16:57
>>188
ありがとう
居座ってた赤いの消すことが出来た
205デフォルトの名無しさん:2008/11/18(火) 21:19:06
VBSなRegExp風にラップしてくれ〜
あれが一番使いやすい。
ついでにコールバックによる置換なんかに対応してくれれば言うことない。
206デフォルトの名無しさん:2008/11/18(火) 21:26:00
「VBSなRegExp」がどんなのか分かったら暇なときにやらないこともない
207197:2008/11/18(火) 21:56:01
>>197
del5でもShortStringに変換して比較してた>AStrCmp
WideCharの比較でなんでShortStringが出てくるのかわからないけど、仕様ならしょうがないか。
208デフォルトの名無しさん:2008/11/18(火) 21:58:34
UnicodeStringへの添え字でのアクセスはShortStringになるのが関係ありそうでなさそうでありそう
209デフォルトの名無しさん:2008/11/18(火) 21:58:57
>>187
まあそれはそうなのですが、単純にブリッジ処理書くのが省ければなあ、
という用途で使おうと思ったら、
面倒くさい仕様なので残念!といったところなのです。
210デフォルトの名無しさん:2008/11/18(火) 22:01:53
Ordをかましたらどうだろ
211デフォルトの名無しさん:2008/11/18(火) 23:44:44
Orz
212デフォルトの名無しさん:2008/11/19(水) 01:18:28
delphiで、一部の文字の色を変えるエディタって簡単に作れるの?
213デフォルトの名無しさん:2008/11/19(水) 01:21:26
>>212
そんなこと聞いてるあなたには簡単ではないでしょうね
214デフォルトの名無しさん:2008/11/19(水) 01:33:40
richeditで出来るだろ
215デフォルトの名無しさん:2008/11/19(水) 10:12:46
Delphi2009のバージョンアップ版ってインストール時に
前バージョン(Delphi4持ってる、2は行方不明)の確認ありますか?
VBとの比較検討用だったんでユーザー登録もしてないんだけど...
216デフォルトの名無しさん:2008/11/19(水) 11:05:41
おそらく前バージョンのユーザー登録してないならアクティベーション通らないんじゃないかな?
CDNのアカウントで認証してるみたいだし。サポートに問い合わせた方がいいかと。
217デフォルトの名無しさん:2008/11/19(水) 21:33:50
>>192
TObjBでイベントを定義して、ObjBを生成したときに
イベントハンドラとしてObjAのメソッドをを代入するのがいい。

ObjAの参照を持たせるよりも結合度を小さくできる。
218デフォルトの名無しさん:2008/11/19(水) 23:19:20
特定のオブジェクトの参照を保持するのと、そのメソッドを保持するのと
結合度に差があるの? メッセージを送りたいんだから TObject の Dispatch()
を使えるし、だからすべてのクラスで参照を保持できたほうが汎用性の意味では
よりいいんでは?
219217:2008/11/21(金) 01:04:58
んー、どうだろね。
メッセージというのがwindowsメッセージやdelphiのディスパッチのメカニズムを
利用する話なら>>218で正しいと思うけど、>>189にはOOPの話と断りが入ってる。

OOPでのメッセージという用語はオブジェクト間のやりとりの総称なので、
メソッドの呼び出しなども当然に含まれる。俺はそういう理解で解答してる。
220デフォルトの名無しさん:2008/11/22(土) 08:52:35
>>186
なんかりんごの皮をチェンソーで剥いてる様な気がするのは俺だけ?
221デフォルトの名無しさん:2008/11/22(土) 10:57:03
そりゃ金の取れる芸のレベルだよ
222デフォルトの名無しさん:2008/11/22(土) 10:58:45
正規表現コンポに金使えばいいのか
223デフォルトの名無しさん:2008/11/22(土) 11:12:54
FreeMemにサイズを指定するメリットってあるんでしょうか?
Sizeが無指定だとちゃんと全部開放されないとかあるんでしょうか
224デフォルトの名無しさん:2008/11/22(土) 16:37:35
Delphi6 Personal使ってます。
manifest適用時にTComboBoxのSelText、SelStart、SelLengthの値が
正しく取得できなくて困ってます。

Textに「あいうえお」と入力して「うえ」を選択したとき

SelText: �
SelStart: 1
SelLength: 1

という結果が返ってきます。
半角だと問題ないのですが全角だとおかしくなります。

正しい値を取得するにはどうすればいいでしょうか?
225デフォルトの名無しさん:2008/11/22(土) 17:31:56
Delphi 2007でも同様の結果になるようですね。
226デフォルトの名無しさん:2008/11/22(土) 18:26:08
manifest適用しなければおk
227デフォルトの名無しさん:2008/11/23(日) 12:04:15
ユニコード対応のD2009じゃね?

Tntは修正が不完全だけど、一応使えるレベルだと思う。
228225:2008/11/23(日) 13:08:12
TNTComboBoxならSelStart/SelLengthは正常に取得できる。SelTextはTextをAnsiStringに
変換後に自前で変換すればいい。
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption := Format('SelStart=%d SelLength=%d SelText=%s',
[ComboBox1.SelStart,ComboBox1.SelLength,
Copy(AnsiString(ComboBox1.Text),ComboBox1.SelStart + 1,ComboBox1.SelLength)]);
end;
229デフォルトの名無しさん:2008/11/23(日) 13:16:48
TNTって無料版の開発終わったよね
230225:2008/11/23(日) 13:34:43
まーでも古い版はダウンロード可能だし。mh-nexusさんとことか。でもDelphi 6 Personalは別版が必要かも?
231225:2008/11/23(日) 14:01:52
TNTは現在はTMSで売ってる。
ttp://www.tmssoftware.com/site/tmsuni.asp
個人なら30Euro(3600円くらい)。
232デフォルトの名無しさん:2008/11/23(日) 15:08:16
有料版でも直ってないそうですね
まあ、英語圏の人は他言語IMEなんて使ってないだろうし

FastCodeの中の人なんて、LowerCaseのTable作りに
CharUpperBuff使っただけで、「Ansi」StringReplaceとか言っちゃってるしなぁ
233デフォルトの名無しさん:2008/11/23(日) 15:10:37
いけね、UpcaseのTableだ
234デフォルトの名無しさん:2008/11/24(月) 21:47:14
>>230
そのままだとコンポが足りないのでエラーが出るけど
ちょっと書き換えればD6Perでも動くよ
235デフォルトの名無しさん:2008/11/24(月) 22:45:46
DBとBandアクチョン削ればOKだったかな
で、必要な人はsoft-gemsのThemeManager入れる、と
236デフォルトの名無しさん:2008/11/25(火) 18:14:27
特待販売の葉書が来た。
久々にバージョンアップしてもいいかなぁと思ってるところ。
今C#を主に使用しているんだけど、Delphiならではのメリットっていうと、
VCLとネイティブコンパイルぐらい?
237デフォルトの名無しさん:2008/11/25(火) 20:39:27
バージョンアップしなくても「Delphiならではのメリット」は変わらんだろ・・
238デフォルトの名無しさん:2008/11/25(火) 22:22:05
昔、Delphi 7 では、デバッグでカーソルを変数に合わせるだけで値をインスペクトできた。

先日、Delphi 2006 を借りて使ってみたら、それができないじゃん。

新しい Delphi ではどうなっているのか知ってる人、どーか教えてくだしゃい。
239デフォルトの名無しさん:2008/11/25(火) 22:40:42
>>236
おれんとこにも来たな、特待販売の葉書。
見たら会社名に「エンバカデロ・テクノロジーズ」って書いてある。

 エン バカ デロ

は、日本じゃアウトだろフツー。

C++Builder でまともなプログラム組めたことなかったし、
Delphi 2005, Delphi 2006 も安定しなかったんでまともに使ってなかったし、
エン「バカ」デロ Delphi と C++Builder はマジで悩む。

240デフォルトの名無しさん:2008/11/25(火) 22:42:04
えっ?できますよ?
241デフォルトの名無しさん:2008/11/25(火) 22:50:35
>>239
うわぁ・・・
242デフォルトの名無しさん:2008/11/25(火) 22:54:41
>>239
安定しなかったってどういうこと?
ちなみに、Delphi7で業務アプリ作ったけど、その時は割と安定してたけどな。

Delphiで気になるのは、ネイティブコンパイルと、VCLかな。
ビジュアルコンポーネントの使い勝手は優秀だと思った。
StringListとかObjectListなどの非ビジュアルコンポも優秀だけど、

いまじゃC#でもList<String>とかで代用できてしまうし、
コンポーネントもVCLライクに仕上がって遜色ない出来になってるしなぁという感じで悩む。
ま、.NETFrameworkがないと動作しないのは相変わらずなんだけど。

243デフォルトの名無しさん:2008/11/25(火) 23:33:59
Delphi7は安定していたが、Delphi 2005は統合環境がなぜかフリーズしまくり。

Delphi 2006 はコードエディタな若干不安定で、箱形コピペなどすると、ずれ
てペーストされる。また、何もしなくとも、しばらくするとCPUを食うよ
うな処理が統合環境内部で起こる。そして、Delphi7より何か重たい。
また、>>238 のように、デバッグでカーソルを変数に合わせるだけで値を
インスペクトできない。(あれは便利だった!!!!)

これらの現象は、コードギアが提供したパッチを当ててもダメだったんだな。
そんで、今もDelphi7を使っているんだよな、おれ。

ただし、どこかにあったGoogleMap を組み込んだデモだけは、Delphi7では
コンパイルできなかったのでDelphi 2006 で試したらうまくいった。

ハーア、何かうまくゆかないもんだな。
244デフォルトの名無しさん:2008/11/25(火) 23:38:21
>>240
>えっ?できますよ?
えっ?できるの?
245デフォルトの名無しさん:2008/11/25(火) 23:46:46
>244
>238のことですよね?できますよ。もちろんローカル変数ウィンドウでも評価ウィンドウでも見られますけど、
変数にカーソルをあてるだけでインスペクションできるし、最近のものでは構造体のメンバやポインタの
示す先を追っていくこともできます。できないバージョンは(Personal/TurboExplorerを除けば)ないんじゃないかな?
246デフォルトの名無しさん:2008/11/25(火) 23:47:58
× できないバージョンは(Personal/TurboExplorerを除けば)ないんじゃないかな?
○ Delphi5以降でできないバージョンは(Personal/TurboExplorerを除けば)ないんじゃないかな?
247デフォルトの名無しさん:2008/11/26(水) 00:00:42
>>238 >>244
「メニュー」ツール → オプション 

「オプションダイアログ」 エディタ設定 → 支援機能 → ツールチップ式評価 をチェックでOK

デバッグの機能なんだけど、「デバッガオプション」ではなく「エディタ設定」にあるのがミソ
248デフォルトの名無しさん:2008/11/26(水) 12:33:02
IDEが不安定ってことなのか。
いつからかIDEが.NET上でしか動作しないようになったんかな。
若干、重いイメージは確かにあったけど。
ネイティブで動作させることを目的としなければ、VS2005移行で十分に
Delphi並のRAD環境になってるから、選択に難しいところではあるよね。
249デフォルトの名無しさん:2008/11/26(水) 12:58:37
IDEは.Netだけど、コンパイルされるコードはネイティブ。
250デフォルトの名無しさん:2008/11/26(水) 14:05:53
D2009はIDEはネイティブでそ?
ヘルプのために.NETがいるだけで
251デフォルトの名無しさん:2008/11/26(水) 14:30:54
Delphiって算術シフトの演算子ってないの???
252デフォルトの名無しさん:2008/11/26(水) 14:35:28
shlとshr
253ななしへたぐらま ◆XcB18Bks.Y :2008/11/26(水) 17:34:36
>>251
ビットシフトこのとでしたら shl、shr で。
綴りで分かるかもしれませんがそれぞれ左シフト(SHift Left)と右シフト(SHift Right)。
254ななしへたぐらま ◆XcB18Bks.Y :2008/11/26(水) 17:35:51
って一番下の252が見えてなかった…すいません
255デフォルトの名無しさん:2008/11/26(水) 18:56:32
ファイルの先頭からあるバイト目からをMemoに読み込むにはどうしたらよいのでしょうか?

というのも、ファイルの先頭にいらない物が付いていてそのまま
256デフォルトの名無しさん:2008/11/26(水) 18:59:58
途中送信してしまった・・・orz
ファイルの先頭からあるバイト目からをMemoに読み込むにはどうしたらよいのでしょうか?

というのも、ファイルの先頭にいらない物が付いていてそのまま
Memo1.Lines.LoadFromFile(Filename);
とやっても文字化け?して読めないんです。
でもその無駄なのを取り去ってやるとMemoに読み込めます。
257デフォルトの名無しさん:2008/11/26(水) 19:14:15
>>256
それはウニコードだね
258デフォルトの名無しさん:2008/11/26(水) 20:13:55
>>256
TFileStreamとかAssignFile・Seek・Readで読み出せばいいはず
TFileStreamの方が簡単・VCL的なのでおすすめ
procedure TForm1.ButtonClick(Sender: TObject);
var
Stream: TFileStream;
begin
Stream := TFileStream.Create(Edit1.Text, fmOpenRead or fmShareDenyWrite);
try
Stream.Seek(10, soFromBeginning);//10バイト飛ばして読む
Memo1.Lines.LoadFromStream(Stream);
finally
Stream.Free;
end;
end;

>>257
うんこーどと断定できるとかすげえな
259デフォルトの名無しさん:2008/11/27(木) 01:16:21
Delphi 2006でコンポーネントのインストールをしたい。

だが、「コンポーネントのインストール」がメニューから消えており、
HELPで「コンポーネントのインストール」を検索すると

  『コンポーネントコンポーネントのインストール』
  このダイアログボックスでは,コンポーネントを新規パッケージ
  または既存のパッケージにインストールします。

とある。
いったい、どうやってダイアログボックスまでたどり着くのだろう?
どなたか教えて下され。
260デフォルトの名無しさん:2008/11/27(木) 01:47:15
>>259
2006のヘルプを見ろよ
>すべてのコンポーネントはパッケージとして IDE にインストールされます。したがって,
>ユーザー自身がコンポーネントを作成するときには,まずそのコンポーネントを入れる
>パッケージを 作成してコンパイル する必要があります。コンポーネントのソースコードは,
>コンポーネント作成の概要 で説明されているモデルにしたがって記述する必要があります。
261デフォルトの名無しさん:2008/11/27(木) 10:21:20
>>260
なるほど、Delphi2006は 「ファイル」メニュー から辿ってパッケージを作るようになってたんだ。

Delphi7では 「コンポーネント」メニュー からいきなり「コンポーネントのインストール」ができ、そこで
パッケージを新規に作成してたんで(これには)気付かなかった。Delphi2006のように
パッケージ・プロジェクトとして開発する方が、Delphi7のときよりも少しだけ楽だね。
助かった。ありがとうございました。
262デフォルトの名無しさん:2008/11/27(木) 12:57:36
Turbo DelphiでFastMM4.90を利用しています。

デバッグ時にステップ実行していると、メモリの確保や解放時などFastMMのソースに飛ばされます。
これを無視したい(デバッガがFastMMのコードまで追わないようにしたい)のですが、どうすればいいのでしょうか。
263262:2008/11/27(木) 13:03:36
とりあえず、コンパイラ指令の{$D-}をFastMMのソースに加えることで抑制しました。
264デフォルトの名無しさん:2008/11/27(木) 13:33:23
ソースに飛べないようにすればいいじゃない
削除するなり移動するなり
265デフォルトの名無しさん:2008/11/28(金) 12:38:27
>>264
そーすると、例外が起きるたびにソースを要求されるそーすよ。
266デフォルトの名無しさん:2008/11/29(土) 13:19:11
そーすね
267デフォルトの名無しさん:2008/11/29(土) 14:04:42
            ___
          ,,r''"´    `"''-,,
        / ノ   ヽ、    \
         / ( ● )   ( ● ) ヽ  ヽ
        i゛ :::⌒(__人__)⌒:::  ヽ  ゛i
      l     |r┬-|       l  ノ    そーなんすかwww
        !     | |  |      レ'
      l   l  | |  |   l  , l
      |   l   `ー'´    |  l l
        !   l        ,!  | l
      l   ゛i       /  l i゛
      ゛i   ヽ     /   / /
       ヽ,__,,,ゝ    く  ノ /
        ヽ       ゛" /     __
       _  )      、(二"'''ー'"ー'__゛゛ヽ
     r'   ̄           ̄ヽ,)‐-,,_ ´┴'ノ
     ヽ__,,-──-、__,ノ  
268デフォルトの名無しさん:2008/11/30(日) 10:34:14
FastMMがいつの間にやら新しくなってたので落とそうと思ったらアカウントが必要になってたのね
そう思って登録しようとしても、必要事項書いてRegistration押してもその後何にも起こらん
どうすりゃいいの?メール来るのかと思ったら来ないし
269デフォルトの名無しさん:2008/11/30(日) 10:38:09
とりあえずお前が英語苦手だってことは理解した
270デフォルトの名無しさん:2008/11/30(日) 10:41:19
>>268
ダウンロードにパスなんて必要ないんだけど
271デフォルトの名無しさん:2008/11/30(日) 10:41:46
パスじゃなかったアカウントだ
272デフォルトの名無しさん:2008/11/30(日) 10:52:54
あれー?Download押すとトップページに飛ばされるから
そう思ってた。俺だけ?
273デフォルトの名無しさん:2008/11/30(日) 10:58:33
http://sourceforge.net/projects/fastmm/→Download→FastMM 4.92→FastMM492.zipだろ?
どこで踏み外せばいいんだ
274デフォルトの名無しさん:2008/11/30(日) 12:18:31
すぐ上で言ってるとおり、Downloadだよ
俺だけのようだ…会社でも家でも同じだったんだよなあ
なんでだろ
275デフォルトの名無しさん:2008/11/30(日) 12:22:10
ブラウザのせいだったようだ
すまんです
276デフォルトの名無しさん:2008/11/30(日) 12:26:34
どんな糞ブラウザ使ってんだよw
277デフォルトの名無しさん:2008/11/30(日) 13:40:11
Turbo Delphiを使用しています。

ローカルバックアップの保持ファイル数の上限を増やすことはできるでしょうか?。
私の環境では、どうも100個くらいしか保持してくれないようです。
これを1000個くらいまで保持してくれれば、個人的にはだいぶ楽になるのです。

よろしくお願いします。
278デフォルトの名無しさん:2008/11/30(日) 13:43:03
あまりそれでがんばらずに素直にバージョン管理システム使ったら。
TortoiseSVN + pdumpfsの組み合わせて使ってるけどソース紛失で泣く事はなくなったな。
279デフォルトの名無しさん:2008/11/30(日) 14:02:22
>>278
どうも。

IDE標準の、変更のたびにバックアップが作成されるというのは、
利点でもあり弱点でもありますね。

トイレに行った後、レジストリの方も調べてみましたが、
BDS-4.0-Editor-OptionにあるFile Backup Levelというキーで、
上限を増やせるようです?(実際に増えるかは未確認)。

当座はこれでしの(げるならしの)ぎます。教えていただいたソフトウェアについても、
調べてみたいと思います。ありがとうございました。
280デフォルトの名無しさん:2008/11/30(日) 22:00:56
かなりくだらない質問なんですが
皆さんbegin...endのbeginをどこにで書いてますか?
例えば
if hoge then
begin
hage;
end;

とか

if hoge then begin
hage;
end;
281デフォルトの名無しさん:2008/11/30(日) 22:07:05
>280
俺は上派だな。elseがある場合は下みたいな感じ。

if hoge then
begin
end else if mage then
begin
end else
begin
end;


VCL内でも統一した書式はないと思う。
282デフォルトの名無しさん:2008/11/30(日) 23:55:55
懐かしい議論だ。俺は下派。
283デフォルトの名無しさん:2008/11/30(日) 23:58:51
使ってるモニタ次第
UXGAでちまちま詰める必要はないし
ノートで縦にだらだら書いてたら確実に生産性が低下する
284デフォルトの名無しさん:2008/12/01(月) 00:02:59
モニタでいちいち書式かえたらよけい生産性が下がるわな・・
285デフォルトの名無しさん:2008/12/01(月) 00:15:54
以下のような書き方してる。
if hoge then begin
end
else if uge then begin
end
else then
end;
って書いてる。
ifのブロックとelseのブロックがend挟んで分離されるので、一目でどこまでがifのブロックか見分けることができると思う。

ただし、hogeが長くなったり複数行になる場合は、例外として、
if (hogeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee)
and (ugeeeeeeeeeeeeeeeeeeeeeeeeeeeeee) then
begin
end;
としてる。

beginが右の方に行き過ぎて、書いたかどうか分からなくなるから。
もし本当に書き忘れたり、うっかり削除すると、endの対応が一致しないってエラーに悩まされる。あと、思い込みのミスもあるし。
前回のコンパイルから時間が経ってると、どこ直したか忘れて、一カ所ずつ探すはめになるので。
こまめにコンパイルすればいいんだけど、気持ちよく書いている時って、しばしば忘れるんだよね。

また、質問と外れるけど、
if hoge then
syoti1;
syori2;
って書いちゃって、なんでsyori2が常に走るんだって、悩むことになるから、if hoge then Exitのような単純な場合を除いて、ぶら下がりインデントは使用しない様にしてる。
基本的には、自分は間違っていない!という思い込みのミスを避ける方向に書くようにしてる。
286デフォルトの名無しさん:2008/12/01(月) 01:56:00
パスカルの生みの親ビルトが頭弱かったから、汚い begin end がプログラムを醜くしてしまった。
単文、複文なんて、関係ないのにね。
まあ、おいらもバカだが、if 文は次のようなものが分かり易いと思っている。

<else 句がない場合>    <else 句がひとつある場合>    <else句が複数ある場合 ※ef はelseifの意>

if 条件式 then       if 条件式 then           if 条件式 then
  文                文                    文
endif              else                   ef 条件式 then
                    文                    文
                 endif                  ef 条件式 then
                                         文
                                      else
                                         文
                                      endif

287デフォルトの名無しさん:2008/12/01(月) 01:59:08

でも、endif も ef も予約語にないから、そこでおいらは次のようにしているんだ

<else 句がない場合>    <else 句がひとつある場合>    <else句が複数ある場合>

if 条件式 then begin   if 条件式 then begin       if 条件式 then begin
  文                文                    文
end               end else begin           end else if 条件式 then begin
                    文                    文
                 end                   end else if 条件式 then begin
                                         文
                                      end else begin
                                         文
                                      endif

これで begin end に目を奪われにくくなるんで、ちょいバグだしにくくなったかな(って気がしてるだけかも)。
288デフォルトの名無しさん:2008/12/01(月) 02:04:49
>>286 で書き忘れたけど、式の中の「文」は、単文でも複文でもいいと思ってくれ。
289デフォルトの名無しさん:2008/12/01(月) 10:31:39
if 条件 then
begin
end
else if 条件 then
begin
end
else begin
end;

よくこういう議論を見かけるが、俺と同じやり方の奴って
見たこと無いんだよなー
290デフォルトの名無しさん:2008/12/01(月) 10:32:54
お前は俺か
291280:2008/12/01(月) 11:43:21
皆さんありがとうございます。
よくbegin...endの数が合わなくてエラー出てたもんで皆さんはどんな感じで書いているのか気になったんです。
教えていただいたものを色々試してみたいと思います。
とても参考になりました。どうもありがとうございました。
292デフォルトの名無しさん:2008/12/01(月) 11:44:03
それはお前の頭が悪いww
293デフォルトの名無しさん:2008/12/01(月) 12:02:36
でもさ、前々から思ってたんだけど、
ALT+[とかで対応する括弧は追えるのに
なんでbegin/endは追えないんだろ?
294デフォルトの名無しさん:2008/12/01(月) 12:03:28
>>287
くだらねぇ、気持ち悪いルール使ってんじゃねぇよ。基本はdelphiならVCL、JavaならJavaのクラスライブラリ
のソースに合わせろよ。おまえらなみたいな奴のソースは見苦しくてかなわんわ。

295デフォルトの名無しさん:2008/12/01(月) 12:43:40
こういうのが沸くからアンケートネタはWikiの投票pluginかなんかを使ってやってくれ
296デフォルトの名無しさん:2008/12/01(月) 14:32:29
以下のように記述するのが正式だというのを海外のサイトで読んだことがある。
if 条件 then

else
if 条件 then

else
文;

if 条件 then
begin

end
else
begin

end;

文が短い場合は
if 条件 then 文 else 文;
って書いちゃうけどね。
297デフォルトの名無しさん:2008/12/01(月) 15:08:49
書き方に正しいも糞もあるかよww
298ななしへたぐらま ◆XcB18Bks.Y :2008/12/01(月) 16:29:02
>>286
QuickBASICやVisual Basicではまさにそんな感じの構文になっていて使いやすかったです。

>>293
C/C++の { } ほどの地獄ではないからかもしれません。
299デフォルトの名無しさん:2008/12/01(月) 17:54:25
>>286 のおいらだが、おいらが C++ 使いだったころ、次の#define プリプロセッサで >>286 の構文が
コンパイラー通るようにしていたんだ。

#define if     if(
#define then   ){
#define else   }else{
#define ef    }else if(
#define endif  }

てな感じだったけかな(?)。しばらくやってないんで忘れてしまったけどね。その他 for(;;) 構文なんかも
「 for 初期値 to 終了条件 step 増加式 do 文 endfor 」とか if と同じ要領でやっていた。
プログラムがスッキリしてたね。なんせ、おいら if や for の後の ( ) が大嫌いだったからね。
これいらないと思う。C言語作った男もおいらに負けず相当オタンコナスだね。
まあ、この構文(>>286)でソースコードを渡すと、相手はビックリしてたっけ。おいらもかなりバカだね。
300デフォルトの名無しさん:2008/12/01(月) 19:05:19
融通が利かない人はどんな職業でもいい発想ができない。
301デフォルトの名無しさん:2008/12/01(月) 19:30:57
case ofのかっこいい書き方を教えれ
どうもelseだけしっくりこなかったりする
302デフォルトの名無しさん:2008/12/01(月) 19:43:44
たしかにcase文はうざい
303デフォルトの名無しさん:2008/12/01(月) 19:50:59
case n of
    1:
        foo;
   
    2:
    begin
        bar;
    end;
   
    else
        baz;
end;
304デフォルトの名無しさん:2008/12/01(月) 20:13:24
case n of
1:
foo;

2:
begin
bar;
end;

else
baz;
end;
305Delフサギコ ◆A6VzDeLphI :2008/12/01(月) 21:52:39
  ∧,,∧∩  おれ、こんなん。
 ミ,,゚Д゚彡
 ミ つ旦.ミ  
   if then
   begin
   end else
   if then
   begin
   end else
   begin
   end;

if が何個ならんでも、行頭を揃えたい気がするのです。
Caseはいつも悩む。
ifを、caseに変更したときに、begin...endをわざわざ
インデント変更したくないから
  case A of
  B:
  begin
  end;
  C:
  begin
  end;
  end; //case

かな。。行が増えすぎと、caseのendとbeginendが分けにくくていやなのだが。。
306デフォルトの名無しさん:2008/12/01(月) 23:27:22
おいらも case 文は苦手だったな。どうやってもキレイに書けない。しかし、だいたい次のようにやってた。(case の範囲を字下げではっきりさせたいんだな、おいら)

case A of
  B: 文  
  C: begin
      文;
      文
    end
  D,E: 文
  else 文
end

case 文を 「case A of :値: 文 :値: 文 end 」とビルトが設計すればよかったかもね、次のようにスッキリする。(「文」は単文でも複文でも可だよ)
case A of
  :B:  文
  :C: 文;
     文
  :D,E: 文
  else 文
end
307デフォルトの名無しさん:2008/12/01(月) 23:34:44
気持ち悪い
308デフォルトの名無しさん:2008/12/01(月) 23:42:18
caseの中はcaseより引っ込める
ラベルの中身も引っ込める、begin-endの中も引っ込める
ラベルの後ろにbeginを書くと、対応するendもおなじインデントに書きたい
横に伸び〜
309デフォルトの名無しさん:2008/12/01(月) 23:43:14
case〜endの間を字下げで解決。
310デフォルトの名無しさん:2008/12/01(月) 23:44:53
typeのクラス宣言内のprivateなprocedureとか、自動生成で変なインデントを付けられた日にはもうー
311デフォルトの名無しさん:2008/12/01(月) 23:47:30
record型のconstの配列の初期化の記述がめんどくさい
コンパイラサボりすぎ
312デフォルトの名無しさん:2008/12/01(月) 23:51:10
>>308
おいらもおんなじ気持ちだけど、これやるとインデント深くなるんだよなあ。
だからおいらはインデントをスペース3文字分にしてるんだが、それでも深くなる。
これがインデントがスペース8文字分で表示された日にゃー目がぶっ飛ぶ。
313デフォルトの名無しさん:2008/12/02(火) 08:08:53
え!Del党ってインデントはスペース2文字でしょ。
314デフォルトの名無しさん:2008/12/02(火) 08:42:41
オレは2文字だな。
if 〜 then begin
 文
end else if 〜 then begin
 文
end;

case i of
 1 : begin
    文
   end;
end;
315デフォルトの名無しさん:2008/12/02(火) 08:51:14
caseとelseとendをそろえてる。
caseに関しては自動インデントを使わずなるべく詰める様にしている。
17インチCRTからの流れで横も縦も圧縮する様な書き方になってしまった。
ifなんかでも改行してbeginの方が見やすいのに。
316デフォルトの名無しさん:2008/12/02(火) 09:22:53
>>305
ifが常に行頭だと、別のif分と区別がつきにくいから嫌だな

case分は無駄にインデントが増えるな

case hoge of
 A:
  begin
  end;
 B:
  begin
  end;
 else
end;

これでやると、else内だけインデントがずれるのがむかつく
317デフォルトの名無しさん:2008/12/02(火) 09:23:34
if分、じゃなくてif文だし、case分じゃなくてcase文
orz
318デフォルトの名無しさん:2008/12/02(火) 11:01:35
>>313-314
インデント2文字でやってみたことあるんだけど気に入らなかったんだな、おいら。
なぜかっていうと、(一番多用される)if文のときインデント2文字だと

i f a = b then begin
c:= 2;
........

のようになって、この例で説明すると変数 a と c の頭が揃わないので美しくない。それに
if の近くに変数 c がありすぎて if が窮屈に見える。これをインデント3文字にすると

i f a = b then begin
  c:= 2;
  ........

となって、こっちの方がスッキリして見えるんだな、おいらの目には。(if文重視なんで)
まあ、バカなおいらの好みだけどね。
そんで、クラス宣言の自動生成がインデント2文字固定なんで、苦労してる。
319デフォルトの名無しさん:2008/12/02(火) 11:05:18
秋田
320デフォルトの名無しさん:2008/12/02(火) 11:07:07
>>318 の最初の例が崩れてたから訂正するね。

if a = b then begin
 c:= 2;
 ........

(2ちゃんは左側の半角スペース取っちゃうんだよね.....。)
321デフォルトの名無しさん:2008/12/02(火) 13:14:15
インデントは2文字。
if文は>>305に同じ。
大規模なcase文などではソースを折りたためるようにREGIONを使う。
case hoge of
 A: {$REGION '説明'}
 begin
 end; {$ENDREGION}
 B: {$REGION '説明'}
 begin
 end; {$ENDREGION}
else
end;
322321:2008/12/02(火) 13:19:47
あ、if文は>>305とは微妙に違った。
if then
begin
end
else if then
begin
end
else
begin
end;

個人的には、else(else if) 〜endまでの処理を消したり、
begin〜endまでの複数行の文を単数行の文に書き換える際に自然だからこれで落ち着いた。
323デフォルトの名無しさん:2008/12/02(火) 18:24:36
どうせソースの書き方なんて十人十色なんだからいい加減飽きろよ
324デフォルトの名無しさん:2008/12/02(火) 18:26:21
新しい話題を提供しろよw
325デフォルトの名無しさん:2008/12/02(火) 18:36:34
>324
「CodeGear RAD Studio 2009 日本語版」販売開始だって
326デフォルトの名無しさん:2008/12/02(火) 21:47:10
delphiはなかなか良い言語だとは思うけど
C++ライクに記述できるような仕組みがあれば、いいなぁ。
あと、delphiにC++を埋め込めるようにできれば、なおよし。
begin〜endはうざい。
あと、function/procedureと区別する意味がわからん。
C++歴5年、delphi歴3ヶ月より。
327デフォルトの名無しさん:2008/12/02(火) 21:52:56
C++に、Pascalライクに記述できたらいいなあ。
なんて言われたら、ウザッとか思わない?
328デフォルトの名無しさん:2008/12/02(火) 21:55:28
DLLとかC++ Builderとか使えば出来るけどね
329デフォルトの名無しさん:2008/12/02(火) 21:55:43
>>327 そんな需要はないから。
delphiでC++ライクに使えれば、ポインタ使いまくれるし
C++脳の人間にとっては、とても楽。
330デフォルトの名無しさん:2008/12/02(火) 21:56:14
でもちょっと違うか
331デフォルトの名無しさん:2008/12/02(火) 21:56:52
>>329
それは工夫が足りないんじゃね?
332デフォルトの名無しさん:2008/12/02(火) 21:59:10
C++記述するときにはいつも
「もっとDelphiライクなら・・・」
って思っちゃう俺はアホなのかもしれん^^;
333デフォルトの名無しさん:2008/12/02(火) 22:00:59
じゃあおまいらどんな記述がいいのよ
334デフォルトの名無しさん:2008/12/02(火) 22:21:56
教えてください。

既存のプロジェクトなのですが、DataModuleのSession,Aliasのアイコンが半透明に
なっています。
実行するとデータベースに接続するところで異常終了します。
つなげるべきデータベースはわかっているのですが、どのように設定したらよいので
しょうか。
335デフォルトの名無しさん:2008/12/02(火) 22:28:21
Pythonが綺麗って言われてるよね。

Delphiと似てるからすぐに使えるようになるよ。
336デフォルトの名無しさん:2008/12/02(火) 22:28:27
begin
end

{
}
ならDelphiが無敵
337デフォルトの名無しさん:2008/12/02(火) 22:34:17
if True then {
MessageBox(Handle, 'test', 'test', MB_OK);
};
こうですか分かりません><
338デフォルトの名無しさん:2008/12/02(火) 23:07:14
むしろBegin〜endの方が俺は見やすくて好きw


変態ですので
339デフォルトの名無しさん:2008/12/02(火) 23:10:48
Begin〜endよりbegin〜endのがよっぽど見やすい
340デフォルトの名無しさん:2008/12/02(火) 23:48:59
細かいやつって嫌われるよな
341デフォルトの名無しさん:2008/12/02(火) 23:58:26
C++のコードは見づらい
342デフォルトの名無しさん:2008/12/03(水) 00:01:42
>>340
C++は嫌われて無いじゃないですか
343デフォルトの名無しさん:2008/12/03(水) 00:38:28
CoolBarの行を1行固定にしたいんだけどどうすればいいの?
アイコンバンド1、アイコンバンド2、検索窓の3つ設置。
実行してCoolBandを弄ってると必ず2行目が出来てしまう。
344デフォルトの名無しさん:2008/12/03(水) 00:42:07
C++ の :: と -> がウザイ。
345デフォルトの名無しさん:2008/12/03(水) 01:02:04
俺も
346デフォルトの名無しさん:2008/12/03(水) 11:57:27
フォーム上の末代までのコントロール数をカウントする方法ってあります?
347デフォルトの名無しさん:2008/12/03(水) 12:12:58
Form1.ComponentCount
子供の子供まで数えたい時はComponents使って再帰とかすればいい
function CountFunc(Compo: TComponent): Integer;
var
I, Count: Integer;

procedure SaikiFunc(Compo: TComponent);
var
I: Integer;
begin
for I := 0 to Compo.ComponentCount - 1 do
begin
Inc(Count);
SaikiFunc(Components[I]);
end;
end;

begin
Count := 0;
SaikiFunc(Compo);
Result := Count;
end;
348デフォルトの名無しさん:2008/12/03(水) 15:51:56
教えてください。

Nscripterで集積エフェクトを使いたいのですが,

lsp 0,"****.jpg",208,32
print 99,3000,"breakup.dll/ulP"

これだと左,中央,右の指定ができず困っています。
どうしたらいいですか?
349ななしへたぐらま ◆XcB18Bks.Y :2008/12/03(水) 18:01:45
>>347
それだと非ビジュアルコンポーネントまでカウントしてしまうので
> if Components[i] is TControl then
みたいに絞り込むか ControlCount/Controls を使うと良いと思います。

>>326
Delphiはプログラミング教育用に生まれたPascalの血を引いた言語ですから
わかりやすさを捨てることはないでしょうね。

逆にPascalのbegin〜endがうざかった人間が作ったのがCですから
突き放したような結論で恐縮ですが
「Delphiのbegin〜endがうざいならCPB使え」
ということになってしまうのではないかと思います。
(…なあんてことを書いたときに限ってDelphi2010あたりで{}が実装されたりして)
350デフォルトの名無しさん:2008/12/03(水) 21:11:09
そういえば昔、SQL Anywhere というデータベースを使ったことがあったが、
そのストアードプロシジャーは if文が
  if 条件 then 文1 else 文2 end
という構文で、文1と文2は単文でも複文でも begin end が不要だったな。
ありゃあ見やすいし、書きやすかった。
begin end や { } なんて過去の遺物、消え去るよ。
351デフォルトの名無しさん:2008/12/03(水) 21:19:41
graphics32ってMPL1.1ですけど、改造しないで普通に使用して公開する場合は
ソースを公開する必要はないと聞きますけど
ここの ttp://ja.wikipedia.org/wiki/Mozilla_Public_License
特徴のところで
バイナリ形式で配布する場合には、ソースをバイナリと一緒に公開しないと
いけないみたいな事かいてるんですけどどっちが本当ですか?
352デフォルトの名無しさん:2008/12/03(水) 21:39:55
>>349

どれのことだ

http://ja.wikipedia.org/wiki/CPB

CPB

* ビルマ共産党
* キャンベル・スープ・カンパニーのNYSEコード。
* 公共放送機構 (Corporation for Public Broadcasting)
* セントラル・パシフィック・バンク
353デフォルトの名無しさん:2008/12/03(水) 21:57:27
BCBだな
354デフォルトの名無しさん:2008/12/03(水) 22:42:57
>>351

Delphi持ってるならGLSceneを使え
http://pc11.2ch.net/test/read.cgi/tech/1163269079/

の 25 辺りから見るとよいよー
355351:2008/12/04(木) 04:45:25
>>354
やっぱりソースは公開しなくても良いんですね
おかげでスッキリしました、ありがとうございます
356ななしへたぐらま ◆XcB18Bks.Y :2008/12/04(木) 16:30:30
すいません、思いっきり略称間違えました… orz
357デフォルトの名無しさん:2008/12/05(金) 02:03:30
onKeyDown や onKeyPress などを使って、
『キーの同時押し』を検知する方法ってありますか?

たとえばAlt + Tab を検知するなど。
358デフォルトの名無しさん:2008/12/05(金) 02:36:22
Downならif Shift = [ssAlt] thenで
359デフォルトの名無しさん:2008/12/05(金) 18:41:49
GetAsyncKeyStateはだめ?
360デフォルトの名無しさん:2008/12/06(土) 00:02:20
同時押しの検出ならGetKeyStateかShiftパラメータでは?
361デフォルトの名無しさん:2008/12/06(土) 09:00:10
Del7+Win2000
フォームを半透過指定してフォーム上のコンポーネントは非透過ってのは可能?
Transparentみたいな色指定透過っぽい感じ
362デフォルトの名無しさん:2008/12/06(土) 10:45:21
Pascal を C++ っぽくしろって、
日本語は英語と同じ文法にしろっていうような門やん
363デフォルトの名無しさん:2008/12/06(土) 15:16:53
>>362
Begin...Endの事?
そうは思わないな…
日本語だって英語の良いところはカタカナという形で吸収するんだから
コメントと文法くくりはBegin、{両方サポートしてくれたら私もうれしいな。
でもそうなると過去のソースが動かなくなるわけで、そこまでして言語仕様を拡張することには反対
結果として{は無理だと思うけど。
コンパイラ指令で切り分けできたら面白いすね、デフォルトはOFFで。
364デフォルトの名無しさん:2008/12/06(土) 15:45:26
TEditの枠線の色を赤色に変えるにはどうしたらいいでしょうか?
よろしくお願いします。
365デフォルトの名無しさん:2008/12/06(土) 15:51:45
OSの管轄なので無理
あるいはオナニードロドロ
366364:2008/12/06(土) 15:58:30
早速回答ありがとうございます。
ちょっと変えてくれと言われたんだけど厳しそうだし、
見た目の問題だけなのでそのまま放置しますw
367デフォルトの名無しさん:2008/12/06(土) 16:00:53
>>364
一回り大きいPanelに乗せてPanelの色を変える
368デフォルトの名無しさん:2008/12/06(土) 16:12:37
>>366
ならそいつにVSでも変えてろハゲとでも言ってればいい希ガス
369デフォルトの名無しさん:2008/12/06(土) 19:18:45
Delphi2006でヘルプを使いDelphi終了すると、タスクにdexplore.exeが残り、
再びDelphi2006起動してヘルプを使いDelphi終了すると、タスクにdexplore.exeが2つ残り、
とドンドンdexplore.exeがタスクに増えて行きます。(OSはXPです)
これって、メモリーけっこう食ってますが、Delphiのバグでしょうか?
370デフォルトの名無しさん:2008/12/06(土) 21:16:21
dexplorerのバグでしょう、きっと。
371デフォルトの名無しさん:2008/12/07(日) 09:41:05
VS だとそんなことないから Delphi のIDEのバグじゃないの?
372デフォルトの名無しさん:2008/12/07(日) 11:49:41
食わせてるデータがまずいからだとは思うんだけど、それで逝っちゃうようなのはやっぱりバグだと思うんだ。
DelphiのIDEはDExplorerをキックしてるだけだしね。ちなみにXPで発現することが多いみたい。
373デフォルトの名無しさん:2008/12/07(日) 16:17:50
Borland Developer Studio 2006 (Professional)をデフォ状態でDelphi使うと
ヘルプにC++の内容まで検索されてウザイ。
C++の内容が検索されなくなる設定ができるかどうか調べても未だに分からない。
どなたかHELP!
374デフォルトの名無しさん:2008/12/07(日) 19:34:12
それが円馬鹿クオリテー
375デフォルトの名無しさん:2008/12/08(月) 02:15:33
フィルタ条件ではあかんのか
376デフォルトの名無しさん:2008/12/08(月) 09:20:16
6とかだとヘルプファイルの検索対象の範囲とか設定できるんだけどねぇ‥‥
CLXのヘルプ外したりとか。
377デフォルトの名無しさん:2008/12/08(月) 11:59:47
ヘルプはひどいな
リンクも不十分だし、欲しい情報になかなかとべん
378ななしへたぐらま ◆XcB18Bks.Y :2008/12/08(月) 17:35:10
旧ボーランド時代からヘルプは良くなかったですねぇ。
初代Delphiの頃はまだ良かったのですが…

>>367
さらにEditを枠無しにしたら完璧ですね。
379デフォルトの名無しさん:2008/12/09(火) 16:44:35
>>378
やってみたけど枠を消すと文字がずれて、枠有りの状態のようにはいかなかった。
380ななしへたぐらま ◆XcB18Bks.Y :2008/12/09(火) 17:47:19
確かにうまくいきませんでした。

赤パネル
 Editと同じ色のパネル
  Edit

の三段重ねでEditの位置を調整してなんとかそれらしく?なりましたがなかなか骨の折れる作業です。
複数貼り付けるならアンカーを使ったり赤パネルの代わりに赤フレームにすると作業効率は多少ましになるかもしれませんが
AutoSizeが利かなくなるのかフォントサイズを変えてもウィンドウサイズが変わらないのはつらいですね。
381デフォルトの名無しさん:2008/12/09(火) 18:32:27
そんなことするよりTCustomEdit継承して新しく作った方が楽じゃない?
382デフォルトの名無しさん:2008/12/09(火) 20:53:08
初心者質問お願いします。
DateTimePickerにMaxDateを設定している時、
プログラムでDateTimePickerのDate プロパティにMaxDateと同じ日付を代入することはできないのでしょうか?
手動ではMaxDateの日付を設定できます。
当方Delphi4です。

〜例〜
(MaxDate は2008/12/31と設定している)
DateTimePicker1.Date := StrToDate('2008/12/30'); ・・・日付が反映される
DateTimePicker1.Date := StrToDate('2008/12/31'); ・・・日付が反映されない
DateTimePicker1.Date := StrToDate('2009/1/1'); ・・・日付が範囲を超えているとエラーが出る
(手動で2008/12/31を設定することはできる)
383デフォルトの名無しさん:2008/12/09(火) 21:23:34
TEdit も TDateTimePicker もウィンドウズのコントロールだから、その機能は
本質的には Delphi と関係ない。MSDN 読むほうがいい。 >>381 は馬鹿回答。
384382:2008/12/09(火) 21:49:28
>>383
そうでしたかぁ。
ありがとうございました。
385デフォルトの名無しさん:2008/12/10(水) 00:48:07
>382
Timeプロパティに何が入ってるか確認したほうがよいかも。
386デフォルトの名無しさん:2008/12/10(水) 08:21:07
>>373
俺も2006でDelphiだけが表示される正式なヤリ方がしりたい。

前にどこかを見てやったときは、ヘルプのアプリ?がバグバグで
設定したのに設定したことにならなかったり嫌になった覚えがあるな。
しかし、どうやって設定したか憶えてなくて困る。
Delphiヘルプのみってのが確かできたはずなんだが。

6の時はテキスト弄るだけで簡単だったけどな。
387382:2008/12/10(水) 13:20:42
>>385
Timeプロパティを00:00:00にしたら正しく動きました!
ありがとうございました!
388デフォルトの名無しさん:2008/12/11(木) 00:17:14
TEditの枠のありなしでサイズが変わるのはVCL内で実装されているから、
継承してサイズが変わらないようにすればおk
それ以前にコントロールは自分でも描画できるから、簡単に枠を描画することが可能
↓にサンプルがある
http://www.delphipages.com/threads/thread.cfm?ID=171344&G=171334
VCLはただWindowsコントロールをラップしてるだけでなく独自のコードも追加してるし、
>>383はかなり見当違いの回答なので初心者は参考にしないようにね
389デフォルトの名無しさん:2008/12/11(木) 00:22:03
2006ではDelphi以外のHELPも(親切に)表示するのが仕様ということでハイ {{{{(+_+)}}}}。
(アーーーーめんどくさい)
しかし、こんな簡単なことがデフォでできてないなんて、何なのこの会社?
390デフォルトの名無しさん:2008/12/11(木) 00:24:47
教えてください。MediaPlayerを使って1から9までの動画をランダムにつなげて流すというプログラムを作っています(例えば2→5→8→1→3→9→4→7→6の順番で動画を流してくれるようなプログラムです)
とりあえず作ってみたのですがボタンを押してもうんともすんとも動きません。ここが間違ってる、こうしたら良いなどのアドバイスをいただけたらと思います。よろしくお願いします

var
cou,new,test,i:Integer;
video:Array[1..9]of integer;
procedure TForm1.Button2Click(Sender: TObject);
begin
cou:=cou+1;
if cou>9 then exit;
Randomize;
new:=Random(10);
repeat
test:=0;
For i:=1 to cou do
if new=video[i] then test:=1;
If test=1 then new:=random(10);
until test=0;
video[cou]:=new;
MediaPlayer2.FileName:=ExtractFilePath(application.ExeName)+'tabidachi'+IntToStr(new)+'.wmv';
MediaPlayer2.Open; MediaPlayer2.Notify:=True; MediaPlayer2.Play;

procedure TForm1.MediaPlayer2Notify(Sender: TObject);
if (MediaPlayer2.DeviceID <> 0) and (new < 10) then
begin
MediaPlayer2.FileName := ExtractFilePath(application.ExeName)+'tabidachi'+IntToStr(new)+'.wmv';
MediaPlayer2.Open; MediaPlayer2.Play; Inc(new);
end;
391デフォルトの名無しさん:2008/12/11(木) 00:44:39
宿題でダイヤモンドパターンのプログラムがあるのですが教えてください!!!!
392デフォルトの名無しさん:2008/12/11(木) 00:45:27
couの初期値って何なの?
393デフォルトの名無しさん:2008/12/11(木) 03:01:18
>>388 そうなんですか。それで変な動作をするんですね・・ TEdit くらい単純なラッパーの方がいいのに。
394386:2008/12/11(木) 10:02:34
ヘルプの編集思い出した。
編集というか、デフォルトのフィルタを変更するだけだけど

「ヘルプ」→「フィルタの編集」
(フィルタなし) を選択して、例えば以下を突っ込んで Save

("DevLang"="Delphi") OR ("DocSet"="bds_Win32") OR ("DocSet"="PSDK") OR ("DocSet"="indy")

これで、デフォルトでDelphiとBDS Win32とPlatformSDK、Indy 10からしか検索されない。

根本的にいらないヘルプをはずすわけではなく、
実質、起動時にフィルタを選択しているのでヘルプ起動時少し重いが難
395386:2008/12/11(木) 10:06:04
根本的に削除する方法みつけた。これでいけるんじゃね?

ヘルプを登録しなおすには:某所:So-net blog
http://bousyo.blog.so-net.ne.jp/2006-01-09

某所 - C++Builder のヘルプを削除するには
http://bousyo.blog45.fc2.com/blog-entry-91.html
396386:2008/12/11(木) 10:08:25
ああ、やべえ、 >>394 はやらん方がいいわw
(フィルタなし) に Saveすると、以下の様にでて元に戻せなくなるわw

---------------------------
Windows Internet Explorer
---------------------------
Filter cannot be saved without a definition
---------------------------
OK
---------------------------

欠陥ヘルプww
397デフォルトの名無しさん:2008/12/11(木) 10:22:02
>>396 の問題は、deleteで(フィルタなし)を削除しようとしたら大丈夫だった

>>395のヘルプの編集はうまくいった。
以下C++と.NETの削除の方法 for Vista。

まずは、適当なフォルダに %PROGRAMFILES%\Borland\BDS\4.0\Help\Common\mergeWin32.xml をコピー。
以下のパッチを当てる。(といっても該当行を削除するだけ)

--- mergeWin32.org.xml  2005-11-14 10:00:00.000000000 +0900
+++ mergeWin32.xml      2008-12-11 10:12:02.910931700 +0900
@@ -10,16 +10,13 @@
 <CompiledIndex>Help\Win32\bds4Win32devguide.HxI</CompiledIndex>
 <CompiledIndex>Help\Win32\bds4Win32tasks.HxI</CompiledIndex>
 <CompiledIndex>Help\Win32\bds4Win32api_win32.HxI</CompiledIndex>
-<CompiledIndex>Help\Win32\bds4Win32api_cpp.HxI</CompiledIndex>
 <HelpTopic>Help\Win32\bds4Win32guide.HxS</HelpTopic>
 <HelpTopic>Help\Win32\bds4Win32devguide.HxS</HelpTopic>
 <HelpTopic>Help\Win32\bds4Win32tasks.HxS</HelpTopic>
 <HelpTopic>Help\Win32\bds4Win32api_win32.HxS</HelpTopic>
-<HelpTopic>Help\Win32\bds4Win32api_cpp.HxS</HelpTopic>
 </FileList>
 <Filters>
 <Filter Name="Developer Studio 2006 for Win32">"DocSet"="bds_Win32"</Filter>
-<Filter Name="Language: C++">"DevLang"="C++"</Filter>
 </Filters>
 </Merge>
 </helpConfig>

(つづく)
398デフォルトの名無しさん:2008/12/11(木) 10:24:29
同じフォルダに以下のregHelp.batファイルを作り、管理者権限で実行

copy mergeWin32.xml "%PROGRAMFILES%\Borland\BDS\4.0\Help\Common"
"%PROGRAMFILES%\Borland\BDS\4.0\Help\Common\regHelp.exe" -7
"%PROGRAMFILES%\Borland\BDS\4.0\Help\Common\regHelp.exe" 5

おもむろにヘルプを起動すると、しばらく後適用された状態で検索ができる

                   / ̄\
                  |     |
                   \_/
                 __|___
                 /        \
                  /         \
                    l            | 
              (             |
                   \       〃_/
                 >'⌒ ̄ ̄、,\
                /         \
               /  ィ     ,ノ'ヾ ヽ
                (   /  ),      l
                  ) ノ _,/    、,,  |
                /⌒ ̄ ̄ ̄          |
            l  、_          ,ノ ,/
          | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
.            └┬:‐┬───┬‐────┘
            ノ ,‐‐,)      丿,‐‐,)          ┼ヽ  -|r‐、. レ |
           (,∠/       (,∠/           d⌒) ./| _ノ  __ノ
399デフォルトの名無しさん:2008/12/11(木) 10:39:17
>>397
念のため編集前に mergeWin32.xml はバックアップを取っておいた方がよいです
400デフォルトの名無しさん:2008/12/11(木) 12:52:35
>>394-399
サンキューベリーマッチ!  m(_ _)m
401390:2008/12/11(木) 13:28:48
>>392さん
初期値は設定していません。設定しないとうまくいかないんでしょうか?

引き続きご回答いただければ幸いです。よろしくお願いします
402デフォルトの名無しさん:2008/12/11(木) 13:33:07
cou:=cou+1;
の行にBreakPointを置いて、実行。

止まったときのcouの値は?

cou:=0;
で初期化しないとだめじゃないの?
自動で0にしてくれたっけ?
403390:2008/12/11(木) 13:57:43
>>402さん
cou:=0;で設定し、ブレークポイント置いて実行してみました
couは1で止まってしまっているみたいです…
404デフォルトの名無しさん:2008/12/11(木) 14:22:02
ランダムに再生の前に、普通に再生は出来るの?
video: array[1..9]of Integer に適当に数値を入れて、再生させると再生できるの?
それとも、それでも再生できないの?

ランダムの部分がいけないのか、再生部分がいけないのかの切り分けはしましたか?
405ななしへたぐらま ◆XcB18Bks.Y :2008/12/11(木) 14:41:32
>>402
ローカル変数は初期化されません(0にしてくれません)。
だから自分で初期値として0を代入しなければなりません。
ちなみにグローバル変数は初期化されます(0にしてくれます)。

たまたま0になっているときもありますがこれを当て込んではいけません。
406390:2008/12/11(木) 14:42:17
>>404さん
ボタンを押しても何も起きません。読み込みもしてくれなくてうんともすんともです
再生部は問題ないようです。前半部のランダムの部分が良くないようです
説明不足な点が多くすみません
407デフォルトの名無しさん:2008/12/11(木) 14:50:19
この板の上の方にBINGOの問題があって、
そこで同じようにランダムに数値を並べる例が出てるから、みて見れば?

その例にそってvideo[1..9]にちゃんとランダムに数値を入れるところまで、
頑張ってみようよ。
408デフォルトの名無しさん:2008/12/11(木) 16:18:31
Del7でバックグラウンド、最小化状態のウィンドウを
フォアくグラウンドに持ってきたくて
http://www.swissdelphicenter.ch/torry/showcode.php?id=261
のコードを組み込んでみたところ
バックグラウンドからは成功したものの
最小化状態からはフォアグラウンド化できません。
どうやればいいんでしょうか。
409デフォルトの名無しさん:2008/12/11(木) 22:52:35
マウスのホイールをフックしたいのですがホイールの上下を感知することってできるのでしょうか?
410デフォルトの名無しさん:2008/12/11(木) 23:00:56
すみません
wParamを見ればいいことがわかりました
お騒がせしました
411デフォルトの名無しさん:2008/12/13(土) 03:08:36
var a: array[0..10] of Byte;
みたいな感じで定義した配列に、@a[0]を対象にMoveMemoryとかをやっても大丈夫なんですか?
配列はメモリ上で常に連続しているものなんですか?
Cardinal型とByte型の配列を相互に入れ替えるとき、Moveは面倒くさくて
412デフォルトの名無しさん:2008/12/13(土) 03:40:11
連続して無いとFileName: array[0..MAX_PATH] of Char;とか使えなくなる
ので連続してるだろう
413デフォルトの名無しさん:2008/12/13(土) 18:39:04
すみません!!!
0から1の乱数randomを200回発生させ、第1項から200項目までの和、その平均、二乗和を求めるプログラムを穴埋めで回答するように。
という課題がわかりません↓↓
教えてください!!
なお、和はedit1、平均はedit2、二乗和はedit3に出力するものとし、
s: 和
ss: 二乗和
 r: 0 から1の乱数をいれる変数
av:  平均値       とする。
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
s,ss,r,av:real;
begin
s:=[(1)];
ss:=[(2)];

[(3)] i:=1 to [(4)]
[(5)]

r:=random;

s := s+ [(6)];
ss:= ss + [(7)];
end;
av:=s/[(8)];
edit1.text:=[(9)];
edit2.text:=FloatToStr(av);
edit3.text:=[(10)];
end;

}
414413の続き:2008/12/13(土) 18:42:22
和の値(小数点以下3桁目を四捨五入する)
平均の値(小数点以下3桁目を四捨五入する)
二乗和の値(小数点以下3桁目を四捨五入する)
も是非是非お願いします!!!!
415デフォルトの名無しさん:2008/12/13(土) 18:44:36
これぐらい分からないとしょうがないぞ
0
0
for
do
begin
i
i*i
200
s
ss
416デフォルトの名無しさん:2008/12/13(土) 18:46:11
おれも出来てなかった
417デフォルトの名無しさん:2008/12/13(土) 18:47:08
自力で解く気ゼロだな
418デフォルトの名無しさん:2008/12/13(土) 18:54:21
5にrandomize入れてしまったw
4はdo beginで
419390:2008/12/13(土) 22:00:35
>>407さん
いろいろとアドバイスいただきありがとうございました。お礼が遅くなり申し訳ありません
420デフォルトの名無しさん:2008/12/13(土) 22:34:48
>>413
宿題スレはこちら
Pascalの宿題は俺にやらせろ!!Part2
http://pc11.2ch.net/test/read.cgi/tech/1136994325/
421デフォルトの名無しさん:2008/12/13(土) 23:40:05
宿題を丸投げする413が教授に怒られますように
ニヤニヤ
422デフォルトの名無しさん:2008/12/13(土) 23:44:44
大学でDelphi習うところあるんだね
423デフォルトの名無しさん:2008/12/14(日) 00:05:58
どっちかというとDelphiというよりはPascalだろーけどな
424デフォルトの名無しさん:2008/12/14(日) 00:09:20
Delphi2006でファイルメニューの「開き直す」を選んだとき、過去のプロジェクトがたった4件しか表示されません。
これだと、ちょっと別のプロジェクトをいじっていると肝心のプロジェクトが表示されなくなったりして面倒です。
そこで「開き直す」プロジェクト数を増やそうと思ってオプションを見ましたが、該当するパラメータが見つかりませんでした。
このようなプロジェクト数を増やす設定は可能でしょうか。
425デフォルトの名無しさん:2008/12/14(日) 01:53:01
>>424
それは俺も不便に思ってる。

スタートページも確かパス表示なしな上に、
プロジェクトの履歴少ないよな
426デフォルトの名無しさん:2008/12/14(日) 04:33:00
>>424
プロジェクトのショートカットをデスクトップにでも作っておけ
427デフォルトの名無しさん:2008/12/14(日) 06:18:44
ショートカットだと、もう一個IDEが起動する(´・ω・`)ショボーン
428デフォルトの名無しさん:2008/12/14(日) 11:26:28
Delphi2006なら
HKEY_CURRENT_USER\Software\Borland\BDS\4.0\Closed Projects
を書き換えるだけのソフトを作っておけばいい
コマンドラインにプロジェクトファイルをくっつけて
429デフォルトの名無しさん:2008/12/14(日) 11:42:52
それって簡単?
430デフォルトの名無しさん:2008/12/14(日) 11:45:35
簡単かどうか試せばいいんじゃね?
431デフォルトの名無しさん:2008/12/14(日) 12:04:00
ActiveProjectsとかいうフォルダにショートカット作っておいて
タスクバー右クリツールバーの登録で指定して
>>から起動したいファイルをIDEにドラッグドロップすれば開けるんじゃね。
432デフォルトの名無しさん:2008/12/14(日) 12:41:52
>>430
やってみたけどIDE起動してると効かないみたい。そしてIDE終了さ
せるときエラーになる。
IDE起動してない状態で書き換え、IDE起動させれば確かに効くけど、
IDEの再起動が面倒かな。
433デフォルトの名無しさん:2008/12/14(日) 13:18:43
>>431
やってみた。

ショートカットだと .lnk ファイルが開かれるだけ。

実プロジェクトファイルだと、現行プロジェクトを非アクティブにしてプロジェクトグループに追加される。
しかし、元々関係ないプロジェクト同士でプロジェクトグループにすると、どのユニットが何がなんだか分か
らなくなる。
434デフォルトの名無しさん:2008/12/15(月) 08:39:54
いくつものスレッドでメインスレッドにある一つの配列をいじくる場合って衝突する危険性があると思います
どうやって衝突を回避するんですか?
435デフォルトの名無しさん:2008/12/15(月) 08:50:37
>>434
補足です
その共通に使う配列は構造体の配列でaddしたりDeleteしたりする関数を呼ぶ事で操作しています
スレッドから操作関数をよぶときにどこかが呼んでいる時は待つ、みたいなことができればいいと考えています
どうすればそういうことができるのでしょうか?
436デフォルトの名無しさん:2008/12/15(月) 09:40:13
mutexやCriticalSectionで衝突する可能性のあるコードを保護する。
TCriticalSectionでも使っとけ。
437デフォルトの名無しさん:2008/12/15(月) 12:17:00
下記スレッドの説明から


異なるスレッドが所有する VCL または CLX のメソッド/関数/
プロパティを別のスレッドの中から扱う場合、排他処理の問題が
発生します。

メインスレッドの所有するオブジェクトに対しては Synchronize
メソッドを使う事ができます。他のオブジェクトを参照するため
のメソッドをスレッドクラスに追加し、Synchronize メソッドの
引数として渡します。
438デフォルトの名無しさん:2008/12/15(月) 13:43:44
>>434 >>437
玄人ではありませんし、add,deleteの頻度にもよりますが、add,deleteが1秒内に何十回も発生するなら
そのたびにSynchronizeを多用するとスレッド化のメリットが失われますのでいかがなものかと思います。
その場合、私なら全配列を丸々コピーしてスレッド内処理後、Synchronizeもしくはterminate後に元にコピーします。
当然、メモリー効率は犠牲にします。
低頻度ならそのたびにSynchronizeで良いのでは?
439デフォルトの名無しさん:2008/12/15(月) 14:04:42
>>438
>434
>いくつものスレッドでメインスレッドにある一つの配列をいじくる場合
ということなので、各スレッドがコピーして保持し処理後にリストアするならばスレッドにする必要が無いと思う

>Synchronizeを多用するとスレッド化のメリットが失われます
メリットはまさに衝突回避なのだと思うけど、ここで頻度については議論の外でいいのでは?

まー後は434さんが実装して確認するのがはやいわな
440ななしへたぐらま ◆XcB18Bks.Y :2008/12/16(火) 01:20:02
>>411
亀ですが、言語仕様では

 「静的配列はその配列の要素型の連続した変数の並びとして格納されます」

とあります。

わかりにくいのですが「連続した変数の並び」ということなので
連続して並んでいることを保証していると考えて良いと思います。
441デフォルトの名無しさん:2008/12/16(火) 04:00:12
動的配列は連続してないかも、ってそんなことあるかいな・・
442デフォルトの名無しさん:2008/12/16(火) 09:53:45
動的配列はポインタ1個だから、1つのメモリブロックしか扱えない。
だから連続してないってことはありえない。
443デフォルトの名無しさん:2008/12/16(火) 10:44:42
初期化にFillCharルーチンなんぞを使ってるけど、動的配列や静的配列が
どんなに大きくてもここ数年まったく問題なく動いていますんで、間違い
なく連続してると思いますヨ。
444デフォルトの名無しさん:2008/12/16(火) 18:16:34
case文のelseはbegin,endでくくらなくてもOK?
case i of
1: aa;
2: bb;
else
cc1;
cc2;
end;
445デフォルトの名無しさん:2008/12/16(火) 18:21:38
ok
446ななしへたぐらま ◆XcB18Bks.Y :2008/12/16(火) 19:42:58
し、知りませんでした… orz

Delphi 4とDelphi 5の言語ガイド「case文」の項を見るとひとつの文しか記述出来ないような文面なのですが
Turbo Delphi Explorerのヘルプ「宣言と文」の項を見ると複数の文を記述できるという内容が書いてありました。
しかし試してみたところDelphi 5とTurbo Delphi Explorerの両方でコンパイルが通ってかつすべての文が実行されるのを確認しました。

case 文の else 以降にbegin〜endを付けなくて良いとなるとコードもかなりすっきりしそうですね。
447デフォルトの名無しさん:2008/12/16(火) 20:28:16
VCLのソース読むとかなり参考になるよ
例えばwith分で,で区切って複数の変数を使える
var


Edit: TEdit;
Button: TButton;
begin
中略
with Edit, Button do

Caption := Text;// ButtonのCaptionをEditのTextに設定
end;
これを知らないと
with Edit do with Button do〜とか書くことになる
448デフォルトの名無しさん:2008/12/16(火) 20:30:33
俺も知らなかった
でもcase文ってそんなに使わないよねってか使えないよねcase文って
449デフォルトの名無しさん:2008/12/16(火) 20:38:12
縁の下の力持ちってとこだろう
450ななしへたぐらま ◆XcB18Bks.Y :2008/12/16(火) 20:58:11
>>447
私がVCLのソースを参考にしたものはこんな感じです:

・TStringsとその派生クラス
・TCollection/TCollectionItemとそ(ry
・Resultをループ変数に使う


>>448
          ( ))))))))))))
        //(;;;`∀´;;;)  使うんだな、それが!
         /     \
      __| |     | |___
     ||\   ̄ ̄ ̄ ̄     
     || \   -●-●
451デフォルトの名無しさん:2008/12/16(火) 21:28:59
case文使わなかったら、if then地獄になるじゃん
452デフォルトの名無しさん:2008/12/16(火) 21:42:49
相変わらずドキュメントがだめだなぁ
453デフォルトの名無しさん:2008/12/16(火) 21:51:30
ならWikiか何かで強力なドキュメント作っておくれよ
454デフォルトの名無しさん:2008/12/16(火) 22:46:44
何かでcase文よりIF文の方が早いって見てから、ずっとifelse羅列してる俺がいる。
455デフォルトの名無しさん:2008/12/16(火) 22:56:55
どう考えても逆w

5万で組んだマシンがあまりにも速すぎてゲーム以外では持て余し気味で
もうプロファイルも取らずに局所的な高速化を試みることもなくなったな。
456デフォルトの名無しさん:2008/12/16(火) 22:57:32
そんな超微量な時間のために可読性を捨てるのもちょっとな
457デフォルトの名無しさん:2008/12/16(火) 23:44:29
多態を使えばcaseの出番は減る。

多重なwithはスコープを不明確にするので控えめがお勧め。
458デフォルトの名無しさん:2008/12/17(水) 00:03:35
withって読みづらいからいらない
459デフォルトの名無しさん:2008/12/17(水) 00:49:01
case sender of
 btn1 : 〜;
 btn2 : 〜;
 btn3 : 〜;
end;
とかいつかは出来るようになると思って早・・・3.0からかな。
まぁ無理なんだけどね。なんかcase文って惜しいイメージ。
勿論多用する派。
460デフォルトの名無しさん:2008/12/17(水) 01:42:08
他の方法で
461デフォルトの名無しさん:2008/12/17(水) 02:56:24
case TButton(Sender).Tag of
 1 : 〜;
 2 : 〜;
 3 : 〜;
end;

で済ますかな自分なら。
462デフォルトの名無しさん:2008/12/17(水) 09:21:06
ヘルプ「宣言と文」を見てみたらひでえな。
コードが読みづらいし、間違ったセミコロン付いてるし。
463デフォルトの名無しさん:2008/12/17(水) 10:28:34
リストに格納した構造体のポインタを使う時なんかは、
いちいちキャストしなきゃならないのがうっとうしいからWith使うなぁ
464デフォルトの名無しさん:2008/12/17(水) 10:34:09
>>462
elseやendの前のセミコロンのことか?
それだったらずっと以前に拡張になったことと記憶してるが。
465デフォルトの名無しさん:2008/12/17(水) 10:49:03
いつからif文のelseの直前にセミコロン付けても良くなったんだ??
466デフォルトの名無しさん:2008/12/17(水) 10:54:32
>>463
昔作ったプログラムを後から見たとき、長い複文にwith使ったところ
は理解するのに一苦労した。これに懲りて今では例えば

var a:Hoge ← HogeHogeHogeHogeと同じオブジェクト型とする。
  .........
begin
  ..............
  a := HogeHogeHogeHoge;
  a.Nanchara := .....;
  a.Kanchara := .....;
  Dotchida(a.Nanchara);
  ..............
のようにして、with HogeHogeHogeHoge begin 〜 end の代わりにしてることが多い。
でも、withもたまに(短いとこに)は便利に使ってるよ。
467デフォルトの名無しさん:2008/12/17(水) 11:01:52
withを使うと効率がよくなると聞いたが。

a.hoge1 := 0
a.hoge2 := 0
a.hoge3 := 0

は毎行aを参照するコードが走るけど、

with a do
でくくるとaを参照するコードが1回で済む

という感じだった。
468デフォルトの名無しさん:2008/12/17(水) 13:09:45
コード行数は少なめに短くがモットーの俺はアンチwith
ループで何万回実行するとかじゃない限りそんな些細なことは気にしないな・・
469デフォルトの名無しさん:2008/12/17(水) 13:55:23
>コード行数は少なめに短く
これも些細なことだと気づかないのか?
470デフォルトの名無しさん:2008/12/17(水) 14:01:40
速度は計測しない限りわからんけど、コードは見ればすぐわかる
ソースは昔のものでも結構参照するし(俺は)、易読性が最重要
471デフォルトの名無しさん:2008/12/17(水) 14:05:53
Label1.Left := 10;
Label1.Top : = 100;
Label1.Caption := 'hogehoge';
Label1.Font.Hoge := hogehoge;
Label1.Font.Size := 13;



with Label1 do
begin
 Left := 10;
 Top : = 100;
 Caption := 'hogehoge';
 Font.Hoge := hogehoge;
 .Font.Size := 13;
end;

で、withがない方が見やすいんですね?
それなら良いんじゃないでしょうか。
472デフォルトの名無しさん:2008/12/17(水) 14:08:12
俺はね
そもそもbeginで改行するのすら許せない神経質
473デフォルトの名無しさん:2008/12/17(水) 14:16:00
>>472
ははは、笑った。それならそれを突き通すんだ!
誰も文句は無いですよ。
474デフォルトの名無しさん:2008/12/17(水) 14:42:58
コードは少ない方がいい。

そう思っていた時期もありました・・・
475デフォルトの名無しさん:2008/12/17(水) 14:45:36
改行は多いほど見やすい
長い文は二行に

そう思ってた時期が、俺にもありました
476デフォルトの名無しさん:2008/12/17(水) 15:00:35
>長い文は二行に
これは、今でもそうですね。
ただ、長い文になる事が無いように気を使ってコーディングしますけど。

>改行は多いほど見やすい
これは、ネタでも笑えないね。
477デフォルトの名無しさん:2008/12/17(水) 15:14:39
2chの書き込みでも無駄に改行いれて書き込むおかしな人がいるが
そういう類の人じゃないだろうか?
478デフォルトの名無しさん:2008/12/17(水) 15:24:57
コンパイルされると最適化されるからどっちでもいい
479デフォルトの名無しさん:2008/12/17(水) 15:59:55
with do
を使う・使わないでコンパイルされるものが違うんでしょ?

最適化されないんでしょ?違うのかな?
教えてください。識者の方。
480デフォルトの名無しさん:2008/12/17(水) 16:10:52
同じ参照が続いたコードなんだから、コンパイルで最適化されると思うけどね
481デフォルトの名無しさん:2008/12/17(水) 16:11:29
var
 alias: TMyType;
begin
 alias := foo.bar.baz;
 alias.aaa;
 alias.bbb := 1;
 alias.ccc;
end;



with foo.bar.baz do
begin
 aaa;
 bbb := 1;
 ccc;
end;

と同じ。

foo.bar.baz.aaa;
foo.bar.baz.bbb := 1;
foo.bar.baz.ccc;

とは異なる(可能性がある)。
プロパティbazがgetbazを呼んでいる場合
上二つは1度呼ばれ三つめは3度呼ばれる。
速度が遅くなるだけではなく副作用で実行結果すら異なることもあり得る。
482デフォルトの名無しさん:2008/12/17(水) 16:42:31
>>481さん
ありがとうございます。

>上二つは1度呼ばれ三つめは3度呼ばれる。
なので、withを使った方が速度的には有利。

>副作用で実行結果すら異なることもあり得る。
この副作用ですが、withを使ったが為に起こると解釈してもいいでしょうか?
withを使わないと副作用が出ますというようなコードはいかがなものかと思うのですが・・・

483デフォルトの名無しさん:2008/12/17(水) 19:20:53
>>446
俺も知らなかったのでテストしてみたら新たな疑問が
上と下でSenderが変わってしまうのは何故?
procedure TForm1.Button1Click(Sender: TObject);
begin
  with (Sender as TButton) do
  begin
    case Tag of
      0:Caption:='ゼロ';
      1:Caption:='いち';
    else
      Caption:='たくさん';
      ShowMessage('てすと');
    end;
    Tag:=Tag+1;
  end;
end;

  with (Sender as TComponent) do
にするとフォームのキャプションが変わる?
484デフォルトの名無しさん:2008/12/17(水) 19:30:36
Delphi の最適化はあまり当てにならないんだよね。

昔、サンプルプログラムにビットマップイメージをなるべくキレイに縮小する
コードがあったが、これは実数を使って計算していてあまりに遅いので整数に
直して数十倍のスピードにしたことがあった。ところが、面白いのは、プログ
ラムに、拡大ルーチン(縮小ルーチンとは別のプロシジャ)を組み込むと、若干
だが縮小の処理遅くなった。(拡大ルーチンは呼び出してない!!)

どうも、Delphiの最適化は、プログラムが小さいときは処理スピードが上がるように
最適化し、プログラムが大きくなるときは、処理スピードを犠牲にしてもプログラム
サイズが小さくなるようにしているみたいなんだ。
(これは Delphi2006とDelphi7で確かめた)

ま、だいたい1割くらいだったかな、遅くなったの。(ちょっとがっかりした)
485ななしへたぐらま ◆XcB18Bks.Y :2008/12/17(水) 20:06:45
>>458
with文は最近使うようになりました。たとえば

 Nantoka.Kantoka.Untara.Kantara.Options := Nantoka.Kantoka.Untara.Kantara.Options + [opHoeHoe, opHanyaan];

みたいな文だと

 with Nantoka.Kantoka.Untara.Kantara do
  Options := Options + [opHoeHoe, opHanyaan];

と読みやすく感じます。
最近のDelphiのIDEは入力補完でもwith文に対応してくれているようなので昔よりは使いやすいと思います。
何行にもわたる場合やwith a, b, c do とか書かれると私の場合は逆に混乱してしまいますので使いません。

>>483
TComponentにはTagはありますがCaptionはないからです。

with (なんとか) do のブロック内では
コンパイラはできる限り(なんとか)に対する記述であると解釈します。
そしてそのように解釈できない場合はwith文を使わないときと同じように解釈します.

そのため with Sender as TComponent do とした場合、
このwithブロック内で単にTagと書かれている場合には
TComponentにはTagプロパティがあるので
コンパイラはSender as TComponentのTagだと解釈します。

一方でこのwithブロック内で単にCaptionと書かれている場合には
TComponentにはCaptionプロパティがないので
コンパイラはwith文を使わないときと同じようにTForm1のTagだと解釈します。
486デフォルトの名無しさん:2008/12/17(水) 20:09:42
>>485
(最後の行)
>コンパイラはwith文を使わないときと同じようにTForm1のTagだと解釈します。
コンパイラはwith文を使わないときと同じようにTForm1のCaptionだと解釈します。
487デフォルトの名無しさん:2008/12/17(水) 20:12:27
with を使うときは、何がどれに属しているかちゃんと知っていないとあぶない。
488デフォルトの名無しさん:2008/12/17(水) 20:14:11
Delphi7で思考が止まってるけど、withって、コード補完が効かなくない?
なので、withは使わない様にしてる。

設定が足りないだけ?
489デフォルトの名無しさん:2008/12/17(水) 21:05:33
そもそもDelphiのヘルプにObject PascalのBNFの記述がないのがおかしいんだけどな。
CodeGear腐ってる。

490デフォルトの名無しさん:2008/12/17(水) 22:03:18
Synchronizeって引数付き関数呼べないよね?
引数付きの関数を呼ぶ場合どうすれば・・・
491デフォルトの名無しさん:2008/12/17(水) 22:05:41
あ、メインスレッドでクリティカルセクション作っておいて、対象関数をEnterとLeaveで挟めば同じことかな?
492デフォルトの名無しさん:2008/12/17(水) 22:18:11
>>491
気をつけないといけないのは、
メインスレッド側でも、サブスレッドで触る変数とかはクリティカルセクションで
ロック(?)しとかないといけない。
読み込むだけ、ならなくてもよい場合(1つの変数の値をよむだけとか)もある。
書き込むものは、しっかりとロックしとかないといけない

こういうのやるときはいきなり本番環境でやらずに、
簡単なスレッドのテストプログラムを作ってテストしてみるのがよいよ。
ポイントは(テスト駆動開発じゃないけど)必ず失敗するように組んでから、
成功するように組むとテストしやすい。
493デフォルトの名無しさん:2008/12/17(水) 22:23:18
なるほど。
ってか変数読むだけならクリティカルセクション要らないんですか?
読んでる最中に書き換えが起こると可能性があるとしても?(書き換え側は保護してるとして)
494デフォルトの名無しさん:2008/12/17(水) 22:36:05
サブスレッド側で値を書き込み
Synchronize中でメインスレッドから読みだすなら問題なし。
VCLが絡まないならCriticalSectionでももちろんいい。

>ってか変数読むだけならクリティカルセクション要らないんですか?
>読んでる最中に書き換えが起こると可能性があるとしても?(書き換え側は保護してるとして)

実際に遭遇したことはないけどマルチコア環境ではおかしくなるらしい。
495デフォルトの名無しさん:2008/12/17(水) 22:54:16
念のため両方保護しておきます
>>492さん>>494さんありがとうございました
496デフォルトの名無しさん:2008/12/17(水) 23:27:07
もう一つ質問すみません
クリティカルセクションはSyncronizeみたいにメインスレッドで実行するわけじゃないので、共用変数ごとに複数作っても問題ないですよね
もちろん保護内では共用変数は一つしか使わないという条件でです
497デフォルトの名無しさん:2008/12/18(木) 00:16:02
>>496
もちろん可能だけど、(上で出た with のように)ちゃんと設計しないと
恐い恐いデッドロックに遭遇するので要注意です。
498デフォルトの名無しさん:2008/12/18(木) 14:00:11
>>489

昔、breakやcontinueが「手続き」扱いで、びっくりしたことがある。
499デフォルトの名無しさん:2008/12/18(木) 15:51:50
>490
Synchronizeは子スレッドで使用するので子スレッド内のPrivate変数を利用すればok、また参照だけならSynchronize
は必要ないですSynchronizeはあくまでメインスレッドの変数更新時の衝突回避なので
500デフォルトの名無しさん:2008/12/18(木) 16:35:21
>>499
かなり昔のことで忘れたが、Synchronize で引数付き関数が呼べると「便利だなあ〜」などと思ったことがある。
コンパイラが頑張ってくれればできそうなものだと思うけど、間違ってる?
501デフォルトの名無しさん:2008/12/18(木) 17:08:37
スレッドはTThreadをラップしてコンポーネント化してしまうと便利。
OnExecuteイベントハンドラにスレッドのコード書いて
FormのPrivateフィールドの変数を好き勝手に読み書きできて
そこからSynchronizeメソッドを呼ぶとOnSynchronizeイベントが呼び出されるようにして
UseThreadプロパティをFalseにするとサブスレッドを使わずメインスレッドからOnExecuteが実行されるように
小細工してロジックのバグを事前に潰しておくとデバッグがかなり楽になる。
502デフォルトの名無しさん:2008/12/18(木) 19:19:57
なるほどね、コンポーネントにするところまでは考えなかった。
Threadを使うのに便利そうなUnitは作ったことあるけど、なんせ、マルチスレッド
にするプログラムはそう滅多になかったんで、(そのUnitは)どっかでカビが生え
たまま消滅してるはず。(ずーっと見てもいない)(^_^;
そういえばこの2年間シングルスレッドぱっかだなオレ。
503ななしへたぐらま ◆XcB18Bks.Y :2008/12/18(木) 19:35:08
>>486
その通りでございます orz
ありがとう!
504458:2008/12/18(木) 23:44:56
>>485
ありがとうございました
単なる私の不注意だったようですねお恥ずかしい

>>488
with内の[ItemIndex]は昔から効きませんね
505デフォルトの名無しさん:2008/12/19(金) 09:28:39
>>501
コンポ化は便利そうだけど、イベントとして書くと貼り付けたFormのpas内に
コード書くことになるから、なんとなく抵抗があるな
スレッドは別処理するためにスレッドにすることが多いし、それだけで
ひとつのpasにまとめたい気分
506デフォルトの名無しさん:2008/12/19(金) 09:33:42
>>501
それはいいかもね。
ちょっとした、TTimerのマルチスレッド版みたいな感覚かな。

MMTimerってのもあったけど、まあ、あれにはSynchronizeがなかったからな
507デフォルトの名無しさん:2008/12/19(金) 09:54:41
>>505
つ TDataModule
508デフォルトの名無しさん:2008/12/19(金) 21:08:05
TRegExprでExpressionに指定した正規表現が正しいか確認する方法はあるでしょうか?
Compileの例外を監視するとかですかね?
509デフォルトの名無しさん:2008/12/21(日) 18:39:58
Del7でTMyForm作ってpublishedなプロパティ、イベントハンドラを追加して
それをフォームデザイナに反映させる方法ってない?
510デフォルトの名無しさん:2008/12/21(日) 19:08:00
>>509
パッケージにするとか
511デフォルトの名無しさん:2008/12/21(日) 21:43:26
>>509
フォームデザイナに反映させる時は、どうしてもIDEに組み込む必要があって
コンポーネントとかの形にしないといけないみたい
動的にはできないんだよな・・・
512デフォルトの名無しさん:2008/12/21(日) 22:58:34
>>510-511
パッケージ化すればできちゃうの?
普通にコンポーネントとして登録すると
新規作成ででてくるのかな。
513デフォルトの名無しさん:2008/12/21(日) 23:23:07
>509
ない。
あきらめろ(冷たいようだけど)。
514デフォルトの名無しさん:2008/12/23(火) 01:06:16
TRegExprでテキストファイルの空行を削除するには、どうすればよいでしょうか?
^$とかではマッチしないし、(\r\n){2,}を\r\nに置き換えようとすると、そのまま\r\nが
表示されます・・・

515デフォルトの名無しさん:2008/12/23(火) 01:27:44
>>514
^¥r¥n$だとどう?
516514:2008/12/23(火) 01:34:30
>>515
即レスありがとうございます。
それでもマッチしません。
置換の方は、#13#10としてもダメです・・・
517デフォルトの名無しさん:2008/12/23(火) 02:07:29
518514:2008/12/23(火) 06:19:49
(?m)^\r\nでマッチするようになりました。
お騒がせしました。
519514:2008/12/23(火) 07:16:29
続けてすみません。
置換後の文字列に改行を含むようにするにはどうすればよいか
分かりますでしょうか?
#13#10とすると、#13#10がそのまま表示されます。
520デフォルトの名無しさん:2008/12/23(火) 07:21:53
'hogehoge'#13#10'fugafuga'
521デフォルトの名無しさん:2008/12/23(火) 09:52:55
'hogehoge'+sLineBreak+'fugafuga'
522デフォルトの名無しさん:2008/12/23(火) 10:15:36
sLineBreakって何で存在するの?
#13#10の方が短くていいじゃん
523デフォルトの名無しさん:2008/12/23(火) 10:29:00
・数字の羅列よりも意味がわかりやすい
・将来、改行コードが変更されても対応しやすい
そんなところかと。
524514:2008/12/23(火) 10:37:55
>>520-522
できました。
ありがとうございました。
525デフォルトの名無しさん:2008/12/23(火) 17:12:04
>>523
追加:
・マジックナンバーつかうような奴とは仕事したくない、という奴と仕事ができる
526デフォルトの名無しさん:2008/12/23(火) 17:37:39
じゃあ使わなくても何の問題もないな
527デフォルトの名無しさん:2008/12/23(火) 21:58:23
>424
むちゃくちゃ遅レスでもう見てないと思うけど、こんなん見つけた。
Andy’s Blog and Tools ? Increase the number of MRU items
ttp://andy.jgknet.de/blog/?page_id=198
528デフォルトの名無しさん:2008/12/24(水) 12:52:47
HTMLパーサのコンポーネントでオススメのものありますか?
529デフォルトの名無しさん:2008/12/24(水) 17:58:20
delphiに標準でついているコンポーネントのコンポーネントパレットに出ているアイコンの
画像を取りたいのですが、これらの画像はどこかのフォルダにあるんでしょうか?
delphi4です。
530デフォルトの名無しさん:2008/12/26(金) 19:15:08
Print Screenキーでどうでしょ
531デフォルトの名無しさん:2008/12/26(金) 21:43:48
そんなフォルダはないです? www
532デフォルトの名無しさん:2008/12/26(金) 21:45:58
ない
533デフォルトの名無しさん:2008/12/27(土) 19:10:18
ずっとFlashな仕事してましたが、またDelphiします。来年もよろしくです!
534デフォルトの名無しさん:2008/12/28(日) 14:38:17
すいません、年の瀬に質問します。

memoの最大表示文字数を設定しようと思います。
ネットで調べて、以下の方法でできるらしいというところまできました。
Memo1.Perform(EM_SETLIMITTEXT, 32*1024, 0);

ここで実行しようとするとエラーが発生いたしました。
EM_SETLIMITTEXTが認識できないらしいです。
なにかしらインクルード(Cの表現でごめんなさい)する必要があると
思うのですが、どうすればいいのかわかりません。

useの場所に何を追加すればいいのでしょうか?
535デフォルトの名無しさん:2008/12/28(日) 14:54:55
Messagesかな
536デフォルトの名無しさん:2008/12/29(月) 00:49:21
ソースを grep すると、なにを uses するべきかわかるよ。そのほかにも grep で得られる情報は多い。
537デフォルトの名無しさん:2008/12/29(月) 02:01:28
grepっつうかファイル検索だな。
538534:2008/12/29(月) 09:55:58
ありがとうございました。
解決しました!
539デフォルトの名無しさん:2008/12/29(月) 11:39:58
「WOLF RPGエディター」とは? 
・高度なRPG開発が可能な、完全無料のゲーム作成ツールです。
・製作者はなんと「モノリスフィア」やツクール2000でシルフェイド幻想譚などを製作した
 SmokingWOLF氏だよ。
・雰囲気はRPGツクール2000に近い。RPGツクール2000で自作システムを作りこむ際に
 不満だったところがいろいろ解消されていて、かなり自由度が高いです。ただし
 その分初心者には難しいかも。すでにツクール2000で自作システムを組むのに
 慣れた人やRPGツクールでは物足りないけどプログラミングはちょっとという方にお勧め。
・作成したゲームは自由に配布したり、コンテストに投稿することも可能。
 また本ソフトを持たない人でもプレイ可能!ファイル暗号化も完備してるよ!
・要望、不満点、バグ報告などなど書き込みお願いします。今もどんどん進化中です。
・それとマップやキャラなどのドット素材もじゃんじゃん募集中ですので
 一度サイトにお越しくださいませ。
・このツールで作ったゲームをサイトで紹介してるから、ダウンロードしてどういう
 ゲームが作れるのか見てみてね。

2ちゃん本スレ
http://pc11.2ch.net/test/read.cgi/gamedev/1229261856/l100
540デフォルトの名無しさん:2008/12/31(水) 13:10:08
英語版Delphiでも日本語(SJIS)表記したいのですが、
文字列リテラルで16進数で書く場合ってどう書いたらいいんでしょうか?
10進数だと #13#10 みたいにかけばいいみたいですが・・・
541デフォルトの名無しさん:2008/12/31(水) 13:11:15
ああ、#の後に$でいいのか
#$13#$10 みたいに書いたらいけました
ありがとうございました。
542デフォルトの名無しさん:2008/12/31(水) 13:29:44
ついでに質問なのですが、WideStringでの10進数16進数での文字列リテラルは
どうかけばよいのでしょうか?
543デフォルトの名無しさん:2008/12/31(水) 13:41:36
>>542
const Str: WideString = #$30ED#$30B0;
でいけました。
#$30#$EDじゃなくて、 #$30ED にしないといけないのですね。
ハマりました。


実は最終的にこれがやりたかったのですが、
英語版などのDelphiで、
WideStringからSJIS(string)への変換は可能なのでしょうか?
日本語版DelphiだとWideStringからstringへ代入するだけで
暗黙に変換してくれると思うのですが、英語版だと変換されないのですよね?

英語版が手元にないので憶測なのですが、
自前の変換ルーチンを用意するしかないのでしょうか?
544デフォルトの名無しさん:2008/12/31(水) 14:57:49
>>543
こちらのWideCharToMultiByte をラップしたライブラリを使ったところ
WideStringからSJISへの文字コード変換ができました!

Delphi用文字コード変換ユニット「SkTextCoder」
http://www.asahi-net.or.jp/~qz1s-kmy/softlib/sktextcoder.htm

お騒がせしました。ありがとうございました。
545デフォルトの名無しさん:2008/12/31(水) 15:24:23
ひとり漫才みたいだなぁ
546デフォルトの名無しさん:2008/12/31(水) 16:07:45
ちゃんと解決策まで書いてくれれてありがたい
547デフォルトの名無しさん:2008/12/31(水) 16:10:12
聞く前に落ち着いて考えようって事だな
548デフォルトの名無しさん:2008/12/31(水) 19:05:08
少数を分数表示にしたいのですが、どうやったらいいのでしょうか?
549デフォルトの名無しさん:2008/12/31(水) 20:37:38
ターボ デルファイをダウンロードしたけど
シリアルナンバーがなかった・。・・
550デフォルトの名無しさん:2008/12/31(水) 20:50:46
すみません、ありました
残り35711日
がんばらねば
551デフォルトの名無しさん:2009/01/01(木) 01:07:02
>>529
Delphi4 で開発している人がいるんだ…。
オッチャスレ行ったら、お布施払わないから
Del使いなのにアンチ扱いされるかもww

漏れの古いマシンにも Delphi4 入ってたんで、ちょっと調べてみた。
$(DELPHI)\Bin ディレクトリの dclstd40.bpl というファイルに、ビット
マップリソースとして入ってるみたい。

その他の bpl は、コンポーネントパレットを右クリックして「プロパティ」
で出てくるウィンドウの「ページ」を選ぶと、対応するパッケージ名が
表示されるっぽい。

LoadLibrary で dclstd40.bpl のハンドルをゲットして(終わったら
FreeLibrary も忘れずに)、TBitmap.LoadFromResourceName で
ロードすると、ビットマップが取れた。
ただ、 MAKEINTRESOURCE を使って番号で指定したら、取れなかった。
だから、ビットマップをロードするためには、そのテキスト名が必要らしい。
DOS窓で

  tdump dclstd40.bpl

とやって、「TACTIONLIST」とか「TANIMATE」とか書いてあるのがリソースの
テキスト名。これは ResourceHacker を使っても取れた。
ResourceHacker を使うと、ビットマップも読み出してファイルに保存できる
けど、著作権の問題があるだろうから、あまりお勧めできない。


>>494
> 実際に遭遇したことはないけどマルチコア環境ではおかしくなるらしい。
全ての書き込みをロックしてるはずなのに「おかしくなる」って…。
それじゃ、CriticalSection の意味がないんじゃないの。
552デフォルトの名無しさん:2009/01/01(木) 01:55:15
>>548
簡単なやり方でいいのなら、

MSN相談箱 0.15を分数にする方法
http://questionbox.jp.msn.com/qa1569976.html

とか。
553 【1558円】 :2009/01/01(木) 02:03:58
Delphiプログラマの月給
554デフォルトの名無しさん:2009/01/01(木) 03:57:25
ネタじゃなく>>553にx100するとそんなもんだわorz
地方のしがないソフトハウスの数少ないDelphi案件担当。
555 【大吉】 :2009/01/01(木) 04:54:44
Delphiの将来
556 【1637円】 :2009/01/01(木) 05:02:26
>>554の賞与
557デフォルトの名無しさん:2009/01/01(木) 16:10:58
>>548
まず整数部分を分離して、小数部分だけにする。
次に、その小数が有限小数なのか、循環小数なのか、無限小数なのかをチェックする必要がある。
実際には数値誤差があるせいで最後あたりの桁がちゃんと循環してない場合もあるので、
最後あたりの桁は循環チェックから外した方がいいかもしれない。
あと、倍精度小数で表現できる桁数は32ビット整数よりも多いので、
分母も分子も倍精度小数(でも保存する値は整数)で表現した方がいい。
また、コンピュータは内部的には2進数で扱っているので、2進数で全てをチェックする必要がある。
以下、全ての数は2進数で表記する。

・ 有限小数の場合
例えば 0.00101 とすると、これは 101/100000 だというのはすぐ分かると思う。

・ 循環小数
例えばこんな感じで循環していたとすると、
x = 0.111010010 111010010 111010010 111010010 ......
1000000000 倍すれば
1000000000 x = 111010010.111010010 111010010 111010010 111010010 ......
となって、差をとると
111111111 x = 111010010
となって、つまりは
x = 0.111010010 111010010 111010010 111010010 ...... = 111010010 / 111111111
となる。
簡単に言えば、循環している部分を分子に、
循環している部分と同じ桁数の 1111...1 を分母にすればいいだけ。
1111...1 は 10000...0 - 1 なので作るのは簡単なはず。

・ 無限小数の場合
実際にはビット数が決まってる以上どの小数も有限なんだけど、
最初から最後まで桁が埋まっていて、循環性も認められない場合は、無限小数と考えたので良い。
これは分数にはできないとしてもいいし、
一応ビット数が決まっている以上有限なのだから有限小数なのだとして、有限小数と同じ扱いにしてもいい。
558デフォルトの名無しさん:2009/01/02(金) 05:47:08
>>556
1.3ヶ月分ス
559デフォルトの名無しさん:2009/01/05(月) 09:53:53
Delphi5でグリッドにDBから料金を表示させた場合に
表示した料金に三桁ごとのコンマを付けたいんですが、どうしたらいいですかね?

(すみません;ホントに初歩から分かりません;;)
560デフォルトの名無しさん:2009/01/05(月) 10:09:37
1000なら>>559の質問に答える人が現れる。
561デフォルトの名無しさん:2009/01/05(月) 10:13:09
>>559
FormatFloatかFormatCurrでどうかな?
562デフォルトの名無しさん:2009/01/05(月) 12:47:08
>>559
DisplayFormat
563デフォルトの名無しさん:2009/01/05(月) 13:51:43
>>559
D6で申し訳ない
Gridは文字列なので文字列にしないとだめですね
TstringGridにはMaskEditがあるので、これでも調整できそうだけど、とりあえず表示だけであれば、Gridに追加するときに

StringGrid1.Cols[2].Add(Format('%10m',[001230.00]));
StringGrid1.Cols[2].Add(Format('%10n',[001230.00]));

んな感じでどうぞ
%mとかの形式文字列については,形式文字列を参照してくださいということです
(Format 関数のヘルプより)
564デフォルトの名無しさん:2009/01/05(月) 14:37:21
Delphi6 Personal使ってます。
ComboBoxでドロップダウンしたとき、同じ文字列が複数はいってると
ただしく選択が行われません。

procedure TPlayerForm.Form1Create(Sender: TObject);
begin
ComboBox1.Items.Add('Test0');
ComboBox1.Items.Add('Test1');
ComboBox1.Items.Add('Test2');
ComboBox1.Items.Add('Test3');
ComboBox1.Items.Add('Test0');
ComboBox1.ItemIndex := 4;
end;

上のコードを実行してComboBoxをドロップダウンすると下記のような結果になります。

Test0 ←コレが選択される
Test1
Test2
Test3
Test0 ←4番目を選択したい

正しく動作するようにするにはどうすればいいでしょうか?
565デフォルトの名無しさん:2009/01/05(月) 14:42:58
意味がよくわからんがitemindex=4になる
566564:2009/01/05(月) 15:31:50
コンボボックスの矢印ボタンを押してドロップダウンリストを表示すると
itemindexの項目が青く選択されると思うんですが
それが正しく選択されないんです。
567デフォルトの名無しさん:2009/01/05(月) 15:58:15
CombBoxのStyleをcsDropDownList にしてみるとかしてみそ
それで幸せになれるかもしれん
568564:2009/01/05(月) 16:22:52
文字入力がしたいのでstyleの変更はできません。
選択したい項目に改行コード入れることこで誤魔化しておきました。
569デフォルトの名無しさん:2009/01/05(月) 18:42:50
>>559
グリッドがDBグリッドなら、DBグリッドダグルクリックして、列名設定するウインドウを表示させる。

列を追加、選択し、Formatだかのプロパティで、「,0」とかすれば多分おk

もしくは、データセットの列でも同様にできた希ガス。

うろ覚えですまん
570デフォルトの名無しさん:2009/01/06(火) 11:09:59
誰か以下のプログラムを作ってくれない?

・何個かのデータをもらい、入力と逆の順に表示する(最後に入力されたデータが最初に表示される)プログラム

初心者には難しすぎる
571デフォルトの名無しさん:2009/01/06(火) 11:12:08
>>570
初心者じゃなくてもそれだけの情報では難しすぎる
エスパーさんしかできませんね
572デフォルトの名無しさん:2009/01/06(火) 11:31:08
>>570
#include <stdio.h>
int main(void) {
int i, n, a[1024];
printf("データの個数: ");
scanf("%d", &n);
if (n > 1024) {
printf("データが多すぎます。\n");
return 1;
}
for(i = 0; i < n; i++)
{
printf("%d番目のデータ: ", i + 1);
scanf("%d", &a[i]);
}
printf("逆順で表示:\n");
for(i = n - 1; i >= 0; i--) printf("%d\n", a[i]);
return 0;
}
573デフォルトの名無しさん:2009/01/06(火) 12:51:24
パスカルとは思えない命令ですね
574デフォルトの名無しさん:2009/01/06(火) 14:03:42
>>570
for文でdownto使うだけじゃね?
575デフォルトの名無しさん:2009/01/06(火) 14:11:20
TStackを実用したことのある奴の数↓
576デフォルトの名無しさん:2009/01/06(火) 15:07:15
turbo visionすら使いこなせなかったな
577デフォルトの名無しさん:2009/01/06(火) 22:14:38
qdirもどきを作ってみたいんだけど
ウィンドウのタイトルバー部分をホイールクリックしたかどうかの判定ってどうやればいいんですか?
578デフォルトの名無しさん:2009/01/07(水) 00:06:22
delphiに付属するWinSightってツールで、ホイールクリックした時に送られるメッセージを確認する。

で、プログラムでそのメッセージをフックし、座標がタイトルバーだったら何か処理をすればいいんじゃね?

ざっと調べた感じ、メッセージはWM_MBUTTONDOWN / WM_MBUTTONUPっぽい気がする。
579デフォルトの名無しさん:2009/01/07(水) 01:19:26
 すんません。ちと教えてください。
 Delphiで C言語のsprintfみたいな関数って無いですか?
 Writeのメモリ出力 or String出力でもいいんですが。
 複数の整数・実数・文字列をカンマで区切った文字列を
作りたいんです。
 いちいちキャストしては文字列に追加していくしかないんですかね?
580デフォルトの名無しさん:2009/01/07(水) 01:35:40
>>579 Format
581デフォルトの名無しさん:2009/01/07(水) 01:51:10
>>579
TStringListに突っ込んで、CommaTextで取得
582デフォルトの名無しさん:2009/01/07(水) 01:52:36
>> 580
ありがとう!!
583デフォルトの名無しさん:2009/01/07(水) 01:56:28
>> 581
そういう手段もあるんですね。
 今回は1クラスにつき一文字列しか作らないので
Formatを使おうと思いますが、次のステップで使えそうなので
参考にさせてもらいます。
 ありがとう!! 
584デフォルトの名無しさん:2009/01/07(水) 01:58:58
訂正:1クラス→1インスタンス
585デフォルトの名無しさん:2009/01/08(木) 22:51:45
THogeHoge = object
public
   A: integer;
   procedure Untara;
end;

という昔のスタイルのオブジェクトは初期化する必要がないので気に入って使っています。
しかし、これを次の例のような手続きKantaraの局所変数にするとTHogeHogeのインスタンスAは
自動的に初期化されないので、初期化したいときは明示的に初期化する必要があります。

procedure Kantara;
var
   h :THogeHoge;
begin
   h.A := 0; //明示的に初期化
   h.Untara;
   …
end;

このように明示的に初期化しなくても自動的に初期化する方法ってあるのでしょうか?
(あれば、たーーーーいそう便利だと思うんですが)
586デフォルトの名無しさん:2009/01/09(金) 00:16:17
YTさんとか、ふさねこのところでそんなような話題があったな・・・
あれは、recordのdestroyを自動で呼ぶ話だっけ課?
587デフォルトの名無しさん:2009/01/11(日) 00:41:52
Delphi6 Personalを使用しています。
Splitterをフォームに貼り付けた際の初期のサイズを変更したいのですがどのようにすればいいでしょうか?
588デフォルトの名無しさん:2009/01/11(日) 01:14:54
Splitter自身の太さってことならコンポーネントテンプレートに登録。
TSplitterExなんてのを作ってコンストラクタで変えてもいいし。
589デフォルトの名無しさん:2009/01/13(火) 08:58:46
DelphiにCでいうgetcharのようなものはありますか?
590デフォルトの名無しさん:2009/01/13(火) 09:01:37
>>588
遅くなってすみません
レスありがとうございます
難しそうなのでしばらくはこのまま行こうと思います
ありがとうございました
591デフォルトの名無しさん:2009/01/13(火) 10:00:08
すいません、質問してよろしいですか?

プログラムを実行するとフォームが縮小されて表示してしまいます。
何か原因があるのでしょうか?
592デフォルトの名無しさん:2009/01/13(火) 10:06:42
あるんじゃないかな?
593デフォルトの名無しさん:2009/01/13(火) 10:06:47
>>591
フォームのWindowStateプロパティーがwsMinimizedになってるとか
594591:2009/01/13(火) 10:08:05
591です。

詳しくはフォームに配置したコンポーネントが小さくなってしまうという現象が発生してしまう

です。
595デフォルトの名無しさん:2009/01/13(火) 10:10:57
>>594
最初の質問と全然違うじゃん
もっと頭の中整理してから質問投稿してください
596591:2009/01/13(火) 10:26:41
度々申し訳ありません。

windowsstateはノーマルになっています。
597デフォルトの名無しさん:2009/01/13(火) 10:40:39
Resizeイベントで縮小してるとか、Anchorsを[akTop, akLeft]以外に設定してるとか、
AlignをalNone以外に設定してるとか
598591:2009/01/13(火) 10:50:08
度々失礼します。

フォームのResizeイベントは存在しません。
Anchorsは[akTop, akLeft]です。
AlignもalNoneのままです。

あとAutoSizeをtrueに変更していますが、関係ないと思います。

ついでにdelphiのバージョンは4です。

失礼しました。
599デフォルトの名無しさん:2009/01/13(火) 12:02:16
>>598
なぜAutosizeが関係ないんだ?
ためしてみたのか?
600591:2009/01/13(火) 13:05:37
autosizeをtrueにして実行、falseにして実行、ともにコンポーネントの縮小を確認しました。

なので関係ないと判断いたしました。

よろしくお願いします。
601デフォルトの名無しさん:2009/01/13(火) 13:09:25
情報がなさすぎてよく分からないよ。
何のコンポーネントかすら分からないしw
一般的にはそんな現象はないとしか言えない。

コードの奥深く出何かを弄っているのかもしれないし
バックアップとって大胆にイベントハンドラ全削除したりとかして探っていくしかない。
602デフォルトの名無しさん:2009/01/13(火) 13:10:11
具体的にコンポーネントって何を置いたの?
どこにおいたの?
603デフォルトの名無しさん:2009/01/13(火) 13:24:20
こっちも面倒だしフォーム作り直せよ
604591:2009/01/13(火) 15:08:58
scaledをfalseにしたら直りました。

お騒がせしました。
605デフォルトの名無しさん:2009/01/14(水) 02:41:49
Delphi2009です。

TMemoryStreamにUnicodeで文字列変数の中身をwriteしたいんですが、どうしたらいいんでしょう?
606デフォルトの名無しさん:2009/01/14(水) 18:39:29
>>605
動作未確認ですが、これでどうでしょう。
Buffer := TEncoding.Unicode.GetBytes(Text);
Stream.WriteBuffer(Buffer[0], Length(Buffer));
607デフォルトの名無しさん:2009/01/14(水) 21:13:41
GetBytesなんてメソッドがあったんですね、ありがとうございます。
早速試してみます。
608デフォルトの名無しさん:2009/01/15(木) 03:27:47
よろしくお願いします。
ワードの「フォント選択用コンボボックス」のようなものを表示したくて、
ツールバー(TToolBar)上に、コンボボックスを乗せたいのですが、
方法が分かりません。
(右クリックでは「ボタン」と「セパレータ」の新規作成しか表示されません)

どうすればいいでしょうか?
609デフォルトの名無しさん:2009/01/15(木) 03:36:07
何の方法が分からないの?
まず日本語を勉強してね
610デフォルトの名無しさん:2009/01/15(木) 06:41:20
>>608
どこでつまっているのかが分かりにくい

コンボボックスのせたいならパレットからポトペタするだけだろう

コンボボックスにフォントぶち込む方法が分からんならこれでいいだろう
http://www.geocities.jp/asumaroyuumaro/program/tips/screenfonts.html
611デフォルトの名無しさん:2009/01/15(木) 16:14:03
Delphi5で
メールアドレス取得に失敗したときのログを出そうと

  WriteLogFile(C_ERROR, 'GetMail' , 'Errorだよ。');

って入力すると'実パラメータが多すぎます'ってメッセージがでる。
なんで???

因みに↓
C_ERROR = 'E';

612デフォルトの名無しさん:2009/01/15(木) 16:21:02
>>611
実パラメータが多すぎるからだろ
613デフォルトの名無しさん:2009/01/15(木) 16:22:33
>>611
WriteLogFileのパラメータはどうなってんの?
614611:2009/01/15(木) 16:38:47
>>612
Delphi7で使用されていた同じ内容処理もってきたんですが
Delphi5では単純に使えないってことですかね;

>>613
・・・・;
すみません
パラメータは解らないっす;;
615デフォルトの名無しさん:2009/01/15(木) 16:41:12
WriteLogFileって手続きは標準じゃなさそうだな。

http://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/faq/00250.htm
ここからパクって来たやつなら

procedure writeLogFile(name:string);
になってるから

 WriteLogFile(C_ERROR + 'GetMail: ' + 'Errorだよ。');

みたいにつなげてやればいいんじゃないの。
616デフォルトの名無しさん:2009/01/15(木) 16:59:16
Delphi7だとソースのWriteLogFileって書かれてる所を右クリックして定義の検索
を選ぶと手続きが定義されてる所に飛べるんだけどね。
617611:2009/01/15(木) 17:09:16
>>615

できました!!!!
ありがとうございます!!
618デフォルトの名無しさん:2009/01/15(木) 17:49:00
折角IDEで関数の宣言が分かるんだからその機能使わないともったいない
関数呼出の括弧の中でCtrl+Spaceな
619デフォルトの名無しさん:2009/01/15(木) 17:51:16
おうふ
Ctrl+Spaceは補完だったぜい
Ctrl+Shift+Spaceだったぜ
620デフォルトの名無しさん:2009/01/15(木) 18:03:33
>>619
知らなかった!質問者じゃないけど勉強になったよ。ありがとう。
621デフォルトの名無しさん:2009/01/15(木) 20:05:41
Delphi6EnterPriseで、OutLookExpress6のメッセージ作成画面の編集タブにあるコンポーネントを使いたいのですが、
どうしたらいいのかわかりません。

Winsightで調べてみると以下の情報が確認できました。
Class name: Internet Explorer_Server
Executable module: 43B60000 mshtml.dll

どなたかご教示願います。
622デフォルトの名無しさん:2009/01/15(木) 20:30:31
>>621
OE6とか久しく見てないからどんなんか分からんが
ウィンドウいじる系は
FindWindowでメインフォーム検索
→FindWindowExで子コンポーネントのハンドルげと
→SendMessageで操作
ってのが一般的な流れ

FindWindowExでは子しか検索できない(孫見えない)ので
Visual Studio付属のSpy++か
HalbowさんのWindowTreeで内部構造把握しとくのおぬぬめ
623621:2009/01/15(木) 20:39:14
>>622
すみません、説明不足でした。
ウィンドウをいじるのではなく、OE6で使用されているコンポーネントを、
自分のソフトに張り付けて使用したいのです。
624デフォルトの名無しさん:2009/01/15(木) 20:39:28
>>608
オブジェクトツリーでコンボボックスをツールバーにドラッグドロップ
625デフォルトの名無しさん:2009/01/15(木) 20:44:10
何年か前にDelphiでHTMLエディタコンポーネントを使うみたいな日本語サイトを目撃したな。
ActiveXとりこんで。詳細は忘れた。
626デフォルトの名無しさん:2009/01/15(木) 20:54:17
「OE6で使用されているコンポーネント」なんてものはないんじゃないかなぁ。ありゃ普通にMFCだろ。
627デフォルトの名無しさん:2009/01/15(木) 23:17:47
>>623
目的がいまいち飲み込めないが編集可能なHTMLビューワが欲しいってことかい?

TWebBrowser.Document.DesignModeかえりゃいいんでねえかい
628デフォルトの名無しさん:2009/01/16(金) 00:37:25
OE6起動してみたけど、ありゃ、ただのRichEditコントロールじゃねぇか?
629621:2009/01/16(金) 01:33:16
>>625-626
色々な情報を拝聴させて頂き誠にありがとうございます。

>>627
編集可能なHTMLビュワー用コンポーネントが欲しかったので、
一番身近な所で見つけたOE6で使用されているコンポーネントの使い方を
伺った次第ですが、TTWebBrowserのDocument.DesignModeを切り替えることで
OE6で使用されているコンポーネントの動きと全く同じ事をするようになりました。
とても参考になる意見を仰って頂き誠にありがとうございます。

>>628
RichEditではボタンの類やJavaScript等は書き込めませんでしたので違う物のようです。
630デフォルトの名無しさん:2009/01/16(金) 04:02:05
>>614-617
エスパーすげえw
631デフォルトの名無しさん:2009/01/16(金) 13:05:10
久々にプログラムをしてみた

program aaa
begin
write('a');
end.

今は前置きが長くて
こんな感じでプログラム出来ないのだね・・・・
632デフォルトの名無しさん:2009/01/16(金) 13:11:32
program Project2;
{$APPTYPE CONSOLE}
begin
writeln('a');
end.

これで動いた。Delphi2007。
633デフォルトの名無しさん:2009/01/16(金) 13:12:53
今は、aaa の後に「;」が要るからな・・・・
634デフォルトの名無しさん:2009/01/16(金) 13:30:36
Writeln('A`);
635デフォルトの名無しさん:2009/01/16(金) 13:31:40
10年前くらいからそんな感じだったと思うけど、いつの時代からこられましたか?
636デフォルトの名無しさん:2009/01/16(金) 13:56:33
Delphi出たのも95年だしな。
637デフォルトの名無しさん:2009/01/16(金) 14:01:41
>>616
TurboDelphiだけど、Ctrl押しながら関数をクリックでも関数定義先に飛べる。
既に知ってたらすみません。
638デフォルトの名無しさん:2009/01/16(金) 14:03:45
参照渡し?について質問です。

例えば、任意のTMemoインスタンスに文字を追加する手続きを作る場合、
procedure addString( aMemo: TMemo );
begin
 aMemo.add( 'hoge ' );
end;

などと書くと思いますが、上記のように
「コンポーネント」を引数にした手続きを作る場合は、
varを付ける(つまり参照渡しにする)必要はないのでしょうか?
639デフォルトの名無しさん:2009/01/16(金) 14:19:28
必要ない
ってかvarにするとTMemoから派生したコンポが渡せなくなる
640638:2009/01/16(金) 14:32:48
>>639
ありがとうございます。
varを付けなくても参照渡しになっている、ということでしょうか?


あと、同じような疑問なのですが、「TStringList」が引数の場合。
これも、例えば
procedure funcHoge( sl: TStringList );// varを付けない
begin
 sl.add( 'hoge' );
end;

のように、varを付けていないソースを見かけたことがあるのですが、
コンポーネントの時と同じく「varを付けなくても参照渡しになっている」のでしょうか?

よろしくお願いします。
641デフォルトの名無しさん:2009/01/16(金) 15:00:29
最後にプログラムをしたのは、いつでしょう
ターボパスカル6.0位だったと思います
642デフォルトの名無しさん:2009/01/16(金) 15:50:53
>>640
classは最初からポインタなのですべてくclassにvarはつけなくておk
Integerにキャスト出来るでしょ
ちなみにその例ではTStringListではなくTStringsにした方がいいと思う
643デフォルトの名無しさん:2009/01/16(金) 16:03:22
Integerにキャストできるからって、意味が分からないのだが
あとあのソース見ただけでTStringsにしろってのも意味不明
TStringList以外のTStrings派生を受け付けたくない場合だってあるだろ
644デフォルトの名無しさん:2009/01/16(金) 20:25:54
>>640
Delphiの型はInteger, Char, Realといった変数そのものが値を保持するものと
Class, String, 動的配列のように変数にはオブジェクトインスタンスへの参照(≒ポインタ)を保持するものの二つに大別され
前者を引数に渡して値を弄らせたい場合にvarを付ける。

後者には絶対付けないかと言えばそうでもなく
procedure cre(var a: TMyObject);
begin
 a := TMyObject.Create;
end;

procedure fre(var a: TMyObject);
begin
 a.Free; a := nil; // 実はバグありコード
end;
みたいに変数の持つ参照値をいじりたい場合にはつける。

TStringListかTStringsかということについては
TStringsはTStringListやMemoLines的なものの代表するような性質があるから
(TFileStream, TMemoryStreamを束ねるTStreamなんかも同様)
TStringsにしておくと受け付けられるオブジェクトの数が増す。
ただしTStringsList固有のメソッドもあるから常にTStringsにすればいいというわけでもない。

ということを頭に置いておけばどっちでもいいよ。
さしあたりTStringListが渡したいのならTStringListにしておいて
必要なら後から変えればいい。
645デフォルトの名無しさん:2009/01/16(金) 22:22:15
それだとStringや動的配列にもvarつけなくていいと思われるような気がする
646デフォルトの名無しさん:2009/01/17(土) 01:22:02
delphi 5 proで開発したBDE使用のアプリをインストールしたら、管理者権限でしか動作しないんだけど、
インストールは管理者で、起動はalluserってのはどうすればいいの?

一応、インスト先フォルダの実行県は付与した。
647デフォルトの名無しさん:2009/01/17(土) 08:54:47
>>646
レジストリのは?
648デフォルトの名無しさん:2009/01/17(土) 17:46:04
Form1とForm2のそれぞれのPanelに全く同じ様にLabelやEditを
配置しています(コントロール名も全く同じです)。Panel以外は異なるます。

で、Form1のボタンをクリックしたらForm1のPanel内の、Form2のボタンを
クリックしたらForm2のPanel内のコントロールを更新していますが、今は
両方のボタンのクリックイベントで全く同じコードを書いています。

変更とかあると2箇所同じ修正をしてるのですが、何かもっと良いやり方って
あるんでしょうか。
649デフォルトの名無しさん:2009/01/17(土) 17:49:40
>>648
Form2のボタンにForm1.Button1.Clickて書けばいいじゃね?
650デフォルトの名無しさん:2009/01/17(土) 17:52:01
あ、Form2のPanelか
上のは無かったことで。
651デフォルトの名無しさん:2009/01/17(土) 18:21:45
Frameにするとか、Panel部分だけ配置済みの継承元フォームを用意するとか。
652デフォルトの名無しさん:2009/01/17(土) 23:02:51
>>651のように継承して作るのが一番いいが

Panelを引数にした手続き書くという手段も

procedure hoge(APanel:TPanel);
begin
  APanel.Caption:='hogehoge';
end;

あまりオススメはしない
653デフォルトの名無しさん:2009/01/17(土) 23:46:52
こんなんでどう?

procedure Button1.Click(Sender:TObject);
var
 p:TPanel;
begin
 p:=(Sender as TButton).Parent as TPanel;

 //pにパネルが入ってるので適当に処理
end;
654デフォルトの名無しさん:2009/01/17(土) 23:48:24
って、ユニットが違うのか。
イベントハンドラに同じ関数突っ込む処理がちょっとめんどいな。
655649:2009/01/18(日) 00:03:03
>>647

レジストリはいじってません

というか、インストールするときに管理者権限で動作させるか、一般ユーザでも動作させるかって、最近のソフトのインストーラーみたいにできないのでしょうか。
656デフォルトの名無しさん:2009/01/18(日) 00:12:35
Delphi 5でBDEってWindows NT 4.0とか2000の時代のものなんだが。
657デフォルトの名無しさん:2009/01/18(日) 09:19:24
>>655
BDEの設定がレジストリにあったと思うが・・・
658デフォルトの名無しさん:2009/01/18(日) 09:20:11
>>656
何か問題が?
659デフォルトの名無しさん:2009/01/18(日) 10:32:57
>>656

別にドットネットに移行するつもりもないから、何ら不具合もないんだけど、何が問題なのか教えて??
660デフォルトの名無しさん:2009/01/18(日) 14:52:32
Delphi 5はマルチコアでうまくないことがあった気がする
BDEはVista上ではいろいろ手を掛けないと動かない(インストーラ一発というわけにはいかない)
付属のISXはVistaを考慮していない

そんなところかな。要はVista上でも簡単便利というわけには行かないよ、というだけ。
それをわかっている上で使うなら何の問題もない。
661デフォルトの名無しさん:2009/01/19(月) 08:31:24
648ですが、アドバイスありがとうございました。
Frameとコントロールを引数にした共通の手続きで、できるだけ共通化を
したいと思います。

あとフォームの継承ってのも画面の共通化に使えそうですね。
図書館でDelphiコンポーネント設計みたいな本借りてきて見てみましたが、
結構目からウロコなことが書いてあっておもしろかったです。
662デフォルトの名無しさん:2009/01/19(月) 12:24:55
Dephi2009で、IdHTTPでHTMLを取得しようとすると失敗します。


procedure TForm3.Button1Click(Sender: TObject);
var
s:string;
begin
s:=IdHTTP1.Get('http://google.com/');
end;

これを実行すると

プロジェクト Project2.exe は例外クラス EIdSocketError (メッセージ 'Socket Error # 10013
Access denied.')を送出しました。

と出るのですが、何か手続きが足りないのでしょうか?
663662:2009/01/19(月) 12:33:10
ああすみません、今xp x86で試したら正常に動作しました。

Vista x64では上記エラーが出るのですが、何が原因なのでしょうか・・。
664デフォルトの名無しさん:2009/01/19(月) 12:35:00
つTIdHttp.Create()
665デフォルトの名無しさん:2009/01/19(月) 12:40:43
WinSockのAPIが32bitのまま呼ばれてるんじゃね?
大人しくDelphiの64bit対応待つか自分でWinSockのヘッダ書くかしないと無理なんじゃね?
666デフォルトの名無しさん:2009/01/19(月) 13:44:26
改行を含む文字列を1つのItemとして、それを
リストで管理したいのですが、よいクラスはありますでしょうか?

TStringListだと、Itemに改行を含む文字列を突っ込むと
勝手に複数のItemに分裂しちゃうような気がするので適当
ではないような気がするのですが。
お分かりの方、是非教えてください。
667デフォルトの名無しさん:2009/01/19(月) 13:46:45
Addで追加してやれば改行含んでもちゃんと1つのアイテムになるよ
668デフォルトの名無しさん:2009/01/19(月) 14:00:52
TListのObjectsにTStringListを入れておけばいいんじゃないの?
そうすればTStringList(TList.Objects[#]).Lines[#]みたいに各行にアクセスできるけど。
669662:2009/01/19(月) 14:14:45
>>664
それも先に試しましたが、ダメでした。

>>665
x86でコンパイルしてるのに、x64でWinSock呼び出すって変じゃないです?
WOW64で32bitコードは動くはずだし、それで動かないならWinsock使ってるアプリは大半がx64で死にますよね・・。
670662:2009/01/19(月) 14:20:47
すいません、Vista x86で試したところ、動きませんでした。
Vistaでは動かないという事みたいですね。
Administratorsでもだめみたいなんで、Vista非対応って事で泣いておきます・・。
671デフォルトの名無しさん:2009/01/19(月) 14:37:32
>>668
TListにObjectsってあったっけ?
それ以前にそれって変じゃね?
TListにObjectsがあるとして、TList.Objects[#]で#行目の文字が取得できるのに、
Linesでさらにその中の文字列にアクセスしてる
それに各行に対してTStringList生成してるとメモリ馬鹿食いしそう
それだったら俺なら大人しくPChar使うかな
672デフォルトの名無しさん:2009/01/19(月) 14:45:17
>>668を俺なりに正しく修正すると、

TObjectListのItemにTStringListを格納しろ的な事でしょう。

(ListObject.Items[#] as TStringList).Text

でアクセスすればOKと言いたかったんじゃね?
まあ、効率はよくないけど、どうでも良い処理の部分だったらこれでもいいんじゃない?
673デフォルトの名無しさん:2009/01/19(月) 14:46:57
>TListにObjectsがあるとして、TList.Objects[#]で#行目の文字が取得できるのに、

ちがうだろ?
TList.Objects[#]で一つのTStrigListが取得できるんだろ?
それに、メモリバカ食いするわけでもないだろ?

>それだったら俺なら大人しくPChar使うかな
まぁ、それでいいじゃね。
674デフォルトの名無しさん:2009/01/19(月) 14:48:55
もう少し効率良くするなら、TStringListじゃなくて、Stringの変数1つ持ってるだけのクラス作るとイイかも。

TStringClass = Class
str:string;
end;

みたいなの。
TStringListは、Textに代入するときにいちいち改行調べに行ったりと、無駄な処理が多い。
675デフォルトの名無しさん:2009/01/19(月) 15:47:36
> >TListにObjectsがあるとして、TList.Objects[#]で#行目の文字が取得できるのに、
>
> ちがうだろ?
> TList.Objects[#]で一つのTStrigListが取得できるんだろ?
じゃあなんてTStringListいくつも入れるの?
Objects一つ一つに一行分のTStringListが入ってると俺は認識したけど

> それに、メモリバカ食いするわけでもないだろ?
TStringLst一つで処理するのとどれぐらい違うんだろうね
676デフォルトの名無しさん:2009/01/19(月) 15:58:20
672さんの見解で正解なんじゃないでしょうか?

メモリも記憶する文字列の大きさによるんじゃないですか?
コードの部分は一つがメモリに展開されて、余分に喰うのは各々の文字列分だけじゃないんですか?
677デフォルトの名無しさん:2009/01/19(月) 16:14:28
TStringListのインスタンスサイズは50byte前後
100万行ぐらいまでなら、昨今のメモリ搭載量を考えればそれほど大きな問題にはならない?
678666:2009/01/19(月) 16:14:59
皆様貴重なご意見ありがとうございました。

>>667
Addで追加するだけなら改行を含んでいてもOKなんですね。勉強になりました。
でもたぶん、いったんTextプロパティをつかったりすると1行づつに分解
されちゃったりして?
安心して使うには、どのメソッドとプロパティが大丈夫なのか調べる必要が
ありそうです。開発上、ちょっと気を使う必要がありますが一番簡単な方法
でしょうね。

>>668,671-675
皆さんのご意見を参考に考えると、string型のメンバ1つだけをもつ
独自のクラスを作り、TStringListのObjectsに、その独自クラスのインスタンスを
格納するのが単純明快そうですね。コーディングは何かと面倒にな
りますけど。
679デフォルトの名無しさん:2009/01/19(月) 16:21:44
えっ??

全部読んだ限り、TStringList.Items.Add() 使うのが一番楽そうだけど、なんでそういう結論に?
Textに代入でもしなきゃ問題ないでしょ。
680デフォルトの名無しさん:2009/01/19(月) 16:24:05
681666:2009/01/19(月) 16:52:34
ちょっと調べてみましたが、667の言うとおり、
Addメソッドで問題なく改行を含む文字列の追加・取り出しが
できました。
さらに、=を含んだときのValuesやNamesの挙動も問題
なく、ExchangeメソッドもOKです。
Textプロパティも値の取得なら大丈夫でした。

というわけで、PHPやPerlやC#でよくある「名前つき配列」は
TStringListで実現可能、ってことがわかりました。
682デフォルトの名無しさん:2009/01/19(月) 18:19:43
エディターの左マージンの数値を上げると何か不利になる事ってありますか?
おもいっきり300に上げたんで大丈夫か心配なんです。
683デフォルトの名無しさん:2009/01/20(火) 01:16:12
>>681
言葉遣いは丁寧だけど、礼の一つも言えないってのはあまり社会性がない人ね。
そばに居たら二度と教えてやりたくないタイプ。
684デフォルトの名無しさん:2009/01/20(火) 01:32:20
お礼しろとか馬鹿じゃねーの
685デフォルトの名無しさん:2009/01/20(火) 01:41:18
まーたはじまるの?
686デフォルトの名無しさん:2009/01/20(火) 06:58:28
いや、礼なんかしなくていいよ。
>>681の内容が、もらったレスの反芻でしかなく、
そのレスに対してなんの敬意もないので、ウンザリしただけよ。
687662:2009/01/20(火) 09:16:14
動かない原因がわかりました。
Vistaで共有フォルダ上でexeを実行すると、IdHTTPのGetメソッドが失敗します。
ローカルにexeをコピーしたら動きました。

.Netではネットワーク上のexeの実行に色々制約があるのは知ってましたので、
イントラネット上のexeを支障なく実行できるように設定していましたが、
Delphiでexeが支障なく実行できるようにするには、どこを設定すればいいんでしょう?
688デフォルトの名無しさん:2009/01/20(火) 11:44:12
>>686
>>1も読めないお前は社会性の前に日本語を勉強した方がいいんじゃないかな
689デフォルトの名無しさん:2009/01/20(火) 11:47:13
そういう慣れ合いはバカスレで頼むよ。
690681:2009/01/20(火) 12:56:44
>>683

678でお礼を述べたのですが。

その後に書いた681では、ただ教えてもらっただけでは
申し訳ないので、教えてもらった事を土台にして自分なりに
調査した結果を補足し、多少なりとも意義ある内容にした
つもりです。
(ROMの方々にもお役に立とうと思った次第)
691デフォルトの名無しさん:2009/01/20(火) 13:14:58
64bit版でもPointerと同じサイズが保証されてるであろう型ってLongIntでいいの?
692デフォルトの名無しさん:2009/01/20(火) 14:11:33
汎用型(IntegerとかCardinalとか)で無い限りは同じサイズだと思うよ
あと、細かいけどLongIntではなくLongintだね
693デフォルトの名無しさん:2009/01/20(火) 14:12:44
完全に読み間違えたwww
>>692はスルーしてください
694デフォルトの名無しさん:2009/01/20(火) 20:52:58
Delphiで構造化プロシージャの使い方がよく分からないのですが、
処理を呼びに行ったりするのはどうしたらいいですか。

すみません;漠然としすぎてて
695デフォルトの名無しさん:2009/01/20(火) 21:34:15
"構造化プロシージャ"の検索結果 3 件中 1 - 3 件目 (0.54 秒)
696デフォルトの名無しさん:2009/01/21(水) 00:02:27
エアロからVistaクラシックでDelphi7でつくったフォームを最小化するとゴミがのこりません?
697デフォルトの名無しさん:2009/01/21(水) 00:25:09
まあ7はVistaに対応してないから仕方ないな。
698694:2009/01/21(水) 11:14:15
>>695
一応調べはしたんですが、欲しい情報が見当たらなかったんです;

単純に処理を呼びに行かせたいだけなのですが;
699694:2009/01/21(水) 11:15:05
>>695
一応調べはしたんですが、
欲しい情報を見つけられなかったんです;

単純に処理を呼びに行かせたいだけなのですが;
700デフォルトの名無しさん:2009/01/21(水) 11:15:30
>>698
>>695はそういうことを言ってるんじゃないと思うんだが・・・
701デフォルトの名無しさん:2009/01/21(水) 11:31:39
>>698
>>695は「日本語でOK」といいたいんだと思う
702698:2009/01/21(水) 12:11:31
>>700->>701
ワタクシの勘違いでありましたか・・;

処理的には
・DBより(条件A or 条件B or 条件C)に該当する情報を持ってきます
  if (条件A)に該当
   処理A
  end
if (条件B)に該当
   処理B
  end
if (条件C)に該当
   処理C
  end


これの処理A・処理B・処理C の処理が長いのでプロシージャとして
別につくりたいのです
703デフォルトの名無しさん:2009/01/21(水) 12:23:18
お前Delphiやったことないだろ?
「Delphi 入門」でググれ
704デフォルトの名無しさん:2009/01/21(水) 13:03:08
705デフォルトの名無しさん:2009/01/21(水) 13:22:39
private
 procedure 処理A;←これ書いてctrl+shift+cで↓が勝手に書かれる
end;

procedure TForm1.処理A;
begin
//長い処理を自分で書く
end;

procedure TForm1.on適当(sender : TObject);
begin
 if A then
  処理A
 end else if 〜
end;

って感じ?

>>704メジャーとの2軸マルチで3単取った
706デフォルトの名無しさん:2009/01/21(水) 15:08:49
705>>
end1つ余計。
707デフォルトの名無しさん:2009/01/22(木) 02:27:44
> これ書いてctrl+shift+cで↓が勝手に書かれる

横レスだけど、こんな技があったとは・・。
708デフォルトの名無しさん:2009/01/22(木) 02:30:49
>>705
おいそんな便利コマンドあるならもっと早く教えてくれよ
709デフォルトの名無しさん:2009/01/22(木) 03:21:22
知らなかったのか・・。
じゃあ、変数名や関数名の上でshift+ctrl+Eを押すと、簡単に名前を変えられるってのは?


710デフォルトの名無しさん:2009/01/22(木) 03:50:28
>>709
知らなかった…
711デフォルトの名無しさん:2009/01/22(木) 05:51:22
>>709
けしからんもっとやれ
712デフォルトの名無しさん:2009/01/22(木) 06:45:23
じゃあ、
・関数の宣言内でCtlr+Shift+↓で実装にジャンプ
・関数の実装内でCtlr+Shift+↑で宣言にジャンプ
713デフォルトの名無しさん:2009/01/22(木) 16:47:20
おいおいこのスレにはD6ユーザはいないのかよ
714デフォルトの名無しさん:2009/01/22(木) 16:53:02
>>712
CTRL押しながら関数名クリックしてたよ・・。
715デフォルトの名無しさん:2009/01/22(木) 16:54:03
リファクタリングの便利さを知ったら、D6なんて不便すぎて使う気がしない。
716デフォルトの名無しさん:2009/01/22(木) 17:03:24
Turboなんて重すぎて使う気がしない
そこそこのスペックのPC買えたら入れたいけど
717デフォルトの名無しさん:2009/01/22(木) 17:09:39
ctlt+Jのコードテンプレートの新規登録とか編集
D5ではエディタのプロパティから簡単に出来たんだが
2007でやってみたら「表示」「テンプレート」から出来るみたいだけど
xmlでソース書くしかないのかな?ぢゃま臭いんだが
718デフォルトの名無しさん:2009/01/22(木) 19:59:53
>>716
同じ理由で6です
719デフォルトの名無しさん:2009/01/22(木) 22:22:35
ドキュメントが貧弱だと大変だな・・
720デフォルトの名無しさん:2009/01/23(金) 10:07:37
うろ覚えだけど、Alt+↓か↑で「宣言へ移動」。マウス使わなくていい
721デフォルトの名無しさん:2009/01/23(金) 11:27:06
722デフォルトの名無しさん:2009/01/23(金) 17:06:33
あの〜、

変数の内容がある状態になったら実行を一時停止させてデバッグしたいんですけど・・・

たとえば strFruit という変数が'リンゴ'になったらストップするとか。

そういうのって可能なんでしょうか?
723デフォルトの名無しさん:2009/01/23(金) 17:08:24
>>722
可能
724デフォルトの名無しさん:2009/01/23(金) 17:09:44
if文の中にブレイクポイント設定して実行しろや
725デフォルトの名無しさん:2009/01/23(金) 17:15:26
Delphi7で作ったアプリをWindows7で動かしてみたが無問題だな。

Delphi7であと5年は戦えそうだ。
726デフォルトの名無しさん:2009/01/23(金) 19:25:50
Delphi素敵だね。

初めての言語、C++やろうと思ってたけど、こっちにしようかな。
727デフォルトの名無しさん:2009/01/23(金) 19:34:43
Delphi2009のDataSnapについてお聞きします。
DataSnapのサーバ側モジュールって、exe形式のプログラム
なんですか?
それともApacheの拡張DLLとかになっているのでしょうか?

前者の場合なら同一マシン上でWebサーバを動作させることは
できませんよね?(TCP/IP Portがぶつかるため)
728デフォルトの名無しさん:2009/01/23(金) 20:42:20
>>726
趣味なら良いと思うよ。
そうじゃなかったら手はださん方がいい。
729デフォルトの名無しさん:2009/01/23(金) 20:49:14
まぁ、そうだな。既存ユーザならともかく、これから参入は基地外沙汰だ。
730726:2009/01/23(金) 21:42:21
やっぱ先がないの?

そんなに切羽詰まった言語なのか……
731デフォルトの名無しさん:2009/01/23(金) 22:03:06
終わる終わると言われながらも中々終わらない言語です
732デフォルトの名無しさん:2009/01/23(金) 23:22:52
>>722
ctrl+F5
733デフォルトの名無しさん:2009/01/23(金) 23:50:33
>722
ブレークポイントを右クリック→条件

すごく遅くなるけどな。
734デフォルトの名無しさん:2009/01/24(土) 01:59:43
今のDelphiが遅いPCって、どんだけ貧弱なんだ・・。
735デフォルトの名無しさん:2009/01/24(土) 02:03:34
同情するなら
736デフォルトの名無しさん:2009/01/24(土) 02:04:03
誤爆ったwwwwwww
737デフォルトの名無しさん:2009/01/24(土) 08:53:46
> すごく遅くなるけどな。
条件設定しない状態と比較して、すごく遅くなるけどな。
738デフォルトの名無しさん:2009/01/25(日) 01:05:32
IDEのライブラリパスの一覧みたいに、TListBoxのアイテムを灰色にする時ってやっぱりオナニードローですか?
739デフォルトの名無しさん:2009/01/25(日) 01:46:58
うん。というかOnDrawItem。
740デフォルトの名無しさん:2009/01/25(日) 02:19:05
ですよねー
ありがとうございます
741デフォルトの名無しさん:2009/01/25(日) 04:36:16
ド素人すぎる質問ですが、、

if edit1.text=('123') then showmessage ('OK')
else showmessage ('NG');
end;

このようなプログラムを使って('123')にあたるワードを別ファイル(txt等)から
読み込んで参照して判定させたいのですが、どのようにすればいいでしょうか。
742デフォルトの名無しさん:2009/01/25(日) 04:48:29
TStringList.LoadFromFile
TFileStream.ReadBuffer
CreateFile
AssignFile
上げるだけでキリがねーな
743デフォルトの名無しさん:2009/01/25(日) 05:04:23
>>742
ありがとうございます!
AssignFileを使ってtxtのパスを書けば出来ました。マジ感謝
744デフォルトの名無しさん:2009/01/25(日) 12:52:05
VBとDelphiはどっちが優れてますか?
Delphiで最近導入されたジェネリクスは、VBでは2005の頃からあったそうですが。
745デフォルトの名無しさん:2009/01/25(日) 12:56:28
このスレ的に言えばDelphiの方が優れてます
746デフォルトの名無しさん:2009/01/25(日) 13:49:39
起動時にTEditとTUpDownをいくつかセットで動的生成しています
その時Associateプロパティで関連づけてもセットされません

起動してから一つずつセットすれば反映されるのですがこれは
セットしするたびに描画されないといけないということでしょうか?
以上、よろしくお願いいたします
747デフォルトの名無しさん:2009/01/25(日) 14:22:03
>>744
VBとVB.netを同系列に語るなよ
VB6 vs Delphiなら Delphi > VB
だが、今の時代は
VB.net vs Delphiなら VB.net > Delphi
だろうよ。
ただし、VB.net使うくらいなら、C#を勧めるが
748デフォルトの名無しさん:2009/01/25(日) 14:23:12
ああ、Delphi Prism入れていいなら、
言語仕様的には、Delphi Prism > VB.net > VB
だな
749デフォルトの名無しさん:2009/01/25(日) 14:25:46
馬鹿スレでやれ
750デフォルトの名無しさん:2009/01/25(日) 14:33:55
フロントエンドアプリをDelphiで書き、バックエンドはApache+Perlを想定しています。
フロントエンドとバックエンドの通信はHTTPです。

このような形態のシステムで、TDataSet(TQuery)に相当する部分を
置き換えられるものが欲しいです。
要求されたDataSetをHTTP通信で取得してくれるようなコンポはない
でしょうか?

よろしくお願いします。
751デフォルトの名無しさん:2009/01/25(日) 14:52:21
ラムダ式もないDelphiは時代遅れ
752デフォルトの名無しさん:2009/01/25(日) 14:57:59
最先端である必要もない
753デフォルトの名無しさん:2009/01/25(日) 17:02:00
VB   現役時代以降(浪人時代も含む)の長島茂雄
VB.net 現役時代の長島茂雄
Delphi 野村克也の全経歴(笑)

 よって>>747がだいたい成り立つ(w。
 まあ.net以前のVBとDelphiならDelphiが圧倒していたと思う。
 しかしサッチー問題含む野村の全経歴は長島の現役時代を圧倒はしていない。
754デフォルトの名無しさん:2009/01/25(日) 18:46:40
ドラゴンボールZのZ戦士で例えるとどうなる?
755デフォルトの名無しさん:2009/01/25(日) 18:51:22
長島って倒れちゃったよね
756デフォルトの名無しさん:2009/01/25(日) 19:22:32
VBがクリリンで
delphiが天津飯
757デフォルトの名無しさん:2009/01/25(日) 19:55:26
VB.net = 最長老に潜在能力を引き出されたクリリン
758デフォルトの名無しさん:2009/01/25(日) 20:12:04
ここはガキまみれ?
759デフォルトの名無しさん:2009/01/25(日) 20:56:26
Editboxに入力された数値を12.12という小数で割り,
StringGrid1に記入したいのですが

StringGrid1.Cells[1,1] := StrToFloat(Edit1.Text) / 12.12 ;

ではうまくいきません。
正しく動作させるにはどうすればいいでしょうか?
760デフォルトの名無しさん:2009/01/25(日) 21:28:08
XP+Del7Pro
ClientDataSetのフィルターでinか*を使って部分文字列の検索をかけたいんだけどうまくいかん

Filter := '住所 in' + '('+QuotedStr(Edit1.text)+')';//inが=の扱いになって結果が表示される。
Filter := '住所 =' + QuotedStr(Edit1.text)+'*'';//error式が必要な場所に何もありません。
Filter := '住所 =' + QuotedStr(Edit1.text)+QuotedStr('*');//検索結果が常に0。
Filter := '住所 =' + QuotedStr('*')+QuotedStr(Edit1.text);//破れかぶれでやってみたが上に同じ。

ではうまくいきません。
正しく動作させるにはどうすればいいでしょうか?
フィルターオプションはワイルドカードを許可してます。
761デフォルトの名無しさん:2009/01/25(日) 21:31:43
FloatToStr(StrToFloat())
762デフォルトの名無しさん:2009/01/25(日) 21:53:34
>760
Filter := '住所 =' + QuotedStr(Edit1.text + '*');
じゃねーの?
763デフォルトの名無しさん:2009/01/26(月) 00:59:28
>>760
FilterをShowMessageとかで表示させてみようとは思わなかったの?
それでたぶんすぐ分かったと思うけど
自分の目で確かめる癖付けた方がいいと思うよ
764デフォルトの名無しさん:2009/01/26(月) 04:09:13
Delphiにインラインアセンブラはいらない。
オブジェクトシステムとガベージコレクションがあればそれでいい。
もっといえばDelphiはいらない。
Linuxで動くObject Pascalコンパイラがあればそれでいい。
あとはGlade3でベタポトするから。
765デフォルトの名無しさん:2009/01/26(月) 07:23:24
Delphi初心者の皆さん、Delphiにはもう先がありませんからVBを使いましょう^^
766デフォルトの名無しさん:2009/01/26(月) 07:58:45
>>764
あればいいって fpc(Free Pascal Compiler) があるじゃん。
767デフォルトの名無しさん:2009/01/26(月) 09:14:12
教えてください。
delphiでC++のように
同じ関数名で別の引数というのは可能でしょうか。
procedure Func1(s: string);
procedure Func1(v: Integer);
とすると、overloadが指定されていないとエラーになりました。
overload をとりあえず付けてみたのですが、同様にエラーです。

768デフォルトの名無しさん:2009/01/26(月) 09:17:55
すいません。事故解決しますた。
procedure Func1(s: string);overload;
procedure Func1(v: Integer);overload;
とすればうまくいきました。
769デフォルトの名無しさん:2009/01/26(月) 10:13:20
>>760
それサンプルソースに乗ってるヤツで前方一致しか抽出しないんですわ。
Edit1.Text := '伏見';で京都府伏見が引っ掛からない。
770デフォルトの名無しさん:2009/01/26(月) 10:16:05
今でも新規案件をためらいなくDelphiで始める俺。
771デフォルトの名無しさん:2009/01/26(月) 11:13:54
大学の研究をDelphiでやってる俺
跡継ぐ人がどうなるかは知らない
772デフォルトの名無しさん:2009/01/26(月) 21:06:25
超初心者です。教えてください。
ゲームのタイトル画面→新規ゲームスタート
のように、フォームからフォームへ移動するような場合はどうすればいいですか?
両方は一応できていて、ボタンからどう繋げばいいのかわからないのですがw
773デフォルトの名無しさん:2009/01/26(月) 21:09:01
>>771
おなじく
774デフォルトの名無しさん:2009/01/26(月) 21:11:14
>>772
最後のwは釣りって事かい?
775デフォルトの名無しさん:2009/01/26(月) 21:36:51
>>771
>>773
おなじく
776デフォルトの名無しさん:2009/01/26(月) 22:13:00
772のものです。
改めて見ると釣りっぽいかもですが、
普通に困ってるのでお願いします。
教えてください。
777デフォルトの名無しさん:2009/01/26(月) 22:37:25
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show;
end;
ってことか?
778デフォルトの名無しさん:2009/01/26(月) 22:37:44
>>771
オレも大学の卒業研究をDelphiでやったよw
779デフォルトの名無しさん:2009/01/26(月) 22:56:37
>>777
ありがとうございます。
解決しました。
780デフォルトの名無しさん:2009/01/26(月) 23:23:06
delphi 2006なんですけどnumericupdownってないんですか?
781780:2009/01/27(火) 00:00:23
自己解決したぴょん
782デフォルトの名無しさん:2009/01/27(火) 13:17:37
研究に使うソフトをDelphiで作ってるが、
後任がどうするか(ry
783デフォルトの名無しさん:2009/01/27(火) 14:52:05
手慣れていればC#に移行する。
784デフォルトの名無しさん:2009/01/27(火) 19:04:04
>>777
それだと別の画面(フォーム)が表れるんですけど、
同じ画面で移行させるにはどうすればいいですか?
785デフォルトの名無しさん:2009/01/27(火) 19:10:05
別のフォームとして作ったのに?
Form2にPanel乗せてParentをForm1に変えればそれっぽいことが出来るかも
786デフォルトの名無しさん:2009/01/27(火) 19:28:58
>>785
始めたばっかなのでわかんなくて・・。
タイトルから全く別の画面に移動するときはどうすればいいのですか?
一回全部消して再構成するのですか?
やりかたを教えてくれたらうれしいです。
787デフォルトの名無しさん:2009/01/27(火) 19:46:01
ゲームの作り方みたいな本でも買えば?
788デフォルトの名無しさん:2009/01/27(火) 19:50:16
できればやり方だけでも教えてほしいです。
本屋になかったので。
789デフォルトの名無しさん:2009/01/27(火) 19:51:41
「delphi、ゲーム」でクグるとか…
790デフォルトの名無しさん:2009/01/27(火) 19:52:32
「ゲーム シーン切り替え」でググるとか…
791デフォルトの名無しさん:2009/01/27(火) 20:01:58
「ゲ制作技術」板にいくとか…
792デフォルトの名無しさん:2009/01/27(火) 20:09:51
|フォームからフォームへ移動するような場合はどうすればいいですか?
|両方は一応できていて、ボタンからどう繋げばいいのか

|それだと別の画面(フォーム)が表れるんですけど、
|同じ画面で移行させるにはどうすればいいですか?

この矛盾を解決しないと答えられない

まず、自分が用意したものを〜
実際に「一応できてい」るユニット名とフォーム名
例)unit1.pas(Form1、タイトル画面)とunit2.pas(Form2 新規ゲーム)
のように明示して、〜
例1)Form1に載せたボタンクリックでForm2を表示したい
その際Form1は見えなくなる(アクセス出来なくなる)
例2)Form1に載せたボタンクリックで「Form2内容をForm1の上に表示したい」
例3)オイラの頭にログインして、ソースを全て書いて欲しい
793792:2009/01/27(火) 20:14:28
私のヘルプミーなんですがw
今、書き込んだ瞬間に中指が暴走してしまい
一瞬のうちに右クリ→あぼ〜ん
となり792が見えなくなってしまいました
どうしたら復活するのでしょう
ブラウザはJaneStyleです
794デフォルトの名無しさん:2009/01/27(火) 20:19:24
>>786
そういうのは最初からForm1だけでやったほうがいいよ。
Panel1とPanel2をそれぞれAlignをalClientにして
タイトルをPanel1に、ゲーム画面をPanel2に乗せる。
最初はPanel1を表示させる為にPanel2のVisibleをFalseにする。
ゲームが始まったらPanel1のVisibleをFalseに、Panel2のVisibleをTrueにする。
これで画面が切り替わったように見える。

設計中は下のパネルが見えなくなるからアクセスしたくなったら
上のパネルを右クリ-コントロール-背面に移動すると上のパネルが下に回る。
795デフォルトの名無しさん:2009/01/27(火) 20:28:57
>>792
>>794 さん
ありがとうございました。
頑張ってやってみたいと思います。
796デフォルトの名無しさん:2009/01/27(火) 20:30:34
Frameは?
797デフォルトの名無しさん:2009/01/27(火) 21:01:04
>>796
どういうことですか?
798デフォルトの名無しさん:2009/01/27(火) 21:37:54
どんなゲーム作ってるんだ?
799デフォルトの名無しさん:2009/01/28(水) 00:44:24
Delphi2009、結構文字列周りでハマるな。
油断できねえ。
800ななしへたぐらま ◆XcB18Bks.Y :2009/01/28(水) 09:18:17
>>797
パネルではなくてフレームにしたほうがいいのでは?という話ですね。

フレームを使う場合はフレームやフレームに載せたコンポだけに関するコードは
フレームのユニットに書くことになるので、
メインフォームのユニットのコードがその分短くなり、
コードがわかりやすくなる利点があります。

何でもかんでもメインフォームに置くのは楽なのですが
そのうちコードが何千行にもなってどこに何のコードがあるのかわからなくなります。

…って私の失敗談なのですが。
801番組の途中ですが名無しです:2009/01/28(水) 12:10:29
delphi worldって移転しました?
移転先教えて頂けると助かります
802デフォルトの名無しさん:2009/01/28(水) 17:36:53
迷走しまくって行方不明、実質死亡じゃなかったっけ
803デフォルトの名無しさん:2009/01/28(水) 20:12:30
>>800
ありがとうございます。
>>794
さんに聞きたいのですが、パネルをオンオフにするのはわかりましたが、
どうやってパネルの上に画像を表示したりするのでしょうか?
804デフォルトの名無しさん:2009/01/28(水) 20:49:27
>>794じゃないけどTImage
805デフォルトの名無しさん:2009/01/28(水) 20:59:31
>>804
普通に載せられました・・。
ありがとうございます。
806デフォルトの名無しさん:2009/01/28(水) 21:57:10
最近は初心者にdelphiは厳しいな
delphi6の頃は検索すれば情報がでてきたが
javaか.netの情報ばかりでてきてイライラする
delphi ○○○(調べたい言葉)で検索してるのに
javaのページがでてくるってもうね
807デフォルトの名無しさん:2009/01/28(水) 22:24:37
大抵の人はjavaだろうがC#だろうがDelphiに移植できるけど、初心者には辛いかもな
808デフォルトの名無しさん:2009/01/28(水) 22:38:18
Google初心者ってことか
809デフォルトの名無しさん:2009/01/28(水) 23:36:53
というか、Googleもちょっと精度が微妙になってきてる
精度を狂わすようなノイズ(糞ブログ)が昔より格段に増えたし
810デフォルトの名無しさん:2009/01/29(木) 00:28:10
日本語でGoogleを利用してる奴には世界の有用なサイトより
日本語のサイトを優先して表示みたいな処理が入ってから
目に見えて糞化した。
811デフォルトの名無しさん:2009/01/29(木) 20:04:27
>>806
つprocedure
812デフォルトの名無しさん:2009/01/29(木) 23:24:39
procedure と
function の区別って
意味なくね?
同じでいいじゃん。

813デフォルトの名無しさん:2009/01/29(木) 23:50:08
リストビューの選択行の色が↓のコードで変更できないんですが、
自前でFillRect&DrawTextしないといけないの?

procedure TMainForm.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if cdsSelected in State then begin
ListView1.Canvas.Brush.Color := clBlue;
end else begin
ListView1.Canvas.Brush.Color := clRed;//選択されてなければ変更できる
end;
end;
814デフォルトの名無しさん:2009/01/29(木) 23:53:44
いけないの。

ListViewのデフォルトの挙動と同等のコードをOwnerDrawでやろうとすると半泣きになるよ。
サンプルコードくらい用意して欲しかったよ…
815デフォルトの名無しさん:2009/01/30(金) 00:02:41
そこまで難しくなかったような・・・
816デフォルトの名無しさん:2009/01/30(金) 00:11:42
DefaultDrawの設定
817デフォルトの名無しさん:2009/01/30(金) 01:42:57
d
めんどくさいな・・・
ちなみにDefaultDrawはTrue,Falseどっちでもだめでした
818デフォルトの名無しさん:2009/01/30(金) 01:43:41
というかFalseだと描画されない(あたりまえ)
819デフォルトの名無しさん:2009/01/30(金) 10:16:26
TransparentColor に現在のPenの色以外のすべての色を
指定する方法ってありますか?
820デフォルトの名無しさん:2009/01/30(金) 12:52:44
作りかけのdprを開こうとすると
「モジュール'vcl70.bpl'のアドレス00〜8Cでアドレス00〜78に対する
 読込違反が起きました。」
って言うエラーが出てきてファイルが開けなくなったのですが
対処法分かる方います?
そのdprにリンクしてるpasも全部同じエラーで個別にも開けない。
821デフォルトの名無しさん:2009/01/30(金) 19:48:12
メインフォームにはTDBGridとサブフォーム呼び出しボタン、
サブフォームには複数のTDBEditと[追加]ボタンをそれぞれ配置して
・メイン: リストの表示  ・サブ: 新規レコード作成フォーム と役割分担させ、
サブフォームの[追加]ボタンのOnClickに

 MainForm.SimpleDataSet01.Append;

って書いたところ、サブフォームを埋めて[追加]ボタンを押しても
TDBGridには空白のレコードが足されるだけでTDBEditの入力内容が反映されません

具体的には
ttp://dn.codegear.com/jp/article/36347
これでやってることをリスト表示用メインフォームと新規レコード作成フォームとに分割して
新規作成フォームは適宜表示されるって形にするだけです
どこをどうすればサブフォームの内容がデータベースに反映されてTDBGridに表示されるのでしょうか?
822デフォルトの名無しさん:2009/01/30(金) 19:56:31
データセットのPostメソッドで確定しても反映されない?
823デフォルトの名無しさん:2009/01/30(金) 20:05:35
>>822
"データセットのPostメソッドで確定"がわかりません…
Delphi初めて半月、データベース触るの初めて基本用語さえ調べながらなんです
824デフォルトの名無しさん:2009/01/30(金) 20:30:37
調べた結果、
Append
Post
は何をするメソッドだと書いてあった?
825デフォルトの名無しさん:2009/01/30(金) 21:27:05
>>824
Appendはバッファ上で末尾に追加、Postはデータベースに登録、ですよね
ってことは>>822はAppendしてPostしたら確定されて反映されるだろうって意味で間違いないですか?

自分が思い描いているのは>>821のリンク先のものを上下別々のフォームに分割することなので、
データベースに登録されるされるのは別ボタンでの処理にしたいんです
なので[追加]ボタン一発でデータベースに即登録ってのは避けて、何か方法はありませんか?
826デフォルトの名無しさん:2009/01/30(金) 23:06:16
1.サブフォーム呼び出しボタンクリックでAppendしてからサブフォーム表示
2.データ入力
3.サブフォームの追加ボタンクリックでpostしてからサブフォームを閉じる

という内容で書けばいいんじゃないの?
あとサブフォームにはキャンセルボタンもつけて、Dataset.Cancelをしてからフォームを閉じる処理を書けばいいかと。
827デフォルトの名無しさん:2009/01/30(金) 23:06:40
データセットの状態を意識しよう。TDateSet.Stateプロパティだっけかな?
>って書いたところ、サブフォームを埋めて[追加]ボタンを押しても
>TDBGridには空白のレコードが足されるだけでTDBEditの入力内容が反映されません
サブフォームを埋めてって表現見ると、既にデータセットのAppendメソッドが自動で呼ばれて、
挿入状態になってるから追加ボタンのOnClickには
MainForm.SimpleDataSet01.Append;
ではなく、
MainForm.SimpleDataSet01.Post;で確定すればいいんじゃないかな?
挿入状態の時に、Append呼んで一旦キャンセル(Cancel)されて、再びAppendされてるので
空白になってると思う。



828デフォルトの名無しさん:2009/01/30(金) 23:11:48
後、Postメソッドはデータベースへの変更を確定というより、データセットへの変更を確定
と言った方がいいかも。バックエンドのデータベースまで変更されるかは使ってるデータセットの
種類による。ClientDataSetはキャッシュアップデートが基本だから、Postで変更されるのはデータセットだけ。
変更されたデータセットの内容を更にデータベースに反映させるには、>>821にあるように、
ClientDataSetのApplyUpdatesメソッドを呼ぶ。
829デフォルトの名無しさん:2009/01/31(土) 05:55:18
http://www.codegear.com/jp/downloads/free/delphiphp

さっきこのページを表示しようとしたら、なぜか
すっごく重くって、それで、ページでなくて、なぜか
ソースがまるっと出てきてしまったんだけど、なんで?
830デフォルトの名無しさん:2009/01/31(土) 06:12:25
>>829
何を言っているのか分からない
831デフォルトの名無しさん:2009/01/31(土) 06:39:49
ページを表示しようとしたら、
すっごく重くって、
「読み込み中です、、、」
って、ずーーーとなっていて、そんで、
しばらくしたら、なぜかページでなくて、
PHPのソースが、だーっと出てきてしまったの。

ちなみに、ソースは保存してあります。
832デフォルトの名無しさん:2009/01/31(土) 06:41:15
head>

<body>
<form name="ctl00" method="post"
action="../../../../images.aspx?article=38021&filename=12th_devcamp_banner_560x80.gif&siteid=10" id="ctl00">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"
value="/qLYwLaKv675BtktTji159q4HLd34GRLuDZxKD2bFZJNsebUqmDd7EiiSCi9O+l0=" />
</div>

</form>
</body>
</html>
HTTP/1.1 200 OK
Date: Fri, 30 Jan 2009 09:09:09 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 42774
833デフォルトの名無しさん:2009/01/31(土) 06:42:32
>>832
こんなのがいっぱい出てきた。ページでなくて、aspxのソースが。
834デフォルトの名無しさん:2009/01/31(土) 07:49:47
ソースじゃないやん
835デフォルトの名無しさん:2009/01/31(土) 11:38:20
>>833
^^;
836デフォルトの名無しさん:2009/01/31(土) 12:56:30
フリー版ダウンロードサイトの話ならIEで見ると直る。
しっかりしてくれよまったく。
837821:2009/01/31(土) 16:13:11
レス遅くなってすみません

>>826-828
メインフォームの呼び出しボタンのOnClickに
 SimpleDataSet01.Append;
 if SubForm.ShowModal = mrOK then
  ShowMessage('追加しました');
サブフォームの追加ボタンには
 frmList.sdsSalesdata.Post;
 ModalResult := mrOk;
としてみたところ、TDBEditはすべて記入済みにもかかわらず
[項目 'ID' の値が必要です.]というメッセージが出てきました。
(IDは>>821のリンク先同様にデータベース内でnullを認めていない項目です)

ちなみにPostの部分をAppendで書いてた時には[項目〜必要です]は出ていませんでした
メッセージが出るようになった理由も対策もわからないので、引き続き知恵をお貸しいただきたいです
838デフォルトの名無しさん:2009/01/31(土) 18:51:20
>>837
もうDelphiがどーのこーのって問題じゃないよ。
出てきたエラーメッセージについて1時間くらい真剣に悩んでみれば?
839デフォルトの名無しさん:2009/01/31(土) 20:43:46
ここはそういうスレじゃないから
840デフォルトの名無しさん:2009/02/01(日) 01:20:53
delphi2009でquadrupleD使えません?
パッケージ作ろうとしてもDInputがコンパイル出来ませんと・・・
再定義がなんたらと大量にエラー吐かれます
841ななしへたぐらま ◆XcB18Bks.Y :2009/02/01(日) 05:23:19
>>819
ビットマップクラスTBitmapには2色以上を透過する機能はありません。

指定した色以外を透過するのでしたらこんな風にするとできます。
暇だったのでてきとーなコードを書いてみました。

FForeBitmap … ペンで線を引いたビットマップ
FDrawOnlyBitmap … 線だけ取り出したイメージを描画するためのビットマップ

//★線を引かれたビットマップから線だけを取り出したビットマップを作る

FDrawOnlyBitmap.Assign(FForeBitmap);
// 元ビットマップのキャンバスのペンの色が透明色になるマスクに変換
// そのペンの色が黒、それ以外が白になる。
FDrawOnlyBitmap.Mask(FForeBitmap.Canvas.Pen.Color);
// 反転する
with FDrawOnlyBitmap do
 BitBlt(Canvas.Handle, 0, 0, Width, Height, 0, 0, 0, DSTINVERT);

//★描画する

// 透明指定、黒を透明色に指定
FDrawOnlyBitmap.TransparentColor := clBlack;
FDrawOnlyBitmap.Transparent := True;
// 前景色をペンの色に指定
Canvas.Font.Color := FForeBitmap.Canvas.Pen.Color;
// 描画
Canvas.Draw(0, 0, FDrawOnlyBitmap);
842デフォルトの名無しさん:2009/02/01(日) 12:00:43
TWebBrowserで読み込むときにカチッと音が鳴るのは消せませんか?
843デフォルトの名無しさん:2009/02/01(日) 12:20:45
追加
WebBrowser.Navigateで navNoReadFromCacheを付けてもキャッシュから読んでしまって古いページが表示されます
どうしたらいいですか?
844デフォルトの名無しさん:2009/02/01(日) 12:54:18
>>840
再定義して使えばいいんじゃない?
845デフォルトの名無しさん:2009/02/01(日) 13:46:14
>>842
コンパネ-サウンド
IEの標準動作だよ
846デフォルトの名無しさん:2009/02/01(日) 15:29:18
>>845
ありがとうございます
プログラム上から設定はできないんですか?
847デフォルトの名無しさん:2009/02/01(日) 16:03:32
ググれば腐るほど出てきます
848840:2009/02/01(日) 16:57:59
>>844
やってみましたがダメでした・・・

{$IF}指令ってdelphi6とどこか違うんでしょうか?
気のせいか、
{$IF UNICODE}みたいな記述のふきんでエラーをよくみます
849デフォルトの名無しさん:2009/02/01(日) 17:11:30
2009持って無い人が分かるかもしれないからエラーメッセージ書いといたほうがいいと思うよ

> {$IF UNICODE}
{$IF Defined(UNICODE)} や {$IFDEF UNICODE}でなくて?
850840:2009/02/01(日) 22:06:31
>>849そりゃそうですね、忘れてました。

(DInput.pas)
type
LPDIENUMEFFECTSCALLBACKA = function (const Para0: DIEFFECTINFOA; Para1: Pointer): BOOL; pascal;
LPDIENUMEFFECTSCALLBACKW = function (const Para0: DIEFFECTINFOW; Para1: Pointer): BOOL; pascal;
{$IFDEF UNICODE}
const
LPDIENUMEFFECTSCALLBACK = LPDIENUMEFFECTSCALLBACKW;
{$ELSE}
LPDIENUMEFFECTSCALLBACK = LPDIENUMEFFECTSCALLBACKA;      ←
{$ENDIF}// !UNICODE

などのところです。まだたくさんありましたが。

エラーの場所はうろ覚えです・・・すみません。
2009消してD6入れなおしたもので。
いまから2009入れてくるのでメッセージの詳細はしばしまってください。
851デフォルトの名無しさん:2009/02/02(月) 07:10:32
ウンコード
852デフォルトの名無しさん:2009/02/02(月) 22:16:51
Turbo Delphiなんだけど
ProjectからUnitを削除しても、プロジェクトソースの方は自動で削除してくれないんだね。
以前削除したはずのデータモジュールがプロジェクトソースに残ってて、新たにUnitファイル名は
違うんだけど、データモジュール名のNameプロパティが同じものを追加したら、名前の衝突が起こった。
ショックだった。
853デフォルトの名無しさん:2009/02/02(月) 22:31:53
Execute('dir /s /b', Memo1.Lines);
みたいなユーティリティコードってどっかにないですか。
854デフォルトの名無しさん:2009/02/02(月) 22:48:41
TStringsに格納するユーティリティなんてすげーな。
855デフォルトの名無しさん:2009/02/02(月) 23:21:43
BDEについて質問です。

SQLServer2005のデータベースに接続し、一時テーブルを使って集計しようとしたのですが
トランザクション内でクエリを何度か実行すると「テーブル:(一時テーブル名)が見つかりません」
というエラーが出てクエリが実行できなくなってしまいます。

SQLServerのヘルプには「テーブルを作成したセッションが切断されるまで保持されます」と記載されているので
TSessionが怪しいとにらんでヘルプを見たけどイマイチよく分からず、
ぐぐっても詳しく解説しているサイトが見つかりませんでした。

一時テーブルはトランザクション内でのみ使用しているので
トランザクション中はセッションを保持するようにしたいのですが
ぐぐるヒントでもありましたら教えてください。
856デフォルトの名無しさん:2009/02/03(火) 08:06:51
>>852
よくあるまちがいは、プロジェクトから削除したユニットを、プロジェクト内のユニットから
参照していて、それが残ってるというもの。
しかしプロジェクトソースから削除しないって、プロジェクトから削除してないって
云うのと同義やね。
857デフォルトの名無しさん:2009/02/03(火) 17:45:47
>856
ローカルUSESを先にはずすのを忘れたとかは、あったかもしれないkど、それはないよ。
どうもこのドッツネッツのIDEはわけのわからんところがある。
プロジェクトオプション見たら、フォームが2重登録になってたり。
現にいまも立ち上げたら、無効なポインタ操作とかのダイアログが出て、赤線アンダーラインでまくり。
ちゃんとコンパイルは通るんだけどね。
858デフォルトの名無しさん:2009/02/03(火) 17:55:58
>>857
同じくTurboDelphiExplorer使いだけど、そういう場合(よくある)は
ファイル→すべてを閉じる→最近のプロジェクト一覧から再度開く
これで解決させてる。
859デフォルトの名無しさん:2009/02/03(火) 22:29:56
つかえねぇな、そんなんじゃ
860デフォルトの名無しさん:2009/02/04(水) 00:34:36
ガンガンスクロールしていくログを
Teratermの様に行数制限付き状態で流したいです。
現在はMemoを使用して、単純に下記のようにしているのですが、
行数が多くなると(数百行位でももう)とにかく重いです。

TMemo1.Lines.Add('ホゲ');
TMemo1.Lines.BeginUpdate;
if MAX_LINE < TMemo1.Lines.count then
TMemo1.Lines.Delete(0);
TMemo1.Lines.EndUpdate;

どのようにしたらよいのでしょうか。
861デフォルトの名無しさん:2009/02/04(水) 00:40:25
ガンガンたまるログを片っ端から消していくの?
862デフォルトの名無しさん:2009/02/04(水) 06:48:28
TMemo1.Lines.BeginUpdate; を Addの前にすれば少しはましになるんじゃね?
863デフォルトの名無しさん:2009/02/04(水) 17:03:25
StringなQueueを内部で管理してバーチャなListViewで表示すりゃいいんじゃね。
複数行にわたるコピペができなくなるけど。
864デフォルトの名無しさん:2009/02/04(水) 17:26:07
ListViewって、最終行表示させるのに定番のコマンドってある?
以下のように自分専用の関数作ってるけど、何かあったら教えて欲しい。

procedure LVI(LV: TListView; const Strs: array of string; ScrollToEnd: Boolean = True);
var
 i: Integer;
begin
 with LV do
 begin
  with Items.Add do
  begin
   Caption := Strs[0];
   for i := 1 to High(Strs) do
    SubItems.Add(Strs[i]);
  end;
  if ScrollToEnd and (TopItem.Index + VisibleRowCount > Items.Count-3) then
   Items[Items.Count-1].MakeVisible(True); // ↑この部分
 end;
end;
865デフォルトの名無しさん:2009/02/04(水) 18:02:36
MakeVisibleにTrue渡した時はアイテムが見えてればスクロールされないから条件分岐いらないんじゃね

> for i := 1 to High(Strs) do
Strsに変数渡した時でも大丈夫?
ここら辺の仕様覚えて無いからよく分からないけど
866864:2009/02/04(水) 18:07:11
>>865
レスありがとうございます。
変数を渡すことがないので検証してません。
使い方としては
LVI(ListView1,['1行目','2行目','3行目'])
といった感じで追加するのですが、ScrollToEndがTrueの時は
最終行が表示されていれば、最終行にスクロールするという処理を入れてます。
逆に言うと、最終行じゃない場合は最終行にスクロールさせません。
867デフォルトの名無しさん:2009/02/04(水) 18:13:11
> 最終行が表示されていれば、最終行にスクロールするという処理を入れてます。
> 逆に言うと、最終行じゃない場合は最終行にスクロールさせません。
ならMakeVisibleいらないんじゃね?
MakeVisible(False)なら分かるけど
868864:2009/02/04(水) 18:27:08
>>867
MakeVisible(False)もMakeVisible(True)も動作としては変わりませんでした。
以下の挙動を実現するには、MakeVisibleは必須です。

追加する前に最終行が表示されてる場合→追加後最終行を表示
追加する前に最終行が表示されていない場合→スクロールしない
869デフォルトの名無しさん:2009/02/04(水) 19:02:06
そういう意味か・・・
だったらItems.Count-3はItems.Count-Length(Strs)じゃね?
870864:2009/02/04(水) 19:02:39
定期的に追加されるログの最新の行を見える状態にするのが自然だと思う。
ただ、スクロールして過去のログを見ている時に、ログが追加された場合、
勝手に最終行にスクロールされるのでは困る。
よって以上のことで実現させているのですが、
このような挙動がデフォルトで考慮されていないのは長年の疑問です。

嫌気がさして使い始めたVirtualTreesでもそのようなコマンドが見当たりません。
仕方がないので、自分でクラスを継承して、LastLine:Booleanという変数を保持し、
OnScrollで最終行であるかを毎回チェックし、行追加時にLastLineであれば
OffsetY := ClientHeight - VisibleCount*18;
で最終行を表示させて何とか凌いでいます。
871864:2009/02/04(水) 19:12:09
>>869
TopItem.Index + VisibleRowCount > Items.Count-3

Items.Count-1でも良かったのですが、スレッドで高速に追加してる関係で
余裕を持たせてました。以下の説明ではItems.Count-1とします。

ここの意味するところは、仮定すると分かりやすいのですが、
ListViewが現在100行のデータを保持し(Items.Count=100)、
表示出来る領域が3行(VisibleRowCount=3)とします。
現在97行目が1行目として表示されています(TopItem.Index=97)。
つまり、今現在最終行が表示されています(97+3>100-1)。
872864:2009/02/04(水) 19:34:39
すみません、訂正します。
97行目じゃなく、98行目が表示されている場合に最終行でした。

また、VisibleRowCountとTopItem.Indexが行の一部のみ表示などで1ずれることも考慮して
TopItem.Index + VisibleRowCount > Items.Count-2
とした方が良さそうです。

その意味でItems.Count-3にしたのを今になって思い出しました。
873864:2009/02/04(水) 19:41:56
>>871
現在98行目が1行目として表示されています(TopItem.Index=97)。と訂正。
874デフォルトの名無しさん:2009/02/04(水) 22:29:51
もうね、まず自分の中で落ち着いてまとめるのが先だろと
875864:2009/02/04(水) 22:53:02
>>874
ホントすみません・・言いたい事は>>864>>870だけです。
876860:2009/02/04(水) 23:57:02
>>861
一定期間はスクロールして見ることができれば良くて、古い物は消していきたかったのです。数千〜多くても万行くらい。

>>862
追加した一番下の行を表示している状態にしたかったのでaddは画面を更新する状態で行っていました。

何故かMemoを使用する考えしか頭の中になかったので、一連の流れを見てて目ウロコでした。
とりあえずListBoxを使って必要なスピードは得られたのでコレで満足します。ありがとうございました。

ListBox1.AddItem('ホゲ',nil);
ListBox1.ItemIndex := ListBox1.Count-1;
 :
if (ListBox1.Count > StrToInt(Edit1.Text)) then begin
 ListBox1.Items.BeginUpdate; try
 while (ListBox1.Count > StrToInt(Edit1.Text)) do
  ListBox1.Items.Delete(0);
 finally ListBox1.Items.EndUpdate; end;
end;
877デフォルトの名無しさん:2009/02/05(木) 02:16:19
>>876
最初の2行は
ListBox1.ItemIndex := ListBox1.Items.Add('ホゲ');
こうした方がすっきりするかも。
878デフォルトの名無しさん:2009/02/05(木) 08:29:11
いいんじゃね
879デフォルトの名無しさん:2009/02/05(木) 08:35:40
>>863
VirtualMemo っていうカスタムコンポが欲しくなった(・ρ・)
880デフォルトの名無しさん:2009/02/05(木) 22:48:11
>>877
イチイチnil指定するのがなんか格好悪くて、
items.addに変えてみる所までは自分で気が付いたのですが、
せっかくインデックスを返してくれるのでそのまま使った方が効率的ですね。
指摘ありがとうございます。
881デフォルトの名無しさん:2009/02/06(金) 12:32:22
コードと名称を持つテーブルを更新する処理なのですが、名細部(名称1と名称2)を入力変更すると、編集状態フラグがTrueになります。
編集途中でコードにカーソルを持っていくと編集中の確認メッセージを表示して、その結果で編集内容を破棄するかどうかを確認します。
このようなプログラムでコードEnterイベントの途中でメッセージダイアログを表示すると
なぜかコードのIMEがひらがな入力モードになってしまい、尚且つ、カーソルをあらわすピコピコ点滅が表示されなくなってしまいます。
これを回避する方法がなにかありませんでしょうか?
以下がソースになります。宜しくお願いします。
//使うコンポーネント//
CodeEdit1 : TEdit; //imeMode = imClose (コード)
MeisaiEdit1 : TEdit; //imeMode = imHira (名称1)
MeisaiEdit2 : TEdit; //imeMode = imHira (名称2)
//変数
HensyuFlg : Boolean; //編集状態フラグ
//CodeEdit1Enterイベント
prrocedure TFrmTEST.CodeEdit1Enter(Sender: TObject);
begin
 if (HensyuFlg = True) then
 begin
  if MessageDlg('編集内容を破棄してよろしいですか?', mtConfirmation, mbOKCancel, 0) = mrCancel then
  begin
    MeisaiEdit1.SetFocus;
    Exit;
  end;
 end;
 //名細部の初期化
 MeisaiEdit1.Text := '';
 MeisaiEdit2.Text := '';
 //編集フラグの初期化
 HensyuFlg := False;
end;
882デフォルトの名無しさん:2009/02/06(金) 15:07:51
DBGridの横スクロールを関知したいのですが方法あります?
883864:2009/02/06(金) 15:38:48
>>866
× LVI(ListView1,['1行目','2行目','3行目'])
○ LVI(ListView1,['1列目','2列目','3列目'])
以上のように訂正します。誤解を招いてしまい申し訳ありませんでした。

>>881
HensyuFlg := False;
の後に
CodeEdit.SetFocus;
を加えてみてはどうでしょうか?
私の環境(TurboDelphiExplorer)ではこの1行を入れることでうまくいきました。
884デフォルトの名無しさん:2009/02/06(金) 16:03:23
>>882
delphi スクロールバー messageでぐぐってみては?
885デフォルトの名無しさん:2009/02/06(金) 16:15:08
他のアプリの文字列を取得したいとも思いwinsght32でウィンドウ名とかを調べてみたのですが、
customとかsticとかになっていてウィンドウ名が出ていないところに取得したい文字列があります。
こういう場合どうすればいいか教えてください。

よろしくお願いします。
886881:2009/02/06(金) 16:18:33
>>883
早速のレスありがとうございます。
試してみましたが、状況が変化しないみたいです。
引き続きあれこれ模索してみます。
887デフォルトの名無しさん:2009/02/06(金) 17:28:50
>>881
imCloseの代わりにimDisableで試してみて
888881:2009/02/06(金) 18:28:09
>>887
imeMode全てで試してみましたが、変化ありませんでした。
Memo帳でもブラウザでもなんでも
入力途中で変換確定前に入力対象を失うと
画面の左上の方にIMEの入力がぽっかりと浮かぶことがありますよね。
あんな感じでフォーカスを見失ってるみたいなのです。
マウスで再度Editをクリックしてみても、カーソルがある時のピコピコが表示されないのです。

イメージ的には、Editにフォーカスがあたるという処理中が中断されてしまった為に、
Editの描画処理をやりかけのまま終えてしまっているような感じです。

889デフォルトの名無しさん:2009/02/06(金) 23:34:44
>>884ども
Messageって言うキーワードを思いつかない程の初心者なんで助かりました。
いろいろ出てきたんで回り道してみます。
890デフォルトの名無しさん:2009/02/08(日) 13:11:00
こんな感じでedit置くサンプル無いですか?
http://www.vector.co.jp/magazine/softnews/090207/n09020721_pic.html
891デフォルトの名無しさん:2009/02/08(日) 20:41:31
TDate型に代入できる年月日の上限とか下限とかってありますか?
892デフォルトの名無しさん:2009/02/08(日) 21:01:38
ある。TDateTimeでヘルプ見ると範囲が載ってたはず。
893デフォルトの名無しさん:2009/02/08(日) 21:13:08
>>892
D6だと下限はあるが上限はないなあ


Writeln(SysUtils.DateTimeToStr(Math.MinDouble));
Writeln(SysUtils.DateTimeToStr(Math.MaxDouble));
でいけると思ったが下がいかん
894デフォルトの名無しさん:2009/02/08(日) 22:24:53
TDateTime型が実装しているのはグレゴリオス暦なので、日本では事実上明治何年だかの改暦以降でないと
実用にならない。西欧の日付を扱うときも同様で、各国/地域のグレゴリオス改暦以降となる。つまり値の範囲
ではなく日付の数え方で制限されてしまう。逆にここを自前で実装するなら上限同様に値の範囲で制限されると
考えてよい。そこで上限のほうなのだが、TDate型と書いているので日付のみ誤差なく扱えればよいとするなら、
Double型で扱える整数値の上限を考えることになる。Double型の有効桁数は10進換算で約15桁、つまり
概ね1,000,000,000,000,000日を扱える。これを年に直すと2,739,726,027,397年で、プラスマイナス
約1兆3千億年といったところ。

要約するとグレゴリオス改暦以降なら弥勒菩薩様がいらっしゃってもまだ全然余裕。
895デフォルトの名無しさん:2009/02/08(日) 23:37:17
どうでもいいけど、符号は仮数とは別にある。
896デフォルトの名無しさん:2009/02/08(日) 23:39:43
あ、そういやそうでしたな。結論に変わりはないけど。
897デフォルトの名無しさん:2009/02/09(月) 11:26:59
D6とDSPack 2.3.3でキャプチャーするソフトを作成しているのですが
キャプチャデバイスの入力(チューナー/S端子)の切替ができないので教えてもらえますか?
IAMCrossbarを使えばできることはわかったのですがDelphiでのサンプルがないので
var
 FilterGraph: TFilterGraph;
 Filter: TFilter;
 SampleGrabber: TSampleGrabber;
 VideoWindow: TVideoWindow;
 PinList: TPinList;
 SysDev: TSysDevEnum;
 VideoMediaTypes: TEnumMediaType;

SysDev:= TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);
Filter.BaseFilter.Moniker := SysDev.GetMoniker(0);
FilterGraph.Active := true;
// 解像度
PinList:= TPinList.Create(Filter as IBaseFilter);
try
 VideoMediaTypes.Assign(PinList.First);
 with (PinList.First as IAMStreamConfig) do
 begin
  SetFormat(VideoMediaTypes.Items[1].AMMediaType^);
 end;
finally
 PinList.Free;
end;
with FilterGraph as ICaptureGraphBuilder2 do
 RenderStream(@PIN_CATEGORY_PREVIEW, nil, Filter as IBaseFilter, SampleGrabber as IBaseFilter, VideoWindow as IBaseFilter);
FilterGraph.Play;

お願いします
898897:2009/02/09(月) 11:40:53
連投すみません
ttp://www.geekpage.jp/programming/directshow/crossbar-3.php
(複数のアナログ入力があるデバイスを扱う)を読んだのですが
DSPack 2.3.3だとIAMVideoControlを使うのかな?くらいしかわかりませんでした
899891:2009/02/09(月) 17:33:43
>>892-896
ありがとうございます

>>894
もし今後下生絡みのプログラムを作ることになっても安心してTDate型を使いたいと思います
900デフォルトの名無しさん:2009/02/09(月) 18:57:06
Delphi で WinRing0 使ってる方っています?
901デフォルトの名無しさん:2009/02/09(月) 22:53:20
ある。なにか聞きたい?
902デフォルトの名無しさん:2009/02/10(火) 09:34:50
Intel+WindowsXP+Delphi7+WinRing0(1.2.1.17)で開発し、この環境では
CPU情報を取得できたのですが、AMD+Vistaで実行すると
InitializeOls DLLがエラーになるのです。
903デフォルトの名無しさん:2009/02/10(火) 12:41:16
そういうのは詳細添えて開発元に聞いた方がいいんじゃないか?
904897:2009/02/10(火) 23:35:24
Cのコードを参考に書いてみたんですがうまくいきません
ポインタはほとんど使ったことがないのですがどうやったらいいでしょうか?
いまはpCrossbarのget_PinCountsでエラーがでてしまいます
var
 FilterGraph: TFilterGraph;
 Filter: TFilter;
 SampleGrabber: TSampleGrabber;
 VideoWindow: TVideoWindow;
 SysDev: TSysDevEnum;
pCrossbar: ^IAMCrossbar;
nInput, nOutput: Longint;

SysDev:= TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);
Filter.BaseFilter.Moniker := SysDev.GetMoniker(0);
FilterGraph.Active := true;
with FilterGraph as ICaptureGraphBuilder2 do
begin
 if FindInterface(@LOOK_UPSTREAM_ONLY, nil, Filter as IBaseFilter,
IID_IAMCrossbar, Pointer(pCrossbar)) = S_OK then
 begin
  pCrossbar^.get_PinCounts(nOutput, nInput);
 end;
 RenderStream(@PIN_CATEGORY_PREVIEW, nil, Filter as IBaseFilter,
SampleGrabber as IBaseFilter, VideoWindow as IBaseFilter);
end;
FilterGraph.Play;
905デフォルトの名無しさん:2009/02/10(火) 23:41:55
Delphiのinterfaceはclassと一緒でポインタだから、Cと違ってポインタとして宣言しなくていいと思う
906897:2009/02/11(水) 09:44:41
905
var pCrossbar: IAMCrossbar;としたらちゃんとCrossbarを操作できました
ありがとうございました
907デフォルトの名無しさん:2009/02/11(水) 11:33:23
2chで解決したDelphi質問をFAQ収集するスレ
http://pc.2ch.net/tech/kako/1004/10045/1004501183.html

Q. Label の Caption 変更時のちらつきをなくしたい
A. http://piza2.2ch.net/test/read.cgi/tech/999482946/47
http://piza2.2ch.net/tech/kako/999/999482946.html
47 名前: 正しい答え 投稿日: 01/09/04 04:49 ID:QTCWvBIA
Form の DoubleBufferd を True にしなさい。

ただし Tlabel.Repaint; を呼んではいけない。
908デフォルトの名無しさん:2009/02/11(水) 22:10:38
初心者です。どなたか教えてください。

checklistboxのアイテム1がチェックされていたら・・・
という条件は、

if checklistbox.itemindex[1].checked then

と考えたのですが、エラーが出てしまいました。
どなたか正解を教えてください。
909デフォルトの名無しさん:2009/02/11(水) 22:19:09
ヘルプを読んだりググったりしてプロパティを理解する
910デフォルトの名無しさん:2009/02/12(木) 01:52:08
>>908
アイテム1ってのが一番目のアイテムのことを指してるなら
インデックスは0にしないとだめ
911デフォルトの名無しさん:2009/02/12(木) 20:54:21
Developer Studio 2006 というバージョンですが
ツールパレットのstandardにTextBoxがありません
コンポーネントの追加にもTTextBoxがないようです。
もう1回インストールし直したほうがいいのでしょうか?
912デフォルトの名無しさん:2009/02/12(木) 21:18:37
Delphi TTextBox に一致する日本語のページ 約 2 件中 1 - 4 件目 (0.46 秒)
日本語指定外すとかなり増えるがまあそういうことだ
913デフォルトの名無しさん:2009/02/12(木) 21:25:04
1行入力ならTEdit
複数行入力ならTMemo
914911:2009/02/12(木) 21:46:15
>>913
ありがとうございます。
Editですね。

そういえば、そうですよね。
915デフォルトの名無しさん:2009/02/13(金) 00:19:54
そのレベルでよくBDSなんて使おうと思ったなw
916デフォルトの名無しさん:2009/02/13(金) 07:21:17
どのレベルならBDSを使ってもいいのかはよくわからないけど、
ヘルプでTTextBoxを検索してみても良かったかもね。
917デフォルトの名無しさん:2009/02/13(金) 08:44:13
>>915
ヒント:くだすれDelphi(超初心者用)
918デフォルトの名無しさん:2009/02/13(金) 21:58:26
>>910
それぐらい知ってるわボケ
919デフォルトの名無しさん:2009/02/14(土) 08:59:54
>>918
ヒント:くだすれDelphi(超初心者用)
920デフォルトの名無しさん:2009/02/14(土) 10:52:50
Delphi6で作ったプログラムを最小化の状態で起動しようとして、
別のプログラムで
ShellExecute(Handle,nil,PChar(FileName),nil,nil,SW_MINIMIZE);
としたんですが、通常状態で起動されてしまいます。なぜでしょう。
921デフォルトの名無しさん:2009/02/14(土) 11:52:45
>>920
最小化状態で起動しようとしているプログラムが
VCLを使って作成されているならば、
アプリケーションウインドウは、最小化状態で起動されても、
Form1は、最小化状態でShowWindowされないから。
922デフォルトの名無しさん:2009/02/14(土) 12:09:52
>>921
なるほど。すると起動する側で制御することはできないのでしょうか。
(起動される側はDelphiだけではないです)
923デフォルトの名無しさん:2009/02/14(土) 12:29:02
Windowが一瞬表示されてもいいなら、
Form1のhandle捕まえて、メッセージ投げるか、
表示されるのがいやなら、フックするとか...
924デフォルトの名無しさん:2009/02/14(土) 13:34:57
>>908
if checklistbox.items[1].checked then
925デフォルトの名無しさん:2009/02/14(土) 17:06:20
今まで使った事なかったんだけどコードエクスプローラーって
エディタのタブ移動すると収納されるんだな、使えねー。
926デフォルトの名無しさん:2009/02/14(土) 18:03:47
memoの内容を別のmemoにまるまる移したいのですがその方法がわかりません><
だれか教えてください。
memo1.lines.add(memo1.lines)
だとだめですよね。。
927デフォルトの名無しさん:2009/02/14(土) 18:08:27
memo2.Lines.Text:=memo1.Lines.Text;
928デフォルトの名無しさん:2009/02/14(土) 18:10:41
Memo1の内容をMemo2にコピー
Memo2.Lines.Assign(Memo1.Lines)
929デフォルトの名無しさん:2009/02/15(日) 01:54:59
>>920
Application.Minimizeは試してみた?
930デフォルトの名無しさん:2009/02/15(日) 14:04:28
この人何言ってるの?
931デフォルトの名無しさん:2009/02/15(日) 14:06:36
君には理解できないことを言ってる
932デフォルトの名無しさん:2009/02/15(日) 14:10:50
ヒント:スレタイ
933デフォルトの名無しさん:2009/02/15(日) 16:20:11
起動される側のプロジェクトソースを触れるのならこうしろということでは?
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 with Application.MainForm do
  case CmdShow of
   2,6,7:WindowState:=wsMinimized;
   3:WindowState:=wsMaximized;
  else WindowState:=wsNormal;
  end;
 Application.Run;
934ひよひよ ◆hiyoIS5MM. :2009/02/15(日) 21:01:53
>902
Vista 環境で失敗するのは、UAC のため管理者権限なしで実行されるためです。
とりあえず右クリックメニューの『管理者として実行』を使って管理者として
実行してください。これで動作すると思います。
UAC についてはネットなどで多数の情報が得られると思います。
935デフォルトの名無しさん:2009/02/15(日) 22:03:32
インターネットとお話しするライブラリとしてIndy以外にはSynapseやICSなどの話を聞きます
そこそこよければ使いたいと思うのですが、どんな感じですか?
936デフォルトの名無しさん:2009/02/16(月) 00:57:25
Indy じゃ何が不満なの?
937935:2009/02/16(月) 01:09:32
巨大だとか、自分でソースを追いずらいとか、バグがあるとよく言われるとか、です
ソースを追いづらいのは自分のスキルがいかんのかもしれませんし、
バグがあるというのはガセかもしれませんが・・・
938デフォルトの名無しさん:2009/02/16(月) 03:01:14
ブロッキングソケットベースなのはIndyのデメリットだと思う。
タイムアウトや中断処理の自由度が低い。
これをソース見てselectで書き直す事はできるんだろうけど、
物がネットだけに半可な知識で手を出すとよそに迷惑をかけないとも限らないし。

確か公式ではソースの見通しがよいというブロッキングのメリットが挙げられていたけど、
応答ごとに逐次処理をしようとしたら結局は非ブロッキングとあまり変わらないんだよな。
939デフォルトの名無しさん:2009/02/16(月) 05:16:16
それ以前に
Indyは日本語処理がバグだらけ。
結局
TIdMessageクラスを自前で作り直したよ。
940デフォルトの名無しさん:2009/02/16(月) 06:50:26
Synapseがいいらしい
自分は自作だけど
941デフォルトの名無しさん:2009/02/16(月) 07:43:28
>>938
スレッド使うのが常識ジャン。ばかじゃね。
942デフォルトの名無しさん:2009/02/16(月) 11:59:30
それがデメリットって話でしょ。
943デフォルトの名無しさん:2009/02/16(月) 12:03:18
スレッド使うのがデメリットって
Del房はどんだけレベルが高いんだよw
ちなみに非ブロッキングはWin3.1の負の遺産だってさw
http://www.swissdelphicenter.ch/en/showarticle.php?id=4
944デフォルトの名無しさん:2009/02/16(月) 20:41:47
>>941
はぁ?
それでタイムアウトや中断処理がどう解決できるんだよw
945デフォルトの名無しさん:2009/02/17(火) 01:18:02
Del は Web アプリには不向き。これがFA。
946デフォルトの名無しさん:2009/02/17(火) 06:42:34
おまえはプログラマに不向き。これがFA。
947デフォルトの名無しさん:2009/02/17(火) 14:38:30
Turbo Delphiを使っています。
Form上にTImageとTStringGridを配置しました。
これを重ねたときにTImageが上に表示されるようにしたいのですが、
コントロール>前面に移動を選択しても上に表示されずに困っています。
BringToFrontやSendToBackも試しましたが駄目でした。
どうすればいいか教えてください!
948デフォルトの名無しさん:2009/02/17(火) 15:44:08
>>947
Panelにでも貼っとけ。
949デフォルトの名無しさん:2009/02/17(火) 16:09:48
外部アプリのコントロールのテキストを取り込みたい時ってgetwindowtextを使うと思いますが、
例えば、リストボックスに入っている複数行のテキストを取得したい時とかは、
どうすればいいんでしょうか。

教えてください。
950デフォルトの名無しさん:2009/02/17(火) 16:15:31
>>949 APIスレで聞いて
951デフォルトの名無しさん:2009/02/17(火) 16:15:36
>>948
解決しました、サンクスです!!
952デフォルトの名無しさん:2009/02/17(火) 16:20:19
>>950
了解です。
953デフォルトの名無しさん:2009/02/17(火) 18:03:13
>>934
ありがとうございます。「管理者として実行」してみたら動きました。
しかし…今度は RdmsrEx でエラーが… AMDのノートPCだから MSR を
サポートしてないのかなあ。
でも何だかスレチぽくなってきたので以上にします。どもでした。
954デフォルトの名無しさん:2009/02/18(水) 04:23:57
教えてください。
http://homepage1.nifty.com/MADIA/delphi/delphi_bbs/200402/200402_04020074.html
ここの状況とまったく同じ状態になり、同じ対策をしようと思ったのですが
Delphiの下記コードの
procedure TForm1.ApplicationEvents1Exception(Sender: TObject;E: Exception);
var
n : Integer;
begin
if E is EInOutError then
n := IOResult; // IOエラーコードを取得してエラーをクリア
end;

if E is EInOutError then この部分をBuilderでどのように記述するのかわかりません。
if(E==EInOutError){hoge;}とするとエラーになりました。
どうすればいのでしょうか。
955935:2009/02/18(水) 04:30:17
956デフォルトの名無しさん:2009/02/18(水) 04:30:47
名前消し忘れたごめんなさい
957デフォルトの名無しさん:2009/02/18(水) 04:36:41
すいません、スレ違いでした。
958デフォルトの名無しさん:2009/02/18(水) 05:38:45
Turbo Delphiで斜め線を引くコンポーネントってありますか?
TShapeでは無理ですよね?
959デフォルトの名無しさん:2009/02/18(水) 05:51:44
Canvas.MoveTo(0, 0);
Canvas.LineTo(100, 100);
960デフォルトの名無しさん:2009/02/18(水) 08:01:12
コンポーネントでお願いします
961デフォルトの名無しさん:2009/02/18(水) 08:12:12
すみません相当くだらない質問ですがお願いします。

親フォームの上下左右にアンカー設定したImageコンポーネントを塗りつぶせば、
フォームのリサイズに追従する長方形が描けるのかなと思い、
↓の様に書いてみたんですが、縮みはするんですが元の大きさより伸びてくれません。

procedure TForm1.FormCreate(Sender: TObject);

begin

 Image1.Canvas.Brush.Color := RGB(255,255,255);
 Image1.Canvas.FillRect(Rect(0,0,Image1.Width,Image1.Height));

end;

//フォームのリサイズイベント
procedure TForm1.FormResize(Sender: TObject);

begin

 Image1.Canvas.Brush.Color := RGB(255,255,255);
 Image1.Canvas.FillRect(Rect(0,0,Image1.Width,Image1.Height));

 //Label1.Caption := '幅' + InttoStr(Image1.Width) + ' 高さ' + InttoStr(Image1.Height);

end;

ラベルに表示させてみたところImageコンポーネントの大きさはちゃんとフォームに追従しているようなのですが・・・
何が悪いんでしょうか?
962デフォルトの名無しさん:2009/02/18(水) 11:04:04
線を引くコンポーネントはないな。
PaintBoxあたりから派生して作ればすぐだけど。
963デフォルトの名無しさん:2009/02/18(水) 11:51:50
>>961
追従する長方形だけならTPanelにアンカーつけて色変えれば?
964デフォルトの名無しさん:2009/02/18(水) 14:24:47
>>949
これをリストボックス用に変える
リストボックスと見せかけてリストビューということも稀によくある
http://mrxray.on.coocan.jp/Halbow/VCL08.html
965デフォルトの名無しさん:2009/02/18(水) 19:40:22
稀なのかよくあるのかどっちだ。
966デフォルトの名無しさん:2009/02/18(水) 20:35:07
>>961
コンポーネントの大きさは変わっても塗りつぶした Canvas の TBitmap は変わらない
963の言うようにTPanelにするかTShapeにするか
塗りつぶしはテストで実は画像を……っていうならアンカーで楽せず自分で処理
967デフォルトの名無しさん:2009/02/19(木) 03:25:18
質問です。
Delphiでゲームを作っています。
ハイスコアを記録したいのですが、
私はINIファイル/テキストファイルとして保存する方法しか知りません。
これではテキストエディタですぐ改変できてしまいます。
バイナリファイルとして各データを保存する方法を教えて下さい!
968デフォルトの名無しさん:2009/02/19(木) 03:29:30
一応言っておくと、バイナリでも簡単に改変できます。
iniファイルでも、チェックサムを一緒に記録しておけば、簡単には改変できません。
969デフォルトの名無しさん:2009/02/19(木) 03:35:47
暗号化するのが手っ取り早い。
パスワードは"GAME"とか適当に決め打ちして。
ライブラリはdelphi cryptで検索すればいくつも出てくるだろう。
970デフォルトの名無しさん:2009/02/19(木) 16:03:57
xorだけでいいんじゃない?
971デフォルトの名無しさん:2009/02/19(木) 16:21:02
>>967 一例。
var
User:String[12];
Score:Integer;
procedure ScoreWrite;
var
 F:TFileStream;
begin
 User:='POKEMON';
 Score:=12000;
 F:=TFileStream.Create('C:\test.dat',fmCreate);
 try
  F.WriteBuffer(User,SizeOf(User));
  F.WriteBuffer(Score,SizeOf(Score));
 finally
  F.Free;
 end;
end;

procedure ScoreRead;
var
 F:TFileStream;
begin
 F:=TFileStream.Create('C:\test.dat',fmOpenRead);
 try
  F.ReadBuffer(User,SizeOf(User));
  F.ReadBuffer(Score,SizeOf(Score));
 finally
  F.Free;
 end;
end;
972デフォルトの名無しさん:2009/02/19(木) 18:16:29
Del6使ってるんですが、ボタンやパネルをマックのギミックみたいに
バウンドしてるように見せることって出来ますか?
最初ゆっくり上昇してだんだん早く何回かバウンドして戻るみたいなのが
やりたいんです。
どなたか教えてください。
973デフォルトの名無しさん:2009/02/19(木) 19:16:33
サインカーブとかじゃね?
974デフォルトの名無しさん:2009/02/19(木) 19:24:02
よく知らんけど、ぼよんぼよんってするんかな。
作るのはかなり面倒くさそうだ。
975デフォルトの名無しさん:2009/02/19(木) 20:33:13
新手のウィルスか

そのボタンを押せなければ
ハードディスクドライブをフォーマットされるという
976デフォルトの名無しさん:2009/02/19(木) 22:23:41
>>970
xorだけで暗号化するのは、ロッカーにガムで鍵をするようなもんだ。
とどこかで読んだことがある。
977デフォルトの名無しさん:2009/02/20(金) 00:06:06
適材適所
ゲームのハイスコアにAESとか使っても仕方ないだろ
978デフォルトの名無しさん:2009/02/20(金) 02:02:13
いずれにせよ覚えておいて損はないと思う。BlowFishとか。
979デフォルトの名無しさん:2009/02/20(金) 03:05:38
AESのライブラリとかないのかな。
980デフォルトの名無しさん:2009/02/20(金) 08:07:37
Delphi 2009 で、自分で作ったパッケージに登録されている
コンポーネントを編集(再構築?)したり、
そのパッケージに新たにコンポーネントを追加したりしたいのですが、方法がよく分かりません。

メニューバーの「コンポーネント>パッケージのインストール」で「設計時パッケージ」の一覧を見ると、
自分で作ったパッケージ(C\Documents and Setting 〜〜 package1.bpl)は表示されているのですが、
「編集」ボタンが効きません。
(なので、ここから先に進めません)

どうすればよいでしょうか?
981デフォルトの名無しさん:2009/02/20(金) 16:12:52
パッケージのプロジェクトファイルを開いて編集すればいい。
982デフォルトの名無しさん:2009/02/20(金) 19:19:17
使いづれぇーー
983デフォルトの名無しさん:2009/02/20(金) 23:12:34
Delphiのバージョン5をしぶとく使い続けてるんだけど、MYSQL5だと、うまくレコードが表示されないんだよ。
MYSQL4だと正常なんだけど。

何を設定すればいいの? MYSQLは4でも5でもsjisに設定してるけど。

あ、ODBC経由でテーブルを開くアプリね。
984デフォルトの名無しさん:2009/02/20(金) 23:12:58
左右の矢印キーが押されたらプロシージャを実行したいのですが、
ヘルプを見ると、フォームのキープレス、ダウン、アップのイベント
は矢印キーではイベントが起きないようなことが書いてあるのですが、
何か方法はないでしょうか?
よろしくお願いします。
985デフォルトの名無しさん:2009/02/20(金) 23:45:58
986デフォルトの名無しさん:2009/02/21(土) 10:53:42
Tchartにて、動的にタイトルを変更したいのですが、プログラム上から変更する方法を教えてください。
987デフォルトの名無しさん:2009/02/21(土) 11:45:59
>>986
Chart1.Title.Text[0] := 'ぶひ';
988デフォルトの名無しさん:2009/02/21(土) 12:37:41
有難うございました。
989デフォルトの名無しさん:2009/02/22(日) 05:47:32
>>972
マックだかモスだかのギミックは知らんが、あんたは高校物理の基礎の基礎から始めたほうがいい希ガス
>最初ゆっくり上昇してだんだん早く
主にこの辺読んだ印象だけど

面倒だけど難しくはないよ
所望の挙動はどうか知らないけど普通のバウンドだったら
まずは等速で動かすプログラム(座標に速度を毎回足す)
次に座標がある値以上で速度を反転させるプログラム
次に速度に一定の値(加速度)を足し続けるプログラム
最後に反転時に速度に0〜1の係数(反発係数)かけるようにするって感じで練習してけばいいんじゃね
990デフォルトの名無しさん:2009/02/22(日) 06:44:07
y=abs(sin(θ))*x みたいな式で簡単に作れそうだけどなあ。
991デフォルトの名無しさん:2009/02/22(日) 06:46:01
ああごめん、ちょっと違うな。

y=abs(sin(n/x))*x

こんな感じかな。
992デフォルトの名無しさん:2009/02/22(日) 06:53:51
>>989
お前が高校からやり直せ
993ななしへたぐらま ◆XcB18Bks.Y :2009/02/22(日) 13:25:16
>>970
XORだと総当たりチェックで簡単にバレてしまいます。
1バイトごとにXORだと256回チェックしておしまいです。
994デフォルトの名無しさん:2009/02/22(日) 13:30:19
適材適所だっつーの
そもそもなぜ1バイトに限定してんだよ
995デフォルトの名無しさん:2009/02/22(日) 15:07:18
その前に、必死になって ini ファイルの暗号解きたくなるようなゲームつくれんの?
996デフォルトの名無しさん:2009/02/22(日) 15:26:31
>>992
バウンドと単振動は違うだろ
997デフォルトの名無しさん:2009/02/22(日) 19:39:44
D6 をXp で動かしているんですが、デスクトップを保存にチェックしていても、起動すると
前回ひらいていた .bpgではなく、C:\program files\Borland\Delphi6\Projects のProjectGroupe1
というのが開いてしまいます。
これを自分で保存したたとえば D:\Delphi\MyPrj.bpg を開くようにするにはどうしたらよいのでしょうか?
998デフォルトの名無しさん:2009/02/22(日) 19:53:31
998 !!!!!!!!!!!!!!!!!!!!!!!!!
999997:2009/02/22(日) 20:23:40
わかりました。 .dpr を2個以上含めれば、自動で次回も疎sのbpgを開くし、デスクトップ状態も
復活するのですね!
1000デフォルトの名無しさん:2009/02/22(日) 21:45:42
1000!!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。