くだすれDelphi(超初心者用)その48
at TECH
1:デフォルトの名無しさん
08/11/03 00:50:40
Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を
勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが
お礼はDelphiの布教と初心者の救済をお願いします。
<前スレ>
くだすれDelphi(超初心者用)その47
スレリンク(tech板)
<過去スレ>
DelWiki避難所(Delphi 関連の過去スレッド)
URLリンク(delwiki.info)
2:デフォルトの名無しさん
08/11/03 00:52:24
<関連スレ>
【Delphi】 Indyコンポーネント 【C++Builder】
スレリンク(tech板)
Delphi初心者のための寺子屋
スレリンク(tech板)
delphiで作った有名ソフトって何があるの?
スレリンク(tech板)
Delphi持ってるならGLSceneを使え
スレリンク(tech板)
【Delphi互換!?】FreePascal【GPL】
スレリンク(tech板)
【Delphi】 ゲームつくるぞ(゚Д゚)ゴルァ 2【Delphi】
スレリンク(gamedev板)
Delphiでアクションゲームが作りたい!! Part2
スレリンク(gamedev板)
ネットワークゲーム作成のお勉強(Delphi専用スレ)
スレリンク(gamedev板)
delphiでMMO
スレリンク(gamedev板)
3:デフォルトの名無しさん
08/11/03 03:39:45
おう
4:デフォルトの名無しさん
08/11/03 04:41:51
デルッピィ
5:デフォルトの名無しさん
08/11/03 04:57:56
Delphiがんばれ、というか、Borlandがんばれw
昔のUIがDelphi、処理がCとか懐かしいな・・
お、1.0のディスクが出てきた。。。
6:デフォルトの名無しさん
08/11/03 07:43:12
Borlandは星になりましたが?
7:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/03 10:27:13
HRESULTはSystem.pasでtype Longint;と定義されてるが?
9:デフォルトの名無しさん
08/11/03 17:22:40
無料の某6使ってるけど
アクションマネージャってなに?アクションリストとは全然違うの?
10:デフォルトの名無しさん
08/11/03 17:32:27
つヘルプ
11: ◆XcB18Bks.Y
08/11/03 17:39:41
>>1
乙であります。
12:デフォルトの名無しさん
08/11/03 17:46:20
>>10
ごめんヘルプ見ても理解不能
アクションバンドとか出てきたし
3行でいいから特徴をおせーてプリーズ
13:デフォルトの名無しさん
08/11/03 17:59:27
>>12
タイトル見ようぜ
> 新しいアクション機能(Professional 版および Enterprise 版)
14:デフォルトの名無しさん
08/11/03 18:42:41
>>13
それはわかっとる
Personalで使えないからどんなもんか知る術がない
15:デフォルトの名無しさん
08/11/03 18:43:20
>>13
それはわかっとる
Personalで使えないからどんなもんか知る術がない
16:デフォルトの名無しさん
08/11/03 18:44:17
どうあがいても使えないものを必死に使いこなそうとする男の人って・・・
17:デフォルトの名無しさん
08/11/03 18:46:56
いや使えないことはわかっとるがな
どんなもんかちょっと聞いてみただけやがな
ちょっと3行で教えてーなプリーズ?
18:デフォルトの名無しさん
08/11/03 22:47:07
>>9
Office2000形式のメニューとか作れるんじゃなかったか。
Actionをドラッグ&ドロップして。
19:デフォルトの名無しさん
08/11/03 22:51:52
>>5
昔はCで書かれてたのかぁ
無料のTurboDelphiインストールしようとしたら、.NetとかJ#とかMSですら使ってない
ような物を入れさせられて嫌だったなぁw
ちゃんと全部Delphiで書いて貰いたいものだ
20:デフォルトの名無しさん
08/11/03 22:54:36
>>19
> 昔はCで書かれてたのかぁ
Delphiは最初からDelphi製でしょ。
> 無料のTurboDelphiインストール
今はそうでも無いよ。
21:デフォルトの名無しさん
08/11/03 22:56:42
「今は」ってどういう意味?
Delphi2009が.NETいらなくなってってこと?
それがどうTurboDelphiに掛かってるのか良く分からない
22:デフォルトの名無しさん
08/11/03 22:58:35
>>20
あ、そういう事ね
自分でアプリ作るときにUIだけDelで作って、処理はCで書いてたって意味かな?
23:デフォルトの名無しさん
08/11/03 23:02:50
>>17
使った事ないんであれだけど、動的UI作れるんじゃないのかな?
D&Dでメニューやツールバーを動的に構築できるとかいう話かなと、わからんけど
24:デフォルトの名無しさん
08/11/03 23:16:02
>>21
> Delphi2009が.NETいらなくなってってこと?
.NET SDKはほぼ100%要らない。
ヘルプビューワーのみ。ドキュメントのインストールも無し。
.NET ランタイムは要る。
25:デフォルトの名無しさん
08/11/03 23:32:52
>>24
で、「無料」のTurboDelphiへの批判レスにはそれが妥当だと思ったわけだね
26:デフォルトの名無しさん
08/11/04 00:08:27
話しかみ合ってる?
27:ななしへたぐらま ◆XcB18Bks.Y
08/11/04 17:45:15
データベースに関する質問です。
画像を格納できるテーブルを作成・編集するアプリを開発中なのですが
クライアントの要望で音声も格納できるようにしようとしています。
しかし音声にはDBImageコンポみたいなコンポがありません。
ググってもTorryをみてもそれっぽいコンポを見つけらなかったのですが
何か良いコンポはありますでしょうか。
28:デフォルトの名無しさん
08/11/04 19:49:25
バイナリーで保存するんじゃねーの。
29:ななしへたぐらま ◆XcB18Bks.Y
08/11/04 21:42:32
やはり自前で実装ですかね。
DBWaveコンポ(仮称)つくってみます。
30:デフォルトの名無しさん
08/11/04 23:54:23
SQliteでバイナリも保存できるんじゃね?
31:デフォルトの名無しさん
08/11/05 16:24:46
>>27はDB awareなコンポーネントないか聞いてるのにバイナリだの
なんだの見当違いなこと言ってる秋の夕暮れ
32:デフォルトの名無しさん
08/11/05 22:47:04
「じゃね」使いはアホ。
33:デフォルトの名無しさん
08/11/06 06:03:05
俺Jane使ってるよ
使いやすくてオススメ!
34:デフォルトの名無しさん
08/11/06 10:42:06
既存のデータの入ってる実際に使っているテーブルに
新たにフィールドを追加する必要がでてきました。
TTableで
フィールドA
フィールドB
があるテーブルに
「フィールドCがなければフィールドCを追加」
という処理をしたいんですがどのようにすればいいんでしょうか?
TQueryのSQLを使ってALTER TABLE ... ADD ...すればフィールドは追加できますが「フィールドCがなければ」という処理をどう書いていいかわかりません。
Table.FindField('フィールドC') = nil
で調べれるのかとも思ったのですが、これはTFieldがあるかどうかを調べるだけで、データベース内にフィールドがあるかまでは調べてくれません。
いったんテーブルを削除して作り直せば簡単には出来ますが
レコードは残したままでやりたいのです。
何かいい方法はありますでしょうか?
35:デフォルトの名無しさん
08/11/06 11:44:59
TableXXX.FieldDefs.IndexOf('フィールドC') < 0
36:デフォルトの名無しさん
08/11/06 12:13:11
引継ぎもなく、古いDelphiの修正しろといわれたのですが、
実行してみようとすると
wwDataInspector, wwrcdpnl, wwdblook,TwwDBLookupCombo
などがないと言われます。
これらはどういうコンポーネントを入れればいいのでしょうか?
Delphi2006をいれたのですが、元のプロジェクトはどのバージョンか不明です。
37:デフォルトの名無しさん
08/11/06 12:14:05
Explorer終了すると
---------------------------
Error
---------------------------
Runtime error 217 at 019CF57D
---------------------------
OK
---------------------------
とかいうエラーが出るんだけど常駐しているDelphi製アプリと関係ある?
38:デフォルトの名無しさん
08/11/06 12:19:26
>>36
そのくらいググレカス
39:デフォルトの名無しさん
08/11/06 22:25:47
>>37
Explorer終了ってつまりシャットダウンとかログアウトだよな
40:デフォルトの名無しさん
08/11/07 01:23:44
>>34
Firebird / Interbaseならrdb$relations
Oracleならuser_tab_columns
を検索
ほかのDBはシラネ
41:36
08/11/07 12:25:08
>>38
いやまじググッてもでなくて。
DelphiてVerごとの上位互換とか結構高いんですか?
42:デフォルトの名無しさん
08/11/07 12:26:40
検索して出てこないなら内部で作ったコンポなんじゃないの。
CDだかPCだかを全grepしてみたら。
43:デフォルトの名無しさん
08/11/07 14:48:46
>>41
wwと接頭辞付いてるところ見るとInfoPowerのコンポーネントかな。
URLリンク(www.woll2woll.com)
44:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/07 15:09:30
>>44
なんか色々とおかしいぞ・・・
46:デフォルトの名無しさん
08/11/07 15:21:17
つーかなんのためにsender持ってんだ
47:デフォルトの名無しさん
08/11/07 15:46:51
endが変な位置に行ったのはコピペしたからですwすいません。
Sender使ってif(Sender <> RadGrpKey1)then
を追加してみたけどだめでした。。。
48:デフォルトの名無しさん
08/11/07 18:41:41
DELPHI6での
コンポーネントとパッケージとパレットの関係を教えてください。
DELPHIは拡張子が多すぎて初心者の方は混乱しませんか?
49:デフォルトの名無しさん
08/11/07 22:57:21
>>44
RadioGroupの場合、フォーカス持ってるのは中のRadioButtonだから。
ActiveControl is TRadioButtonかどうか見て、さらにそのParentを調べるか
RadioGroupのOnEnterとOnExitでフラグ立てるかお好きな方で。
50:デフォルトの名無しさん
08/11/08 04:46:04
ちょいと教えて欲しいんですが、Captionを欧文フォントにして
全角(漢字とか)入れると急激に重くなるのはどういうことでしょうか。
これをC++Builderで書くと、ほんの少し軽くなる。
これってDelphiが悪いのか、WINDOWSが悪いのか
良くわからないんですけど、誰か知ってたらお願いします。
51:デフォルトの名無しさん
08/11/08 08:40:35
Delphi/C++Builderのバージョン、OSを明示すべし。
52:41
08/11/08 09:29:32
>>43
ありがとうございます。
DelphiってBorlandしかコンパイラーとか作ってないのかと思ってましたが、
別のIDEとかもあるんですね。
しかし、前任者はなぜこれを使ってたのか。。
53:ななしへ(ry ◆XcB18Bks.Y
08/11/08 09:38:43
>>50
OpenTypeの欧文フォントで文字セットを日本語にすると
日本語の文字が出てくるたびに
あらかじめ関連づけられた日本語フォントファイルからフォントを持ってくるという
面倒なことをやっていますのでガクッと重くなるのかもしれません。
(駅の売店でものを売るときに奥の棚から商品を引っ張り出すような感じでは?)
BCBが若干軽いのはBCB未経験ゆえにわかりませんが
DelphiとBCBとでは文字列処理の実装が異なるとすれば影響するかもです。
54:デフォルトの名無しさん
08/11/08 12:56:18
>>19
今思えばJ#使ってるのってヘジたんのせいだったんだな
55:デフォルトの名無しさん
08/11/08 18:38:22
JBuilder こコードを流用しただけだろ
56:デフォルトの名無しさん
08/11/08 18:39:06
× JBuilder こコードを流用しただけだろ
○ JBuilder のコードを流用しただけだろ
57:デフォルトの名無しさん
08/11/08 19:31:15
ヘジは、J#開発者だが、
そのころにはすでにBorland去ってるからなあ
Delphi2の開発時にMSにいっちゃったんだっけか
58:デフォルトの名無しさん
08/11/08 20:13:15
delphi2009のことについてききたいんだが
活発なスレどこ?
59:デフォルトの名無しさん
08/11/08 20:19:52
そんなものない
ML池
60:デフォルトの名無しさん
08/11/08 20:33:23
欧文フォントで文字セットを日本語にすると、フォントマッパによって
フォントフェイス名より文字セットの方が優先されると思うから、
実体化で指定したフォントと異なるフォントが大抵選択されていると思うが。
61:デフォルトの名無しさん
08/11/08 20:40:08
だから?
62:デフォルトの名無しさん
08/11/09 06:36:37
>>58
【Embarcadero】CodeGearオッチャ その12
スレリンク(tech板)
63:Delフサギコ ◆A6VzDeLphI
08/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
とあるのですが(初期状態?)
これ、それぞれ、どうやって接続すればいいんでしょうか。
64:Delフサギコ ◆A6VzDeLphI
08/11/09 19:06:46
IBLocalはどうやら
ユーザー名:SYSDBA
パスワード:masterkey
らしいのですが(ネットで調べると)
データベース エンジン エラー
IDAPI サービスライブラリをロードできません。
ファイル:SQLINT32.DLL
エリアス:IBLocal
と、表示されて接続できません。
BDEのエリアス設定方法、特にInterbaseやら
paradoxやら、ExcelFilesやらが、わかったらうれしいかなと
思ってます。
∧ ∧ オシエテ....
ミ ゚Д゚彡
〜ミ,,,,uuミ
65:Delフサギコ ◆A6VzDeLphI
08/11/09 21:49:31
誰もいないからいまのうち。
_____________
.∧,,∧ /
@'"ミ,,゚Д゚ミ < どんどん質問してしまうぞ。
UU''UU \___________
世界のすべてのDelphi質問を俺の質問だけで埋めてシマヘ
IB2007付属のIBConsole2007ならつながったんだけど
DEKOさんのIBConsole、Firebird対応版で
D2007Pro付属のIB2007に対して接続するには
どうしたらいいんじゃろーか。
ローカルのInterbaseとしては
インスタンスがgds_dbという名前で存在するんですが
それを設定するのがどこにあるのかしらと。。。
66:デフォルトの名無しさん
08/11/09 22:23:15
>63
なぜIBにつなぐのにBDEなの?IBXなりdbExpressでいいじゃない。
67:Delフサギコ ◆A6VzDeLphI
08/11/09 23:05:03
∧ ∧ 比較をしたいんです。
ミ ゚Д゚彡
〜ミ,,,,uuミ
しっかし、DB系の技術はわけわかですね。
dbExpressで接続しようとしてもなっかなかうまくいかない。
みつけた文章がこれ。
URLリンク(www.borland.com)
プロバイド/リゾルブアーキテクチャ…
なにこの奇天烈な用語は。
68:デフォルトの名無しさん
08/11/09 23:28:55
ん〜D2007ではBDEはParadox/dbase用に残されている、という状況だったはずなんで。
今試してみたけどうまく繋がらんね(XPSP3+D2007+IB7.1)。
69:Delフサギコ ◆A6VzDeLphI
08/11/10 00:19:28
上記のURLの
Borland Database EngineアプリケーションのdbExpress への移行
∧,,∧ なんて読みにくい
,,ミxдxミ くず文章だ....
.とミ,,,,,U,,U 頭イタイ...
このサンプル見て、サンプル通りに物を作れるとおもっておんのか....
サンプル構築手順と説明文書が
合わさって書いてあって、ものすごい読みにくい。
せっかくのdbExpressが台無しだな…
>>68さん
調べてくださってありがとうございます。
70:デフォルトの名無しさん
08/11/10 19:50:13
Delphi7 ProでBuild 4.453ってちゃんとパッチが当たってる状態ですか?
使っている人いたら最新のビルド番号教えてください。
71:68
08/11/10 20:52:16
>69
DEKOさんがお答えくださってるようなのでそちらへドゾ。
72:デフォルトの名無しさん
08/11/12 16:14:35
Delphiにて、ハッシュテーブル的(Dictionary的な)クラスはありませんでしょうか?
THashedStringList というのを見つけたのですが、ヘルプを呼んでもイマイチ使い方がわかりません。
TStringListと同様につかえる、という記述をネットで拝見したのですが、
文字列をキーにして、文字列を得たい場合、
Hash.Values["Hoge"] := "Value of Hoge";
のような感じで、使ってよいものなのでしょうか?
73:デフォルトの名無しさん
08/11/12 17:17:51
PopupMenuとその中のitemを動的生成した場合って、PopupMenuを解放すれば
中のアイテムも解放されるんでしょうか?
それとも個別にfree?
74:デフォルトの名無しさん
08/11/12 19:05:51
>>72
文字列をシングルクオートで括ってるならいいと思うよ
>>73
ソースを読めば分かるとおり、解放される
75:デフォルトの名無しさん
08/11/12 20:18:27
>>73
やってみればわかるだろw
76:デフォルトの名無しさん
08/11/12 20:28:40
以下のinterfaceを使ったコードにおいて、メモリーリークが発生するのですが、対処法はありませんでしょうか?
こちらのdSpec URLリンク(delphixtreme.com) で同様のコードがありどうしたものかと困っております。
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 続き
08/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 続き
08/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を持っていると駄目?なようです。
79:76
08/11/12 21:00:52
なんとなく、わかてきた・・・
Delphiのinterfaceが参照カウンタ実装でGCがないので、interfaceを循環参照にするとメモリーリークを起こす、
という奴でしょうか?
TTestのフィールドにTSubTestを持たせないようにすれば、いけそうな気がしてきました。
弄ってみたいと思います。
何か助言あればぜひお願いします
80:デフォルトの名無しさん
08/11/12 21:05:27
バッチファイルで処理していたことをDelphiのボタンを押した際に処理する
ようにする場合、以下の文はどのように書くのでしょうか?
AAA remove root\BBB
AAA install BBB.inf root\BBB
どなたか力を貸して下さい。
よろしくお願いします。
81:デフォルトの名無しさん
08/11/12 21:27:19
>>80
調べる気もないなら使うな
82:デフォルトの名無しさん
08/11/12 22:00:49
>>81
調べてみたのですが分かりませんでした。
バッチファイルの操作でしたら
WinExec('AAAt.bat',SW_SHOW);
で可能でしたがバッチファイルの中身を操作することが出来ませんでした。
83:デフォルトの名無しさん
08/11/12 22:37:06
>>82
Tmemo.loadfromfile(aaa.bat)
84:デフォルトの名無しさん
08/11/12 23:01:10
そもそも以下の様なドライバのインストールはDelphiで可能なのでしょうか?
AAA install BBB.inf root\BBB
>>83
すいません!未熟なので内容が伝わりません。
85:デフォルトの名無しさん
08/11/12 23:03:14
>>83見たいな奴のソースとか読みたくねえ
86:デフォルトの名無しさん
08/11/12 23:33:02
>>75
それが判る初心者なら質問しませんって・・・
次いでと言ってはなんですがどうやったら判るんです?
解放されてるかどうかの判定。
87:超初心者
08/11/12 23:38:50
Delphiでビンゴゲームを作ろうと思っているのですが、1〜80のランダムな数を1回ずつだけ表示させるやり方がわかりません
Random()だと同じ数が出てきてしまうので…
超低レベルな質問なんでしょうが調べてみても良く分からなかったので勇気を持って書き込んでみました
Delphi使いの皆様、どうかご教授ください。お願いします
88:デフォルトの名無しさん
08/11/12 23:43:00
stringlistに1-80入れて
行をシャッフルして上から見てけば?
89:Delフサギコ ◆A6VzDeLphI
08/11/12 23:57:00
∧ ∧ >>68さん
ミ,,。_。彡 >>DEKOさん
〜ミ,,,,uuミ
ありがとです
90:Delフサギコ ◆A6VzDeLphI
08/11/13 00:09:24
∧,,∧ / ̄
\,,,,ミ,,゚Д゚彡 < しつもんす!
⊂,,,,,,,,,つつ. \_
配列定数初期化は、ここにあるようにかっこよくかけるんだけど
URLリンク(delfusa.main.jp)
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:デフォルトの名無しさん
08/11/13 01:09:09
ActiveXコントロールを「スクリプトを実行しても安全だとマークする」
URLリンク(homepage3.nifty.com)
Delphiで作ったActiveXに同様の措置をしたいのですが、どうすればいいかわかりませんか?
Del2007を使ってます。
92:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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
08/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
08/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];
…くらいにはできそうです(一応テスト済み)。
96:76
08/11/13 19:41:55
>>94
勝手に開放される側の話じゃなく、開放されないっていう話なのですが・・・('A`)
>>94の方法はDelWikiにある奴ですよね
97:ななしへたぐらま ◆XcB18Bks.Y
08/11/13 22:52:12
>>96
なるほどそれは失礼しました。
TSubTest.DestroyでFreeAndNil(FTest)(自分で解放する)では駄目ですか?
せっかくの自動解放システムを捨てるのももったいない話ですが…
>>94はDelWikiを見る前からやっていましたが
もし知っていたら余計な苦労をしなくて済みましたね。
98:デフォルトの名無しさん
08/11/13 23:00:29
TMemoに読み込んだファイルの内容を操作したいんだけど
行を指定するのはMemo1.Lines[i]といった形でできる。
では行の中のさらに文字の部分を指定するのはどうすればいいんでしょうか?
99:Delフサギコ ◆A6VzDeLphI
08/11/13 23:58:29
∧,,∧ >>92さん
ミ,,゚Д゚,彡 ありがと....
ミ(旦⊂ ミ
(~,,(~,,,ミ@ でも、そのコード、動かんがな...
>>93さんもありがと。
>TObjectList/array ofベースの
いや、そこまでは。。。
>Delphiの定数表記は貧弱だからあまりがんばる余地がない。
そのようですね。
とりあえずBlogに書いてみたので、この程度の使い道っす。
>>DEKOさん
内緒ですし、あと、猫の耳が
Λ∧
ラムダになってます。
耳は"および"のほうがカワイイですよ。
MSPゴシックだとわかりませんが。明朝だとわかる思います。
100:Delフサギコ ◆A6VzDeLphI
08/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;
101:98
08/11/14 00:32:08
>>100
助かりました。
ありがとうございます!
おかげで色々と操作ができまして懸念が1つ解消されました。
102:87
08/11/14 09:25:46
>>88
ご回答ありがとうございます。やってみます
103:デフォルトの名無しさん
08/11/14 11:16:40
>102
えぇ、
普通にRandomで、出てきた数字を覚えておいて重複したら却下すれば良いだけじゃないの?
104:デフォルトの名無しさん
08/11/14 11:19:55
>>103
時間の無駄。
105:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/14 16:28:47
この流れちょっと前にも見たな
107:76
08/11/14 18:45:47
>>97
つきあってくれてありがとう。質問者側じゃないようなレスしてスマソ
ReportMemoryLeaksOnShutdown の出力結果張り忘れてました。
はっときます。
つまり、両方(TTestとTSubTest)のDestroyが呼ばれてないんです。
どちらかの開放の責任を循環参照の外側に出せば、開放されるはずなので、
いろいろ弄繰り回して試してみたいと思います。
108:76
08/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
---------------------------
109:76
08/11/14 18:51:32
Delphi2009をお持ちの方にお聞きしたいのですが、
こちらの記事にて、
Delphi 2009で追加された3つの便利な機能をコードで検証 − TechTargetジャパン
URLリンク(techtarget.itmedia.co.jp)
> 注4.関数内関数を匿名関数型の変数に代入することもできる。
とあるのですが、これは本当でしようか?
今までは関数内関数の参照は取得できず、
以下のサイトのようなテクニックで無理やり実現していました。
λ with INNER FUNCTION
URLリンク(hp.vector.co.jp)
もし、「関数内関数を匿名関数型の変数に代入」ができると、
さらなる可能性が広がるのですが・・・
110:109
08/11/14 18:52:16
名前欄消し忘れたorz 76と関連性はないです。
111:デフォルトの名無しさん
08/11/14 18:58:02
それが2009の拡張なんだろ
112:デフォルトの名無しさん
08/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が永遠に呼ばれず
メモリリーク。
113:Delフサギコ ◆A6VzDeLphI
08/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:デフォルトの名無しさん
08/11/15 02:49:14
>>105のソース読みにくそうだな
115:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/15 05:24:09
OnDataStateChangeにも同じコード書いたら行けたみたいです
今度はCtrl+クリックに反応しなかったんで両方でコード実行しないと駄目ぽいけど・・・
117:デフォルトの名無しさん
08/11/15 08:40:53
>>113
でもさぁ、たかがビンゴでパフォーマンス云々言われてもねぇって感じ。
見た目簡単なほうが良いんじゃね?
まぁ、何でビンゴなのに80まであるのかの方が疑問ではあるのですがね。
118:デフォルトの名無しさん
08/11/15 08:44:16
>>117
>まぁ、何でビンゴなのに80まであるのかの方が疑問ではあるのですがね。
9 × 9 - 真ん中1つ = 80
じゃない?
119:デフォルトの名無しさん
08/11/15 09:00:04
間違ってたらごめんね。
ビンゴって1−75じゃなかったっけ?
その数字が5*5のマスの真ん中以外にランダムに配置されてるんじゃ?
あ、ビンゴにもいろいろあるんですか??
120:デフォルトの名無しさん
08/11/15 10:30:13
全員にすべての数字が揃ってるわけじゃない
121:デフォルトの名無しさん
08/11/15 14:15:30
TEditを継承したクラスをつくるって方法を使わず、FormCreate時にEdit1をキャレット非表示のものにする方法をどなたか教えてください!
122:デフォルトの名無しさん
08/11/15 14:22:15
>>121
Edit1.Enabled:=False;
123:デフォルトの名無しさん
08/11/15 14:40:02
Create時じゃないが
procedure TForm1.Edit1Enter(Sender: TObject);
begin
HideCaret(Edit1.Handle);
DestroyCaret(Edit1.Handle);
end;
でどうだ
124:デフォルトの名無しさん
08/11/15 16:38:28
>>123
それでやってみるようにします。
ありがとうございます。
125:デフォルトの名無しさん
08/11/15 16:40:58
うまく説明できないかもしれませんが、
・どんなときでもForm1のKeyDown(Press)がメッセージを取る
ようにするにはどうすればいいんでしょうか?
126:デフォルトの名無しさん
08/11/15 16:42:43
KeyPreviewプロパティかな?
127:ななしへたぐらま ◆XcB18Bks.Y
08/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);
128:125
08/11/15 16:50:40
>KeyPreviewプロパティかな?
うまくいきました。
どうもありがとう。
129:デフォルトの名無しさん
08/11/15 17:18:36
>>127
玉を一個一個出すビンゴゲームの雰囲気ではないですけど、いいですね。
わかりやすい。
130:125
08/11/15 18:15:17
Form1をKeyPreview:=trueにして、Form1.OnKeyDownでButton1.SetFocusとかでフォーカスを設定しようとしたのですが、
Tab移動のほうに処理が取られるようでうまくいきません。
Tab移動を眠らせてOnKeyDownの中でフォーカスを移すにはどうすればいいんでしょうか?
131:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/16 02:53:54
Delphi2009高いな
商用不可でいいから
低機能だけどコンポは使えて
9800でだしてくれんかな。
シェア広げることも大事だと思うんだが
133:デフォルトの名無しさん
08/11/16 02:58:58
Del6personalでDelユーザーを増やせたのにねー
Del8以降の迷走で損してるわ。
134:デフォルトの名無しさん
08/11/16 09:45:48
Delphiはもうガラパゴス諸島化してるだろ。
135:デフォルトの名無しさん
08/11/16 10:24:23
.NETバブルにのって崩壊
136:デフォルトの名無しさん
08/11/16 10:42:27
>>134
つまり手厚く保護されるということだな
137:デフォルトの名無しさん
08/11/16 10:45:02
TurboDelphiExplorerがあるじゃない
138:デフォルトの名無しさん
08/11/16 12:43:20
>>137
Turboは、.net1.1に依存してるのと、
コンポが使えないのがネック。
商用不可でいいから6Personalみたいな形で
だしてほすい
139:デフォルトの名無しさん
08/11/16 12:57:36
URLリンク(www.itwriting.com)
上記サイトのDelphiラッパーを使おうと思い、まず同梱のTestSqlite.dprを実行させようとしたところ
エラーが出てコンパイルできませんでした。どこを修正するといいのでしょうか?
[エラー] SQLiteTable3.pas(470): 'TSQLite3Destructor' と 'Pointer' には互換性がありません
[エラー] SQLiteTable3.pas(627): 'TSQLite3Destructor' と 'Pointer' には互換性がありません
[エラー] SQLiteTable3.pas(787): 'TCollateXCompare' と 'Pointer' には互換性がありません
[致命的エラー] uTestSqlite.pas(7): 'SQLiteTable3.pas' ユニットはコンパイルできませんでした
140:デフォルトの名無しさん
08/11/16 15:39:40
>>139
問題無くコンパイル出来た@Del6
141:デフォルトの名無しさん
08/11/16 15:47:12
>132
シェアを広げることが(企業としての)利益を増やす、ということに繋がるのかどうか、が問題みたいですね。
これをCodeGearの人たちに納得させられればいいのですが。
Borlandから独立することによってBorland(ALM/Together)の連中がやっていたIDEの安売り、投げ売りから
解放されて自分たちの技術、製品が正当な利益、正当な評価を生み出すことを実感している、という
現状からすると、しばらくの間は難しいんじゃなかろか、というのが個人的な意見です。
142:デフォルトの名無しさん
08/11/16 16:00:15
某もたいして安くなかったのにね
マイナー言語のくせに偉そうだな
143:デフォルトの名無しさん
08/11/16 17:16:34
>解放されて自分たちの技術、製品が正当な利益、正当な評価を生み出すことを実感している、という
>現状からすると、
ソースぷりーず
144:デフォルトの名無しさん
08/11/16 17:19:11
>自分たちの技術、製品が正当な利益、正当な評価を生み出すことを実感している、
糞ヘルプ、バグだらけの正当な評価だろうけどな。
145:デフォルトの名無しさん
08/11/16 17:20:09
起きたらオッチャスレ落ちてたんだけど誰か立てないのか
146:デフォルトの名無しさん
08/11/16 17:53:31
>143
forum(private含む)でのCodeGear関係者の発言からはそう読めるけどね。ディスカウントとか無料とか
なんでそんなことしなきゃいけないの?利益に貢献するの?ってな感じ。
ソースは脳内なので当たっていないと思うなら無視してくれて構わないよ。
>142
Personal/Turbo Explorerはただでこれ以上安くできないけど?バージョンアップとかも新規に比べりゃ
安いもんだったしな。でも今はマイナーだからこそ稼がないと消滅しちゃうわけで。MSみたいに
ボッタクリ部門があるわけじゃないからな。
>145
あら、ほんとだ。
147:デフォルトの名無しさん
08/11/16 17:59:20
スレリンク(db板:100番)
100 名前:NAME IS NULL[sage] 投稿日:2008/11/16(日) 12:56:23 ID:???
URLリンク(www.itwriting.com)
上記サイトの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
08/11/16 18:09:10
>>138
データベース(に接続して読み書きする機能)で差を付けられなくなってしまった現在では
有料版とどこかで差別化しなければならなかったわけで落としどころとしては悪くないと思います。
またコンポは設計時に貼り付けられないだけで実行時にコードで生成することはできますので
私はここ1〜2年はこれで頑張っています。
フレームを積極的に使い始めたためか標準でないビジュアルコンポーネントをポトベタしたくなる場面が
かなり減ったのでそんなには困っていませんがさすがにそろそろポトベタできる有料版が欲しいです…
149:デフォルトの名無しさん
08/11/16 18:11:08
俺の不満はDelphiのシェア低いから使えるライブラリの種類少ないことだな。
Delphiのクラスライブラリが.NET並とはいかないまでも、もっとリッチならまぁ気にならないが。
正規表現にしてもDelphiのVCLに標準で用意されていないし。まぁ、PCREや鬼車使えるけど、
アプリに静的リンクしようとかなるとたちまち、メンドくさいし。
前はDelphiで構文解析やろうとして、Delphiのソース吐くやつが余りないから、
C#のコードを吐くパーサジェネレータをDelphiのコードを吐くように改造したり。
めんどくせぇ。
150:デフォルトの名無しさん
08/11/16 18:19:07
隔離スレに帰れ
151:デフォルトの名無しさん
08/11/16 19:07:36
まじでめんどくさいぉ。
152:デフォルトの名無しさん
08/11/16 21:15:48
オッチャなくなったので、こちらで活動開始。
オッチャすれ アンチ対策テンプレ v1.0(案)
(p)URLリンク(codegearwatcher.web.fc2.com)
> オッチャすれ アンチ対策テンプレ v1.0(案)
> 以下はオッチャすれに出没する、アンチの持ちネタです。
> これらのネタは、4年以上にわたる不毛な議論と逆予言により終息しています。
> しかしアンチは自作自演を交えつつ、無限ループを続けています。
>
> このスレでアンチを見かけた場合は、このテンプレを提示しましょう。
153:デフォルトの名無しさん
08/11/16 21:46:51
マンセがうるさいので、これからここに質問に来た初心者をけなしてDelphiユーザーの
妨害活動をしますのでよろしく。
154:デフォルトの名無しさん
08/11/16 22:01:33
>>152 はまんせじゃなくて最凶アンチ。きもい。
155:デフォルトの名無しさん
08/11/16 22:36:45
【Embarcadero】CodeGearオッチャ その13
スレリンク(tech板)
156:デフォルトの名無しさん
08/11/16 23:00:46
既存のコンポを継承したコンポを使いたいんですけども
どうやって呼び出したらいいんでしょうか?
例えば、TCustomEditを継承したTEditExを作ったんですけども
フォームへの貼り付け方法がわかりません。
環境はTurboDelphi Explorerです。
157:デフォルトの名無しさん
08/11/16 23:11:13
TDEじゃ無理です
158:デフォルトの名無しさん
08/11/16 23:12:03
あ、FormのOnCreateで
EditEx1 := TEditEx.Create(Self);
EditEx1.Parent := Self;
とすれば貼り付けじゃなくてもおk
159:デフォルトの名無しさん
08/11/16 23:57:34
>>158
ぬぉぉぉ
できました。
ありがとうございます!
160:デフォルトの名無しさん
08/11/17 01:24:56
「→」や「→」などを「→」のように文字に変換する方法はありますか?
161:デフォルトの名無しさん
08/11/17 01:29:15
全部同じにしか見えない
162:デフォルトの名無しさん
08/11/17 01:29:28
ミスったorz
「&#8594;」や「&#8594;」などを「→」のように文字に変換する方法はありますか?
163:デフォルトの名無しさん
08/11/17 01:32:26
再び・・
「&#8594;」や「&#rarr;」です
164:デフォルトの名無しさん
08/11/17 01:35:29
「&#8594;」や「&#rarr;」を「 → 」に置き換えればいいんじゃないの?
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4250日前に更新/151 KB
担当:undef