[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 07/05 09:41 / Filesize : 151 KB / Number-of Response : 533
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 00:50:40 ]
Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を
勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが
お礼はDelphiの布教と初心者の救済をお願いします。

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

<過去スレ>
DelWiki避難所(Delphi 関連の過去スレッド)
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

72 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:14:35 ]
Delphiにて、ハッシュテーブル的(Dictionary的な)クラスはありませんでしょうか?

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

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

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

のような感じで、使ってよいものなのでしょうか?

73 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 17:17:51 ]
PopupMenuとその中のitemを動的生成した場合って、PopupMenuを解放すれば
中のアイテムも解放されるんでしょうか?
それとも個別にfree?

74 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 19:05:51 ]
>>72
文字列をシングルクオートで括ってるならいいと思うよ

>>73
ソースを読めば分かるとおり、解放される

75 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 20:18:27 ]
>>73
やってみればわかるだろw

76 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 20:28:40 ]
以下のinterfaceを使ったコードにおいて、メモリーリークが発生するのですが、対処法はありませんでしょうか?
こちらのdSpec 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 続き mailto:sage [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を持っていると駄目?なようです。

79 名前:76 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 23:03:14 ]
>>83見たいな奴のソースとか読みたくねえ

86 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 23:33:02 ]
>>75
それが判る初心者なら質問しませんって・・・
次いでと言ってはなんですがどうやったら判るんです?
解放されてるかどうかの判定。

87 名前:超初心者 [2008/11/12(水) 23:38:50 ]
Delphiでビンゴゲームを作ろうと思っているのですが、1〜80のランダムな数を1回ずつだけ表示させるやり方がわかりません
Random()だと同じ数が出てきてしまうので…
超低レベルな質問なんでしょうが調べてみても良く分からなかったので勇気を持って書き込んでみました
Delphi使いの皆様、どうかご教授ください。お願いします

88 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 23:43:00 ]
stringlistに1-80入れて
行をシャッフルして上から見てけば?

89 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/11/12(水) 23:57:00 ]
    ∧ ∧  >>68さん
    ミ,,。_。彡  >>DEKOさん
  〜ミ,,,,uuミ
ありがとです

90 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/11/13(木) 00:09:24 ]
   ∧,,∧    / ̄
\,,,,ミ,,゚Д゚彡 < しつもんす!
⊂,,,,,,,,,つつ.    \_

配列定数初期化は、ここにあるようにかっこよくかけるんだけど
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 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 01:09:09 ]
ActiveXコントロールを「スクリプトを実行しても安全だとマークする」
homepage3.nifty.com/LILILIN/HOWTO/activex_safe.htm

Delphiで作ったActiveXに同様の措置をしたいのですが、どうすればいいかわかりませんか?
Del2007を使ってます。

92 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [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 mailto:sage [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];

…くらいにはできそうです(一応テスト済み)。


96 名前:76 mailto:sage [2008/11/13(木) 19:41:55 ]
>>94
勝手に開放される側の話じゃなく、開放されないっていう話なのですが・・・('A`)

>>94の方法はDelWikiにある奴ですよね

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

>>94はDelWikiを見る前からやっていましたが
もし知っていたら余計な苦労をしなくて済みましたね。


98 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 23:00:29 ]
TMemoに読み込んだファイルの内容を操作したいんだけど
行を指定するのはMemo1.Lines[i]といった形でできる。
では行の中のさらに文字の部分を指定するのはどうすればいいんでしょうか?



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

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

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

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

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



100 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [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;




101 名前:98 mailto:sage [2008/11/14(金) 00:32:08 ]
>>100
助かりました。
ありがとうございます!
おかげで色々と操作ができまして懸念が1つ解消されました。

102 名前:87 [2008/11/14(金) 09:25:46 ]
>>88
ご回答ありがとうございます。やってみます

103 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 11:16:40 ]
>102
えぇ、
普通にRandomで、出てきた数字を覚えておいて重複したら却下すれば良いだけじゃないの?


104 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 11:19:55 ]
>>103
時間の無駄。

105 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 16:28:47 ]
この流れちょっと前にも見たな

107 名前:76 mailto:sage [2008/11/14(金) 18:45:47 ]
>>97
つきあってくれてありがとう。質問者側じゃないようなレスしてスマソ

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


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

どちらかの開放の責任を循環参照の外側に出せば、開放されるはずなので、
いろいろ弄繰り回して試してみたいと思います。

108 名前:76 mailto:sage [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
---------------------------

109 名前:76 mailto:sage [2008/11/14(金) 18:51:32 ]
Delphi2009をお持ちの方にお聞きしたいのですが、
こちらの記事にて、

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

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

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

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

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

もし、「関数内関数を匿名関数型の変数に代入」ができると、
さらなる可能性が広がるのですが・・・

110 名前:109 mailto:sage [2008/11/14(金) 18:52:16 ]
名前欄消し忘れたorz 76と関連性はないです。



111 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 18:58:02 ]
それが2009の拡張なんだろ

112 名前:デフォルトの名無しさん mailto:sage [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が永遠に呼ばれず
メモリリーク。


113 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:49:14 ]
>>105のソース読みにくそうだな

115 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 05:24:09 ]
OnDataStateChangeにも同じコード書いたら行けたみたいです

今度はCtrl+クリックに反応しなかったんで両方でコード実行しないと駄目ぽいけど・・・

117 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 08:40:53 ]
>>113
でもさぁ、たかがビンゴでパフォーマンス云々言われてもねぇって感じ。
見た目簡単なほうが良いんじゃね?

まぁ、何でビンゴなのに80まであるのかの方が疑問ではあるのですがね。


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

9 × 9 - 真ん中1つ = 80
じゃない?

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

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



120 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 10:30:13 ]
全員にすべての数字が揃ってるわけじゃない



121 名前:デフォルトの名無しさん [2008/11/15(土) 14:15:30 ]
TEditを継承したクラスをつくるって方法を使わず、FormCreate時にEdit1をキャレット非表示のものにする方法をどなたか教えてください!

122 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 14:22:15 ]
>>121
Edit1.Enabled:=False;


123 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 16:40:58 ]
うまく説明できないかもしれませんが、

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

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



126 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 16:42:43 ]
KeyPreviewプロパティかな?

127 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [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);

128 名前:125 mailto:sage [2008/11/15(土) 16:50:40 ]
>KeyPreviewプロパティかな?

うまくいきました。
どうもありがとう。

129 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 17:18:36 ]
>>127
玉を一個一個出すビンゴゲームの雰囲気ではないですけど、いいですね。
わかりやすい。


130 名前:125 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 02:53:54 ]
Delphi2009高いな
商用不可でいいから
低機能だけどコンポは使えて
9800でだしてくれんかな。
シェア広げることも大事だと思うんだが


133 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 02:58:58 ]
Del6personalでDelユーザーを増やせたのにねー

Del8以降の迷走で損してるわ。

134 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 09:45:48 ]
Delphiはもうガラパゴス諸島化してるだろ。

135 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 10:24:23 ]
.NETバブルにのって崩壊

136 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 10:42:27 ]
>>134
つまり手厚く保護されるということだな


137 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 10:45:02 ]
TurboDelphiExplorerがあるじゃない

138 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 12:43:20 ]
>>137
Turboは、.net1.1に依存してるのと、
コンポが使えないのがネック。
商用不可でいいから6Personalみたいな形で
だしてほすい


139 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 12:57:36 ]
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 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 15:39:40 ]
>>139
問題無くコンパイル出来た@Del6



141 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 15:47:12 ]
>132
シェアを広げることが(企業としての)利益を増やす、ということに繋がるのかどうか、が問題みたいですね。
これをCodeGearの人たちに納得させられればいいのですが。
Borlandから独立することによってBorland(ALM/Together)の連中がやっていたIDEの安売り、投げ売りから
解放されて自分たちの技術、製品が正当な利益、正当な評価を生み出すことを実感している、という
現状からすると、しばらくの間は難しいんじゃなかろか、というのが個人的な意見です。

142 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 16:00:15 ]
某もたいして安くなかったのにね
マイナー言語のくせに偉そうだな

143 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 17:16:34 ]
>解放されて自分たちの技術、製品が正当な利益、正当な評価を生み出すことを実感している、という
>現状からすると、

ソースぷりーず

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

糞ヘルプ、バグだらけの正当な評価だろうけどな。

145 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 17:20:09 ]
起きたらオッチャスレ落ちてたんだけど誰か立てないのか

146 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 17:53:31 ]
>143
forum(private含む)でのCodeGear関係者の発言からはそう読めるけどね。ディスカウントとか無料とか
なんでそんなことしなきゃいけないの?利益に貢献するの?ってな感じ。
ソースは脳内なので当たっていないと思うなら無視してくれて構わないよ。

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

>145
あら、ほんとだ。

147 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 17:59:20 ]
pc11.2ch.net/test/read.cgi/db/1220581676/100

100 名前:NAME IS NULL[sage] 投稿日:2008/11/16(日) 12:56:23 ID:???
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 mailto:sage [2008/11/16(日) 18:09:10 ]
>>138
データベース(に接続して読み書きする機能)で差を付けられなくなってしまった現在では
有料版とどこかで差別化しなければならなかったわけで落としどころとしては悪くないと思います。

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

フレームを積極的に使い始めたためか標準でないビジュアルコンポーネントをポトベタしたくなる場面が
かなり減ったのでそんなには困っていませんがさすがにそろそろポトベタできる有料版が欲しいです…


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






150 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 18:19:07 ]
隔離スレに帰れ



151 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 19:07:36 ]
まじでめんどくさいぉ。


152 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 21:15:48 ]
オッチャなくなったので、こちらで活動開始。

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

> オッチャすれ アンチ対策テンプレ v1.0(案)
> 以下はオッチャすれに出没する、アンチの持ちネタです。
> これらのネタは、4年以上にわたる不毛な議論と逆予言により終息しています。
> しかしアンチは自作自演を交えつつ、無限ループを続けています。
>
> このスレでアンチを見かけた場合は、このテンプレを提示しましょう。


153 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 21:46:51 ]
マンセがうるさいので、これからここに質問に来た初心者をけなしてDelphiユーザーの
妨害活動をしますのでよろしく。


154 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 22:01:33 ]
>>152 はまんせじゃなくて最凶アンチ。きもい。

155 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 22:36:45 ]
【Embarcadero】CodeGearオッチャ その13
pc11.2ch.net/test/read.cgi/tech/1226842439/

156 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 23:00:46 ]
既存のコンポを継承したコンポを使いたいんですけども
どうやって呼び出したらいいんでしょうか?

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

環境はTurboDelphi Explorerです。


157 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 23:11:13 ]
TDEじゃ無理です

158 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 23:12:03 ]
あ、FormのOnCreateで
EditEx1 := TEditEx.Create(Self);
EditEx1.Parent := Self;
とすれば貼り付けじゃなくてもおk

159 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 23:57:34 ]
>>158
ぬぉぉぉ
できました。
ありがとうございます!


160 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 01:24:56 ]
「→」や「→」などを「→」のように文字に変換する方法はありますか?




161 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 01:29:15 ]
全部同じにしか見えない

162 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 01:29:28 ]
ミスったorz
「&#8594;」や「&#8594;」などを「→」のように文字に変換する方法はありますか?

163 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 01:32:26 ]
再び・・
「&#8594;」や「&#rarr;」です

164 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 01:35:29 ]
「&#8594;」や「&#rarr;」を「 → 」に置き換えればいいんじゃないの?

165 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 01:39:22 ]
全ての全角文字と記号がこの形式になっているもので・・

166 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 02:06:06 ]
キーボードが壊れてしまって「あ」が「あ」になってしまうんです。

思い出した。



167 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 03:19:21 ]
classとinterfaceを継承したclass(例えば TTest = class(TObject, IInterface))があるとき、
自身を、IInterfaceを引数に取る関数に渡す場合はどうすればいいんでしょうか?

168 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 03:36:48 ]
>>167
Self as IInterfaceとかじゃね?

169 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 03:39:16 ]
>>168
「この型には指定した演算子は使えません」と出ます

170 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 03:50:52 ]
>>169
そのままSelfか、IInterface(Self)でどう?



171 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 04:01:29 ]
>>170
それも無理でした

172 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 04:50:18 ]
interfaceを使うときは一般的にはTObjectじゃなくTInterfacedObjectから継承する。
そうでなければQueryInterfaceや参照管理を自前できちんと実装しないといけない。
分かってやってるならいいけど。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<151KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef