トップページ⇒tech
1001コメント334KB

Delphi相談室その7

■ このスレッドは過去ログ倉庫に格納されています
0001Delphi1 から使ってますNGNG
Borland Delphiに関する質問・相談などを扱っています。

ボーランド
http://www.borland.co.jp/

<関連スレッド>
モナーの *やさしい* Delphi質問スレ Ver.8
http://pc3.2ch.net/test/read.cgi/tech/1027873869/l50

・雑談はこちら
ミ,,゚Д゚彡フサギコのフサフサDelphi談話室�E
http://pc3.2ch.net/test/read.cgi/tech/1031668744/l50
0153デフォルトの名無しさんNGNG
>>152
でも手間が増えるんだろ。だめじゃん。
0154デフォルトの名無しさんNGNG
手間ったって
TMyMemINIFile を継承して
WriteEscString ReadEscString を一度作るだけだろ
0155デフォルトの名無しさんNGNG
>>151,153
痛すぎる・・・
0156デフォルトの名無しさんNGNG
なぜそうまでして ini にこだわる?
0157デフォルトの名無しさんNGNG
もともと *.ini を使うのが簡単、という文脈の流れで
0158デフォルトの名無しさんNGNG
レジストリじゃなくてiniに拘る理由?
そりゃ、windowsフォルダに入れるなら糞だけどローカルに作ると
1、速い
2、実行ファイルを別のディレクトリに入れれば相互に独立する
3、環境を移す時にディレクトリを丸ごとコピーするだけでいい
4、アンインストールも楽
0159デフォルトの名無しさんNGNG
レジストリのほうが動作は速いんじゃないの?
0160デフォルトの名無しさんNGNG
>>158
>>159
俺もそうおもうけどINIの方が使い捨てプログラムには楽かと
0161デフォルトの名無しさんNGNG
>>159
 サイズによると思うよ。
 巨大な iniファイルを作ると1文字の追加削除でも全件読まなければならない iniより
 木構造で管理されてるレジストリが速いだろうね

それでもアプリ起動時に全件読んで、終了時に全件書き込むような使い方なら iniの方が速いんじゃない?
0162デフォルトの名無しさんNGNG
なんで >>133 の質問で「INIファイルかレジストリか」って
議論になるのかわからん。
各項目のサイズ。レコード数。更新の頻度。とかを考えないと
テキストのまま保存されるINIファイルは論外になる可能性が
あるでしょ。
それに、こんなことでレジストリを使っていていいのかって
問題もある。たとえばNT系列でAdministrator以外でも
きちんとつかえるのかしら。
0163デフォルトの名無しさんNGNG
>>162
じゃぁ何をつかったらいいか提示して
0164デフォルトの名無しさんNGNG
>>158
>レジストリじゃなくてiniに拘る理由?

ちゃんと133からの流れを読んでいるのか?
データだよ、保存したいのは。前に出てた Stream 系かデータベースを
使うのが普通だろ。
0165158NGNG
>>164
 ああじゃ追加
5、気にせずに巨大データも書き込める
0166162NGNG
レコードが大量だとRDBとかも選択肢に入れておかなきゃ
だめじゃないの?最初から除外する意図がわからん。

プログラムが使い捨てか、長く使うかでも変わるし
データのサイズが数KBか数百MBかでもかわりますから
そこらへんがわからないうちからINIだのレジストリだの
いうのは意味がないでしょ。
0167デフォルトの名無しさんNGNG
>>165
巨大データをINIになんて入れると時間がかかるよ。
君の言いたいことは、気にせず「巨大データを書き
込むプログラムが作れる」だろ。

0168158NGNG
ああなるほど、2個のEDITと1個のMemoと思ってたから iniファイルを持ち出したんだけど、
>>133 を読み返すと データ番号 とかデータ名となってるから1件じゃなくて
複数のこういうペアを作りたいのかもしれないね。
だとすると、単純にデータ名でディレクトリ掘って、
  データ番号をファイル名にして
  データの内容=ファイル内容 なんて解法が一番スマートで楽じゃないかな

可変長のテキストをRDBで扱うとRDBによっては効率悪いし
0169デフォルトの名無しさんNGNG
>>133
まずは各データの最大長とデータの最大個数書かないと。
わからないならおおよそのサイズ(数バイト,KB,MB,無制限)でもいいから。
0170デフォルトの名無しさんNGNG
あのねぇ、ini がどうとか言ってる奴を除けば133は解決済み
0171デフォルトの名無しさんNGNG
>> 複数のこういうペアを作りたいのかもしれないね。

>何個もこのようなデータを1つのテキストファイルに保存したいのですが

これ、読めないのか?
0172デフォルトの名無しさんNGNG
>テキストファイルでなくても保存できて読み込めればどんなファイルでも
>いいのでこういう方法がいいとかあったらおながいします。

これ、読めないのか?
0173デフォルトの名無しさんNGNG
>>172=168=158

いいかげんにしろよ。168では、データ数分だけファイルつくるってんだから
仕様を満たさないのは明らかだろ。
0174デフォルトの名無しさんNGNG
じゃ、結局 TMemIniFileでエンコードして格納するのが一番適当って事だね
0175デフォルトの名無しさんNGNG
>>174

君の住所録は TMemIniFile でエンコードして作ってろよ。
おもしろい奴だね。もっと日本語の読解力をつけろよ!
0176デフォルトの名無しさんNGNG
>>175
住所録ならCSVだろ
0177デフォルトの名無しさんNGNG
>>132
僕も半年だけど、全然だめぽ。。。
Delの前にも違う言語やってたんですか?
0178デフォルトの名無しさんNGNG
うん、Hエスパーだったよ。
0179Delフサギコ ◆A6VzDeLphI NGNG
 ミ,,゚Д゚彡
初心者の場合、作りたいものと、作れるもののギャップに
激しく差があって、なかなかプログラミング意欲が沸きにくいと思うです。

とりあえず、何を作りたいか、のネタ探しからはじめて
たくさん、プログラム/ソフトウェアを作っていくしか
ないと思いますよ。

ライフゲームとか、作ったことがあるんですが
ネタとしては面白かった yo.
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1022733594
いろんなネタが見つかるといいですね。
0180Delフサギコ ◆A6VzDeLphI NGNG
 ミ,,゚Д゚彡
XPの本では、とりあえずDBやるときでも
最初にファイルでやっといて、後から
データアクセスを担う1関数だけを
ファイルアクセスからDBアクセスに
切り替えたら、いいよね

ってアプローチがいいと紹介されてました。
0181デフォルトの名無しさんNGNG
>>180
その方法だと、Delphiのデータベースコンポーネント使えないんじゃ…
初めからDBでテストすればいいと思います。
ローカルかリモートか程度なら後で変えても苦労しないでしょうが。
0182Delフサギコ ◆A6VzDeLphI NGNG
 ミ゚Д゚;彡・・・3Stringの入出力でラップすれば…
         コンポもクラスなんだし。
0183Delフサギコ ◆A6VzDeLphI NGNG
 ミ;;゚Д゚彡トリップの桁が・・・・・・
0184デフォルトの名無しさんNGNG
トランザクションとかTDBGridとの連携とか色々考えたら、
>データアクセスを担う1関数だけ
なんてわけにはとてもいかず、データベースとの中継を行なうコンポーネントひとつ
作る労力が要るのでは無かろうか?
素直にMyBaseでも使ってればいいじゃん…。
0185Delフサギコ ◆A6VzDeLphI NGNG
 ミ゚Д゚;彡構造化って外捻はあるですか?

ファイルアクセス用に1関数つくるのと
 同じような入出力で
 DataModuleに1メソッド作って
相互置き換えすると、いいだけなんだけど。

トラザクとかはそれからでもいいし。
たかが、3Stringにしょっぱから、DB導入ナノ?
ま。どうでも。
0186デフォルトの名無しさんNGNG
そっちこそOOPの概念ありますか?
DBの代わりにファイルアクセスするものを作るにしても、
既存のDBコンポと連携させようとしたら、
TDataSetから派生させて、全メソッドサポートしないと動かないじゃん…。
(まさか、本番も、全データをメモリに読み込んで、書く時も一斉に…ってわけじゃあるまいし)
で、ローカルファイルでテストしたければ、
BDE経由でCSVでも、MyBaseでXMLでも、似たような事はできるので、
わざわざ手間かけて回り道することは無いでしょ?
0187デフォルトの名無しさんNGNG
あふぉやね
0188デフォルトの名無しさんNGNG
あの程度の質問をする人にいきなりDBだなんだを持ち出さなくてよろしい

ムキになるなよ
0189デフォルトの名無しさんNGNG
そうそう。
絶対ドラゴンボールと勘違いしてる。
0190デフォルトの名無しさんNGNG
マウスで選択した範囲を
インデントまたは元に戻すショートカットキーって
なんでしたっけ?
0191デフォルトの名無しさんNGNG
^ku
0192デフォルトの名無しさんNGNG
^ki
0193デフォルトの名無しさんNGNG
某に聞け
0194190NGNG
^sankusuko
0195デフォルトの名無しさんNGNG
そういや、ヘルプのキーボードショートカット一覧って、
キーワード検索で探すしかないの?
目次からではどうやってもたどり着けなかった気がするのだが。
0196デフォルトの名無しさんNGNG
ヘルプファイルをテキストにコンバートすれば一発だよ>195
0197 NGNG
なんか荒れ気味だけど、本人どーした?<ini話の張本人
0198デフォルトの名無しさんNGNG
荒れてるのは不明確な部分を勝手に想像力で埋めちゃってる
おっちょこちょいだけだろ。
0199デフォルトの名無しさんNGNG
オッチョコチョィ萌え〜
0200デフォルトの名無しさんNGNG
●●●●●●●●恒例・「オセロさえ納期内に作れない=OO役立たず 」祭り●●●●●●●
http://pc3.2ch.net/test/read.cgi/tech/1032985885/l50
/|         |  |_____ΦΦΦΦΦΦΦΦΦΦΦ||ΦΦΦ
  |         |  | ̄ ̄ ̄ /|                    ||
  |         |  |   / /|TTTTTT   TTTTTTTTTT||TTTTT
  |        /\ |  /|/|/|^^^^^^ |三三| ^^^^^^^^^^^||^^^^^^^
  |      /  / |// / /|
  |   /  / |_|/|/|/|/|
  |  /  /  |文|/ // /
  |/  /.  _.| ̄|/|/|/         Λ_Λ
/|\/  / /  |/ /           (___)
/|    / /  /ヽ            /〔 非OO 〕〕つ
  |   | ̄|  | |ヽ/l            `/二二ヽ
  |   |  |/| |__|/   Λ_Λ     / /(_)
  |   |/|  |/      ( ´∀`)   (_)    Λ_Λ
  |   |  |/      // /  ^ ̄]゚        (`   )
(省略されました・・全てを読むにはここを押してください)

0201デフォルトの名無しさんNGNG
procedure TForm1.FormCreate(Sender: TObject);
var
FS1 : TFileStream;
begin
FS1 := TFileStream.Create(FILENAME, fmOpenRead);
try
while FS1.Position <> FS1.Size do
begin
//ファイルを読み込んでいく処理
end;
finally
FS1.Free;
end;
end;

こういうのって成立しますか?
0202デフォルトの名無しさんNGNG
するよ
0203デフォルトの名無しさんNGNG
( ^▽^)
0204ななしへたぐらま ◆XcB18Bks.Y NGNG
>>190
それぞれ
Ctrl+Shift+I
Ctrl+Shift+U
です.
0205デフォルトの名無しさんNGNG
>>189
ワラタ
0206デフォルトの名無しさんNGNG
LISTBOX等で
Listbox1.DeleteSelected;
をおこなうとフォーカスが線だけの囲み状態になって、例えば
DELキーにレスポンスして連続削除のようなことができないです。
どのようにすれば、プログラム側から動的にリストの項目をセレクト
状態にできるでしょうか?
-----------------------------------------------

ListBox1.TopIndex:=i;//リスト画面のスクロール

この関数でリスト表示位置を移動した時に連動して、
オーナー描画をしたいんですが。
onオーナー描画で描くと、描画後にリストのスクロールがおこなわれ描画画面が消えてしまいます。
このような場合正しいタイミングにするためには、どのような設計が必要なのでしょうか?

0207デフォルトの名無しさんNGNG
Delphi7で、dcuのみでpasファイルがないユニットをコンパイラが認識しないようなのですが、
同様の症状が出る方はいますか?
0208デフォルトの名無しさんNGNG
>>207
確かめてないけど、他バージョンのdcuを認識しないのは伝統的な仕様だったと思う。
0209無責任だがNGNG
makeファイルもどきがDelphiIDEで出来ないかな?

いま、逆アセみたいなのを作ってるんだけど
1、元になるテキストデータを作って
2、それをDelphiでDelphiソースに変換
3、2のソースを
function Cvt(dt:Integer):string;
begin
{$INCLUDE CODE.INC}
end;
みたいに取り込んで利用

で、問題は、1,2,3を調整の為に頻繁に行き来するんで DelphiのIDE上で全て作業出来ないかなと 

複数プロジェクトを作っても2のアプリを実行までは自動で出来ないんで
どうやると効率良いかなというご相談です。
0210デフォルトの名無しさんNGNG
>>208
フリーのコンポーネントの中にはソースの付かないものがあるけど
バージョンが古いともうだめってこと?

だとするとフリーでもソースの付かないコンポーネントは逝ってよしかな
0211デフォルトの名無しさんNGNG
>>210
その通り
0212デルファイの名無しさんNGNG
>>209
普通に考えれば、ツールメニューに$EDNAMEなどを使って登録しておくか、
OpenToolsAPIでIDEの機能として全てを組み込んでしまうか、でしょうね。

後者の場合深くやろうとすればそちらへ労力を割かれそう。
やっと昨日、ずっと引っかかっていた新規プロジェクトをOpenToolsAPIで作る方法を発見…。
0213207NGNG
>>208
回答ありがとうございます。
仕様だったんですか。不便ですね…
0214デフォルトの名無しさんNGNG
>>206
たとえばこういうのとか
var
  Index: Integer;
begin
  Index:=ListBox1.ItemIndex;
  ListBox1.DeleteSelected;
  if not(Index<ListBox1.Items.Count) then
    Index:=ListBox1.Count-1;
  if 0<=Index then
  begin
    ListBox1.Selected[Index]:=true;
  end;
end;
------------------------------------------------
TopIndex:=i;の後にRepaintすればいいのでは?
そういう話ではない?

0215無責任だがNGNG
>>212
 そうですね。 やっぱりそれしかないかな。

今、3で作るアプリ内で日付を比較して更新する方法を考えました。
更新があったらソースを書き換えて勝手に終了させるようにしてと
0216デフォルトの名無しさんNGNG
カレントプロジェクトのディレクトリの
makefileをmakeするツール登録してるよ。

makeしたけりゃmakeすりゃいいのさ。
0217デフォルトの名無しさんNGNG
初歩的な質問ですが、TActionMainMenuBar にサブメニューを追加する方法がわかりません。
どうすればいいのでしょうか?ヘルプを見ても載っていませんでした。
0218デフォルトの名無しさんNGNG
解決しました。
0219デフォルトの名無しさんNGNG
メモリー上の画像データ(RGB24)を画面に描画するには
どうすればいいんでしょうか?
画像データを1dotづつRGB(R, G, B)からTColorへの変換
して、点を打っていくしかないんでしょうか?
0220デフォルトの名無しさんNGNG
解決しました。
0221無責任だがNGNG
>>216 それもそうですね。 ただついF9押してしまうんで

>>217 メインのメニューが作れたなら Itemsの所から[・・・] をクリックして追加

>>219 同じサイズのTBitmapを作って、作ったイメージデータをBitmap.ScanLine先にコピー
 Bitmapは、Imageコンポを画面に貼り付けて Image.Pictureに設定するだけで表示出来るし
 OnPaintイベントで Canvas.Drawメソッドでも表示可能
0222デフォルトの名無しさんNGNG
イベントハンドラ内で長時間ブロックしているとき、
スレッド作ってSynchronizeでApplication.ProcessMessages呼んで
フォームが固まるのを防ぐのって有りかな?
0223デフォルトの名無しさんNGNG
>>222
というか Synchronize って そのProcessMessageで呼ばれるのじゃなかったっけ?
0224デフォルトの名無しさんNGNG
時間がかかる作業のほうをスレッドにするのが定石だと思うが。
0225デフォルトの名無しさんNGNG
スレッド内の処理が完了しないと
他を処理出来ないケースとかって結構あるから、
スレッドにする事で処理速度が落ちる可能性を考えると
スレッドって有効な手段なんだろうか?
とか、昼飯を買いに行きながらよく考える。
0226デフォルトの名無しさんNGNG
型なしファイルでRewrite 手続きを使おうと思い
ヘルプで調べたのですが
procedure Rewrite(var F: File [; Recsize: Word ] );
のRecsizeのところが分かりません。
ヘルプではデータ転送に使われるレコードサイズを指定と書いてあるのですが
これは通常どれくらいの数にすればよいのでしょうか?
デフォルトでは(何も書かなければ)128となっていますが
この設定基準ってなんなんでしょう?
0227デフォルトの名無しさんNGNG
多く取れば転送高速になるかもしれないが、無駄かもしれない
少なければ無駄は無いが、遅くなるかもしれない。

デフォルトでよいのでは?

数メガ書き込むときなどは、大きめにとればいいんじゃ

こんなコトに悩むより、自分で実験してみたらいいと思う
0228デフォルトの名無しさんNGNG
Pascal 覚えはじめは、AsssignFile()/CloseFile() 使ってたけど
いまはほとんど、TStream 系や TStrings 系の LoadFromFile()
や SaveToFile() ですましてる。
0229デフォルトの名無しさんNGNG
AsssignFile() -> AssignFile() な(笑)
0230226NGNG
>>227
インターネットのパケットに似てるのかな?
凄く参考になりました。
そうですね実験してみます。ありがとう。
0231デフォルトの名無しさんNGNG
ガンダムSEED
ドラえもん祭り
サップvsホースト
ゴールデンシアター[マトリックス]
0232ななしへたぐらま ◆XcB18Bks.Y NGNG
>>226
RewriteのRecSizeは書き込みバッファのサイズではなくて,
何バイト単位で書き込むかを指定する値です.
RecSizeには1を指定します.

128という値は昔のOSが128バイト単位でファイルを読み書きしていたのと
関係があるかも知れません.

#私も今はRewriteは使わずストリームを使っています.
0233デフォルトの名無しさんNGNG
>>232
>何バイト単位で書き込むかを指定する値です.

あ、そうなんすか。
で、たとえばデフォルトの128バイトの場合、
3バイト書き込んだ時点で、ディスク上のファイルはどうなるの?
0234デフォルトの名無しさんNGNG
>>233
確認してないのであてずっぽうですが、バッファが128byteで
書き込みが3byteの状態って単にバッファにたまっていて
書き込まれていないでしょうね。

そしてバッファがいっぱいになったときとかクローズするときに
全部を書き込むようになっっているはずです。
0235デフォルトの名無しさんNGNG
俺の記憶が正しければ、一回の書き込みでも指定したバイト数書き込んじゃって
いやーんなことになります

ま、やってみりゃわかる。
0236デフォルトの名無しさんNGNG
まあ便利な時もあるよね
最近AssignFile使わないけど
0237デフォルトの名無しさんNGNG
Delphiでマトリックスは作れますか?
0238デフォルトの名無しさんNGNG
>>237
m×n行列なら2次元配列でいいんじゃないですか。
http://www.users.gr.jp/ml/archive/delphi/41901.asp
より

多次元配列は配列の配列です。次に例を示します。

type TMatrix = array[1..10] of array[1..50] of Real;

これは次と同じです。

type TMatrix = array[1..10, 1..50] of Real;

どちらの方法で宣言しても,TMatrix は 500 個の実数値の配列を表します。


0239デフォルトの名無しさんNGNG
>>237
Code Centralに逝きたまえ。それが全てだ。
0240デフォルトの名無しさんNGNG
delphiで初めてデータベースを作ろうと思っています。

いろいろとチャレンジしているのですが教科書が無いのでInpriseのマニュアルだけでは進展しません。
データベース対応アプリを作るのに参考になる良いサイトあるいは書籍があったら教えてください。

手元にDelphi2.0テクニックマスター集中講義があるのですが、データベースに関する部分は
説明が少なくてなかなか理解出来ないでした。

私のレベルはなんとか脱初心者レベルではないかと自分では思っています。
0241デフォルトの名無しさんNGNG
脱初心者レベルなら自己解決できます。
良かったですね。
0242デフォルトの名無しさんNGNG
>>221
ありがとうございます。
最初、Bitmap.ScanLine := pDataとか間抜けなことして、読み出し専用
だっつーてんだろ!というコンパイラのツッコミにかなり悩みましたが
やっとこなんとか解決できました。
0243デフォルトの名無しさんNGNG
>>241
脱初心者出来ていなかったようなので初心者に戻ります。
どうかよろしくお願いします。
0244デフォルトの名無しさんNGNG
>>240
Delphi2.0のころの本だとしんどいと思います。そのころじゃBDE(BorlandDatabaseEngine)の
説明しかないんじゃないでしょうか。現在ではDatabaseへのアクセス方法が

BDE ボーランド独自
ADO MS(というかWindows)の流儀
dbExpress Kylixとの互換性を考えた新しい方法

あとInterbaseへのダイレクトなアクセスとかローカルにXML形式でファイルを作るMybaseなど
いろいろな方法が用意されていますから、そのころの本だけで勉強しても無駄骨に終わる
という可能性が大いにあります。

DelphiでDBとかいうテーマの本だとOracle oo4oを扱ったものまでありますから、とりあえず
大きな本屋さんへ行って気に入った本を買いなさいってこと。

脱初心者なら自分にあった本くらい探せるでしょ。
0245デフォルトの名無しさんNGNG
Delphi7.0のアカデミックを買いたいのですが、学生証を要求されるものなのでしょうか?
0246デフォルトの名無しさんNGNG
>>240
データベースの場合、基本の概念を理解していれば応用が楽(と言
うより基本ができていないと何をやってもだめ)なので、本当に身
に着けたいならそこからやるべき。
0247デフォルトの名無しさんNGNG
>> 基本ができていないと何をやってもだめ

なんでもそうかと思うふ
0248デフォルトの名無しさんNGNG
糞詰まんない一般論吐いてる暇があったら
Del&DB本の一冊でも紹介してやりゃいいのに。
0249デフォルトの名無しさんNGNG
> Inprise
未だに隅をつつくなよ。某がかわいそう
0250デフォルトの名無しさんNGNG
>>238-239
ネタニマジレスカコワルイ
0251aponeNGNG
リストビューのアイテムをドラッグアンドドロップでデスクトップに持っていって
ファイルを作成したいんですが、どうすればいいでしょうか?
0252Delフサギコ ◆A6VzDeLphI NGNG

    (V)∧,,∧(V)
    ヽミ・ω・ノ  フォッフォッフォッ
.     .ミ,,,,,,, ミ
    ノ  ゝ  

>>251むずかすぃかも
とりあえず有名なDragDropコンポーネントをインスコ汁汁汁
■ このスレッドは過去ログ倉庫に格納されています