5 :
デフォルトの名無しさん :2007/08/03(金) 18:37:42
WideString対応のTStringList、 TWideStringListってないですか?
6 :
デフォルトの名無しさん :2007/08/03(金) 18:52:00
WideStringsに、TWideStringListがありました。 これを使ってみようと思います。
7 :
デフォルトの名無しさん :2007/08/03(金) 20:48:35
Delphi向けのドキュメントツールを探しています。 みなさんは何を使っておられますか? 過去スレをみると、DIPasDocなどがあるようですが、 日本語対応版?が見つけられませんでした。
9 :
デフォルトの名無しさん :2007/08/04(土) 08:03:33
10 :
デフォルトの名無しさん :2007/08/04(土) 08:04:09
x 海外のドキュメンテーションツールは、海外ではいくつかありそうです。 o Delphiのドキュメンテーションツールは、海外ではいくつかありそうです。
11 :
デフォルトの名無しさん :2007/08/04(土) 08:21:06
DelphiとVBはどちらが優れていますか?
12 :
デフォルトの名無しさん :2007/08/04(土) 08:23:58
13 :
デフォルトの名無しさん :2007/08/04(土) 08:24:36
AnsiStringでリードバイトの処理がわからん外人はUnicodeになっても、サロゲートの処理がわかんないんだろうな。
で?
17 :
デフォルトの名無しさん :2007/08/04(土) 19:11:09
彡川川川三三三ミ〜 川|川/ \|〜 プゥ〜ン __________________ ‖|‖ ◎---◎|〜 /AnsiStringでリードバイトの処理がわからん 川川‖ 3 ヽ〜 < 外人はUnicodeになっても、 川川 ∴)д(∴)〜 \サロゲートの処理がわかんないんだろうな。 川川 〜 /〜  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 川川‖ 〜 /‖ _____ 川川川川___/‖ | | ̄ ̄\ \ / \__| | | ̄ ̄| / \___ | | |__| | \ |つ |__|__/ / カタカタカタ /  ̄ ̄ | ̄ ̄ ̄ ̄| 〔 ̄ ̄〕 | | ̄
Delphiでは特に気にする必要ないよね 前スレにいたUTF-8変換にバグがあるとか言ってた馬鹿がまた来たか?
>>1 スレ立て乙です〜
>>18 UTF-8にサロゲートペアってあったっけ?
>>18 Delphiってより気にする必要がないのはおまえのプログラムがだろ??頭大丈夫?
>>19 >>18 がいいたいのはUCS2のことだろ、エンコーディングと文字集合の違いも理解できない
やつはほっとこう。
22 :
デフォルトの名無しさん :2007/08/04(土) 21:10:35
彡川川川三三三ミ〜 川|川/ \|〜 プゥ〜ン __________________ ‖|‖ ◎---◎|〜 /Delphiでは特に気にする必要ないよね 川川‖ 3 ヽ〜 < 前スレにいたUTF-8変換に 川川 ∴)д(∴)〜 \バグがあるとか言ってた馬鹿がまた来たか? 川川 〜 /〜  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 川川‖ 〜 /‖ _____ 川川川川___/‖ | | ̄ ̄\ \ / \__| | | ̄ ̄| / \___ | | |__| | \ |つ |__|__/ / カタカタカタ /  ̄ ̄ | ̄ ̄ ̄ ̄| 〔 ̄ ̄〕 | | ̄
>>20 Delphiにはサロゲート処理のある関数がない
人のレス読んで煽る前にVCLのソース読んでこい
前スレのってCESU-8がどうのこうの言ってたやつか それまで散々粘着してたのにUCS2だって言われてから急に消えて笑ったな
つーか、Del用でUCS4なUnicodeコンポ作ってる外人さんはいても日本人の作ったのは知らないなぁ
資料も今じゃロシア語や中国語で書かれたものの方が多いしな 日本語文献はどんどん消えていく
拝啓ユーザー様 開発環境が対応していないので、私のプログラムも対応してません。
28 :
デフォルトの名無しさん :2007/08/04(土) 23:20:57
彡川川川三三三ミ〜 川|川/ \|〜 プゥ〜ン __________________ ‖|‖ ◎---◎|〜 /Delphiにはサロゲート処理のある関数がない 川川‖ 3 ヽ〜 < 人のレス読んで煽る前にVCLのソース読んでこい 川川 ∴)д(∴)〜 \ 川川 〜 /〜  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 川川‖ 〜 /‖ _____ 川川川川___/‖ | | ̄ ̄\ \ / \__| | | ̄ ̄| / \___ | | |__| | \ |つ |__|__/ / カタカタカタ /  ̄ ̄ | ̄ ̄ ̄ ̄| 〔 ̄ ̄〕 | | ̄
29 :
デフォルトの名無しさん :2007/08/04(土) 23:21:56
彡川川川三三三ミ〜 川|川/ \|〜 プゥ〜ン __________________ ‖|‖ ◎---◎|〜 /前スレのってCESU-8がどうのこうの言ってたやつか 川川‖ 3 ヽ〜 < それまで散々粘着してたのにUCS2だって言われてから急に消えて笑ったな 川川 ∴)д(∴)〜 \ 川川 〜 /〜  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 川川‖ 〜 /‖ _____ 川川川川___/‖ | | ̄ ̄\ \ / \__| | | ̄ ̄| / \___ | | |__| | \ |つ |__|__/ / カタカタカタ /  ̄ ̄ | ̄ ̄ ̄ ̄| 〔 ̄ ̄〕 | | ̄
tnt買収してさっさとUnicodeに公式対応してくんないかな
31 :
デフォルトの名無しさん :2007/08/05(日) 10:32:35
めちゃめちゃ初心者なんですけど、セルに色をつけるってどうやるんですか? Ondrawcellを使うのはわかったんですけど、ヘルプ見てもコマンドがよくわかりません><
>>31 何のセルだよ。TStringGrid?
あとこのスレは超初心者用なんだからいちいち初心者ですなんて言わなくておk
33 :
デフォルトの名無しさん :2007/08/05(日) 11:42:45
はい。おっしゃるTStringGridです。 excelのような簡単な表を作成し、この列は赤、この列は青のように色分けを したいのですが、canvasコマンド?がいまいちよくわからないのです。
ヘルプでTCanvas を一度全部見てゆくといいよ。 Brush.Color とか Pen.Color とか Font.Color で色を変えられるよ 文字を描く場合は、TextRect で枠に合わせて描くと
35 :
デフォルトの名無しさん :2007/08/05(日) 12:19:11
36 :
デフォルトの名無しさん :2007/08/05(日) 12:30:09
delphi って、近年なくなるってことはないですか? 将来5年間くらい存続する確立は何%くらいでしょうか?
今までもさんざん危機を叫ばれていながら存在し続けているので35%の確率で存続するのではないでしょうか? まあそんな事は神の味噌汁ですが。
>>35 単なる足し算。 左上よりちょっと真ん中に描画するって意味だけど、
セルが大きいと無意味ですね。
2年なら50%、5年なら20%くらいの確率で生き残れる、と思う。
ま、いつ発売中止になっても驚かない、って状況ではある。
例えば10年以上も前にとっくに実機が販売されなくなったMSXだけども、 いまだにMSXユーザーってのは根強く存在するわけで。 ユーザーがいなくならない限り存在し続けるんじゃないかな。どんな形であれ。 しかし色々なゴタゴタがあったのにここまで残ってこられたのは本物なんじゃないかな。
42 :
デフォルトの名無しさん :2007/08/05(日) 13:56:52
彡川川川三三三ミ〜 川|川/ \|〜 プゥ〜ン __________________ ‖|‖ ◎---◎|〜 /しかし色々なゴタゴタがあったのにここまで 川川‖ 3 ヽ〜 < 残ってこられたのは本物なんじゃないかな。 川川 ∴)д(∴)〜 \ 川川 〜 /〜  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 川川‖ 〜 /‖ _____ 川川川川___/‖ | | ̄ ̄\ \ / \__| | | ̄ ̄| / \___ | | |__| | \ |つ |__|__/ / カタカタカタ /  ̄ ̄ | ̄ ̄ ̄ ̄| 〔 ̄ ̄〕 | | ̄
そんなの、N88Basic ユーザがまだいるわいな、というくらい製品として無意味。
44 :
デフォルトの名無しさん :2007/08/05(日) 14:15:03
彡川川川三三三ミ〜 川|川/ \|〜 プゥ〜ン __________________ ‖|‖ ◎---◎|〜 /そんなの、N88Basic ユーザがまだいるわいな、 川川‖ 3 ヽ〜 < というくらい製品として無意味 川川 ∴)д(∴)〜 \ 川川 〜 /〜  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 川川‖ 〜 /‖ _____ 川川川川___/‖ | | ̄ ̄\ \ / \__| | | ̄ ̄| / \___ | | |__| | \ |つ |__|__/ / カタカタカタ /  ̄ ̄ | ̄ ̄ ̄ ̄| 〔 ̄ ̄〕 | | ̄
↓
>>17 ,22,28,29,42,44
_____
/::::::::::::::::::::::::::\〜プーン
/:::::::::::::::::::::::::::::::::::::::\〜プーン
|:::::::::::::;;;;;;|_|_|_|_|〜プーン
|;;;;;;;;;;ノ∪ \,) ,,/ ヽ〜
|::( 6∪ ー─◎─◎ )〜 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|ノ (∵∴ ( o o)∴)〜 < えーと、製品として無意味っと・・・
| ∪< ∵∵ 3 ∵> \_____________
\ ⌒ ノ_____
\_____/ | | ̄ ̄\ \ カチャ
___/ \ | | | ̄ ̄| カチャ
|:::::::/ \___ | \| | |__|
|:::::::| \____|つ⊂|__|__/ /
|:::::/ | ̄ ̄ ̄ ̄| 〔 ̄ ̄〕
またUnicodeの人か
47 :
デフォルトの名無しさん :2007/08/05(日) 18:16:43
彡川川川三三三ミ〜 川|川/ \|〜 プゥ〜ン __________________ ‖|‖ ◎---◎|〜 /またUnicodeの人か 川川‖ 3 ヽ〜 < 川川 ∴)д(∴)〜 \ 川川 〜 /〜  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 川川‖ 〜 /‖ _____ 川川川川___/‖ | | ̄ ̄\ \ / \__| | | ̄ ̄| / \___ | | |__| | \ |つ |__|__/ / カタカタカタ /  ̄ ̄ | ̄ ̄ ̄ ̄| 〔 ̄ ̄〕 | | ̄
裕美子といいます。大都会の片隅で×いちで孤独なOLをしています。 私はDelphiはあまり得意ではありませんが、Delphiユーザーは ハイレベルなプログラマが多いので尊敬しています。がんばってくだ さい。 上のAAから悪しきオーラを感じます。あなたはプログラマではなく 単なるフィッシングがネチな2ちゃん根らですね。たとえどんなに 策を労使ようとも私たちはくじけますん。
ごめんなさい くじけますんじゃなくてくじけませんです。訂正してください。
小池徹平より不細工な女は女とは認めますん
許しますん
労使よう
まあ仮に近い将来消えちゃったとしても、 ライブラリソースに手を入れられるのが唯一の救いだな 64bit全盛時代が来るまではそれで何とか繋げる
べつにDelphiじゃなくても、しのげる人は大勢いますけど・・・
Delphiユーザは、ふさによると2%くらいなんだから、消えたってまったくこの業界 に影響ないでしょ。
レコード型を使おうと思っているのですが それぞれのフィールドの型が循環参照(?)している場合は どうやって定義したらいいですか。 type Ttest1 = record index: Integer; test2: Ttest2; end; type Ttest2 = record index: Integer; test1: Ttest1; end;
隔離スレでやれ
type
PRec1 = ^TRec1;
PRec2 = ^TRec2;
TRec1 = record
rec2: PRec2;
end;
TRec2 = record
rec1: PRec1;
end;
みたいに一つのtypeにまとめてTRecX, PRecXをついにして定義すれば可能。
ただ
>>56 みたいなポインタではなく変数そのものを循環的に格納するなんて論理的に不可能だぞ。
ありがとうございます。 ポインタでやってみます。
61 :
デフォルトの名無しさん :2007/08/06(月) 01:07:57
クラスにしちゃえよ
63 :
デフォルトの名無しさん :2007/08/06(月) 12:56:08
先輩にDelphi勧められているんでこの夏休みに勉強しようと思うんですが、 友達に聞いたらもう終わってるとか言われたんですがどうなんでしょう? 何でもキリックスとかに移ったとか(よくわからないのでスマソ)
Delphiなんて古木を今更わざわざ拾わなくても ゆとりプログラマは根の張った大木にぶらさがって優雅にC#でもやってなさいってこった
ポインタないし
それはJAVAだろ・・・・・っといってもDelphiのClass形と同じような参照としてのポインタはあるんだけどな
67 :
デフォルトの名無しさん :2007/08/06(月) 15:07:11
StringGridについて詳しく解説されてるページとかありませんか? あったら教えてください。
>>63 Unicodeベースでなければならない、.NETでなければならない、
就職に繋げたいということでもないなら
Win32な開発環境としては別に終わっちゃいない。
今なおWindowsで最も楽な開発環境の一つ。
Kylix(カイリックス)はDelphiのLinux版で
かなり大昔にバージョンアップが途絶えて
どちらかというとこっちの方が終わってる環境だ。
>>35 ためしに+2を取り除いたり違う数(たとえば10とか20とか)にして実行してみましょう.
また片方の値だけを変えて実行してみてください.
その数が何を意味しているのか,またどうして+2なのかがわかると思います.
DelphiやVBはコードを書いたら速攻で実行できるので
いろいろ考えるよりもまずは条件をいろいろ変えて動かしてしまいましょう.
>>36 いつ無くなってもおかしくありませんがまだしぶとく生き残ると思います.
もっとも,大切なことはDelphiという道具の使い方を覚えることではなくて
自分のやりたいことを形にする技術を身につけることなので,
Delphiでそれを身につけていればどの開発環境にいってもうまくやっていけるはずです.
>>56 そのTtest1とTTest2が別のものである必然性は本当にありますか?
実はひとつのもので済んだりはしませんか?
本当に相互に参照しなければならない場面は案外少なかったりします.
これはレコードに限らず,オブジェクトやユニットにも言えます.
dephi6 personalを使っています。 クラスのメンバとして定数を定義したいのですがpublicのあたりに public const val: Integer = 0; としても「'END'が必要な場所に'CONST'があります」とコンパイルエラーになります。 こういうものはプロパティで代用するしかないんでしょうか。
クラスのメンバではないグローバルな定数で代用してください
プロパティにするとインスタンス生成しないと参照できなくなるから class function val: integer; にするのも手。オーバーヘッドが発生するんで一長一短だな。
>>71 使ってる環境をTurbo Delphiに変えれば可能です
Delphiは関数内関数や、関数の中で構造体を定義出来たり、定数を定義出来たりするのに クラスの中で そういうのが出来ないんだよな まあ、ユニットを1つの単位と考えて、1ユニット1クラスで考えればいいと思うんだけどな
Delphi6ではできないことがわかってすっきりしました。 代替方法でやってみます。 ありがとうございました。
(´-`)。oO(なんで普通の定数だとまずいんだろう…)
VCLのソースファイルの再構築はどうやればよいのでしょうか. Delphi 5を使っているのですが HeaderControlにメモリリークのバグがあるので VCLのソースファイル(comctrl.pas)に手を加えてみました. しかしソースファイルを書き換えただけでは駄目,bcc32でコンパイルしても駄目, パッケージの再構築をしようにもパッケージのソースファイルがないようなので困っています.
ありがとうございます. おかげさまでうまくいきました. これで今日は家に帰れます…
81 :
デフォルトの名無しさん :2007/08/07(火) 02:53:32
82 :
デフォルトの名無しさん :2007/08/07(火) 02:54:34
アンチは、デマばかり振りまく。 かまうな馬鹿
ふるいバージョンではできないでしょ。質問者はそういってるし。
いつになったらテンプレートが使えるようになるんですか?
StringGridのセルを初期化するにはどうすればいいんでしょうか?
>>85 文字列グリッドのすべてのセルの文字列をカラにするということですか?
特にそういうメソッドはないので手でカラにしてください.
{ 文字列グリッドのすべてのセルの文字列をカラにする手続き }
procedure ClearGridCells(Grid: TStringGrid);
var
iRow, iCol: integer;
begin
for iRow := 0 to Grid.RowCount - 1 do
for iCol := 0 to Grid.ColCount - 1 do
Grid.Cells[iCol, iRow] := '';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ClearGridCells(StringGrid1);
end;
これでもいけそうだぞ。 for I := 0 to Grid.RowCount - 1 do Grid1.Rows[I].Clear;
88 :
デフォルトの名無しさん :2007/08/07(火) 21:27:39
>>87 オレもそうしている。
でも、行の削除なんかのときに1行削除するたびにクリアしないと、
再度行を増やしたときに前の値が出てくるのは何でなんだろう。
89 :
デフォルトの名無しさん :2007/08/07(火) 23:04:30
DataBaseからデータを取得してグローバル配列変数List:array[1..8]of TListに格納しているのですが、 リストにあるデータを使おうと思ったら変な値が出てきます。 どうしたらいいのでしょうか? 環境はにD5Entです。
>>89 ・「変な値」とは具体的に何?
・値を取得するコードは?
・TListはちゃんとCreateしたか?
91 :
89 :2007/08/07(火) 23:19:39
>>90 変な値とは次に使うSQL文です。
値を取得するコードは次に書きます。
TListはちゃんとFrameのInit(FormのShowイベントで呼ぶ)関数でCreateしています。
92 :
89 1/2 :2007/08/07(火) 23:34:36
>>90 SQL.Add('SELECT BEID,GAKKOID');
//集計条件
if SMC.F_KT_DispType=0 then begin //
SQL.Add(',MODEL');
end else begin //
SQL.Add(',G_TYPE');
end;
SQL.Add(',sum(SEITO) FROM V_OPE_U11 WHERE BEID=:b AND GAKKOID=:ga');
SQL.Add(' GROUP BY OWNER,GAKKOID');
//集計条件
if F_KT_DispType=0 then begin //
SQL.Add(',MODEL');
end else begin //
SQL.Add(',G_TYPE');
end;
ParambyName('b').AsInteger := BEID; //
ParambyName('ga').AsInteger := GAKKOID; //
Open;
93 :
89 2/2 :2007/08/07(火) 23:37:19
>>90 while not EOF do begin
List.Add;
p.F_KT_OWNER:=FieldByName('BEID').AsInteger;
p.F_KT_STORE:=FieldByName('GAKKOID').AsInteger;
//集計条件
if F_KT_DispType=0 then begin //
p.F_KT_MODEL := FieldByName('MODEL').AsInteger; //
p.F_KT_GAKKO_TYPE_CD := '';
end else begin //
p.F_KT_MODEL := -1;
p.F_KT_GAKKO_TYPE_CD := FieldByName('G_TYPE').AsString; //
end;
p.F_KT_SEITO := FieldByName('SUM').AsInteger; //
List.Add(p);
NEXT;
end;
大体こんな感じです。
Jw_cad for Windows のクロックメニューってどうやって実現しているのでしょうか?
何かクセェ List.Add; p.
>>89 うん。Listとpが怪しい。
宣言は?
pは何処で入れてる?
97 :
89 2/2 :2007/08/08(水) 00:27:52
>>92 の前に
procedure TDM1.Get_SeitoSuu(Cond: TGakkoCond_Rec;
List: TList);
var
p: PGakko004_Rec;
beginで
PGakko004_Rec = ^TGakko004_Rec;
TGakko004_Rec = record
F_KT_BEID: Integer; //
F_KT_GAKKOID: Integer; //
F_KT_MODEL: Integer; //
F_KT_GAKKO_TYPE_CD: String[1]; //
F_KT_SEITO: Integer;
end;
です。
クラスにして、Create で生成し、TObjectList で管理することを勧める。 1レコードごとに、New でポインタをつくってメモリ確保しなけりゃ ならないなんて、非効率すぎだし、メモリリークも心配。それに、そのコードを 見ると、ポインタそのものも理解してるのか疑問。
100 :
89 :2007/08/08(水) 02:02:23
>>98 List.Add;はNew(p)でした。
>>99 14430000件以上もレコードがあるのですが大丈夫でしょうか?
>>100 Get_Seitosuuは今オーバーロードして新しいの作り始めたんですけど、
そっちのほうをコピーしたのでList.Addが二回も出てきちゃったみたいです。
>>100 あらかじめ件数分かってるなら配列でいいんじゃない?
すっきりするしポインタで悩むこともなくなる
ちなみに
>>99 の言ってることは間違ってるから無視していいよ
クラスにしてもCreateする度に内部でメモリ確保してるわけで変わらない
むしろ余計なものが付く分そんなに件数あると有意な差が出てくる
ただその前に、全部メモリに読み込む必要あるの?300MB弱くらいにならない?
SQLで完結しそうにも思えるんだけど
102 :
89 :2007/08/08(水) 02:27:26
>>101 データを一覧表とグラフに集計してまとめるんです。
横浜市の学校で1990年以降に出来た小学校限定とか、
関西地区を除く地区の生徒数2000人以下の学校限定とか、
これを検索ボタンを押したら、条件変更ボタンですぐに一覧表とグラフを変えないといけないんです。
2秒以内に表示しなおすことが前提なのでいちいちSQLを使って取得している時間が無くて、
メモリに確保したままにしてグローバルから読み込もうと思ったんです。
103 :
デフォルトの名無しさん :2007/08/08(水) 02:27:37
> 14430000件 ふつうは、DB使う罠w
104 :
89 :2007/08/08(水) 02:40:36
>>103 使ってますよ。
SQLで取得したデータをどうするかで悩んでるんです。
>>102 やっぱりSQL発行すれば済む問題じゃないかな
ひょっとしてDBから1件ずつ取得して比較してると時間がない、なんて思ってるのかもしれないけど、
SQLってのはそういう条件で絞り込んで結果だけ返してくれる道具ですよ?
コード見てる限り高速検索アルゴリズムを自分で実装するってわけでもなさそうだし、
素直にSQL出しといた方がよっぽど早いかと思われます。
106 :
89 :2007/08/08(水) 02:47:00
>>105 SQLは使ってますよ。
SQL使って取得したデータをいち早く表示するために考えたのが、
「取得したらグローバル変数に格納する」なんです。
ですけど、いちいちSQLでデータを取得して書き込みだと、
データを一時変数に代入するのに時間がかかりすぎていて困っているのです。
条件ボタンを押すたびに一千万件以上のデータをSQLから取得していくと、
時間がかかりすぎといわれるのです。
107 :
デフォルトの名無しさん :2007/08/08(水) 03:01:33
バックエンドにDB使ってて、その中身をまんま持ってきて、 フロントエンドの言語のデータ構造に入れ込む状況が思い浮かばん
108 :
89 :2007/08/08(水) 03:15:30
>>107 DBへのアクセスは専用のフォームを使っているんです。
ですけどデータ表示とかはおのおののフレームが担当しているんです。
DBへアクセスした後そのフォームが別のグリッドやリストビュー、グラフにアクセスするのはおかしいし、
引数に渡すのも不自然だし、フレームに書いていくと修正が大変なので。
109 :
デフォルトの名無しさん :2007/08/08(水) 04:27:16
>>106 どうも読んでる限りではDBを使いこなせてないみたいだね
SQLは色んな書き方があるから、まずはそれを学ぶといいよ
SQLってのは単にレコードを1件1件読むためのものじゃない
また、1000万件以上の処理ということに変な思い込みを持ってるようだけど、
DBを使う場面ってのは大抵それと同じかそれ以上の件数のレコードを扱うよ
だからそれぞれのDBだってほとんどの場合それに耐えうるように設計されてる
110 :
89 :2007/08/08(水) 04:38:09
>>109 分かりました。もうちょっとSQLも勉強したいと思います。
そういえば此処に来たら何を調べていたのか忘れていましたが、
今思い出しました。
TListだとSQLに変わるので、TObjectListを使おうと思ったのですが、
var
Ob:TObject;
begin
Ob:=TObject.Create;
ObjectList1.Add(Ob);
Ob:=TObject.Create;
ObjectList1.Add(Ob);
end;
と言うように同じ変数にCreateを複数回も使ってもエラーとか言わないでしょうか?
また前にObjectListにAddしたオブジェクトは破棄されたり変な値が入らないでしょうか?
それと共にグローバルにおいて、関数が終了したら不正なデータに代わるとか無いでしょうか?
Q 同じ変数にCreateを複数回も使ってもエラーとか言わないでしょうか? A 同じ変数にCreateしたものを複数回代入してもエラーにはならない。 ただメモリーリークに注意しなければいけないが、この場合は他の管理方法に委ねているので大丈夫 Q 前にObjectListにAddしたオブジェクトは破棄されたり変な値が入らないでしょうか A Createによりヒープにオブジェクトが作成され Addでその参照が管理されるだけなので、それは杞憂 Q 関数が終了したら不正なデータに代わるとか無いでしょうか? A オブジェクトはヒープにしか作成されない(スタックには作成されない)ので杞憂 なおTObjectのインスタンスを作成してるけど、これは単なる例? TObjectList を使うより、record を使って型を作り array of TMyRecord ; のような、動的配列の方が扱い易いよ
2秒以内か。データベースサーバー何使って、Delphi側はからデータベースに接続するのに BDE使ってるの?ADO使ってるの?BDEのこと忘れたけど、ADOならTADODataSetのCacheSizeプロパティで 一度に取り出す行数制限できるからそれ使えば?一度に1千万のデータなんか画面に表示できないから、 一度に1千万のデータなんて読み込まなきゃいいだけ。
>>110-111 TObjectListはデフォルトで項目オブジェクトを所有します.
つまりリストをクリアしたりオブジェクトを解放すると全項目のオブジェクトを解放します.
TListのような参照するだけのリストを作りたい場合は
コンストラクタで引数にFalseを指定するか
(ナントカ := TObjectList.Create(False) )
生成後にOwnsObjectsプロパティにFalseを代入すると
(ナントカ.OwnsObjects := False )
所有しなくなります.
つまりリストをクリアしたりオブジェクトを解放しても項目のオブジェクトは解放されなくなります.
114 :
デフォルトの名無しさん :2007/08/08(水) 12:11:06
Turbo Delphi Explorerで Delphi 7と同じ規格?で作ることできますでしょうか?
115 :
89 :2007/08/08(水) 12:37:31
>>111 詳しい情報有難うございます。
TObjectは例で実際には構造体を使うのですが、動的配列のほうが速いのですか?
>>112 FireBirdとIBQueryを使っています。
>>113 標準だと参照型じゃないんですね。
参照型だと関数が終了した時に代入していたローカル変数をうやむやにして、
変な所を参照してしまうみたいで。でもそんな心配ないのですよね?
>>115 Delphiのオブジェクト変数(キーワードclassを使うもの)は常にポインタです.
つまりDelphiのオブジェクト変数はそのオブジェクトの場所を覚えているに過ぎません.
そしてTObjectListはオブジェクトの場所の一覧です.
TObjectListのAddメソッドではオブジェクトの場所が渡されて内部のリストにこの場所を書き足します.
たとえば以下のようなコードだと
TMyForm = class(TForm)
private
FList: TObjectList;
procedure Nantoka;
end;
procedure TMyForm.Nantoka;
begin
obj := TMyObject.Create; // @
FList.Add(obj); // A
end;
@でオブジェクトが生成されてその場所が変数objに書き込まれます.
Aでリストにそのオブジェクトの場所が渡ります.
メソッドNantokaを抜けると変数objは消滅しますがオブジェクトそのものは残ります.
(目的のビルの場所を書いたメモが捨てられてもそのビルが消滅するわけではないのと同じです)
リストはオブジェクトの場所しか見ていないので
変数objが消滅しても見てはいけないところを見てしまう心配はありません.
これはリストが項目オブジェクトを所有する場合もしない場合も全く同じです.
>>114 コンパイラそのものはD7から殆ど変わってない。ライブラリも殆ど同じ。
>>115 >TObjectは例で実際には構造体を使うのですが、動的配列のほうが速いのですか?
いちいちオブジェクトをCreateするより、構造体の動的配列の方が一度にメモリを確保するから
多少速度も上がると思うよ。
サイズが判らない場合でも、動的配列は最初に多めにとって、足らなくなったらまた多めにとって
というようにやればいい。
118 :
89 :2007/08/08(水) 15:48:00
>>116 だと本来出てこない値が出てきてしまうのは何故でしょう?
>>117 procedure TFrame1.ListSwitch(List1: TList; var List2: array of TSeitoSuu_Rec);
var
i:integer;
p:PSeitoSuu_Rec;
begin
SetLength(List2,List1.Count);←互換性の無い型です。
for i:=0 to List1.Count-1 do
begin
p:=POPE004_Rec(ListA[i]);
list2[i]:=p^;
end;
end;
と成ってしまいます。
どうしたら再定義できますか?
>>118 関数の引数でソレをやったら、動的配列ではなくなる
Type TArraySeitoSuu_Rec = array of TSeitoSuu_Rec; と動的配列型を定義しておいてから
procedure TFrame1.ListSwitch(List1: TList; var List2: TArraySeitoSuu_Rec);
とやらないと
120 :
89 :2007/08/08(水) 15:59:06
>>119 解決しました。
皆さん有難うございました。
こんなレベルの人が学校関係のDB扱う仕事やってんのか… そりゃ情報流出しまくるよなとおもた
引数で 動的配列のような格好の定義が出たら、ソレはオープン配列パラメータだ
123 :
デフォルトの名無しさん :2007/08/08(水) 19:11:06
また匿名でコテハン叩きか キャノンかダかな?
124 :
デフォルトの名無しさん :2007/08/09(木) 10:19:34
Delphi4 Pro を使ってます。 それでKOL(EXEのサイズが小さくなるやつ)を使いたいと思って KOLとMCKをDLして同じフォルダに解凍、「開く」からDelphi4用の パッケージ(.dpk)を開き、インストールを選択。 でもKOLaddが無いと怒られてしまった。 オフィシャルからKOLadd.zipを何度DLしても 解凍しようとすると「破損してる」って言われるし・・・ どこが間違ってるんでしょうか?
125 :
デフォルトの名無しさん :2007/08/09(木) 17:00:21
126 :
デフォルトの名無しさん :2007/08/09(木) 17:03:09
>>114 Explorer版は、コンポーネントのインストールができないので、
Delphi7で、コンポーネントを使っている場合は、そのままは移植できない。
THoge.Create(Self)のような、動的生成はできるので、無理やり移すことは一応可能。
(Explorer版ではない有償版や、同規格のDelphi2006では、ほぼ修正なしでコンパイルは通る)
127 :
デフォルトの名無しさん :2007/08/09(木) 17:05:46
>>124 ちょっと聞きたいのですが、
KOLってどういう理由で使いたいのですか?
ただ、EXEが小さくなる、という理由だと、はっきりいって、
茨の道を火を付けて歩くことになるので、やめた方がいいです。
128 :
デフォルトの名無しさん :2007/08/09(木) 18:49:40
コンポーネントのツールパレットを、キーボードで、検索したいのですが、 部分一致で検索する方法はなかったでしょうか? 通常は前方一致だけのようです(というか、THogeなら、hogeにヒットする) 環境は、Delphi2006
>>118 本来出てこない値について結局わからなかったので適切な答を出せませんでした(すいません).
131 :
89 :2007/08/09(木) 23:55:07
>>130 本来出てこない値とは取得したデータが
>>97 のレコードだった場合に、
本来、Modelは-1〜1しかないのに適当な値(118927354等)や
>>97 では書き忘れていたんですけど、F_KT_GakkoMei:String;があって、
そのF_KT_GakkoMeiに取得用SQLがそのまま書かれていたりするんです。
解決したんですが、新たな所でつまずいてここにもう一度来ました。
TFrame1のプライベート静的配列を宣言したんです。
ListA:array[1..3]of char;と言う具合に
そして
>>118 のListSwitchの中で
ListA[0]:='0';
ListA[1]:='T';
ListA[2]:='F';
代入するようにしてButton1Clickの中でListSwitchを呼ぶのですけど、
Button1Clickの関数を一度通り抜けるとListFは('','','','','','','',...)となって、
次にアクセスしようとするとおかしくなるのです。
解決する方法は無いのでしょうか?
どうか教えてください。
ListFって何?
133 :
89 :2007/08/10(金) 00:22:57
>>132 ListAでした。結構打ち間違えますね。
Button1Clickからその後のListAの確認するまでの間でぶっ壊してるんだろ コードも晒さずに解決法など出るわけ無いと何度
あとコード出す時は再現できる最小のコードでな
>>131 ご自分で宣言した添え字をお忘れですか?
>>131 >>118 のコードですが
3バイトの文字配列であるListAの内容を無理矢理POPE004_Rec型だと解釈させていることになります.
POPE004_Rec型は恐らくTOPE004_Recっていうレコード型を定義していて
それに対するポインタ型(レコードのある場所を指す型)なのだと思いますが
> ListA[0]:='0';
> ListA[1]:='T';
> ListA[2]:='F';
という文字の並びを4バイトのアドレスだと解釈すると$??465430番地になります.
当然この場所は意味をなしませんからList2[i]にはでたらめな値が入っていると思われます.
このコードはコピー元がでたらめになるだけなのでListAの内容を壊しているわけではないと思われます.
しかし似たようなミスをほかの場所でもやらかしてListAの内容を壊している可能性は低くないと思います.
フォームからドラッグしてデスクトップやエクスプローラにドロップする 処理はどうしたら良いんでしょうか? エクスプローラからアイテムをドラッグしてフォームにドロップする 処理は彼方此方で見かけるんですが、その逆が見つかりません・・・
ドロップして単にショートカット を作るというような事なら、そのままマウスイベントで処理すればいい ドロップして独自の動作をさせるものを貼り付けるというような事なら シェルエクステンションを作成しないといけない
141 :
デフォルトの名無しさん :2007/08/10(金) 17:04:51
みなさんは、 ・配置したコンポーネント名: ・フォーム名: ・フォームのユニット名: をどのように決めてますか? コーディング規約に属すると思いますが、 参考までにお聞きしたく。 (どこかに記述あったかなあ?) 私の場合は、 ・配置したコンポーネント名:TPanelなら、 HogePanel ・フォーム名:メインフォームなら MainForm、他、HogeForm ・フォームのユニット名:MainFormUnit、HogeFormUnit としてます
142 :
128 :2007/08/10(金) 17:27:44
143 :
128 :2007/08/10(金) 17:42:45
デルファイはもうやめtロケ、最近、ザイリンクスのハードウエアみたいなプログラミング が面白い
確かに VHDLはpascalに似てるけど、このスレで話題にするより他のスレでお願いね
146 :
デフォルトの名無しさん :2007/08/10(金) 19:16:13
ヘルプの表示項目をカスタマイズすることはできないでしょうか? 具体的には、Win32のDelphiだけを表示したいです。 WinHelpの時代は、手動でカスタマイズできたのですが・・・ 環境は、Delphi2006です。
147 :
146 :2007/08/10(金) 19:22:10
メニューの「ヘルプ」「ページのフィルタの編集」で、 デフォルトの表示を編集しようとしたのですが、フィルタなしを ("DevLang"="Delphi") OR ("DocSet"="bds_Win32") に、カスタマイズして、Saveをしても、 >このページのスクリプトでエラーが発生しました。 >'undefined'は、Nullまたはオブジェクトではありません。 と出てしまいます。
148 :
146 :2007/08/10(金) 19:40:48
("DevLang"="Delphi") だけにしたら、Saveできたけど、 空欄にしたり、変更するとエラーが出て、もどせなくなってしまった。 orz 「フィルタなし」を空欄にしてSaveした場合 --------------------------- Microsoft Internet Explorer --------------------------- Filter cannot be saved without a definition --------------------------- OK --------------------------- ("DocSet"="bds_Win32")で、Saveした場合 --------------------------- Microsoft Internet Explorer --------------------------- All keywords and attributes must be enclosed with in double quotes ( " ). Please correct your text for this filter definition. --------------------------- OK --------------------------- ちゃんと " つけてるよ・・・ orz
149 :
146 :2007/08/10(金) 19:50:24
試行錯誤していたら、うまく設定を保存できました。 「ページのフィルタの編集」で、 Newして、 ("DevLang"="Delphi") と書いて、Save Asで、「(デフォルト)」と書いて保存したらうまくいきましたヽ( ´ー`)ノ 括弧()つけると最初の項目になり、デフォルトで選択されるようです。 さらに、 ("DocSet"="bds_Win32") OR ("DevLang"="Delphi") にすると、うまくエラーが出ずに保存できました。 (エラー出たりでなかったりするので、うまくいかないかもしれませんけど)
ドキュメントのない開発環境はドキュンだな・・・
座布団一枚... 食え
154 :
デフォルトの名無しさん :2007/08/11(土) 13:33:07
>>150 だから困るんですよ
なんで、部分一致検索じゃないかと・・・
>>154 別に誰も部分一致検索じゃないなんて言ってないけど
156 :
デフォルトの名無しさん :2007/08/11(土) 18:29:36
いやだから、部分一致検索じゃないから、困ってるんです。
ドキュメントのない開発環境はドキュンだな・・・
>>156 はぁ?部分一致検索じゃん
勝手な思い込みで困ると書かれても困るんですけど
第一プラグインで解決したんじゃないの?じゃあもういいだろ
159 :
デフォルトの名無しさん :2007/08/11(土) 21:02:44
>>158 プラグインで問題は、解決はしましたが、
うちの2007では部分一致ではなく、前方一致です。
解せません。
160 :
デフォルトの名無しさん :2007/08/11(土) 21:03:30
すみません、2006でした。
161 :
デフォルトの名無しさん :2007/08/11(土) 21:05:31
二つの環境で試しましたが、両方とも、前方一致検索でした。 なんで、デフォルトでこんな不便な仕様なんだろう・・・
画像を任意の角度だけ回転させるような手続き Rotate(TImage, kakudo) みたいなのは標準でありますか?
ない。
そうですか じぶんで描くしかないみたいですね
165 :
デフォルトの名無しさん :2007/08/11(土) 22:37:48
コンポーネントさがす
GDI+を使う
TImage は画像じゃないよ
TBigBitmapCanvas って塗りつぶしうまくいかないよね。
回転にCanvasはつかわないしょ。 普通に補間関数書いて、座標変換するだけ。
>>170 > 普通に補間関数書いて
それが意外と難しい罠。
172 :
デフォルトの名無しさん :2007/08/12(日) 23:47:28
Threadの扱いで困っています。 Thread内でエラーが出た時に、ユーザーにしらせたいのですが、 どうするのがよいのでしょうか? 今は、Threadは、ひとつだけなので、 メインスレッドで、FThread: THogeThread; として、 サブスレッドの変数をもたせ、 開始時は、 FThread := THogeThread.Create(False); とし、サブスレッド停止時には、スレッドの終了を待つように、 procedure TMainThread.StopThread; begin if Assigned(FThread) then begin FThread.Terminate; FThread.WaitFor; FreeAndNil(FThread); end; end; としています。
173 :
172 :2007/08/12(日) 23:48:21
そして、サブスレッド内で、エラーが起きた場合 Synchronize で、メインスレッドでエラーをポップアップし、 Terminate; を呼び出しています。 しかし、こうすると、メインスレッドから、停止処理(StopThread)を呼ぶのはよいのですが サブスレッドで、エラーが起きた場合は、 FThread が、終了したにも関わらず、FThreadが、保持された状態になります。 次に開始したときは、また生成してしまい、メモリリークになります。 こういうときはどうするのが良い方法なのでしょうか? それとも、FThreadを持たない方法がよいのでしょうか? (その場合、どうやってスレッドの終了を待てばよいのか……?)
174 :
172 :2007/08/12(日) 23:49:04
あ、よく考えたら、 サブスレッド開始時に、StopThread呼べばいいのか・・・
175 :
172 :2007/08/12(日) 23:55:04
もしくは、スレッド一個なら、最初から生成しておく方法でもいいですね。 メインスレッド(メインフォーム)生成時に、生成しておいて、 SyncObj.TSimpleEvent を使って、イベント待ちにして、 スレッド開始時には、TSimpleEvent .SetEvent;する。 スレッド停止時は、フラグを立てて、ループを抜け、イベント待ちにもどる、と。 で、メインスレッド破棄時のみ、TMainThread.StopThread を呼び出すと。
176 :
172 :2007/08/13(月) 00:17:03
結局、 FreeOnTerminate = True; を使って、スレッドを自動的に破棄するようにしたのですが、 アプリケーション終了時に、メモリリークが起きてしまいます。 (ReportMemoryLeaksOnShutdown := True;で確認) TMainThread.StopThread;のように、スレッドの解放を待つにはどうしたらよいのでしょうか?
177 :
172 :2007/08/13(月) 00:27:39
>>176 に関して、メインスレッド終了時(Destory)に、
if Assigned(FThread) then begin
FThread.Terminate;
FThread.WaitFor;
FThread := nil;
end
としていたのですが、
スレッドを起動した状態で、終了すると
「スレッドエラー:ハンドルが無効です。 (6)」というエラー
と言われて、正常に終了できませんでした。
たぶん、Terminateで、スレッドが破棄されているからだと思います。
そこで、
if Assigned(FThread) then begin
FThread.FreeOnTerminate := False;
FThread.Terminate;
FThread.WaitFor;
FreeAndNil(FThread);
end;
としたところ、無事に正常に終了できました。
ありがとうございました。
でも、FThreadを持たず、複数Createする時はどうやって待つんだろ……
TTabControlのDragModeをdmAutomaticにすると タブをクリックしても選択されないのは仕様ですか? そうするとOnMouseDownやOnMouseUpイベントも呼び出されてないみたいだし、 自前でやるしかないんですか?
自前でやるのがプログラミングなんだぜ
180 :
178 :2007/08/13(月) 02:17:21
Delphi2007でTNT Unicode Control使うにはどうしたらいんでしょ? 無償版はだめっぽいし、最新の有償版ですら パッケージ C:\Program Files\tmssoftware\TMSUnicode\Packages\TMSUnicodeDED2006.bpl を読み込めません。 指定されたモジュールが見つかりません。. ってエラーがでる。(ちゃんとあんのに)
182 :
デフォルトの名無しさん :2007/08/13(月) 10:49:40
>>172-177 Threadから自前のメッセージをポストしてメインスレッドでユーザーに知らせればいいの
では? そしてその時にエラー処理なども一緒にすれば、Threadの方はシンプルにできる
と思うんだけど。
185 :
デフォルトの名無しさん :2007/08/13(月) 16:13:30
http://rsdn.ru/article/delphi/Handlers.xml ページみてるんですが、
type
TCalcFunction = function(const A, B : integer) : integer;
function Add(const A, B : integer) : integer;
begin Result := A + B;end;
procedure Example;
var CalcFunction : TCalcFunction;
begin
CalcFunction := Add;
ShowMessageFmt('CalcFunction(2, 3) = %d', [CalcFunction (2, 3)]);
なんでこういうふうにわざわざやるんでしょうか?
どういうときにこういうのを使うんでしょうか?
いや別にいやだったら本人の好きなようにやればいいんじゃないの?
>>185 自由に関数を切り替えるためじゃない?例えば
var
>>185 理由はそのページの説明文に書いてあるぞ
189 :
187 :2007/08/13(月) 16:37:52
ごめん、途中で送信しちゃった。 var SomeFunction : array[0..3] of TCalcFunction; として SomeFunction[0] := Add; SomeFunction[1] := Sub; SomeFunction[2] := Multi; SomeFunction[3] := divi; と代入すると(それぞれの関数は宣言してあるとする)。 SomeFunction[a](2, 3) でaの値を変えるだけで関数を切り替える事ができる。
関数ポインタの使いどころって意味なら C言語の例だけどqsortで検索してみたら。
191 :
デフォルトの名無しさん :2007/08/13(月) 17:11:48
>>185 えーそうなんですけ?
>>189 条件分岐を不要にできるんですか。これは使ってみたいです。
>>190 かえってわかんなくなってしまいました><
ありがとうございました。
>>189 Delphiだと「手続き型」になりますがTListやTObjectListのSortメソッドがそれに相当しますね.
サンプルを作ってみたのですがちょっと長すぎるのでぐぐってみました.
(ほかのサンプルは Delphi TList Sort でぐぐるとよいかも)
http://www.smart-bbl.info/CQN/FAQ/delphi/d0009394.html TList.Sortでは手続き型を使うことによって「データをどういう順番に並べ替えるかを決める処理と,
その条件に従って実際に並べ替える処理とが完全に分離」しています.
どんな形式のデータを並べ替えさせる場合でも,どんな順序で並べ替えさせる場合でも,
その条件に従って並べ替える方法はほぼ決まっているので,
結果としてリストを使うプログラマーは前者のコードを書くだけで済むようになり,
プログラマーが毎回並べ替えのコードを書くという無駄な作業から解放されるのです.
ちなみに上のページのサンプルコードではスタッフを年齢順にソートしていますが名前順にソートすることもできます.
function StaffSortCompareByName(Item1, Item2: Pointer): Integer;
begin
Result := AnsiCompareText(PStaff(Item1)^.Name, PStaff(Item2)^.Name);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
StaffList.Sort(StaffSortCompareByName);
end;
ボタン1を押すと年齢順でソートされてボタン2を押すと名前順でソートされます.実質1行で.
一番身近な関数ポインタは「イベント」ですわ。OnClickとか。
___________ ∧,,∧ /こんな風にすると ミ,,゚Д゚彡 < おもしろいよ。 ミ つ日 \ 〜ミ,,,,,, ,,ミ  ̄ ̄ type TCheckLineFunction = function(Line: String): Boolean; TStringListFunction = record FStrings: TStrings; constructor Create(Strings: TStrings); procedure DeleteLine(f: TCheckLineFunction); end; constructor TStringListFunction.Create(Strings: TStrings); begin FStrings := Strings; end; procedure TStringListFunction.DeleteLine(f: TCheckLineFunction); var i: Integer; begin for i := FStrings.Count - 1 downto 0 do begin if f(FStrings[i]) then begin FStrings.Delete(i); end; end; end;
___________ ∧,,∧ / ミ,,゚Д゚彡 < 以下、使い方。 ミ つ日 \ //空行を判定している function CheckEmptyTextLine(Line: String): Boolean; begin if Line=EmptyStr then Result := True else Result := False; end; var StringListFunc: TStringListFunction; begin StringListFunc.Create(OutputMemo.Lines); StringListFunc.DeleteLine(CheckEmptyTextLine); end; 関数側で、Lineの内容を判定して、判定がTrueなら 行削除する処理を行えるわけです。
196 :
デフォルトの名無しさん :2007/08/14(火) 11:39:22
指定のアプリーションに、アクティブにせずに、キー入力を送りたいのですが、 可能でしょうか? 可能ならば、どのようにやったらよいのでしょうか? 検索単語でもいいので、ご享受ください
最近は1つ質問すると10回答が来たり、自問自答がはやってるのか? いやぁ、夏枯れですねぇ。 よきかな、よきかな・・・
199 :
デフォルトの名無しさん :2007/08/14(火) 14:51:59
>>198 サンクソ。
PostMessageと、SendMessageっぽいですね。
調べてみます。
200 :
デフォルトの名無しさん :2007/08/14(火) 16:22:30
>>194 動かしてみたらなるほどおもしろいと思いました。
ありがとうございました。
201 :
デフォルトの名無しさん :2007/08/14(火) 16:32:17
最近は1つ質問すると10回答が来たり、自問自答がはやってるのか? いやぁ、夏枯れですねぇ。 よきかな、よきかな・・・
202 :
デフォルトの名無しさん :2007/08/14(火) 20:44:16
こんにちは。 TnTコントロールとOpenXMLにパスを通してコンパイルすると、 以下のように、言われてコンパイルが通りません。 なんとか、通す方法はないでしょうか? [Pascal 致命的エラー] TntClasses.pas(29): F2051 ユニット WideStrings は異なるバージョン WideStrUtils.WideQuotedStr によりコンパイルされています
203 :
202 :2007/08/14(火) 20:51:30
わかりました。 TnTから利用している VCL の WideStrUtils と、 OpenXML内の WideStrUtils がファイル名がかぶっているためでした。 Delphiは、ファイル名が、同じだと不都合でるんですね・・・ 勉強になりました
また自問自答か・・・
自ら成長する いいことじゃないか
ファイル名が同じだと、dcuファイルの出力先で上書きされるんじゃないのか?
207 :
デフォルトの名無しさん :2007/08/15(水) 02:45:07
まあ投げっぱなしで二度と来ない奴よりは数千倍マシだな
209 :
デフォルトの名無しさん :2007/08/15(水) 09:57:37
Delphi6だとTLabelのcolorプロパティを設定すれば即座に反映されますが Delphi2007だと設定しても反映されません。 Delphi6で作成したプロジェクトをDelphi2007でコンパイルして実行すると 設定した色になりますが、最初からDelphi2007で作成するとコンパイルしても 色が灰色のままです。 (;_;)
やったじゃん!
>>209 VCL ソースでは property Color nodefault; になってるね。
コードで変えても変わらないわけだ。
ありゃ核爆
213 :
デフォルトの名無しさん :2007/08/15(水) 18:43:53
各Windowの位置の保存は、みなさん、どう実装していらっしゃるのでしょうか? 既存のコンポーネントを使っておられますか?
214 :
デフォルトの名無しさん :2007/08/15(水) 18:44:51
自問自答って、あらたな拡販の手口? あほすぎるのは、お笑い系?
216 :
デフォルトの名無しさん :2007/08/15(水) 20:16:29
>>214 のコンポーネントは、けっこう便利そうです。
普通に使う分には、TPJWdwStateをFormにはっつけて、
AutoSaveRestore を Trueにいておけば、
自動的に、終了時にサイズ、位置、WindowStateが .ini に保存され、
起動時に復元されます。
(レジストリ版のコンポーネントもあります)
簡単な用途なら、コードを書く必要がないのが便利です。
217 :
172 :2007/08/15(水) 20:18:38
>>184 なるほど!メッセージを投げるのは思いつきませんでした。
簡単にできて、すっきりしますね
参考になりました。
サンクス。
それをラップしたのがSynchronizeなわけで。 エラー通知に使っちゃいけないという理由はない。
>>216 簡単な用途ならこーどでいいんでないかい?
簡単な、それでいて反復性のあるコードをまとめたのがコンポーネントだし、
どんな用途でも使っていけばいいんでないかい?
てか自問自答に恨みでもあるかのごとく噛み付いてるのがいるけど、
ここのスレタイと
>>1 を理解できてないようじゃ初心者以下だよな
いくら下らないことでも、それに引っかかる人間が今後いるかもしれないし、
解決方法を残しておくことは決して悪くない、むしろいいことだと思う
ただ、ここに来る人間は過去ログ読まない人の方が多そうだが…
また自問自答してるよ
超初心者が枯渇したため、これからこのスレは自問自答を装った Tips スレになりそうだな。www
それはそれで
みじめすぎ
ありがとう
227 :
デフォルトの名無しさん :2007/08/16(木) 08:21:26
>>VCL ソースでは property Color nodefault; になってるね。 >>コードで変えても変わらないわけだ。 なぜこんな事をしたのでしょうか? Delphi6 と 2007 のソース比べてみましたが、かなり変更されていますね ソースを見ても ThemeServices なんて知らないものがいっぱいだし ヘルプは英語で、お手上げです。 せっかく2007入れたけど Del6 を 入れ直します (;_;)
おめでとう
property Color nodefault; には D7 の段階から変更されているよ 何か勘違いしてないかな?
230 :
| :2007/08/16(木) 09:01:45
LabelのColor property使ったことなかたから気付かなかった。
よくわからんだが、意味のないものになってるの?
>>220 サンクスです。
Delフサさんのページあったのですね。
参考にさせてもらいます。
231 :
デフォルトの名無しさん :2007/08/16(木) 11:10:28
>property Color nodefault; には D7 の段階から変更されているよ 何か勘違いしてないかな? そうあって欲しいです。Del7はアンインストールしてしまったので すぐに解りませんが、後で試してみます。 >LabelのColor property使ったことなかたから気付かなかった。 私も今まで色には無頓着だったのですが、今回のシステムは先行したVB のプログラムで色を豊富に使っているため、絶対使わないと駄目なんです。 まさかこんなところではまるとは (@_@)
はまってごらんよ、あ〜の〜角を〜
>>231 TransparentプロパティがTrueになってませんか?
このプロパティはD2007からデフォルトでTrueになっています。
234 :
デフォルトの名無しさん :2007/08/16(木) 15:07:34
>TransparentプロパティがTrueになってませんか? >このプロパティはD2007からデフォルトでTrueになっています。 おっしゃるとおりでした。 Del6はデフォルトでFalseでしたが、Del2007で開くとTrueに変化していました。 困ったことに、この状態でコンパイルすると False 状態で実行されました。 Del2007で一度プロパティを変化させてから保管すれば正しい状態に戻ります。 色々と調べていただきありがとうございました。
235 :
デフォルトの名無しさん :2007/08/16(木) 21:13:57
メニュー(A)から、開発中のプロジェクトのプログラム(B)を 起動するようなアプリケーションを作成しています。 起動するアプリケーション(B)を、メニュー(A)を起動した状態で実行したいため、 オプションの「ホストアプリケーションの指定」で、 メニュー(A)のパスを入れたのですが、 実行しても、指定したメニュー(A)ではなく、 プロジェクトのアプリケーション自体(B)が立ち上がってしまいます。 何か他にする設定がありますでしょうか? 環境は、BDS2006 Delphi win32です。
236 :
デフォルトの名無しさん :2007/08/16(木) 21:35:36
他のDelphi製アプリの位置やサイズを得たいのですが、 良い方法はありませんでしょうか? 今は、EXEのファイル名から、Windowハンドルを取得するところまで できたのですが、 GetWindowRectで、Windowハンドルを渡しても、(640, 512, 640, 512) みたいな予期しない値が帰ってきます。 たぶん、Delphi特有のTApplicationの座標が帰ってきていると思うのですが、 ここから、メインフォームのハンドルを得る方法はありませんでしょうか?
237 :
236 :2007/08/16(木) 21:50:23
AppHandleにTApplicationのHandleが入っているとして、 FormHandle := FindWindowEx(AppHandle, 0, PChar('TForm1'), nil); としたのですが、FormHandleは 0 が返ってきました。
FindWindowExの理解不足。 所有されているウィンドウと子ウィンドウの違いが解っていないのかもしれない。
Vista で標準となった? ALT 押したらメインメニューが出てくるのってどうやって実装するのですか? マウスを上部に持って行ったら…とかなら、MainMenu:=nil で切り替えられると思うのですが、 キーボード主体で行いたいので。
>>236 すなおにFindWindow('TForm', 'HogeHoge')でよいんでないの。
もしくはTApplicationのHandleを使って、EnumWindowsとか。
2006→7?
242 :
236 :2007/08/17(金) 01:29:51
243 :
236 :2007/08/17(金) 01:38:10
なんという勘違い/(^o^)\
第6章 ウィンドウの階層について
http://homepage2.nifty.com/Mr_XRAY/Halbow/VCL06.html このページよく見たら、わかてきた気がします。
> FindWindowExやGetWindowで取得できないということは、
> 子ウインドウではないのですね・・・。
TApplicationに対して、TFormは、子ウインドウではなく、
所有するウインドウなんですね。
とすると、TApplicationのHandleに対して、
EnumThreadWindowsして、
GetWindow(Handle,GW_OWNER)が、TApplicationのHandleかどうか調べればいいわけですね。
上のページで言えば、EnumDirectOwnedWindowsですね。
明日試してみます
>>236-237 さん
DelFusa Library - Delphi OpenSource - DelFusa Floor
http://delfusa.main.jp/delfusafloor/opensource/delfusa_library_f.html ∧,,∧
ミ,,゚Д゚彡
,ミ' ミ
〜OUUつ
ここのEnumWinUnit.pasでWindow列挙も出来るし
得たハンドルをTWinInfoのCreateでハンドルを入れたら
様々な情報をプロパティから読めるようにしておいてるよ。
VCLのメインフォームを得るためには
EnumWindows(@EnumWndProc, 0); {←Topレベルウィンドウなので0を指定}
これとか
function EnumWndProc(h: HWND; l: Integer): BOOL; stdcall;
これを使っていて
EnumChildWindows(h, @EnumChildWndProc, l+1);
これは使ってない。
∧,,∧ 深夜なのに ミ,,゚Д゚彡 気温が暑いっすね〜 ,ミ' ミ 〜OUUつ タスクマネージャーのアプリケーションタブ互換は VisibleTrue/Owner有り/タイトル有り TApplication系のメインを見つける場合は VisibleTrue/Owner無し/タイトル有りで OwnerがTApplicationのものを列挙で見つけるのが いいと思うんだ。 例えばホットゾヌの場合 TApplicationにTHotzonuWindowがぶらさがっているのは TApplicationのハンドルとTHotzonuWindowのOwnerを調べると 一致するから、わかるよ。
♪ ∧,,∧ ♪ ミ,,゚Д゚彡 ♪ ミつ[|lllll]). 〜ミ ミ ∪''∪ 勉強すると楽しいよね。がんばってください。 とりあえず、D2007ではTApplicationウィンドウは廃止されますた。 dprの中身が begin Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TMainForm, MainForm); Application.Run; end. このようになっていて .MainFormOnTaskbar:=Trueとなると VCL、TApplication式ではなくVista対応アプリになります。 ※Win2Kで、今確認したら タスクマネージャーのアプリケーションタブに表示されないという バグがありますが....orz....
ListViewのOwnerDataをTrueにすると CheckboxesをTrueにしてもチェックボックスは表示されません 自分でチェックボックスを描画するんですか?><
248 :
236 :2007/08/17(金) 04:25:44
>>244-245 EnumWindowsで列挙して、OwnerがTApplicationのハンドルと比較
が確実つーことですか。
実験してみるす
公開されているユニットも、参考にさせていただきます。
>>246 マジスカ
アジャイル、アジャイルってコンパイル速度のめっちゃ速いDelphiじゃすでに当たり前なんだよ
導入したい超初心者ですが、 コードギアのユーザ登録のZip/Postal code ってなんですか?お願いします。
中学生からやりなおせ
郵便番号
TStringListの各行を下記のように 個別のstringデータに入れたいのでが、 stringA:=List.strings[0]; stringB:=List.strings[1]; stringC:=List.strings[2]; stringD:=List.strings[3]; TStringListの最大行数(せいぜい10行)は決まっているのですが、 実際は1行だけなのか、最大行数まであるのかは分かりません。 こういう場合どうしたらスムーズですかね? ifで1行の場合、2行の場合ってやっていくしかないでしょうか?
ほう
stringlist.count case文 美しくないな
>>245 どうでもよいことですが「気温が暑い」って言い方は正しくないです.「(やけに)気温が高い」もしくは単に「暑い」でおけ.
わざとならごめんなさい.
>>247 データを自前で持つようにするとチェックボックスは使えなくなるようです.
VCLのバグなのかWindows側の問題なのかいまいちよく分かりません.
>>253 あなたが『List.Strings[]に文字列を代入していないところを読み出そうとしたら空文字列を返すようにしたい』
…と考えていると決めつけてレスします.
{ Index がStrings.Count以上なら空の文字列を返す.0〜(Index - 1)ならStrings[Index]を返す. }
function GetString(Strings: TStrings; Index: integer): string): string;
begin
if Index < Strings.Count then
Result := Strings.Strings[Index]
else
Result := '';
end;
で,stringA := GetString(List.strings[0]) みたいに使う.
でも「何かを鍵にして複数の文字列を格納し,その鍵を使って文字列を取り出す」ということをしたいのでしたら
Valuesプロパティを使って文字列を鍵にして文字列を格納したり取り出したりする方が良いかもしれません.
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit_Value.Text := ListBox1.Items.Values[Edit_Key.Text];
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ListBox1.Items.Values[Edit_Key.Text] := Edit_Value.Text;
end;
,,,,,,,,,,,,,,,∧,,∧ /もちろん 〜′,,,,,,,,,,ミ,,゚Д゚彡< わざとやがな UU"""" U ⊃ \ いやあ、ご無沙汰っす。元気してます〜? 暑いっすねー。
初心者スレを荒らすなよ・・・
文字列とか動的配列は参照カウントとか使ってるのに、 なんでクラスのインスタンスはわざわざFreeしなくちゃならず、 しかもC++みたいにスタックに置いたりできないのですか?
文字列や動的配列はCopyOnWriteの機能が特に有効に使える型なので標準で実装されているが、 クラスは必ずしもそうとはいえないので各々のクラスの実装に任せている。 スタックに置けないのは、メモリの確保をクラスに委譲する設計を採用している為。
理由を聞いてるんじゃないでしょ。 「できません」が回答。
262 :
デフォルトの名無しさん :2007/08/18(土) 04:32:27
誰か2007洒落にください
263 :
259 :2007/08/18(土) 04:43:25
>>261 文字列とか動的配列は参照カウントとか使ってるのに、
なんでクラスのインスタンスはわざわざFreeしなくちゃならず、
~~~~~~
しかもC++みたいにスタックに置いたりできないのですか?
>文字列とか動的配列は参照カウント 文字列や動的配列は変数の寿命をそのままメモリ確保の寿命と出来る。 なお、俺がソースを見た範囲では参照カウントは使われていないようだ。 代入時に中身をコピーしてるように見える クラスの場合、windowsハンドルとかのリソースを持ってる場合があり、 開放時期を自分でコントロールしたい場合も出てくるのと、 自動開放するためには、その参照の代入で 複数の変数が参照してる場合もあり、 参照カウンタなどの管理機構が必要になる。 なおインターフェース型では参照型でメモリ開放管理が出来るようになっている。 >しかもC++みたいにスタックに置いたりできないのですか? これは単純に面倒だったからだろう。 その代わりにC++のようにドットと-> を混在させなくてすむ。 try finally の構文もあるし、ユニットという単位を持っていて、ユニット単位にinitialization や finalizationも書けるので、メモリスコープへの出入りで自動的に コンストラクタデストラクタを呼ぶような仕掛けを作る必要は無かったのだろう
よくもまぁ適当なことが書けるもんだなぁ・・・
>>265 >代入時に中身をコピーしてるように見える
え?StringってCopy on Write じゃないの?
268 :
デフォルトの名無しさん :2007/08/18(土) 06:30:05
StringはCopy on write 動的配列は、普通の参照カウンタ
実装が古い だけでしょ。
Stringと動的配列はクラスベースにして 'foo'.UpperCase // = 'FOO' [1, 4, 3].Add(6).Sort // = [1, 3, 4, 6] とかできるようにしてもらいたいね。
>>269 いやC++のほうが古いよ。
C++の二の舞にならぬようこの方法になった。
知ったか乙
文字列の構造は StrRec = packed record allocSiz: Longint; refCnt: Longint; length: Longint; end; この後に文字列が続いている。 基本的に、メモリ管理は参照カウンタ方式 文字列を代入すると system.pas の _LStrLAsg _LStrAsg というアセンブラ関数が呼ばれるので確認よろしく
知ったか乙
長い文字列は、Delphi2 から、Interface 型は Delphi3 から、動的配列は Delphi4 か 5 からですね。だから、スマートポインタ関係はここ10年で 実装された。クラス実装を可能にしたのは、Delphi 以前の直前のバージョン。 Delphi は、Pascal の文法は拡張してきたが、変更はしていないので、 古い実装はそのままなんだよ。それが、つぎはぎ感を感じさせるが、一方、 あるていど使いやすさにも通じている。OOPL として不完全なのも同じ。
>>273 allocSizの部分ってあったっけ?
その後はあったと思うけど
280 :
253 :2007/08/18(土) 22:19:23
var S : TStringList; begin while True do S:=TStringList.Create; end;
AnsiIndexTextって言うのを使いたいんですが、 2つ目のパラメータの意味というか設定の仕方が 分かりません。 string型の変数を渡してもだめって言うのは分かったのですが、 じゃあどうすればいいのかがさっぱりです。
>>281 こんな感じに使う。
AnsiIndexStr('うう', ['ああ', 'ううい', 'うう', 'ええ']);
詳しくはヘルプの「オープン配列コンストラクタ」を参照のこと。
つまりはつぎはぎのないC#が最高なのです。 Pascalは糞です。いますぐやめるべきです。
まあPascalが廃れC#が主流になったとしても VBしか使えない人がが主役になることはない訳だが。
while True do ShowMessage('あひゃ');
そっとしておいてあげてください。
var i : integer; S : TStringList; begin i:=0; S := TStringList.Create; try while True do begin S.SaveToFile(IntToStr(i)); inc(i); end; finally S.Free; end; end;
292 :
デフォルトの名無しさん :2007/08/20(月) 09:47:50
ある文字列の中に0〜9、a〜fの文字が使われていればTrue、それ以外の文字 が使われている場合はFalseを入れるプログラムを作りたいのです。 どうかご教授よろしくお願いします。
function have09af(s: string): boolean; var i: integer; begin for i := 1 to length(s) do if s[i] in ['0'..'9', 'a'..'f', 'A'..'F'] then begin result := true; exit; end; result := false; end;
>>292 一つでも 0..9 a..f があれば真なら
>>293 さんの通り
16進数の文字列だけで構成されているかどうかなら
var p: PChar;
p:=PChar(s);
while p^ in ['0'..'9', 'A'..'F', 'a'..'f'] do inc(p);
このあと、 p^ = #0 がtrue falseか
295 :
デフォルトの名無しさん :2007/08/20(月) 10:00:01
296 :
デフォルトの名無しさん :2007/08/20(月) 10:46:19
無事にできました。 ありがとうございます。 更に文字列がすべて空白の場合はTrue、 それ以外の空白(1文字空白等)はFalseという条件をつけ足そうとしました。 begin for i := 1 to length(s) do begin if s[i] in ['0'..'9', 'a'..'f', 'A'..'F'] then begin if s = '' then begin result := true; exit; end; end; result := false; end; end; 上記のようなコードを書いたのですが、上手くいきません。 重ね重ね申し訳ありませんが、ご教授お願いします。
当方見習いエスパーなので、読み取れませんが、 全部spcかどうかは function spcCheck(s: string): boolean; var p: PChar; begin p:=PChar(s); while p^ in [' ', #7 ] do inc(p); result := p^ = #0; end; のような感じで
298 :
デフォルトの名無しさん :2007/08/20(月) 19:02:33
try raise EMyError.Create('foo'); except on E: EMyError do self.error := E; // インスタンスを開放せずにerrorにセット。後でfreeなんてことは出来ませんか? end;
299 :
デフォルトの名無しさん :2007/08/20(月) 19:13:23
こんにちは。 Delphi7で、Excelに書き込まれた値を読むプログラムを作成します。 ユーザー側のExcelのバージョンが統一されていないため、 バージョン依存しないようにプログラムを作成したいのです。 VBだと、ExcelのDLLに対する参照設定を行わずに dim objExcel as Object Set objExcel = CreateObject("Excel.Application") というようにできるのですが、 Delphiではどのように行えばよいのかお知恵を拝借させてください。 "Delphi レイトバインディング"などで検索したのですが、 見つけることができませんでした。 お力をお貸しくださいませ。 どうぞよろしくお願いします。
>>299 Delphi Excel CreateOleObject
これでぐぐれば色々でてくるから参考に汁
301 :
デフォルトの名無しさん :2007/08/20(月) 20:25:39
>>300 参考になるサイトがわんさか出てきました。
これでいけそうです♪
ありがとうございます!!
>>298 raise した分は勝手に破棄されるので_
同じ例外オブジェクトをもう一度 raise 無しで作ればおk
>>292-296 _______________
∧.,,∧ /そこで、前にも紹介した
ミ.*゚Д゚彡< CheckStrInTableですよ。
ミ つ目(ミ . \
〜ミ,,O,,,,,,つ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
いつでもどこでも、一度書いていれば再利用できて汎用的って素敵。ウットリ
http://delfusa.main.jp/delfusafloor/opensource/delfusalibrary/20070708185145/StringUnit/StringUnitLight.pas type TInTable = (itUnknown, itAllInclude, itAllExclude, itPartInclude);
function CheckStrInTable(const Str, Table: WideString): TInTable;
文字がテーブルに指定したもので
全部含まれている、全部含まれていない、一部含まれている
を判断できます。
∧.,,∧ ミ.*゚Д゚彡 ミ つ目(ミ . 〜ミ,,O,,,,,,つ
∧,,∧ ミ,,゚Д゚彡 'ミ つ旦(ミ~~ ⊂ミ",, ,,ミ つ
∧,,∧___ /最近、よーやく /ミ*゚Д゚ミ/\< テストコードを /| ̄∪∪ ̄|\/ \同一ユニットに |____|/ いれるべきではないかなと ,,,,∪∪,,, ,, きがちいた。
>305 ListViewのソートの対象カラムに方向の矢印を出す方法の別解。 予めFBitmapArrowDnとFBitmapArrowUpに下向き、上向きのビットマップを用意しておく。で、 var Index: Integer; Hdr: HWND; HdItem: THDItem; begin Hdr := Listview_GetHeader(ListView1.Handle); for Index := 0 to ListView1.Columns.Count - 1 do begin FillChar(HdItem,sizeof(HdItem),0); HdItem.Mask := HDI_FORMAT; Header_GetItem(Hdr,ListView1.Columns.Items[Index].Index,HdItem); if (矢印を出すカラムだったら) then begin if (昇順だったら) then begin HdItem.hbm := FBitmapArrowDn.Handle; end else begin HdItem.hbm := FBitmapArrowUp.Handle; end; HdItem.Mask := HDI_FORMAT or HDI_BITMAP; HdItem.fmt := HdItem.fmt or HDF_BITMAP_ON_RIGHT or HDF_BITMAP; end else begin
313 :
312 :2007/08/21(火) 22:46:50
HdItem.Mask := HDI_FORMAT; HdItem.fmt := HdItem.fmt and not(HDF_BITMAP_ON_RIGHT or HDF_BITMAP); end; Header_SetItem(Hdr,ListView1.Columns.Items[Index].Index,HdItem); end; end; こんな感じでやってます。コンポーネント化?うぅむ…。
うぅむ
procedure ahya; begin ahya; end;
うぅむ…。
317 :
312 :2007/08/22(水) 00:43:17
そういやこれのネタ元どこだっけな?確か海外だったような希ガス。
TComboBoxでTMemoのModifiedみたいに、値が変更されたのかを知るにはどうすればいいのですか?
うぅむ…。
320 :
haru :2007/08/22(水) 17:36:28
はじめましてよろしくお願いします。 GetWindowやFindWindowを使って、ウインドウハンドルを取得し、 とあるソフトを自動的に操作したいのですが、 そのソフトが、確認の際にダイアログを表示してきます (delphiでいうMessageDlgを使用している感じ) その際、delphiのソフトは待ち状態になってしまうのです。 そのダイアログを消さないと操作が続かないのですが、 delphiのソフトからはどうにもこうにもできなくて困っています。 何かよい方法をご存知の方はいらっしゃいませんか?
ダイアログも自動的に操作すればいいじゃん
テスト専用のプロジェクトを作るんでしょ。
>>320 OKボタンがウィンドウなら、OKボタンに対してWM_LBUTTONDOWNを送る。
>>320 SendMessage を使って操作したら、その操作の中で相手がダイアログを出すから処理が帰って来ないって事だよね?
ならPostMessageに変更したらどう?
325 :
haru :2007/08/23(木) 09:40:41
早速のお返事ありがとうございます。
>>321 さん
ダイアログが出た瞬間、delphiのソフトは待ち状態になるので
ウィンドウが取得できないのです。
>>323 そのダイアログのウィンドウハンドルが取得できなくて悩んでいます。
>>324 そのとおりです。
PostMessageについて調べてみました。
確かにこれを使えばできそうな気がしますが、
その前に、出てきたダイアログのウィンドウハンドルが取得できません。
これは元のウィンドウから見てハンドルが決まってたりするんでしょうか?
ダイアログが出ていないときに、
ウィンドウハンドルやその中のボタンのハンドルは決まっているのでしょうか?
(ダイアログが出てしまうとdelphiソフトは何も調べられないので。。)
再度よろしくお願いします。
>>325 PostMessage に変更したら、処理は即座に帰って来るので
その後開かれるダイアログを検索する事は出来ると思うよ。
Delphiのbinフォルダに WS32.exe があるからコレをまず眺めてみたら?
TListの中身がFreeされているか判断したいとき 予めnilを入れておく以外の方法ってありますか?
328 :
haru :2007/08/23(木) 14:54:52
>>326 解決しました。
ありがとうございました。
またお世話になるかもしれないので、よろしくお願いします!!
>>327 難しく考えず、ポインタも所詮数値なんだから
数値の正しさとは何か、を追求すればおのずと答えが出るじゃろ
330 :
デフォルトの名無しさん :2007/08/23(木) 15:45:23
コンソールアプリケーションを用いて、 1 4 9 16 2 3 8 15 5 6 7 14 10 11 12 13 17 18 … と書くプログラムを作りたいのですが、よく分かりません。 分かる方、教えてください。
331 :
デフォルトの名無しさん :2007/08/23(木) 15:47:15
すいません。 1 4 9 16 2 3 8 15 5 6 7 14 10 11 12 13 … です。
begin Writeln('1 4 9 16'); Writeln('2 3 8 15'); Writeln('5 6 7 14'); Writeln('10 11 12 13'); Writeln('…'); end. じゃだめなの?
>>329 kwsk
freeしてもポインタはそのままなので判断できないのですが。
規則性のあるものにソレやっちゃったらダメだろうw
>>327 コミュニケーション能力の欠如した輩がなにやらグダグダ言ってるようだが
一言で言うと「ない」。
>>327 ないと思います.
ポインタの値(場所,アドレス)がnilではない場合,
その値自体からそれが指している場所が開放されたかどうかは知ることはできませんし
ポインタが指している場所のデータを実際に読み書きして試すこともできません.
結論として領域を解放したあとにnilを入れることになると思いますが
開放する領域がオブジェクト以外ならFreeMem(p)の代わりにReallocMem(p, 0)とすると
領域の解放とnilの代入を一度にできます.
>>333 計算して値を出せという宿題なのでしょう.
お前ら頭いいな 330の言葉足らずな質問だけでは俺も333としか思わかった 一種のエスパーだよ
340 :
329 :2007/08/23(木) 20:40:10
違う
何が
日本語をおk
日本語を?
日本語が
>>327 Freeしたとき、Deleteもしちゃえ。
そうすれば、ListになければFreeされてると判断できる。
Createもされてないけどね!
347 :
デフォルトの名無しさん :2007/08/24(金) 09:53:27
Turbo Delphi で正規表現って、使えますか?
使えます
350 :
デフォルトの名無しさん :2007/08/24(金) 10:32:37
Turbo Delphi 無料の で正規表現の使い方を教えてください。
Delphi for PHPの話題もココでいいでつか?
消えろカス
>>351 初心者用の質問スレはないからここでいいんじゃね? あってもどうせすぐ落ちそうだし。
でも、答えられる人がいるかは不明。
PHPに関する質問なら、PHPスレのがいいかもね。
総合的な話題なら、オッチャの方でも時々出てるよ。
オッチャ って何? とgoogle 検索したら・・・・なるほど、オッチャだけで成立してるんだな
(ノo`)アチャー (ノO`)アチャー (ノ∇`)アチャー (ノ▽`)アチャー (ノ∀`)アチャー (ノ◇`)アチャー アチャー(ノo`;) アチャー(ノO`;) アチャー(ノ∇`;) アチャー(ノ▽`;) アチャー(ノ∀`;) アチャー(ノ◇`;) アチャ・・・(ノ_< ;) (・o+)アチャー (+。+)あちゃー (*_*)アチャ (^_・;)あちゃー (;´o`)ゞアチャー!! (;´O`)ゞアチャー!! (;´∇`)ゞアチャー!! (;´▽`)ゞアチャー!! (;´∀`)ゞアチャー!! (;´◇`)ゞアチャー!! Σ(´o`;|||)アチャァ〜ッ Σ(´O`;|||)アチャァ〜ッ Σ(´∇`;|||)アチャァ〜ッ Σ(´▽`;|||)アチャァ〜ッ Σ(´∀`;|||)アチャァ〜ッ Σ(´◇`;|||)アチャァ〜ッ (≧o≦;)アチャー (≧O≦;)アチャー (≧∇≦;)アチャー (≧▽≦;)アチャー (≧∀≦;)アチャー (≧◇≦;)アチャー (/≧o≦\)アチャー!! (/≧O≦\)アチャー!! (/≧∇≦\)アチャー!! (/≧▽≦\)アチャー!! (/≧∀≦\)アチャー!! (/≧◇≦\)アチャー!! (/o≦\)アチャー! (/O≦\)アチャー! (/∇≦\)アチャー! (/▽≦\)アチャー! (/∀≦\)アチャー! (/◇≦\)アチャー! (/o≦\)アチャー!ミテランナイ!(/O≦\)アチャー!ミテランナイ!(/∇≦\)アチャー!ミテランナイ! (/▽≦\)アチャー!ミテランナイ!(/∀≦\)アチャー!ミテランナイ!(/◇≦\)アチャー!ミテランナイ! アチャ〜(/o\) アチャ〜(/O\)アチャ〜(/∇\) アチャ〜(/▽\)アチャ〜(/∀\) アチャ〜(/◇\) (/・_・\)アチャー・・ (→←)アチャ (→o←;;; アチャ (→o←)ゞあちゃー q(→-←q) q(→0←)p (p→-←)pアチャー
_____________ ,∧,,∧∩ /せんせい、 ミ,,゚Д゚彡< しつもんでーす __ミ ミ ミ \ \,,∪  ̄ ̄ ̄\  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ||ヽ|| ̄ ̄ ̄ ̄||" ...|| ̄ ̄ ̄ ̄|| ファイルパスって A:\とか C:\とか \\マシン名\ とかじゃないですか。 AA:\ とかっていう可能性もあるんですか? それとも、アルファベット1文字限定? ネットワークドライブ接続をみると、アルファベット1文字のほうかなと 思っているんですが。
>356 スレ違いだが、Windows上では2文字のドライブレターは存在しないと思う。
誰もWindowsなんて言ってない
じゃあ>356は何のOSの話してるんだ?
ひ・み・つ♪
_______________
∧.,,∧ /ああ、そうか。
ミ.*゚Д゚彡<
ミ つ目(ミ . \
〜ミ,,O,,,,,,つ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
自分の関数で、ファイルパスか否かを判断する関数を作ろうとしてて
一文字目アルファベット
二文字目:
三文字目\
で、\が連続して追加されてなければ
ファイルパスかな、って判断。
している仕様でよいかな、
っておもう思考して質問してたから
すれ違いとか、全然わかんなかったよ。
http://delfusa.main.jp/delfusafloor/opensource/delfusalibrary/20070708185145/FileNameUnit/FileNameUnit.pas これで、CheckDrivePathやCheckUNCPathはOKってことだね。
よかったよかった。
ありがとうございます。
∧.,,∧ ミ.*゚Д゚彡 ミ つ目(ミ 〜ミ,,O,,,,,,つ
印刷プレビューを作ってるんですが、 例えばモノクロプリンタで黒以外の色で線を引くと、当然グレーなどで印刷されますよね。 それを画面上でプレビューするにはどうすればいいでしょうか? ようするに線やフォントのColorプロパティをグレイスケールに変換したいのです。
モノクロプリンタで黒以外の色で線を引くと 1、グレーで印刷される・ 2、消えたり、黒だったりする 場合の2通りありますね いったん TBitmapを作成して そのTCanvasにいったん描画すればいいんじゃないの? 1の場合は256色グレースケールのパレットで 2の場合はモノクロで
QuickRep
366 :
363 :2007/08/25(土) 15:06:29
YUV変換でググったらありました。
367 :
デフォルトの名無しさん :2007/08/25(土) 20:20:47
初心者も初心者でおはずかしいのですが、 0から始めるとしたら、Turbo ExplorerとDelphi6 Personal どっちを選んだほうがいいのかな? さらにTurbo Explorerを選ぶとするなら、DLページに Turbo C++、Turbo Delphi、Turbo Delphi for .NET、Turbo C#から どれか選べとありますが、どれにしたらいいのか…。 .NET って.Net Framework対応のソフトを作るとかそういう為? 利点さえよくわかってないので…ごく普通に配布用ゲームとか 自分用プログラムが作りたいだけなんです。
DBが使いたいならTurbo。そうじゃなきゃ6でいい。
>>367 6はライセンス取得できない。サイズやメモリ消費量の小さいバイナリが作れるTurboにしとけ
>>368 DB自体がよくわかって(ry 言葉自体は聞くんですが…
そっから始めないとというレベルで。
でもないよりはあったほうがいいのかな?
>>369 ライセンスキー?は現在取得できないとかまとめWikiに
ありましたがそれのことでしょうか?
お二人ともが推薦してくれてるのでおとなしく
Turbo Explorerにしてみます。
>>366 の4つのTurboでは
無印「Turbo Delphi」を選んだほうが無難ですか?
.NET が必要でヘルプが糞でコンポインストールできないTurboにしとけ
デルファイアンのみなさまこんにちは、毎年お騒がせしています夏厨です。
今日はこのページで配布されているマウスジェスチャーコンポーネントについて
質問です。 ⇒
ttp://hp.vector.co.jp/authors/VA024591/ このページの一番下の 「マウスジェスチャー(右クリックでグリグリ)」 のリンクから
ダウンロード出来ます mousegesture.zip 内に収録されている Project1.dpr ですが
何故かエラーが出てコンパイル出来ません。
これを出来るように修正出来る方、良かったらご教授下さいませ。
エラーの内容は
「クラスTMouseGestureが見つかりません」
というものです。
gMouseGesture.pas にはこのクラスが定義されているのにおかしいです。
Unit1の uses節 には gMouseGesture が正しく追加されています。
一体何がいけないのでしょうか、Delphi MLやGoogleさんに聞いても教えて
もらえませんでした、よろしくお願い致し候。
374 :
373 :2007/08/25(土) 20:46:18
環境は Delphi6 personal、RTL3までの全てのアップデートを適用済みでおじゃる。 OSはWindowsXP home SP2でおじゃる。
コンポーネントとしてインストールしていないから。
あ、ゴメン。 インスコしてなかったらIDEがフォームを表示する時にエラーになるわ。
いやインストールしてないだけだろ
378 :
373 :2007/08/25(土) 21:00:07
>>375-377 なるほど、そういうことでおじゃるか、今から試してみるでおじゃる。
ありがたき幸せ。
379 :
373 :2007/08/25(土) 21:04:59
動いたでおじゃる!! ありがとうごじゃる! おまんら神!
偉くレベルの低い神だな
>サイズやメモリ消費量の小さいバイナリが作れるTurbo kwsk
自分で試してみればいいじゃん
なんとか長所をさがした末の苦しいほめ言葉wwwwww
ウザイな。自分が使ってる物が一番だと思ってるんだろうね。
385 :
デフォルトの名無しさん :2007/08/25(土) 22:15:27
>>383 長所のない過去の産物に縋り付いてる人に言われたくないですよ。
ばか 反論するなら383だけにしろ。 Personal版使ってる人に謝れ。
どっちも素晴らしいと思います。
その割には使われてないなぁ・・・
ヘルプが糞。初心者にはお勧めできない。
>>385 へぇー、Delphi は過去バージョンは長所がなくて、現バージョンはヘルプが糞
なんですね・・・
だめだこりゃ
初心者に優しいのはD6だろうな サイズやらメモリなんてのは初心者の作る物では大差出ないし あとはライセンス発行さえしてくれればいいんだが
D6なのですが、エディタオプションで指定可能なフォントが 日本語の等幅フォントしか選択できません。 (Terminal, FixedSys, MS ゴシック, MS 明朝) これをプロポーショナル、あるいは欧文の等幅フォントに変更するには どの様にすれば良いでしょうか?
Turboに乗り換える
ヘルプが糞。やめとけ。
D6のライセンス発行する方法を教えてください。
どうしてCodeGearスレでやらないんだろう・・・
プロポーショナルフォント使うとインデントが揃わないよね。
ヘルプなんて見たことなかったわ。 IDEは新しい方が使い易いよね。
矩形選択とか多用してた人には評判悪いだろうな
矩形選択とか繰り返したのはお前だけだろ
Delphi7でOleContainerにWordを表示させてるんだけど、 Activeになってない状態だと改頁以降が表示されないっぽい。 Activeにするとちゃんと表示されてくれるんだけど… OleContainerで改頁以降もちゃんと表示出来る方法ナイ?
Java→Delphiにした。 んで、惚れた。
VB→Delphiにした。 んで、惚れた。
よっこいしょ
406 :
401 :2007/08/28(火) 10:54:12
>>402 Activeにしない状態で改頁以降も表示される方法はないのかな?
随分前に自分で2chタブブラウザ作ったんだけど、使い続けるとガンガンメモリを食っていく。 DATからHTMLに変換する時と、タブ開け閉めの繰り返しが問題みたいなんだが。 やっぱメモリ関係をしっかり制御しないとマズい?
当たり前だ メモリリーク検出ライブラリ使ってどこでリークしてるのか洗い出せ
メインがVB系の業務プログラマなので、あまりメモリ管理は詳しくなかったり。 自分的には最初に変換用メモリを確保して使いまわしてるつもりなんだけど それが上手くいってないって事か。 このブラウザを長時間使うと、物凄いスワップ入るようになるし。 元々WEB+2chブラウザが無かったので自作したんだけど、いまだに乗り換えれる物が開発されないし。 やっぱ需要が無いんだろうな。
ええーーーーーーーーーーーーーーーっ!!!! そんなメモリ食いまくりのヘボプログラムより乗り換えれる物いっぱいあるじゃん
スレ違だが、以下の条件を満たせるブラウザがあるなら教えて欲しい。 ・インストール・常駐・レジストリ無し、フォルダコピーするだけで起動。 ・Webに完全対応。 ・2chに完全対応。 ・多段、多重(タブグループ)タブ対応。 元はActy使ってたけど、サポート無いし一括更新チェックし辛いので。
板違い
当然自分でも調べてるけど、上の条件が全て満たせるブラウザは存在しないんだよな。 動作的にはWEBブラウザ+常駐2ch変換タイプが一番近いんだろうけど。 自力でなんとかするしかないか。 ところでメモリ関係が詳しく説明されてるサイトって無い? どうもにもメモリ関係の分かり易い資料が見つからないもんで。
何が悲しくて非力な自分のヘボアプリ使わなきゃならんのだろうな
IE使ってるタブブラウザは使用メモリがガンガン増えていくから コード内でリークしてないなら別にいいんじゃないの
>>415 IEコンポーネントだとそうなのか。
タスクマネージャで使用メモリ見てると、タブを閉じずに更新チェックする分には
使用メモリが一定以上は増えないから、それなりに上手く行ってるのだろうか?
もしIEの問題だと解決が難しいな。他のブラウザはどうしてるんだろう。
Delphi7でActiveDirectoryにログインしてるかどうかを判断する方法ってありますか?
だからメモリリークチェッカー使えよw
>>416 お前の糞アプリなんて誰も使わないから、リークなんてどうでもいいんじゃね
適当に作って適当に使えば?
メモリリークは当然調べるべきで、見つかったら明らかなバグとして修正。 で、IEコンポがメモリ食いすぎているならキャッシュ機構を組み込んで アクティブになったタブの履歴を記録していって 古いタブのIEコンポ自体かその内容をクリアしていくなんて事をやればメモリの大幅な節約にはなるな。
421 :
デフォルトの名無しさん :2007/08/29(水) 16:35:00
(INT = 10) or (INT = 20) or (INT = 30) or (INT = 40) or (INT = 50) or (INT = 60) or (INT = 70) or (INT = 80) or (INT = 90) この条件を省略して書く方法はないでしょうか?
if INT in [10,20,30] then とかかな。数値が多くなれば使えなかったと思うけど。
>>422 ありがとうございます。
一応10〜90までです。早速試してみます。
case int of 10, 20, 30 ... 90: ・・・ end; if InRange(int, 10, 90) and (int mod 10 = 0) then
質問です。 1つの変数を複数の自作関数内で使う場合、グローバル変数としてではなく 変数のポインタを引数にして使うにはどのようにしたらいいですか?
エスパーが出払っているようですので、勘違いを恐れずにお答えします。
>>425 ポインタを引数にするには、まずポインタ型を定義します。
type PByte = ^PByte;
関数の宣言で この型を
function hoge( p : PBye):string;
のようにすればポインタを引数にする事が出来ます。
でも、ポインタを使わず 参照( 引数にvar) を使った方が使い易いですよ
エスパーを要するレベルでなくただ単にお前のレベルが低いだけかと
>>426 ありがとうございます。ポインテャはやめて参照のほうを使ってみます。
>>425 function hoge( p : Pointer):string;
var Value: Integer; begin hoge(@Value);
ヒント:解決済み
432 :
425 :2007/08/30(木) 15:52:40
変数引数だとnilを渡すのが汚くなるけどね。
434 :
425 :2007/08/30(木) 18:43:55
いいえ、ポインタを使った方が楽です。
両方使え。 たとえば文字列の解釈ルーチンなら function Hoge(var p:PChar ; out ret:string):boolean; type TACHAR = array[0..9999] of Char; var pA: ^TACHAR absolute p; と始めるのが最強だ
プッそんなんが最強だって(;゚;ж;゚; )
>>438 文字列の解釈というとても抽象的な言葉があったので具体的な例示を求めたのですが、
どうやら日本語が理解できない方だったようですね
こちらの配慮が足りなくて申し訳ありません
お前らは器がちいさいのう
> type > TACHAR = array[0..9999] of Char; > var > pA: ^TACHAR absolute p; この辺が馬鹿っぽい
>>441 ソレは、たとえば 区切り文字が複数バイトの場合とかに対応するのが楽だからやってるわけで
サイズに意味はないよ。 せいぜい3文字も先読み出来ればいいので
ココって人を見下した感じの人が居るよな。 バカにするだけで全然役に立ってないし。 正直居なくていいと思う。
>>445 バカにするだけで全然役に立ってないし。
正直居なくていいと思う。
>>445 自分のことをそんなに客観的に判断できるなんてすごいね
いいえ神です。
まあ日本人はコミュニケーションとるのへたっぴーだからほっとくと荒れるわな。
型無しポインタなんか教えるなよ
別に誰も教えてない
はぁ?ログ読めよカス
わろた。ログ読んでも分からんのかカス
451は一人で勝手に教わったつもりでいるんだろ
>>442 例外的にPChar型はP[10]のようにアクセスできる。
PCharとPWideCharだけ 特殊で ・p:=p+3のような ポインタと整数との加減算が出来る ・(p+3)^ を p[3] と書ける 他のポインタ形はポインタと整数との加算はincを使わないと出来ないし もちろん配列表現も出来ない。 これに馴れて、シリアル通信でバイナリデータだからと下手にPByteにしたりすると・・・・
>>457 ・・・キャストが必要になる。
もったいぶるほど深刻か?
435はわざとじゃないの? absoluteとかありえない。
馬鹿だからしょうがない
absoluteとはまたすごい化石を掘り出してきたな
Delphi7で終了時によくエラー吐くんだが、どうにかならん?
IDEに組み込んだコンポーネントやアドインにバグがあるとおかしくなる。 自分で組み込んだパッケージを一つずつ取っ払っていってチェックするとか。
>>462 C:\Documents and Settings フォルダに SendToというのがあるから、そこに
DelDel.BAT をエディタで新規作成して、
--------------------------
CD /D %1
del *.tds
del *.~*
del *.dsk
del *.dof
del *.dsm
del *.dcu
--------- ここまで -----
を入れておくといい。
そのプロジェクトのフォルダに対して マウスの右ボタン⇒送る を時々やるクセをつければ 頻度が下がると思うよ
OpenDialog.Executeすると常に画面の真中にダイアログ開くのですが 任意の位置に開きたい場合はどうすればよろしいのでしょうか? Delphi6です。
>>465 難しい事を聞くね。
出来ない事は無いだろうけど・・・・どうしてもやりたいの?
>>465 簡単な事を聞くね。
もちろん出来るけど・・・・何でそんな事も分からないの?
type TMyOpenDialog = class(TOpenDialog) public MyHandle:THandle; xPos, yPos: Integer; procedure WndProc(var Message: TMessage); override; function ExecutePos(x,y:Integer):boolean; end; function TMyOpenDialog.ExecutePos(x, y: Integer): boolean; begin xPos:=x; yPos:=y; Result:=Execute; end; procedure TMyOpenDialog.WndProc(var Message: TMessage); var Rect: TRect; Monitor: TMonitor; begin inherited; GetWindowRect(Handle, Rect); MoveWindow(Handle, xPos,yPos , Rect.Left-Rect.Right, Rect.Top-Rect.Bottom, True); end; こうやってみたけど、ダメだった。 ダイアログのHandleは窓ハンドルじゃないのかなあ
それ、やったことあるよ。 もう忘れたけど。
>>466 難しいかったのですか・・・。320*240程度の小さいウィンドウのアプリなので
OpenDialogが画面中心に開くと、元ウィンドウとまったく重ならない位置で開くので
なんとかしたいのですが。
[builder:19268] Re: TSavePictureDialogの拡張コンポーネント [builder:10261] Re: TOpenDialogにユーザー定義のコントロールを乗せるには ∧,,∧ ミ,,゚Д゚彡 このあたりから... ミ⊃旦⊂ @ミ ⊃ ⊃ procedure TForm1.OpenDialog1Show(Sender: TObject); var Rect1: TRect; DialogWidth, DialogHeigh: Integer; begin GetWindowRect(GetParent(TOpenDialog(Sender).Handle), Rect1); DialogWidth := Rect1.Right - Rect1.Left; DialogHeigh := Rect1.Bottom- Rect1.Top; MoveWindow(GetParent(TOpenDialog(Sender).Handle), Trunc((Width-DialogWidth)/2) + Left, Trunc((Height-DialogHeigh)/2) + Top, DialogWidth, DialogHeigh, true); //開いたダイアログの親Formの中心に表示するようにしている Abort; //このAbortが無いと動作しない。 end; procedure TForm1.Button1Click(Sender: TObject); begin OpenDialog1.Execute; end;
CodeZineのSMTP認証のサンプル(Indy10)のサンプルを実行してるんだが動かん・・・。 Libeay32.dllとssleay32.dllはぶちこんであるのに何故だ? ちなみにIndy以外にSMTP認証が出来るコンポって何かある? SynapseはOpenSSL入れないと駄目だからちょっとあれだし、ICSやらも無理。 何かあったら教えてくれ。
エラー文くらい書いてもらわないと
>>474 とりあえずコンパイル環境が悪いのかと思って
コンパイル済みのものを実行しているが、”メール送信に失敗しました”となってしまう。
アカウントはGoogleのもを使用。
他のメーラーだと送信できるから何かしら問題があると思うのだが、よくわからん・・・。
>>474 ちなみに例外は
'Socket Error # 10054
Connection reset by peer.'
が飛んでくるようですねぇ・・・。
むぅ・・・。
477 :
465 :2007/09/01(土) 04:30:58
>>471-472 上手く任意の位置でダイアログを開くことができました。
ありがとうございました。
Indyも開発止まってのかな。どんどんDelphi絡みのプロジェクト死んでいくな。 南無阿弥陀仏
BDS2006です。 DelphiでC++Builder(やVC++)みたいに、コンパイル時の構成を切り替えたりすることはできますか?(DebugとかReleaseとか) あと他人のソースとか見て思ったんですが、Delphiだと関数のinline化は滅多にしないんですか?
>>479 コンパイル時の構成を変える一番簡単な方法は複数のプロジェクトを作る事だね
dprだけ別にして、他のユニットを同じにしてやる。
ただ、プロジェクトグループで一気に両方作ろうとすると コンパイルオプションの差は区別されないので
1プロジェクト毎に再構築させる事。
>できますか? できない。なぜこれをIDEから出来るようにしないのか本当に理解できない。 10年前から出来ていても何の不思議もないのに。 とはいえ構成の大半はソース中のコンパイラスイッチで指定できるので {$HINTS ON} {$WARNINGS ON} {$LONGSTRINGS ON} {$IOCHECKS ON} {$ifdef Fastest} {$ASSERTIONS OFF} {$OVERFLOWCHECKS OFF} {$RANGECHECKS OFF} {$else} {$ASSERTIONS ON} {$OVERFLOWCHECKS ON} {$RANGECHECKS ON} {$endif} {$ifdef Release} {$DEBUGINFO OFF} {$OPTIMIZATION ON} {$else} {$DEBUGINFO ON} {$OPTIMIZATION OFF} {$endif} みたいなのを1ファイルに記述して各ユニットで {$i Swiches}すれば一応は可能。 ProjectName.cfgを外部のスクリプトで書き換えてプロジェクトを一旦閉じて開きなして切り替えるやりかたもあるにはある。 inlineはだいぶ後に追加されて古いコンパイラで互換性がないからあまり使われていないのだと思う。
Delphi 2007ではできるようになりました、って話じゃなくて?
inline はDelphi2005の目玉だったが、その使用は非推奨です、と力説してた。 呪われた機能ですから使用しないように。
484 :
482 :2007/09/01(土) 15:34:23
あ、できるようになったってのはビルドの使い分けの話ね。 inlineはどうなんだろう。まともになったのかな?でも必要性はそれほどないかな。 C++でinlineってまずgetter/setterが対象だろうけど(それだけじゃないが)、 property Foo read FFoo write FFoo;なら気にする必要ない。それに継承ツリーの 比較的深いVCLではinlineとかでパフォーマンスを稼いでも効果が薄いんじゃないかな。 それよりもCPUとRAMを強化したほうが。
485 :
デフォルトの名無しさん :2007/09/01(土) 15:51:30
フォルダ選択ダイアログのUNICODE対応版のコンポーネントはないですか?
>>483 吹いた。そういや、inline使ってねえわw
ShelObj . SHBrowseForFolderW を使ったらどう?
488 :
487 :2007/09/01(土) 21:56:18
いやフォルダもあったはず
490 :
489 :2007/09/01(土) 22:31:27
コンポじゃなくて関数だけど
Release版はコマンドラインコンパイラ使ってコンパイルするといいよ。
492 :
デフォルトの名無しさん :2007/09/02(日) 05:01:23
シフトJISの"接"を"%90%DA"というようなコードに直すライブラリ、どこかにありませんか?
DarkBasicから呼び出すDLLを作りたいのですが
■ソース
library DB_StrLib;
uses
Windows,System;
{$R cmdtable.res}
function Len(strTextIn:Pchar):Int64;cdecl
begin
Result := Length(strTextIn);
end;
exports
Len name 'Len';
begin
end.
■cmdtable.rc
STRINGTABLE
Begin
1, "DB_LEN[%S%Len"
End
といった感じで出来たものを呼び出してみたんだけど、値の受け渡しがよく分からない。
返ってきた値は63605613795475461でした。
http://forum.thegamecreators.com/?m=forum_view&t=69292&b=18 上記を参考にしていたのですがexportsの所の@@YAXPAXとかって何でしょうか?これを入れると呼び出しもエラーになってしまいます。
DLLを作るのは初めてでかなり的外れな事を聞いているかもしれませんがよろしくお願いします。
DLL関数の戻り値にInt64とかStringとかレコードとか 普通じゃない型は使えないと思った方が良い。 整数型かポインタ位にしておくべき。 こういうときは関数の引数にデータへのポインタを渡して 関数内で逆参照して代入するのがセオリー。
DarkBasic では、name 'Len' と STRINGTABLE はいるの? 通常のDLLの場合はいらないけど。
>>497 そうですか……Int64を使った記述例がマニュアルに書いてあったので使えると思い込んでました(^^;)。
DLL側でメッセージボックスを出して調べた所、引数は問題なく渡っているようです。
戻り値をintegerにしてみましたが値は同じような感じのものしか返ってきませんでした。
>>498 exports節を削除するとDLLのロードは出来ますが、関数の呼び出しが出来なくなります。
どうやらここの設定がDarkBasicに値を送るためには重要なようです。
サンプルのexports節に
// These are the function DBpro will call:
Construct name '?Constructor@@YAXXZ',
Destruct name '?Destructor@@YAXXZ',
ReceiveCoreDataPtr name '?ReceiveCoreDataPtr@@YAXPAX@Z';
と書かれているのが気になりますが@@以降の文字列の意味がさっぱり分かりません。
STRINGTABLEはDBの関数?として使うために必要なのではないかと思います。
無くてもDLLをCALLするコマンドを使えば一応は動きます。現在はこの方法で呼び出しています。
500 :
デフォルトの名無しさん :2007/09/02(日) 16:32:42
DarkBasicって渋いな・・・ ゲームだろうか。 応援してるぜ?
>499 @@については(ネーム)マングリングでぐぐれ。 渡される文字列はPascal文字列じゃなくC文字列なのでLengthじゃなくStrLenを使え。 ヘルプのDLL関係のところは読んでおけ。 exportはその関数を外部から読めるようにするために必須だからそのままでおk。 STRINGTABLEはこの場合はいらないだろ、普通に考えて。
マングリ
フォームに、小さなドット(・)を場所(Loft=?top=?)を指定してうつにはどうやればいいんですか?
Canvas.Pixels[x, y] := clBlack;
TDBCombobox.Itemsを「名前 = 値」形式でセットして、 DBとのリンクはNameでコンボの表示はValueで、ということは 実現可能ですか? ちなみに、NameとValueは扱いが逆でもかまいません。
久々にこのスレみたら、Delphiのポインタについてむちゃくちゃなこと言ってる奴がいるような
>>426 これコンパイル通るかね。
多分
type PByte = ^Byte
;の書き間違いなんだろうけど。
で、PByteとかありきたりのポインタ型はWindowsユニットその他に定義済みだからそれをusesした方が楽。
>>457 >・(p+3)^ を p[3] と書ける
むしろ、他のポインタ型ではp[3]としか書けなくて、C/C++みたいな(p+3)^とは書けないというべきだろう
強引に書くなら phoge(longword(p)+3*sizeof(p))^
? >むしろ、他のポインタ型ではp[3]としか書けなくて var p:^Byte; で p[3]:=1; とかが通るって事? いつから書けるようになったの?
DBGridでもStringGridでもいいんですが、 ユーザーが列の幅を自由に変更できるようにしている状態で 変更した幅を、すべて元の(開発時)幅に戻すにはどうすれよいでしょうか。 現在は起動時にiniファイルにすべて書き込んでおいて、戻したいときにiniファイルを読んで変更していますが、 列幅だけではなく、DBGridの各Column等のプロパティをすべてやろうとすると大変なんで Reloadコマンドみたいなのは無いでしょうか?
PChar と PWideChar 以外では ポインタへの加減算も、 ポインタと配列の混交も許されてないだろ
PChar,PWideChar以外にもp[3]と書いて通る型があるんですけど?
var p : ^Char; とした場合は、他のポインタ形と同じで、ポインタの加減算なんかの特例は受けられない
面毒せー連中だな・・・
>>511 はいはい PAnsiChar もそうですね
>>むしろ、他のポインタ型ではp[3]としか書けなくて 言い訳になってないがな・・・
TabControlでMultiLineがtrueの時にタブが何行になってるのかを調べる方法を教えて下さい。
その前にその数値を何に使うか教えてもらおうか。
ちゃんとした求め方は知らんけどacClientなPanel置いて (TabControl1.Height - Panel.Height) div (1タブの高さ) とかやったらとりあえず求まりそうだな。
520 :
517 :2007/09/03(月) 21:25:13
ごめんボケてた。RowCount使えばいい事に気づいた。
配列型へのポインタはp[3]のように書けるよ。 もちろんp^[3]のようにも書ける。
それは逆参照して単なる配列になるから添字がつけられるだけで ポインタを配列として使えることとは違うだろう
文句の多い人だな
ってか、意味がぜんぜん違うわな・・・
ズコー
フォーム1のbutton1.clickに以下を書いてあります。 form2.ShowModal; //form2表示 for i:=0 to 100 do begin sleep(10); form2.progressbar1.position:=i; end; form2.close; //form2消す プログレスバーを乗せたフォーム2を出して ループの進行と共にプログレスバーを進めたいんですが この時だと、フォーム2は表示されますが、一向にプログレスバーが変わりません。 教えてくんなさい。
ShowModalにブレイクポイント張って実行しておくんなまし。 開いたウィンドウ閉じるまで処理戻らない
>>526 という事で、 form2.ShowModal -> form2.Show に変更してはどう?
普通そういうのはform2側でやるもんだがな
進捗フォームの実装はヒトクセあるから サンプルないと理解不能だろうな
ShowModalで進捗表示したい場合はスレッド立ててメッセージとか投げるのが普通だと思うけど、 モーダルでスレッド使わない場合は普通どうやって書くの?無理?
モーダルなダイアログ出すと、使い方を強制してしまうので、 ファイルの読み書きとか決まったダイアログ以外は出来るだけ使わないようにしてる。
533 :
デフォルトの名無しさん :2007/09/04(火) 22:23:34
del6,del7のproとstr版をもっています。いずれ使用承諾コードが 取れなくなる日がやってくると思って、レジストリを保存しておきたいの ですが、regeditでレジストリをテキストファイルで全て書き出し、関連部分を 抜き出そうとしても、インストール番号とインストールキーの項目は 分かりましたが、使用承諾コードの項目がどこにあるのか分かりません。 どなたか、再インストールに備えてのレジストリのバックアップの方法 (認証関係部分のみ)を教えてくれませんでしょうか。
>str版 文字列版ですか?
質問です! Turbo delphi でMDI アプリを作ってるものです。 delphiでMDIアプリケーション作成しようとすると メニューバーがデフォルトでついてくるんですが、 このメニューバーって非表示にしたりできないんでしょうか?
できないとでも思ったんですか?
すみません。私があほなだけかもしれませんが できないと思いました。。
>>537 おお、よく気がつきましたね
その通り、あなたがあほなだけです
素晴らしい洞察力だ
くだすれって、初級者が初心者見下す場面が多いけど、どんだけ心に余裕がないんだろうと毎回思う。
工作員が荒らしてるんでしょ。
例のabsoluteポインタ君だろ
>>531 進展表示をするという事は、 どこかで処理が進展してるわけだよね?
メインスレッドで処理させたくてモーダルにするなら、
ShowModalで呼び出された先で処理するしかない。
1、タイマーを使って分割処理させる
タイマーの処理はメッセージループ中で呼び出されるので ShowModal中にも呼び出される
2、Application.OnIdleで処理させる
procedure TForm1.Idle(Sender: TObject; var Done: Boolean) ;
begin
with Form2.ProgressBar3 do begin
Position:=Position+1;
if Position>=Max then Position:=0;
end;
Done := False;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnIdle:=Idle;
end;
>>535 メニューを付けたり外したりの事なら、
if MainForm.Menu<>nil
then MainForm.Menu:=nil
else MainForm.Menu:=MainMenu1;
みたいにやれば出来るけど・・・・ でもメニュー無いと不便ではないの?
>>543 ありがとうございました!
メニュー表示/非表示の切り替えができればうれしいと思ってたので・・
そういえば昔、時間掛かる処理中に表示するプログレスバーとか処理中の文字を 別フォームで出すってのを面倒なコード書いていろいろ作って進化したなとか独りで思ってたけど パネルのvisibleを切り換えるだけでいいじゃん!と気づいた時はショックだった。
>>545 でもプログラムスケールによっては
他の処理でも同じプログレスフォームを使いまわしできるのでは。
例外を複数行書くときはどうしたらいいのでしょうか? except on E:foo do begin FErrorMsg1 := E.Message; Efoo; end else on E:bar do begin FErrorMsg2 := E.Message; Ebar; end else; end; としてもコンパイルできない・・・。
case
Helpくらい嫁 try ... except on EZeroDivide do HandleZeroDivide; on EOverflow do HandleOverflow; on EMathError do HandleMathError; end;
ちょっとおしえて、フレームの上の青いバー _□X これがあるバーの高さは何ドットですか?
環境によって違うからGetSystemMetrics(SM_CYCAPTION);で計測しろ
552 :
デフォルトの名無しさん :2007/09/05(水) 11:58:33
環境によるって…
育ってきた環境が違うから スキル違いはいなめない
555 :
デフォルトの名無しさん :2007/09/05(水) 16:19:52
前に、フォルダ選択ダイアログのUNICODE(WideString)版のコンポーネントがないか聞いたものです。
>>487 探したら、ありました!!
TNTのソースをgrepかければよかったんだな orz
TnTFileCtrl ユニットの WideSelectDirectory です。
ていうか、VCLに元からついてくる SelectDirectory すら知らなかった orz
てっきり面倒な人はコンポーネント使うものかと・・・。
とりあえず、使い方。
uses TnTFileCtrlして、
var Directory: WideString;
begin
Directory := WatchFolderEdit.Text;
if TnTFileCtrl.WideSelectDirectory('選択するフォルダ', '', Directory) then begin
WatchFolderEdit.Text := Directory;
StartWatching;
end;
end;
3番目の引数にあらかじめディレクトリを入れておくと、そこが選択された状態で、
選択ダイアログがでます。
選択されたフォルダは、3番目の変数に入っています。
あとは、if文で、場合分けすればおk
556 :
デフォルトの名無しさん :2007/09/05(水) 16:51:49
557 :
デフォルトの名無しさん :2007/09/05(水) 18:04:16
BDS2006や、Sleipnir2のように、 オプションページを作りたいのですが、 どのようなコンポーネントの組み合わせで作るのでしょうか? TreeView+TabPage?
TThreadをFreeOnTerminate:=falseにしてCreateしたら 処理が終わった後そのスレッドはどうなるのでしょうか?また呼び出して使う事とかできるのでしょうか? サーバーとの通信にスレッドを使っているのですが今はタイマーでFreeOnTerminate:=trueにして毎回Createしています。 一度だけCreateして必要な時にスレッドを使うような方法があれば教えて下さい。 まだよくスレッドの概念がわかっていないので参考になるサイト等があれば合わせて教えて下さい。宜しくお願いします。
>>558 while not terminated do
begin
処理
suspend;
end;
必要な時
resum;
以上
>>557 TreeView+PageControlお勧め。
設計時にタブ名を
全般
表示
表示/フォント
みたいにパス風にして実行時に解析してTreeViewに
+全般
+表示
+フォント
といったノードを作る。
PageControl.Visible := Falseで非表示にして
ノードがクリックされたらノードに対応するPageControlの対応するTabSheetを
TabSheet.Parent := Form1;
とやるとフォームにそのタブシートの中身が表示されるようになる。
TabPageでやるよりちょっと面倒だけど一回作ってしまうと使い回しがきくよ。
>>557 TNotebookでやれば?Samplesページにあるぞ
>>560 Visible とか Parent 変えたりするの?普通でいいんでないか?
procedure TFrom1.FormCreate(Sender: TObject);
var
i:integer;
begin
with PageControl1 do
begin
for i := 0 to PageCount - 1 do
Pages[i].TabVisible := False;
Align:=alClient;
ActivePageIndex:=0;
end;
end;
procedure TFrom1.TreeViewClick(Sender: TObject);
begin
PageControl1.ActivePageIndex:=TreeView.Selected.Index;
end;
TabVisible弄るのってなんか変な挙動があったような
564 :
562 :2007/09/06(木) 21:11:56
そなの? デザイン時に邪魔かなって思うくらいで今までは何もなかったけど
memcheck2.0使ったら起動してすぐ終了するだけでものすごい数のリークが報告されるんですが書き出されたログの見方がわからない・・・。 pasファイルのどの行でリークしてるかわかるやつもあるけど、ClassesとかControlsとかFormsとかピンとこないです。 みんなどうやってリーク箇所を判断してるんですか? 誰か助けて下さい。
ソース読んでリークの箇所を判断してますが。
スタックトレース機能を使えばどの関数で漏れてるかまでわかるような。
各ユニットで定義されているTPersistentを継承していないクラスも含めた 全classを列挙してクラス参照を得る方法はないですか?
ズブの素人です。質問させてください。 TStringListのItemsが持ってるデータは何MBなのかを知るにはどうすればいいんでしょうか?
SizeOf()というのはあるが、そもそもTStringListに何持たせてるんだ??
Length(sl.Text)じゃねーの
>>571 TStringListは2G以上のデータを持てないと噂に聞いたので、まず2G以内かのチェックと、限界までの何%の情報が入ってるのか、分かれば楽しかろうと…
>>572 Lengthは文字数だと思います。
今回はLengthではなくて、ファイルなんかにしたときのサイズが知りたかったのです。
解からないからと質問してきて返ってきた回答は確認もせずに否定するとか
575 :
デフォルトの名無しさん :2007/09/07(金) 10:42:33
>>568 基本的には、できないよね
TPersistentも登録しないと、列挙できないよね
普通はストリーム系を使わないか? つかサイズチェックなら他にもあるだろ・・・。
>>574 >Length(sl.Text)じゃねーの
これでサイズわかるの?
578 :
デフォルトの名無しさん :2007/09/07(金) 10:45:15
>>573 Length(String)から、大体のサイズは推察できる
TStringListは、Itemsは、Stringのリストだから、
サイズは、大体、Char * Length(String) + αとなる
厳密にやるなら、メモリマネージャ乗っ取る方法があるだろうが、面倒だろうね
579 :
デフォルトの名無しさん :2007/09/07(金) 10:46:42
> 厳密にやるなら、メモリマネージャ乗っ取る方法があるだろうが、面倒だろうね これに関しては、取り消し わからんので、つっこまれても、何も返せんw
580 :
578 :2007/09/07(金) 10:47:54
>厳密にやるなら、メモリマネージャ乗っ取る方法があるだろうが、面倒だろうね 面倒なんですか… 2Gなんて滅多になるものではないから普通は気にしないもんなんですか。 わかりやした。
なんかカオスな流れだな
583 :
デフォルトの名無しさん :2007/09/07(金) 10:53:29
584 :
573 :2007/09/07(金) 10:57:41
あ、573を578とアンカーつけ間違えました。すみません。
585 :
デフォルトの名無しさん :2007/09/07(金) 11:04:10
結局のとこどうなのよ? 中村さんやHalbowさんくらいの手練の人はおらんのか?
答えが出てるのにわからんといわれても手の施しようがありません。
そんなに疑うならSaveToFileででもサイズ確認すりゃいいだろ。 そもそも何故上限が2Gなのか・・・・
588 :
デフォルトの名無しさん :2007/09/07(金) 11:38:08
なんだ、TStringListそのもののサイズかとおもた。 そうじゃないんなら、なおさら、Length(String)でわかるじゃないかYO
こんな感じ? Length(sl.Text) + (SizeOf(TStringItem) - Length(sl.LineBreak)) * sl.Count
SaveToしたときのサイズなんだからSizeOf(Text)でいいだろ。
>そもそも何故上限が2Gなのか・・・・ なに?上限2Gは都市伝説だったのか? 俺、信じてたのに…
1Gの長さの文字列を二つ以上ぶら下げたってTStringListの制限には引っかからないだろ。 あまり長大なテキストを扱う場合は、それよりも先にパフォーマンス的な壁にぶつかるだろうな。
Text プロパティを持っていて、これを呼び出す場合もある事を考えると (2^31-1) で制限されていると考えていいと思うけどな
昔は制限あったね
Win32ってアドレス空間が4G、内2GはOS予約、ユーザプロセスは2Gしか使えない、じゃないの?
くだすれでそんな高度な会話すんな。
今ソース確認したけど、LoadFromFileやLoadFromStreamで読み込むと2Gの壁に引っかかるね。 自分で一行ずつ追加するなら、恐らく理論的にはいけるけど今度はOSの制限にひっかかる。 ま、そもそもTStringListはそんな巨大なファイル向けの設計じゃないから、 自分で適当な処理作った方が早いし速いと思うよ。
同じlabel内に前の文+改行+文章と表示させたいのですがどうしたらいいでしょうか? 文字の表示にfor文使って1文字ずつ表示させているので 途中に改行なり入れると1文字ずつ改行されてしまうんです
>>598 意味がわからんぞ。
Label1.Caption:='死ね'+#13#10+'アフォ!';
画面を切り替えるためには、 (ウィザードのようにコンポーネントの位置がころころ変わるような) PageControlを使って複数ページ作ってその中に配置すればいいということを聞いたのですが、 その方法だとどうしてもウィンドウ淵に数ピクセル隙間ができてしまいます。 この間を消す方法はあるのでしょうか?
tabcontrolとpanelででも実装すればいい
もうdelphiを買わないほうがいいですか?
604 :
272 :2007/09/07(金) 21:05:59
nyで流れてるから落とせばいいんじゃね?
>603 はいはいクマクマ
>>601 おおおおおおおお
うまくできました感謝です。ありがとうございます。
TNotebookは管理が非常に面倒なのはここだけの話 あと読み込みも遅いのも まぁこれはフレームを使って必要な時だけ読み込むようにすれば何とかなるけどね
>>598 ゲームで一文字づつ表示して、端まで行ったら改行したいわけ?
for文で毎回入れるんじゃなくて、入れたいときに入れればいいよ。
エスパーが住むスレ。それがくだすれ。
回答者にはある程度のESP能力が要求される。
delwikiなくなったの?
403になってるね
すんませーん。
TRegExpの質問。
『
http:// 』にはマッチせずに
『
ttp:// 』にはマッチするような正規表現、はTRegExpでは
どのように書けばいいのでしょうか。
何をやりたいかというと、
文中の、"
ttp:// "を"
http:// "に置き換えたいのだけれど
"
http:// "を"h
http:// "には置き換えたくないので
ReplaceRegExprに何を書いたらいいのだろうかと・・・
普通はh?t?tpだろうけど・・・
>>615 無いとは思うけど「ht@tp://」ってのが元々あったら
どうする?
>>619 @なんて例えばの話なんだから、そういうのが予測される場合適宜変えればいいだけの話
それくらい頭使えよ
Delphiというのをやってみようと、Delphi7をインストールし、MDIアプリケーションの雛形をウィザードでつくり、その親フォームにPanel一つとButton一つを置きました。 そして「すべて保存」し、ビルドボタンを押すと、配置したときはPanelとButtonの色が灰色だったのに、親フォームのグレーの色に変わっていました。 何が原因なんですか?
>>624 あてずっぽだけど、ParentColor って無いか?
>>626 ParentColor をtrueにしてもfalseにしてもグレーになっちゃう・・・
ついでに初めからついてるToolBarまでグレーになっちゃう。
なんでだろ?
お前らバカだなー gray n. 灰色, ネズミ色 つまり色なんて変わってないんだよ こんな叙述トリックに騙されるようじゃやっていけないぞ
>>630 いや、そういう言葉遊びじゃなくて、マジで困ってるんだ・・・
厳密にはclBtnFacrっていう明るいパネルの灰色がclAppWorkSpaceっていう暗い親フォームの色になってしまう。
ボタンの色が変わるなんてありえるの?
633 :
デフォルトの名無しさん :2007/09/09(日) 03:38:31
フォームエディタと実行されたウィンドウとで表示が違うのか それともビルドするとフォームのプロパティが書き換わるのか どっち?
>>631 変わっちゃうなら、フォームクリエイトイベントで
書き換えたらいいじゃない
635 :
617 :2007/09/09(日) 05:43:30
>>620 もしかして置き換えじゃないからこんなレスされてんの?
>>617 だけhttpに置き換えれば済む話だろ・・・
そんなんわからん奴はif文書いとけ
>>634 Createイベントで代入してもOnShowイベントで代入しても暗い親フォームの色になってしまう。
なんでだろ?
どこかで親フォームの色が代入されるようになってるんだ・・・
フォームにメインメニュー作っても実行するとなぜか表示されない…なんでだろうorz
638 :
636 :2007/09/09(日) 12:27:06
さらにpanelの上にpanelを一つ置き、上のパネルの色を白に設定しても実行時には上のpanelの色が親フォームの暗い色になってしまうorz バグ?
639 :
638 :2007/09/09(日) 12:39:13
プロジェクトを全部破棄して新たに作り直したらうまくいきました。 なにかの値を知らずのうちに動かしたのかもしれません。 それはなんの値だったのか、気にかかるのですが… ひとまず自己解決しました。
ある文字列をwidestringでとって、それをcanvas.textoutで20文字ごとに 出力したいんだけど、どうやってもうまくいかない(´・ω・`) canvas.textout(1〜20字まで) + #13#10 + canvas.textout(21字〜) みたいにできるかとも思ったけどできず… 誰か助けてorz
>640 CanvasはANSI版なので、W系のAPIを直接呼び出すべし。
textoutはCRLFを解釈してくれたっけ? Y座標を増やして描画したらどうかな。 ListBox使うと手っ取り早いけど。
unicode を使おうと思ったらもう全て wで行く決意をしなくちゃいけない ってのもどうかと思うけどな〜 -> delphi 7だけど、最近のは違うのかな?
改行を解釈して出力してほしいならDrawText(W)
wikiなくなってない?
こんばんはです すこし負荷のかかる処理をしているのですが 使用者のPCがデュアルコアCPUの場合に、2つのCPUに処理を振り分けることはできるのでしょうか 今のままだと50%でCPU使用率が止まってしまうものでして。
TThread
マルチスレッドか、マルチプロセス。
651 :
デフォルトの名無しさん :2007/09/10(月) 08:29:26
652 :
640 :2007/09/10(月) 08:40:55
情報くれた人ありがとう、実はまだ手出したことないけど今後のためにもAPIでやってみるよ。
ひさしぶりにDelphiに復活したけどやっぱDelphiはいいわ。 vsにもどりたくない
654 :
648 :2007/09/10(月) 15:29:22
まともなレポートツールはないのかっ! RaveもQuickもダメダメじゃんか。 PrinterオブジェクトやExcelでせこせこ地味な コーディングしないと仕様を満たせないのかな? あるいいはサードパーティの製品版を買うか? どうすればいいんだ。
俺クリレポ使ってる
657 :
デフォルトの名無しさん :2007/09/10(月) 19:39:12
ちょっとずれるけど、 レポートツールってどんなことに使うんですか? 素朴な疑問なんですが・・・
>>655 サードパーティの製品版買って
これで金取るなよ・・・と愚痴る
>>657 なんか楽そうに見えるんだろ。
俺はデータベースの印刷なら自作マクロで印刷してる
∧,,∧∩ 昨日はありがとござい ミ,,゚Д゚彡 ましたー、 ミ つ旦.ミ また質問っすー TRegExpのReplaceRegExprなのですが 大小文字を区別しない、もしくは、区別する。という オプションはありますでしょうか? どこで指定したらいいでしょう? ご存じでしたら教えてください。 ソースみても、さっぱりわからないっす。 IgnoreCaseのオプション、見つからず。でした。 正規表現だから、そういうの無いのかな?
愛だよ、愛。
なんかもうお前自分で作った方がいいんじゃないか
鏡を見れば解るかも。 鏡に映っているのは・・・
indyのソースって勝手に書き換えていいの?
いい。
property ModifierStr : RegExprString read GetModifierStr write SetModifierStr; // Set/get default values of r.e.syntax modifiers. Modifiers in // r.e. (?ismx-ismx) will replace this default values. property ModifierI : boolean index 1 read GetModifier write SetModifier; // Modifier /i - caseinsensitive, initialized from RegExprModifierI
>>660 var RegExp: TRegExp;
RegExp := TRegExp.Create(nil);
RegExp.IgnoreCase := True;
♪∧,,∧ ♪
ミ,,゚Д゚彡 ♪
ミつ[|lllll]). わかってきました。
TRegExpは、ここが詳しいですね。
BlueLeaf1336-PROBLEMS-2005_0032 > リンクタグ作成 HrefBuilder > 基本処理作成
http://www.geocities.jp/fjtkt/problems/2005_0032.html とりあえず漏れはTRegExprのReplaceRegExprを使っているので
こんなのをつくってみた。
//大小文字無視フラグ搭載のReplaceRegExpr
function ReplaceRegExprCase(const ARegExpr, AInputStr, AReplaceStr : RegExprString;
IgnoreCase : boolean = False) : RegExprString;
begin
with TRegExpr.Create do try
Expression := ARegExpr;
ModifierI := IgnoreCase;
Result := Replace (AInputStr, AReplaceStr, False);
finally Free;
end;
end;
これでうまく動きました。
みなさん、とりわけ、
>>666 さん、ありがとう。
Delphiだとinterfaceはあまり使わないんですかね。 なんかGUIDが必須っぽいですが。
いや、GUIDが無くても使えるよ。 他のモジュールとはexportした関数でやり取りするのがいいと思うので、 interfaceは使いませんね。
DelphiのinterfaceはCOMとの絡みで導入されたから変な機能がずるずるとくっついてきちゃってて 他言語のinterface的な使い方はあまり見ないな。 プリミティブな標準クラスライブラリでEnumeratable, Comparableみたいな事はやってないから 上乗せする形で拡張することもできないし。
GUID必須じゃないよ。 自動開放とかの仕掛けも使うのが必須じゃないよ。 D6以上なら登録コンポーネントのプロパティにすると、ちゃんとプロパティエディタにも反映されるよ。 でも最初から設計するならインターフェース型を使うより、 共通のインターフェースを持つクラスを継承させた方が使い易いんで、なかなか出番が無い。 さらに、名前が同じならDelphiの強力な実行時型情報でメソッドでもメンバーでも共通アクセス出来てしまう だから既に作ってしまった名前の異なるインターフェースを持つコントロールの機能を共通に使いたい場合とかになるな。
GUID付けんと、is演算子で実行時に問い合わせることできんしな。
結論 Delphiのインタフェース、つかえねぇ・・・
Genericsに対応させる前にそのへんてこInterfaceをどうにかしてほしかった。
クラスのメソッドアドレス引いて自分でVMT作ってインターフェースに キャストする仕組み作っておくと色々と面白いことができるよ 両方の内部構造を把握しておく必要があるけど
くだらない、くだらなすぎる、まともなインタフェースないのかよぉ
679 :
デフォルトの名無しさん :2007/09/11(火) 17:46:06
>>677 それ面白そう。
サンプルとかないすか?
ないある
681 :
デフォルトの名無しさん :2007/09/11(火) 20:20:55
> でも最初から設計するならインターフェース型を使うより、 > 共通のインターフェースを持つクラスを継承させた方が使い易いんで、なかなか出番が無い。 > さらに、名前が同じならDelphiの強力な実行時型情報でメソッドでもメンバーでも共通アクセス出来てしまう 俺は、これが知りたい 実行時型情報っていまいち使いこなせてないんだよな、おれ かなり有用そうなんだが・・・
なくても済むし、動的にメソッドやプロパティーを列挙しなけりゃならんなら それはプログラムコードに問題あり、だ。
published だけだし、実際に役に立つ場面はほとんどない。
>>681 名前が同じだと、だいたい共通の親を持たせる場合が殆どだと思う。
だから実行時型情報が使いたくなる場合はあんまりないと思う。
それでも既にあるコントロールを自分が継承して同じ名前のメソッドを追加したいような場合がある。
そういう場合は
TObject . MethodAddress で出来る。
var AMethod: TMethod;
AMethod.Code := AHandle.MethodAddress(name);
AMethod.Data := AHandle;
とすれば、メソッドポインタが作れるから、これを TNotifyEvent型とかの変数に代入して呼び出せばよい
プロパティへのアクセスは uses TypInfo して
文字列型ならGetStrProp/SetStrProp
整数型ならGetOrdProp/SetOrdProp
てな関数がある。
あ、 たとえば GetStrPropには function GetStrProp(Instance: TObject; PropInfo: PPropInfo): string; function GetStrProp(Instance: TObject; const PropName: string): string; とがあって、当然名前を直接渡す方が使い勝手はいいけど、 検索時間が毎回かかる。 何度もアクセスしたり、読んで書くような場合は、 var PropInfo: PPropInfo; PropInfo := GetPropInfo(Instance, PropName); と、一度名前を解決するといい
>MethodAddress 簡易スクリプト言語作ったときにDelphi側の関数呼ぶために使ったくらいだけど、 C#なんかを見てるとこういうリフレクション的な機能がもっとあってもいいなとオモタ
実行時情報はJITが効くC#の方が何倍もあるわな。コンパイル言語はそこが不利。
688 :
デフォルトの名無しさん :2007/09/12(水) 03:26:38
C#ってそんなに実行時型情報、豊富なのか・・・ どんなことができるんだろ
eval("obj.Exec();");
型情報だけじゃないよ。DelphiのRTTIがカスに思えるくらい豊富。 ま、C#の機能というよりは.NETの機能なんだけどね。だからDelphi.NETなら扱えると思う。 System.DiagnosticsとかSystem.Reflectionあたり。 スタックフレームや変数の内容、行番号なんかが簡単に取得できるから、簡易デバッガみたいな振る舞いもできる。
Delphiで作った花火のプログラムはないですか?
昔よく作ったろ延々花火が上がりつづけるだけのプログラム ああいうやつの事なんじゃね?
小学1年の頃、basicで作ったな・・・ 懐かしい
ドンちゃん
696 :
デフォルトの名無しさん :2007/09/12(水) 13:10:05
>>689 evalまであんの?
>>690 ほうほう。すごそうだ
逆コンパイルが楽にできるというが、それが理由なんでしょうかね
ドトネトはDelphi使いには不評だが、ライブラリとしては凄いんだよな まさにあれこそ誰かさんの言うVCL2.0だし
全世界で不評の間違い
全宇宙で不評の間違いだろ
まぁほんとのところ俺が嫌いなだけだよ
turbo delphi をDLして色々やってみてるんだけど難しい・・・・。 ツールパレットのTmainmenuを使ってメニュー作ってるんですけど メニューの位置が上のウインドウの位置と近いので少し下にさげたい。 こういうのってどこをいじればできるんでしょうか? あと超初心者にお勧めのサイトってありませんか?
行ってる事がよくわからないところもあるがメインメニューは上にくっついてるもんだよ TToolbarを使うべきなのかも
704 :
702 :2007/09/13(木) 17:57:48
>>704 うん、だから、メインメニューはウィンドウの上にくっついてるもんだってば。
メニューの描画ってOwnerDrawじゃない限りOSに投げるんじゃないのか?
だから単に
>>702 のシステムフォント設定がまずいだけじゃないかと思うんだけど
違ってたらすまん
709 :
デフォルトの名無しさん :2007/09/13(木) 20:05:07
>>704 ウインドウの上のバーが、妙に小さいし、いろいろ弄っているせいでは?
メニューなんてToolBarに乗せちゃえば?
711 :
デフォルトの名無しさん :2007/09/13(木) 20:44:47
>>710 ToolBarのMenuをTrueにするやつ?
あれって、なんか変じゃない?
俺は、TBXに逃げたけど
OwnerDrawでメニューっぽく書けばいいだけだろ。 OwnerDraw使わなかったらただのボタンになるし。 まあTBXはおすすめだけどね。
Delphiってメニューでさえまともに表示できないの?
TMenuはツールバーじゃないってだけかと。
はい?
フォルダ内のファイルを列挙するのにFindFirstを使った例をよく見ることができますが、 これをタイムスタンプ(作成された日時?)が古い順に列挙されるようにするにはどういった処理をはさめばよいのでしょうか?
自分でソート
BMPをリソースとして取り込もうとしたら「行が長すぎます」ってエラーが出て うまくいかないんだけど、もしかしてBMPって無理?
>>720 無理じゃないよ。
普通に xxx.RC の拡張子でテキストファイル作って
1行を
名前 BITMAP "ファイル名"
の書式で作る
特殊なファイルなら
名前 RCDATA "ファイル名"
で、このxxx.RC ファイルをIDEでプロジェクトに入れるか
ソースに自分で
{$R xxx.RES xxx.RC}
の行を入れる。
旨くゆかない、今やってる方法を書いてみて
ExecCommand(Command: String; StdInput, StdOutput, StdErrOutput: TStringList); みたいな関数ないの?
CreateProcessじゃだめなん?
725 :
720 :2007/09/14(金) 11:20:34
>>721 今は、ファイル名を「xxx.RC」にしてソースに{$R xxx.RES xxx.RC}ってのを入れて
プロジェクト追加から追加しようとしたけどうまくいかないorz
名前 BITMAP "ファイル名"ってどこにいれたらいい?
xnresourceeditor
>>725 ソースに{$R入れて、更にプロジェクトに追加?
>>725 まさか BMPファイルの拡張子を RCに変更してないか?
BMPファイルはそのまま同じフォルダにおいておく
新規作成で TXT ファイルを作って、これの拡張子を RC に変更、
そのテキストファイルの中身に
HOGEBMP BITMAP "ファイル名.BMP" というように書くんだよ
729 :
720 :2007/09/14(金) 13:18:42
>>728 われながらアホだった…まさにその通りorz
無事RCを読み込んでくれたw
けどその内容のウインドウが表示されただけで、肝心のBMPが使えない状態…
ここからは少し自分で試行錯誤してみようと思う
レスくれた人ありがとう、お騒がせしました
TWebBrowserを使って自動操作を行うアプリケーションを作っています。 で、操作中にIEが別Windowを出そうとしたときにOnNewWindow2で ppdisp := xxx.Application; してるですが、どうしても別Windowが 出てきてしまう場合があります。どうやらJavaScriptでopenしてる場合に 別Windowが出てきてしまうようです。 このような場合でもTWebBrowserに結び付けたいのですが どうすればよいでしょうか?
WAVファイルをMP3に変換しろって言ったら 拡張子をMP3も書き換えて勝ち誇ってた人を思い出した
OnNewWindow2は開く前ではないということですかorz 別のイベントか何かあるんでしょうか? 自分の理解が足りないせいもあり、ぐぐっても有効なところに たどり着かなくて困ってるです。。。
作業中、ふとフォームが表示されてないことに気づきました。 で、フォームの表示→Form1とやっても何の反応もなくオブジェクトツリー のウインドウもグレーなまま… なんとか表示できないでしょうか?
表示すればいいです
そんだけの情報じゃなあ。もっと詳しく。でもなんともならないに100CodeGear。
738 :
735 :2007/09/15(土) 01:25:48
プログラムを試運転させて戻ってきたら作成してたForm1が非表示になってて 表示させようとしても無反応、でも実行するとその間だけどこかから戻ってくるんです。 フォーム上にボタンなどを設置できなくなって困ってますorz 今まではフォームが消えたら保存せずに閉じたら直ったんですけど、今回はうっかり保存 しちゃって…
OSの再起動をしたほうがいいKAMO! 変なコンポーネントも外す!
Delphiのバージョンは?Classic Undockスタイルにしてる?
ライン入力端子からの入力をCDを同じ音質でWAVファイルに保存したいのですが、 どうしたらよいですか?
保存すればいいです
744 :
735 :2007/09/15(土) 01:55:17
>>735 押してみました、が何も…orz
>>740 再起動は3回しました、コンポーネントはデフォルトのままで何も追加してないです
>>741 6、Personalです
スタイルとかそのへんもデフォルトです
[F12]でフォーム表示→[ALT]+[F12]でテキスト形式で表示してTop/Leftがあらぬ値になっていないか確認。
746 :
735 :2007/09/15(土) 03:56:07
>>745 F12押しても何も反応なしですorz
開いた瞬間からフォーム自体読み込まれてる感じがしないし、もしかしてバグってるのかな…?
dfmの中身晒せ
748 :
735 :2007/09/15(土) 04:10:11
ごめんなさい、コードに余計な物打ち込んであってそれ消したら なぜか表示されましたorz ほんとにすいませんでしたorz
MDIでコード上から子フォームを最大化したり最小化するにはどうすればいいんですか?
750 :
デフォルトの名無しさん :2007/09/16(日) 06:54:49
アプリケーションの設計についての質問です。 今度、Delphiで作るアプリケーションには、 A、B、Cという画面があり、全て異なる編集画面です。 A、B、Cには、それぞれ独自のツールウインドウ、MDI子フォームがあります。 Delphiの8以降で言えば、編集時と、デバッグ時に、画面が切り替わるようなのを想像してください。 これを実現したいのです。 今は、A、B、C、をそれぞれ別アプリで作って連携させる、という方法を取ろうとしていますが、 編集しているファイルの扱いや、アプリの連携が煩雑になります。 ですので、やはり、A、B、Cを1つのアプリにしたいのです。 TBX(厳密にはSpTBX)を使って、ドッキング可能なツールウインドウを作っているのですが、 メインのFormに、A、B、Cのそれぞれのツールウインドウが収まりません。 どのように設計したもんでしょうか? TBXで、ドッカブルなツールウインドウを別々に設計できる方法があればいいんですが・・・ ツールウインドウには、 TSpTBXMultiDockと、TSpTBXDockablePanelを使っています。
749ですが、WindowStateなるものがありました。 自己解決ということで…
>>750 どんなのか想像できんな。
>ツールウインドウを別々に設計できる方法
TBXがどんな仕組みになってるか知らんが、フレームでも使ってみるとか。
753 :
750 :2007/09/16(日) 16:11:19
x ツールウインドウ
o ツールパネル
あと、TBXの場合、TTBXMultiDockと、TTBXDocakblePanelになるかと思います。
ドッカブルなツールパネル(TSpTBXDockablePanel)は設計時に、
ドッキングした状態で編集するのですが、
やりたいことは、極端な話、そのツールパネルが、たくさんあって、
モードにより(A, B, Cという状態)、いくつかの可視、不可視を切り替えたいのです。
しかし、ツールパネルがたくさんあると、一度に画面に表示しきれないので、
設計時にどうやって編集したものか、
という具合です
言葉だと伝えずらいので、画像でも用意しないといけないかな・・・
>>752 フレームで、できるのかな・・・
754 :
750 :2007/09/16(日) 16:47:03
>>754 ソース提示しない限り誰も答えられない。
ソース関係ないんじゃね?俺はなんとなく理解できるが。
一時的にクローズすればいい話なのでは?
でっかいディスプレイ買う
タブコントロール内で設計
スクロールさせる
やっぱフレームに乗っけたいコントロールをのせて、TTBXDocakblePanelの中に貼り付けるってのがいいんじゃないの 何個くらいパネル作るかしらないけど設計時に隙間も無いくらいつめるにしても動的にはっつければいいし
762 :
デフォルトの名無しさん :2007/09/16(日) 20:31:37
>>753 編集に邪魔なツールパネルのTopプロパティかLeftプロパティの値を大きくして一時的に画面の外に追い出したら?
Delphi for PHPのせいでDelphi言語の情報がぐぐりにくくなった。 さようならDelphi。
ググるときに「-PHP」って加えればいいんじゃね?
Timageの画像を半透明表示したりすることはできますか?
はい
半透明のアルゴリズム知らないと出来ないよ。 白の背景に黒の点を半透明で描画する方法を知らないなら、無理。
768 :
750 :2007/09/17(月) 02:35:37
>>764 やってみたら逆にほとんどひっかからくなりました。
さようならDelphi。そしてありがとう。
C#触ってみたらDelphi(というかVCL)のパクりで話路他 ネイティブコード生成できるようになったらDelphiからスイッチする
delphi作った奴が作ったんだから当たり前だ
そうそう、.NET Framework の GUI 部分は VCL そっくりだよね。 .NET Framework をライブラリとしてみた場合、VCL の 10倍以上充実してる から、もはや VCL は旧態依然の機能不足にしか見えなくなる。 C# は、まさしく Delphi ユーザなら、ほとんど違和感なくすぐ使えるように なるよ。Delphi はネイティブアプリづくりには依然としてすごく便利だから 捨てる必要はないけど、C# もやってみると視野が広がるよ。
>>772 ま、後発ということもあるし、VCLみたいに互換性の維持に努めずに
一から構築できたことが一番の要因だろうね
VCLも過去の資産を切り捨てるという英断ができればもっと素晴らしいものになってただろうけど、
ズルズルとしがみついているうちにもはやしがみつく体力すら無くなってきた…
775 :
デフォルトの名無しさん :2007/09/17(月) 18:24:44
QuadrupleDを3.03から3.10にアップデートしたいのですが ファイルを上書きするだけでよいでしょうか? それともDelphi6Personalをアンインストールして最初からインストールしなおしになりますか?
.NET がそんなに良いとはとても思えないのだが? どこが良いのだろ? それに、VCLをもっとよく出来ると思うなら、自分で作ればいいのでは? それこそ改善点こそ商売のチャンスだろう。
777 :
デフォルトの名無しさん :2007/09/17(月) 19:05:10
>>775 QD3を一旦アンインストールして、31.0インスコすればいいんじゃね?
ファイルが追加されていないなら、上書きで、パッケージを再コンパイルすればいい。
>>777 QD3のアンインストールでうまくいきました
ファイル追加されてるか確かめる方法わからなかったので試してません・・・・orz
diffとかじゃ調べられないのかね?
780 :
デフォルトの名無しさん :2007/09/17(月) 19:41:32
>>772 (´-ω-`)ドトネトのツール自体や、製作物の動作モッサリ感がなければ良いけどな
CodeGear の IDE ってそんなにもっさりしてるのか。 BlackFish も純.NET製だからつかいものにならんな、それじゃ。
'diff' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
Delphiやるならこれ便利だぞっていうライブラリありませんか? いま色々と物色していて生産性をあげられるものを探しています。
jedi
vcl
VCL
TComponentは置いといて、TStringListとかTBitmapとかC++に移植した物ありますか?MSVCで使えるもので。
TStringListの変わりにstd::vector<std::string>では駄目かな? そのままじゃ同じようには使えないけど。
789 :
750 :2007/09/18(火) 18:37:47
道開けてきそうです。
TSpTBXDockablePanelのスプリッターを上や下に引っ張れば、設計時でも、
コンポーネントなど置いた後でも、自由に小さくできるのに、気づかなかった orz
これなら、10個くらいなら、設計できそう
>>773 なんで、JEDI?アンカーミス?と思ったのですが、
調べてみましたら、
JVCL の、TJvDockVSNetStyle が VS.NET みたいなドッキング可能ツールパネルを実現していて(!)、
別に作成したFormをドッキングできるようです。
別のFormということは、設計時に、画面サイズに困らずに設計できますね
しかも、MXS配布 の TJvDockVSNetStyleTBX を使うと、TBXテーマも適用できて、
ダサい外観からもおさらばで (゚Д゚)ウマー
後は、UNICODE周りさえうまくいけば!!俺は乗り換えるぜ?ムヒヒ
きめえ
最前線君が脳裏をよぎった
Cみたいに int narray[] = {10, 20, 30,}; と配列サイズを自動設定させる書き方を教えてください
793 :
デフォルトの名無しさん :2007/09/19(水) 08:23:55
なんでないのかな。 要素の数を数えるの大変なのに。
なんでないのかな。 要素の数を数えるの大変なのに。 ところで、\SLib ってどうやって使うのですか? デバッグ付きdcuみたいですけど、いまいち使い方が解りません。
コンパイルの高速性を維持するのに必要だから
オープン配列引数でも使って設定する関数作れば。
798 :
デフォルトの名無しさん :2007/09/19(水) 20:33:58
UIWebBrowser を使ってみました。で、IeNo3DBORDER プロパティを True に しても、フォームの入力枠が立体的に表示されてしまいます。 あと付属の TUIFavorites も使ってみたのですが、お気に入りの表示順が IEと同様になりません。アイコンも表示されません。delphi7 と IE6 です。
独り言はちらしの裏へ
800 :
デフォルトの名無しさん :2007/09/19(水) 20:56:43
ムカ〜つく 困んってるのに〜
UIWebBrowser のことなら Delphi-ML に書き込んだら⊆(⌒◎⌒)⊇さんが答えてくれるよ。 生きてたらね
>>796 ジェネリクスとか不要な機能を付ける前にこっちを何とかしろよ
ユニコードもイラネ。 .NETでやれよ。
genericsとunicode化が不要と思ってるのは素人か池沼だけだろ
スレタイ嫁余暇須津も
納得いかないので、Turboを入れてみました。でもやっぱりBDS2006を 使いたいので、Turboをアンインストールして、BDS2006を再度インストール しました。認証が失敗(コードを間違えていた)するので、Turboの 認証用ファイルを読み込ませたら、なんと受け付けてくれた。BDS2006の 起動時にあと100年近く使える旨が表示されて、TurboExpみたいでキモおもしろかった。 Delphi2007proアップグレード版を今朝注文しました。
すいません質問させてください。 DelWikiに商用利用についての記述があり、 >商用利用不可 >業務で利用したり、販売目的 (対価を要求するシェアウェアも含む) で開発することができない となっていますが、同人ソフトも言葉の通りでしょうか? MP3の商用利用の用にn数以上の場合とかではなく、前面禁止でしょうか?
809 :
808 :2007/09/20(木) 00:14:17
すいません、言葉足らずでした。 Delphi6personalの場合です。
>>804 不要とは言ってない。
使いたかったら.NETいけってだけ。
これ以上Win32版が使いにくくなったらかなわん。
genericsなんて入れたらコンパイル遅くなるじゃん。 バリアント型で我慢しとけよ。
むしろ「同人ならもしかして…」って期待する方がおかしいと思う。
813 :
デフォルトの名無しさん :2007/09/20(木) 00:21:08
>>809 同人ソフトって事は、金を取るわけだろ。
当然販売目的ってことになるわな
D6パーソナルは、学習用であり機能評価用という位置付けだ。
販売しなくても業務での使用は不可というところにそれが現れている。
正確なところを知りたければ、ボーランドに問い合わせるのが一番なんだが。
814 :
808 :2007/09/20(木) 00:21:48
>>812 ありがとうございました。
有償の方を検討してみます。
ここでおおっぴらに言うことでもないが そんなに神経質になることもないと思うけどな
816 :
808 :2007/09/20(木) 00:32:03
>>813 見逃しました、回答ありがとうございます。
有償版買う前に一度聞いてみる事にします。
>>810 機能追加望まないなら旧版にしがみついていればいいじゃん
>>816 フリーのTurboDelphiは商用も可だよ
Delphiのアカデミック版はVSと違って商用不可なのが残念だな
VSって貧乏人向けなのですか?
>>808 本格的にやるなら製品版買ってみればいいよ。
試用版とは違っていろんなコンポとかついてて楽しいよ。
Delphiの学割は商用不可以前に作ったアプリの公開すら不可だからな なんでなのかいまだにわからない
>>817 高速化とバグ取りはありがたいからその提案は断る
マジな話、コンパイル速度がC並に低下したならCの方がいいぜ
作ったソフトを配布しようと思ったのですが、Personal版のため インストーラがなくて、仕方なくフリーのインストーラをDLしたはいいけど どのファイルを入れたらいいやら… 必要なファイルが分かる場所とかってあるんですか? 配布するのは初めてでまったくわかりませんorz
自己解凍形式(SFX)のを使ってるの? Delphiの良さは実行ファイルだけあればいいこと。 つまり、データベースとか使ってないなら exeだけ入れればいいんだ。 ついでにソースも一緒に配布したいなら、ソースのフォルダも圧縮してやればいい
827 :
825 :2007/09/20(木) 10:08:54
>>826 さっきexeファイルを他のPCに移したらエラー起きて起動すらしなくてorz
何かのファイルが足りないかと思ってましたが
もしかしてコンパイル方法が間違ってますかね?
実行時パッケージを使って構築にチェックが入ってんじゃないの?
829 :
825 :2007/09/20(木) 10:28:16
入ってませんでした ちなみに使ってるのはF1bookってのとイメージとラベルとメニューで、 今までdelphiの入ってたPCからdelphiを削除したら起動はするけど EOleSysErrorがモジュール Peoject1.exe の 000604F0 で発生しました。 クラスが登録されていません. って出ますorz
831 :
825 :2007/09/20(木) 11:13:15
ありがとうございました、動きました! ちょっと動作不備なところがまだありましたが、後は自分で調べてみます
>>824 C/C++は文字列やオブジェクトの扱いがどうも馴染めないな…
>>823 むしろコンパイラレベルのバグはバージョンアップごとに増えてるが
Turbo Delphi Explorerで作ったアプリって、Windows95でも動作しますか?
CheckListBoxでチェックだけ付けたいのに、 普通の ListBoxのようにマウスで選択状態にできてしまいますよね、 あれを、選択状態にしないでマウスのクリックのみでチェックを付けたり外したりでないでしょうか?
onclickで付けたり外したりすればいいんじゃね
>>837 それが…OnClickはマウスのボタンを離したときに発生するらしく
クリック中は選択状態になってしまい選択箇所がちらついてしまうのです。
じゃあListBoxにしてCheckBoxは自分で描画すれば?
マウス入力を奪って、自分で処理すればいい。
私も奪って!
TABitmapを使ってアルファチャンネルの部分を透明にしたくて、 色々試したのですが上手くいきません。 ColorAlphaPicAlphaを使っても、色が薄くなるだけで透明にはなりませんでした。 ↓の様にコードを書いたのですが、どう直せば良いのでしょうか? 初心者で根本的に間違ってる部分があるのかもしれませんが、よろしければご教示お願いします。 procedure TForm1.FormCreate(Sender: TObject); var bmp1:TABitmap; bmp2:TABitmap; begin bmp1:=TABitmap.Create; bmp1.LoadFromFile('aaa.bmp'); bmp2:=TABitmap.Create; bmp2.SetSize(500,500); bmp2.Do32; bmp1.ColorAlphaPic(0,0,500,500,0,0,bmp2); image1.Canvas.Draw(0,0,bmp2); bmp1.Free; bmp2.Free; end;
単なる透明なら、普通にTBitmapでTransparentColor: を使う方が簡単では?
844 :
842 :2007/09/24(月) 11:08:54
>>843 レスありがとうございます。
TransparentColorは透明か不透明かの2択だったと思うので。違ったらごめんなさい。
出来れば、アルファチャンネルで綺麗にくりぬいたり、半透明にしたいなと思いまして。
わがままを言って申し訳ないです。
GDI では無理。自分でつくるか GDI+ 使うしかない。
いや、ABitmap使えばαチャンネル使えるはずだが。もう使い方忘れたから説明できないが。
つくるのは ScanLine で簡単。どうやって描画するか、が問題。
delphi2007 UP3にしたら SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW); Application.ShowMainForm:=False; でタスクバー隠せなくなってしましました。 なんか情報ないですかotz
微妙にスレ違いになるかもですが、先日配布について質問した者です。 今さっき配布先の知り合いからPCが起動しないと言われましたorz ライセンスフリーと聞いたのでActiveXを動かす為の Vcf132.ocx Oc30.dll Mfcans32.dll Msvcrt20.dll を同時に配布してシステムフォルダに上書きさせたのですが、それが原因で PCが起動しなくなるなんてことあるんでしょうか…?
>>849 あるんでしょうか?って実際に起こってんだろwww
>>825-829 の人?
M$のDLLをシステムフォルダに勝手にインストールすると、DLLの呪いにかかるよ。
あいつら勝手に訳の判らない事やって、それで失敗したら改善しましたってやってるんだから。
基本的にDLLが必要ならシステムフォルダではなく、
インストールするフォルダに入れてしまうようにしないとね。
852 :
849 :2007/09/25(火) 16:28:35
>>850 起動しないのは事実らしいんですが、それが原因なのかどうかが分からないところで…
853 :
849 :2007/09/25(火) 16:33:07
>>851 そうです、最初からそう言った方が早かったですね・・・w
そうなんですか…うーん、どうしたものやらorz
メーカーロゴから進まなくて
リカバリもセーフモードでの起動もできないらしいんです
855 :
849 :2007/09/25(火) 17:27:10
>>854 ありがとうございました、初心者のうちから配布はやめた方がいいですねorz
ノンサポートって事前に伝えましたが、やはりなんとかしてみようと思います。
856 :
デフォルトの名無しさん :2007/09/26(水) 07:13:32
すみません。Windowsプログラミングド素人です。おしえてくださいおながいします。 以前このスレで教えていただいた iphelper API を使おうと思っています。 で、 #include <iphlpapi.h> は Delphi ではどう書いたらいいのでしょうか? あと、iphlpapi.h で宣言される構造体、たとえばこんな感じ typedef struct _IP_ADAPTER_INDEX_MAP { ULONG Index ; WCHAR Name[MAX_ADAPTER_NAME]; } IP_ADAPTER_INDEX_MAP, *PIP_ADAPTER_INDEX_MAP; のはどう定義したらいいのでしょうか?やはり再帰的に下っていってULONGやWCHAR、 MAX_ADAPTER_NAME を Delphiで宣言するのでしょうか?
>>856 そういう時は、だいたい iphlpapi.pas でgoogle検索すると色々教えてくれるよ
その構造体は
type
IP_ADAPTER_INDEX_MAP = record
Index : ULONG;
Name : : array[0..(MAX_ADAPTER_NAME-1)] of WCHAR ;
end;
PIP_ADAPTER_INDEX_MAP = ^IP_ADAPTER_INDEX_MAP;
みたいに定義すればいい。
ULONG WCHAR は windows ユニットで定義されている。
858 :
デフォルトの名無しさん :2007/09/26(水) 07:44:49
>>857 朝からありがとうございます!.pas で Google というのは知りませんでした。
道理でひっかからないわけだ…。
ごめん Name : : の : 2つは 単純な打ち間違い
というかiphlpapi delphiでぐぐれば
Delphi の名前がphpにもついたからぐぐりにくくなったな。 ボーランドってほんとセンスない。
OleVariant 型の変数に、未割り当ての状態を確かめる方法ってありますか? V.IsNull V = Null 等々、試しましたが、比較演算の実行時エラーが出てしまいます
863 :
862 :2007/09/26(水) 13:37:17
自己レスです (IDispatch(V) = nil) で、解決しました 未割り当てではなく、$00000000 という値が入っていました
質問です @フォームに opendialog と edit と button を貼り付けます Abutton をダブルクリックして以下のシンプルなコードを書きます procedure TForm1.Button1Click(Sender: TObject); begin if OpenDialog1.Execute then Edit1.Text := OpenDialog1.FileName; end; B実行して button をクリックし特定のファイルにマウスポインタを重ねます クリックしてもしなくても構いません Cキャンセルを押します Dもう一度 button をクリックし特定のファイルにマウスポインタを重ねます 以上の動作を行うと例外が発生してしまいます 特定のファイルとは20MB超とかのファイルだと思います 原因は何ですか? 環境はdelphi6、XPSP2です
BDS2006 で試したけど、再現しませんね。 例外は何て出ますか? また、デバッグ版DCUの使用にチェックを入れると、どこで止まりますか?
>>864 OpenDialog は Windows だから。たぶんエクスプローラとかでやっても
同じように落ちない?
867 :
864 :2007/09/26(水) 19:34:33
メモ帳では落ちましたがペイントでは落ちませんでした 他に色々試しましたが一定の結果が得られず、法則が分かりません うちの環境だけなら気にしないでいようと思います
868 :
864 :2007/09/26(水) 19:42:19
>>865 delphiから実行すると、こんな感じのダイアログとアセンブラのソースが出てきます
---------------------------
情報
---------------------------
プロジェクト C:\○○\Project1.exe が例外により実行を停止しました。
'access violation at 0x7d64159e: read of address 0x03b12038'
再開するにはステップ実行または実行を選択してください。
---------------------------
OK
---------------------------
exeで実行すると窓がぱっと消えます
「デバッグ版DCUの使用」というのは見当たりません
>>867 たぶんその辺のシステムDLLが壊れてる
OS再インスコ汁
>>868 0x7d64159e は アプリケーション内ではなく OS の領域と思うよ。
>>869 が正しいかもな
871 :
デフォルトの名無しさん :2007/09/26(水) 20:37:12
>>864 ほかでも起こるなら、OSが不安定になってるだけじゃん
再インストールしる
断る
そんな
特定のファイルが問題なんじゃないの? スキャンディスクしてみるとか。
スキャンディクスってファイル内容の破損も検出できるの?
そのファイルを別のPCに持っていってテスト。
ダイアログ拡張するフリーウェアでも入れてるんじゃねーの。 とりあえずスキャンディスク、ウィルスチェックして 窓の手で余計な自動実行ファイルを停止して 新規ユーザー作ってログインして試してみたら。それで駄目ならOSが腐ってる。
Win32で var I: UInt64; でコンパイルが通るのですが、Delphi Win32は符号無し64bit整数をサポートしてたのでしょうか??
>>878 UInt64で右クリックして定義を探すとよくわかると思うよ
オレの場合、 regsvr32 /u ivivideo.axとregsvr32 /u iviaudio.axで解決した。 原因は不明。
>>880 UInt64はコンパイラに組み込みの型だと思うが、
君はどのソースファイルで定義を見たんだい?
なぜ一行目で終われないのか、 君は私生活で不満でもあるのかい?
>>883 へ?ただ単にどこかにあるのならその場所を聞こうと思ったんですけど…
不満があるとすれば私生活ではなく、あなたのその疑り深い態度ですね
^^ この人、やっぱ1行多い
仰るとおり人を煽るレス書く人はいない方がいいですよね
私も同意 素直に書けばいいのに無駄なこと書く必要性を感じない さっさと消えればいいと思う
890 :
デフォルトの名無しさん :2007/09/27(木) 14:11:08
BDS2006から、Delphi2007にアップデートしようとしたのですが、 アップデートのはがきを見たところ、9月21日までとか書いてあります orz まさか、期間限定とは・・・ もう新規で買うしかないのでしょうか? 7万円もだせない・・・
>>883 さんが言うように私生活に不満でもあるんだろうね
かわいそうに^^;;
893 :
デフォルトの名無しさん :2007/09/27(木) 14:51:31
定義の検索しても何も出なくなってしまったのですが、 どうすれば出るようになりますか?
もー! みんなして1行多いよ!!
895 :
デフォルトの名無しさん :2007/09/27(木) 19:42:09
Formの新規作成時のフォントが、Tahomaになっているのを
直したいと思い、
Delphi Holic (HopeSeeds blog) | 今更のDelphi Tips:BDS2006 のフォームデザイナのディフォルトフォント
http://delphiholic.hopeseeds.com/?eid=214270 を参考に、
「オプション」の「トランスレーションツールオプション」→「フォント」の
日本語を、MS UI Gothicにしたのですが、
Formの新規作成をしても、Tahomaになったままになります・・・。
日本語フォントをデフォルトにする方法はないのでしょうか?
この辺のことってマニュアルに書いてあったりしますか?
マニュアルってなに?
9月19日にDelphi2007アップグレード版を注文しました。(ぎりぎりだったかな) 本日やっと到着しました。ネットを利用してUpdate3をかませました。 最後のヘルプファイルの更新がでたらめに時間がかかるのですが、 じっと我慢して気長に待ちながら2chしてました。(もち、同じマシンでです) これBDS2006より気のせいかサクサク動きませんか? しばらく検証して酷い不具合が見つからなかったら、 BDS2006関係と、.NET1.1関係のファイルを根こそぎデリートして、 .NET2.0のみに移行しようと思っています。
D7より早けりゃ入れ替えたいけどそうじゃないからねぇ。 なんか妙にもたつくのよね。 画面の切り替え。
それで?
901 :
898 :2007/09/27(木) 22:14:20
今試してみたけど、起動に関してはDel7もDel2007も最初はもたつくけど いったん終了して再起動するとDel2007のほうが若干早くなってませんか? 自分のマシンは メモリ1.5GB CPUはPenM1.7GHzです。
902 :
898 :2007/09/27(木) 22:15:18
いや、若干というよりかなり早いです。私のマシンの場合は・・。
D7+起動早くするやつ 一度目:4秒 二度目:1秒以下 標準コンポ+@、すべて読み込み。 少し前のシングルCPUでこんなもん。 D2007はこれより早いのか?
904 :
898 :2007/09/27(木) 22:39:11
いや、さすがにそこまでは早くないですね。 Webアプリ関係やデータベース関係のコンポーネントを省き(使わないので)、 IDEの機能で使わない機能をインストールしないで、2度目の起動は4秒です。 起動を早くするといった特別なユーティリティは使っていません。 ただ、BDS2006に比べたら相当早いですよ。まださわって30分ほどですが、 BDS2006からアップグレードして良かったと思います。Vistaをもっていないので スルーするつもりでしたが・・。あとはヘルプの出来ですね。今から検証してみます。
てんこ盛りと比べたら早くて軽いのは当たり前だろ。2007はモモタロスだけなんだから。
>904 え〜と、ここ半年くらいCodeGearのいろんな情報を一切見てなかった?2007の売りのひとつが D7並みの軽さなんだけど。ま、さすがにそこまではいかないけど。 あとヘルプは期待しないほうがいい。そう思っていれば、よくなったところがあればうれしいでしょ?
>>905 Delphiはモモタロスで決定なのか?
4年前のバージョン並みになった、が売りのひとつとはなさけない・・・ しかもヘルプは駄目駄目らしい・・ これは駄目そう。
909 :
906 :2007/09/29(土) 00:48:05
はいはいワロスワロス
そうそう、ワロスワロス これから始めるなら、やっぱVSだよな。
これから始める人にVSを勧める理由ってなんだろう? MS製であるから・・って言うことかな?
俺はヘジタンについていくっ!
DBEditで値を書き換えて、フォーカスが他のコントロールに移動すると その値がDataSetに反映されますが、フォーカスを移動せずに直ちに値をDataSetに反映させる方法はありますか?
Memoコンポーネントに半角スーペスや全角スーペスやタブ文字を書いたときにどれがどれだか分からなく なるので見分けられるようにマークを付けたい。 そこらへんのテキストエディタでよく見かける機能です。 どうやりゃいいのけんじ? 初心者にも手軽に出来る方法があれば教えて。 無ければ無いでいいや。
ない。ばいばい。
スーペスをなんとかすればいいよ
なるほどうあたまいいな
920 :
デフォルトの名無しさん :2007/09/30(日) 07:15:29
>>916 若者よ、TEditorを使うのじゃ。精進せいよ。
いやだ^^
牛田モーミンといいます。大都会の片隅で×いちで孤独なOLをしています。 最近Delphiの新刊がでるようになりましたね。私は2冊買いました。 どちらも佐竹那月さんという女性のライターが執筆されています。 日経BPパソコンベストムック「TurboDelphiではじめるWindowsプログラミング」 カットシステム「ナッキーのDelphiはじめて奮戦記」 前者のp9に 「〜以下ではWindowsXPにインストールすることを前提に、 説明を進めていきます。Windows2000でも同様の手順です。ずんずん進んでください。」 後者はp43に「〜っていわれたけど、ちょっとごわごわ。」と書いてあります。 私は「どんどん進んでください。「ちょっとこわごわ。」だと思うのですが、 出版社が違ってこの表現が通るということは、単なる校正のミスではなく彼女は 日ごろこのような表現で会話をしているのでしょうか・・・・。だとしたら なんてすばらしいことでしょう。 私も負けないような感性溢れる表現で皆さんの琴線に触れるような書き込みを していきたいと思います。
>ちょっとごわごわ 単に柔軟剤が足りなかっただけだろ? くだらんことで、騒ぎすぎる新参乙。
東北人を馬鹿にすんでねぇ。 東北では「どんどん」「こわごわ」なんていわねぇ。
うん、私もどこかの地方のなまりだと思う。
>>922 はいはい良かったね
分かったから帰れよ
群馬の変な女子高生、裕美子ちゃんが一生懸命頑張って大学に入学できて、 そして就職してすぐ結婚して離婚して・・・・。 裕美子ちゃんの初登場は「CかC++か」じゃなかったっけ?老師を目指すには どちらを先に学習すべきかだったと思う。 もうあれから5年たったんだっけ?大学は中退したの??? 自分で日ハムの小笠原にそっくりな顔って言ってたけど、小笠原は現在 髭を剃っているので、巨人戦の野球を見るたびに、この顔にそっくりな ちょっと不思議っ子な女子大生がどこかにいるんだと、いつも思っている。
indy等でdeflateで圧縮されたデータをストリームで受け取って それをメモリ上で展開するようなユニット、どこかにありませんか? 似たような機能でgzipのものは見つけたのですが deflateが見つからない・・・。
931 :
916 :2007/10/01(月) 04:27:58
>>917-920 みなさんありがとうございました。 TEditorはぐぐったときに見つけたんですけど
自分でMemoをいじれないかと思ってお聞きしました。 TEditorを使う方向で考えてみます、どもでした。
集合型について教えてください。 カンマ区切りの文字列、例えば「1,4,5,7,8」という文字列を 数値型の集合として扱いたい場合はどうしたらいいのでしょうか。
数字じゃないなら、フォームのpublishedなプロパティメンバーにして、uses に typeinfo加えて GetSetProp / SetSetProp で相互変換するとか出来るけど 数値が要素の集合となると・・・・Low/Highの間でビット列でアクセスとかやるんだろか?
934 :
932 :2007/10/01(月) 13:26:12
いえ、単純に if I in [1,4,5,7,8] then をやりたかっただけなんですが、 集合の中身が状況によって異なるので。
文字列からというなら、個別に数値へ変換して集合型に足すんじゃね?
936 :
932 :2007/10/01(月) 14:31:25
Include関数ですよね? やっぱりそれしか無いですか。 キャストとかできればと思ったのですが。
with tstringlist.create do begin commatext := '1,4,5,7,8'; if indexof(inttostr(i)) >= 0 then
939 :
932 :2007/10/01(月) 17:15:33
まあ、そういうことですね。 ありがとうございます。
IBXってスレッドフリーだっけ?
いいえちがいます。
んーならIBOは?
私はIBOについてよく知りません。
スレッドフリーってどういう意味? スレッドセーフと同じ意味?
スーパーフリー
Delphi7で >EOSError がモジュール test.exe の 00D76854 で発生しました。 というエラーに対応する箇所を調べるのはどうすればいいですか?
Button1とButton2を同じ位置に置くと重なって表示されてどっちかが上、もう一方が 下になりますよね、これを意図的にどちらかが上になるようにすることは可能ですか? Enabled=false; や Visual=false; などを使わずに純粋に上か下かを指定したいです。 TabStopのように順番が決まってたりするんでしょうか、お願いします。
設計時なら右クリして前面、背面に移動でできるが 実行時は知らん。 .dfmの記述の順番に依存してるんだよな確か。
949 :
947 :2007/10/03(水) 07:01:10
>>948 なるほど、調べてみます、ありがとうございますた。
知らないなら答えなきゃいいのに
作成順でしょ。 ウィンドウハンドルがあるから、
SetWindowPos 等で無理やり手前に持ってくることも可能かもしれない。
>>946 CPUViewでそこに何のコードがあるかはわかる。
VCLのメソッドだと思うけど。
BringToFront コントロールを親コントロール内のそれ以外のすべてのコントロールの前に移動します。 こんなのがある
ZOrderいぢればいいんでないかい?
コード上からTTreeViewのノードを展開してやろうと思い、 TreeView1.Items[1].Expand(true); とか TreeView1.Items[1].Expanded := true; とかやっても開いてくれません。AllowExpansionはtrueのようです。 考えられる原因はなんでしょうか? バージョンはDelphi7Proです。
>>946 F8 で実行〜すぐに IDE でメニューの「健作」〜「エラの健作」で「00D76854」を探す
あるプロジェクトを元に修正をしたい場合、プロジェクトのフォルダの ファイルを全部別のフォルダにコピーすればいいのでしょうか。 それともプロジェクトを開いて、ユニットなどを全て別名で保存する方が いいのでしょうか。
基本的に単純コピーでOK。 プロジェクト固有のユニットは相対パスで見てるから。
コンパイルはコピー先のフォルダじゃなくて実はコピー元を参照してたりして
簡単な物作って公表しようとしたらフリー版で作ったEXEやDLLは配布できないんですね。 古いバージョン(3とか4とか)でもいいので一番安くライセンスを得る方法って何でしょうか?
作った奴公開できないのはアカデミック版だけでフリー版は別に問題ないんじゃないの。6でもTurboでも
>>958 ありがと。今まで後者のやり方でずっとやってきてバカみたいでした。
ただし作業状態を保存(拡張子dskだったかな?)してて、さらにそれもコピーしちゃうと、 IDEが以前のファイルを開いてしまい、修正したつもりがコピーした方は全く変更なしという状態になりかねないので注意
妄想乙
フリーはシェアとか製品がダメなだけだったか…… どもでした。
TurboDelphiならシェアでもいいんじゃなかったっけ?
>>963 あるあ・・・・あるw
俺も前にそれやって、爆死した
バージョン管理ソフトでのコミット時にも、*.dskは、除外対象に指定している。
Subversionとか使うと、フォルダ名違うのって当たり前だからな
というか、dskってできるだけ相対ファイルパスで、記録すべきだと思うんだ、俺は 要望出してみようかしら・・・
VMWare Player上で動作しているゲストOSをホストOSシャットダウン時に 同時にシャットダウンしたいのですが何かよい方法あるでしょうか。 ゲストOSの右上のバツボタンを押せばゲストがシャットダウンするので何とかなりそうな気はするのですが・・・
VMWareって使ったこと無いけどただのウィンドウならWM_CLOSE送ればいい
ミ田+R shutdown -s -t 0 でもSendMessageで送ったら。 VMWareがそれを受け付けるかは知らないけど。
finalization に判断含んだコード書いたりすると BPレジスタの保存・復帰が旨くゆかない事があるみたい。 結果、systemユニットの FInitUnits で例外が出る事があったよ。 だから終了手続きを書いてから finalizationではそれを呼ぶだけにするべきみたい
>>972 レジスタやスタックの中身破壊するコード書いてただけじゃね?
>>973 いや、そんなコードは書いてないよ。
今しらべた範囲では、判断が問題じゃなくて、
何かの条件+finalization で帰り値が文字列の関数を呼び出た場合のよう。
その条件を満たすと
push ebp
mov ebp,esp
push $00 <------- この命令が挿入される。
xor eax,eax
push ebp
push 例外ハンドラ
push dword ptr fs:[eax]
mov fs:[eax],esp
inc dword ptr [ユニット]
jnz Finalization + $4A
他は同じだから、帰りのEBPが0になってしまうって事みたい。
普通に新規作成したフォームにfinalizationを書いた場合は起きなかった。
コンポーネントを作った時に起きたけど、必ず起きるわけじゃないみたい。
975 :
972 :2007/10/05(金) 16:44:42
再現コードが作れた。 D5 と D7 では起きる。 D2006では起きない。 フォームを新規作成して、end. の前に以下の8行を追加 var TestName:string='Test.txt'; function SaveFileName: string; begin Result := 'abc.txt'; end; initialization finalization SaveFileName; //<--- ここにブレークポイントをかけて CPU窓でステップ実行すると EBPが最後に0になるのが見える どうやら、 文字列変数を定義して、それを初期化する行があって、 finalizationで で帰り値が文字列の関数を呼び出すコードを追加したら起きる 条件判断で実際にその関数を呼び出さない場合も同じ。 D2006では起きないから修正されてるみたい。
>end. の前に以下の8行を追加 何のジョークだ? つりか?
検証乙 Delphi BugList Projectに登録世路
Delphi6あたりで、 *.dpr の begin end部に、string変数宣言するとリークするという問題もあったな いつも、もう一段、Main関数つくって、読んでたわ
EBPが0になるとどーなんの?
>>975 QC8360かな?
文字列のクリーンアップに関する問題みたいだから、自前でやれば解決するかもしれない
>976
>>979 BPはスタックフレームを示す。
つまりスタック上に変数を取ってる所までリターンしてエラーになるから
全然関係ない所でアクセスエラーなんかが起きる事になる。
>>972 が書いてるように、finalizationでは
単なるprocedure を呼び出すようにしておけば安全。
>>986 なんか微妙に説明おかしくね?
要するにPOPが不変なのにPUSHされる値が1つ増えるせいでエラーになるってだけ
>>987 いや、
>>974 が勘違いだろう。
ステップ実行して試したが、スタックのpush/pop数は合ってる
壊れるのは、 call @LStrArrayClr が呼ばれた時。
どうでもええわ
そうでもない
ちゃんと知ってないと、原因不明のメモリリークに悩むことになるよ。
超初心者用
Turboで直ってるならそれでいいや
質問! INIファイルに引数付きのアプリのパスを登録し、それを読み込んでShellExecuteで 起動させようと思ったんだけどうまくいかない! ------------------------test.ini------------------------------- [Path] APP="C:\WINDOWS\notepad.exe" "C:\WINDOWS\setuplog.txt" ------------------------test.ini------------------------------- uses節 に IniFiles, ShellAPI を追加。 procedure TForm1.Button1Click(Sender: TObject); var IniFile : TIniFile; AppPath, IniPath : String; begin IniFile := nil; // 初期化 // INIファイルのパスを格納 IniPath := ExtractFilePath(Application.ExeName) + 'test.ini'; try IniFile := TIniFile.Create(inipath); // INIファイルの読み込み AppPath := IniFile.ReadString('Path', 'APP', ''); finally IniFile.Free; end; if AppPath <> '' then begin ShellExecute(Form1.handle,'open', PChar(AppPath), nil , nil , SW_SHOWNORMAL); end else begin ShowMessage('AppPathはカラです。'); end; ShowMessage('AppPath=' + AppPath); end;
995 :
944 :2007/10/06(土) 12:21:12
AppPathの中身を見たら 「C:\WINDOWS\notepad.exe" "C:\WINDOWS\setuplog.txt」 でした。 何故が最初と最後の 「"」 が勝手に削除されてしまってます。 ShellExecute の PChar(AppPath) では引数付きのパスの指定はNGみたいです。 ということは AppPath の中からアプリのパス部分を抜き取る文字列操作をしないとダメなんでしょうか? 上の 「"」 が勝手に削除されることもあり、元から 「"」 が付いていたかどうかの判定や、それによって 分岐を作らなければいけないとなるとかなり手間がかかりそうです。 もっと簡単な方法はないのでしょうか、もしあればご教授下さいませ^^;
996 :
944 :2007/10/06(土) 12:23:53
PS、ShellExecute で起動引数を指定するときは PChar(AppPath) の次の要素(上では1つ目のnil)で指定する ということは知っています。 やはり文字列操作をして引数の部分を取り出す処理を書かなければいけないのでしょうか・・。
普通取り出しやすいように書き出すだろ
998 :
944 :2007/10/06(土) 12:49:43
>>997 うーん、こんなことで悩むのは自分だけなのかな。
「アプリのパス 引数」 を一行で書けたらINIに手動で追加するときに便利で良いかと思ったんですが・・。
他の方法も考えてみます。 INIでなくLoadFromFileで読み取れば 「"」 が消えたりしませんし。
INIでやるなら
[APP1]
path=
param1=
param2=
のようにしたほうがコーディングは格段に楽ですね^^; ひとまずこの2択で考えてみます、どもでした。
INIのAPIは両端に""がついていたら取っ払って読み込むという仕様なんで 途中にスペースがあり、両端が""でなければ両端に""をつけるというコードでいけたはず。 複合データはTStringListで読み書きするようにして TInifileEx.ReadStrings TInifileEx.WriteStrings みたいに一度ラップしておけばいろいろ使いまわせるよ。 INIファイルをLoadFromFileで読み込むのはAPIとの不整合が起こる危険があるから下策。
>>999 レスありがとうございます。
>途中にスペースがあり、両端が""でなければ両端に""をつけるというコードでいけたはず。
それがそう単純にはいかないようで、例えば↓の場合、↑の条件を満たしていますが
両端に "" を付けると "notepad.exe "A" B" となってしまいマズいことになってしまいます。
こういうケースに対応させていくことも出来ますが無駄に骨が折れそうです・・。
I
------------------------test.ini-------------------------------
[Path]
APP=notepad.exe "A" B
------------------------test.ini-------------------------------
>TInifileEx.ReadStrings
なるほど、とても参考になりました、ありがとうございます^^
>APIとの不整合
これは知りませんでした、どもです。
INIの自動カットに憤慨しつつ1000ゲット!
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。