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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。

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

<関連スレ>
Delphi相談室(中級者以上)その12
http://pc5.2ch.net/test/read.cgi/tech/1064420818/
【ドキュメント】Delphi8 for .NET 2【どこ?】
http://pc5.2ch.net/test/read.cgi/tech/1078695271/

<その他>
ボーランド
http://www.borland.co.jp/
DelWiki
http://onigiri.s3.xrea.com:8080/delphi/
0153デフォルトの名無しさんNGNG
>>152
簡単に言えば
Write(F, 文字列);
とせねばなりません。
0154デフォルトの名無しさんNGNG
combobox1の何を保存したいんだ?
そのままじゃ保存できない。
0155デフォルトの名無しさんNGNG
>>152
あとComboBox.Style を csDropDownList にしとけば
そもそも手動入力できないようにできます。
0156152NGNG
>>153-155

ComboBoxはComboBox1.Textにしたら出来ました。
手動入力はデファルトで入力できる設定になっていましたけど勉強になります。
ただ、手動入力もファイルに保存されてしまうのでShowMessageを使ってNGを出したいです。
0157デフォルトの名無しさんNGNG
こんにちは。昨日からDelphiを使い始めました。
いろいろ試しているんですが、
DateToStr(Date)
の年と月と日をそれぞれ別の変数に入れたいんですが、
文字列の分割の仕方がよくわかりません。
xBASE言語のleftstrやrightstrのような関数はないんでしょうか。
0158デフォルトの名無しさんNGNG
>>157
xBASEとやらは知らないけど、その名前の関数はあるよ。
uses に StrUtilsを追加しる。
0159デフォルトの名無しさんNGNG
>>158
ありがとうございます。
でもHELP見ても出てきません。Delphi 5です。
0160デフォルトの名無しさんNGNG
> の年と月と日をそれぞれ別の変数に入れたいんですが、

DecodeDate()

> xBASE言語のleftstrやrightstrのような関数はないんでしょうか。

Copy() や AnsiPos() や Length() でもっと柔軟な使い方ができる。
0161デフォルトの名無しさんNGNG
>>160
うお、こんな関数あるんだ。どもサンクスです。
助かりました。
0162デフォルトの名無しさんNGNG
FormにEditを複数貼り付けて名前から(Tagでも可)そのEditを探す方法はありますか?
0163デフォルトの名無しさんNGNG
FindComponent
0164デフォルトの名無しさんNGNG
>>163
助かりました
ありがとうございます
0165デフォルトの名無しさんNGNG
アプリ起動時にTedit1にテキストファイルから取り込んだ物を
入力したいのですがどうやったらできますか?
0166デフォルトの名無しさんNGNG
Edit1.Text := 取り込んだ文字
0167デフォルトの名無しさんNGNG
>>165
おいら初級者なので間違ってたらごめん(´Д`;)

procedure TForm1.FormCreate(Sender: TObject);
var
sl: TStringList;
begin
sl := TStringList.Create;
try
sl.LoadFromFile('C:\test.txt');
Edit1.Text := sl.Strings[0];
finally
sl.Free;
end;
end;
0168デフォルトの名無しさんNGNG
>>157
DecodeDateも調べてみてごらん。
0169デフォルトの名無しさんNGNG
既出だった...スマソ
0170165NGNG
>>167
ありがとうございます
0171デフォルトの名無しさんNGNG
ねえ、Delphiって関数ジャンプってないの?
VC++にあるようなやつ。
0172デフォルトの名無しさんNGNG
exitのことか?
0173デフォルトの名無しさんNGNG
いや違う。
エディタの話。
自分の作った関数にジャンプできなくない?
0174デフォルトの名無しさんNGNG
Personalはいろいろエディタ機能削除されてるけど・・・
0175デフォルトの名無しさんNGNG
>>173
[表示]-[コードエクスプローラ]のこと?
0176デフォルトの名無しさんNGNG
>>175
それないよ・・・
まあフリーのやつだからしょうがないか。
0177175NGNG
>>176
俺はPro版だが、使ったことない・・・。
0178デフォルトの名無しさんNGNG
ALT+↑ とか
0179130NGNG
スルーされてるっぽいので、他のスレで聞いてきます。
お手数おかけしました。
0180デフォルトの名無しさんNGNG
>>171
Ctrlキーを押しながらその関数にマウスカーソルを当てるとハイライトする。それをクリックすると
その関数にジャンプする。という機能?
それともCtrl + Alt + ↓のこと?

スレ違いならスマソ
0181デフォルトの名無しさんNGNG
>>175
最近ごちゃごちゃなコード書いてるせいか
むしょうにその機能が使いたくてしょうがない。
「定義の検索」でなんとか代用してるけど・・
0182デフォルトの名無しさんNGNG
コードエクスプローラってプロジェクト閉じるたびにツリーも全部閉じるからめんどくさくて使ってられない
0183デフォルトの名無しさんNGNG
DelphiでシーケンシャルファイルをOPENし、配列に取り込むのはどうやるんですか?
HELPでreadとか見つけたんだけど使い方とか書いてないし・・・

なんかVBよりとっつき悪い感じ・・・
0184デフォルトの名無しさんNGNG
>>183
何事も慣れです。「シーケンシャルファイル」なんていってる時点で
化石プログラマーな匂いがプンプンしますよ。もっと柔軟に考えないと。
ファイル操作といってもいろいろなやり方がありますから、
バイナリファイルなら TFileStream、
テキストファイルなら TStringList が楽かも。
余裕があるなら File of XXXX, TextFile、
また、Win32 APIを直で使うという方法もあります。
0185デフォルトの名無しさんNGNG
TFileStreamか、ありがとう。
0186デフォルトの名無しさんNGNG
ってHELPにも出て来ないし・・・やれやれ
0187デフォルトの名無しさんNGNG
そのレベルで2chだけで言語習得しようとしているあんたに惚れた
0188デフォルトの名無しさんNGNG
つうかVBプログラマってホント潰しきかねぇな
0189デフォルトの名無しさんNGNG
C#とかC++とかDelphiとかやるならオブジェクト指向について
勉強しとかないとつらいよ。
0190デフォルトの名無しさんNGNG
お前ら"VB"に過剰反応しすぎ。
0191デフォルトの名無しさんNGNG
なんかVBよりとっつき悪い感じ・・・
0192デフォルトの名無しさんNGNG
>>188
Cやれ。
0193デフォルトの名無しさんNGNG
Kylixの話はここでよござんしょか?
Duron1G、メモリ600MBOverの環境でGnome上でKylix Open Edition 3を立ち上げて
ボタン一個の画面作ってそれだけで走らせようとしたら
実行ファイルはできているらしいもののIDEが凍ります_| ̄|○
(で、その実行ファイルは実行されない。ターミナルから起動しようとしても
参照が未解決だとかなんとか……どっかにLIBPATH通さないといかんのかな)
環境的にきついんでしょうか?
0194デフォルトの名無しさんNGNG
肝心のディストリビューションかいてないし
0195デフォルトの名無しさんNGNG
Delphiのブロック崩しのサンプルってないんですか?
ぐぐってもでてこないorz
0196デフォルトの名無しさんNGNG
すいません。
Timerについてなんですが、
OnTimerの処理が終わらずにまたOnTimerが呼ばれた場合、
一体どのような処理になるのでしょうか、、
0197デフォルトの名無しさんNGNG
>>195
超初心者スレなんで、TShapeとTTimerだけでブロック崩し作ってみたら。
ちょっと面白そうなんでやってみようかな。
0198デフォルトの名無しさんNGNG
>>196
呼ばれません。
0199134NGNG
>>135
遅くなりました、ありがとうございます。ネ申よ。。。
0200デフォルトの名無しさんNGNG
>>196
別スレッドになるわけじゃないしな
0201デフォルトの名無しさんNGNG
>>197
sinとかcosの使い方が知りたいのです...
どうやったら移動と反射とかができるのか。
0202デフォルトの名無しさんNGNG
お前ら、布教と救済しる!
0203デフォルトの名無しさんNGNG
何だよ偉そうに。
0204193NGNG
ぐは。確かに。 > ディストリビューション
今は最早骨董品と成り果てたRedHat9でござります。
パッチはなーんも当ててないっす。それでも一応、Kylix3の
動作条件は素で満たしていたはずでしたが……
(事実起動はするし、コンパイラも動いてはいるらしいし)
0205デフォルトの名無しさんNGNG
質問させて下さい。
#define UMA ((hoge*32)+16)
↑みたいな置換え処理をDelphiではどうやるんですか?
0206デフォルトの名無しさんNGNG
function UMA(hoge: Integer): Integer; register;
asm
  SHL EAX, 5
  ADD EAX, 16
end;
0207デフォルトの名無しさんNGNG
>>206
スンマセン…ただ単に置換えだけ出来れば良いんです。
#define GIKO hoge[9]
#define UMA hoge[17]
みたいな感じで。
0208デフォルトの名無しさんNGNG
知ってて言ってないか?w
無いですよ。
あったとしても、DelphiのようなIDEによるソースの自動編集が重要な位置を占めてる環境で
IDEの邪魔を好んでするのはお薦めしない。
0209デフォルトの名無しさんNGNG
>>208
本当に知らんかったのですよ…
ヘルプ読んでも検索しても見つからなかったので質問した次第です。
どうもお騒がせしました。
0210デフォルトの名無しさんNGNG
>>205
無い。
Delphiにはマクロもインライン関数も無いです。
素直に関数作るか、定数として定義しておくしかない(コンパイル前に解るような計算式なら定数に出来る)。

0211デフォルトの名無しさんNGNG
delphiのソースエディタで行ごと削除できるキーはありますか?
0212デフォルトの名無しさんNGNG
>>205
ちなみにC#にもマクロ、インラインはないです。
0213デフォルトの名無しさんNGNG
>>211
ctrl+y
0214213NGNG
追加。
D7だとヘルプのキーワードに「エディタに関するキーボードショートカット」
0215デフォルトの名無しさんNGNG
ttp://www.wwlnk.com/boheme/delphi/tips/tec1630.htm

MemCheckによればこれに載ってるコードではメモリリークしてるらしいのですが、
どこが原因になってるんでしょうか?
0216デフォルトの名無しさんNGNG
>>204
ttp://www.geocities.jp/fujimaki691202/download/Linux/KylixTips/installing_unofficial_patch.htm

Kylix3
http://pc5.2ch.net/test/read.cgi/tech/1030031001/l50
0217デフォルトの名無しさんNGNG
del7,1 + dbexpress での話ですが、どうしても以下のような
エラーが出ます。海外のBBSを見ると、一部に7.1 upedateの
問題みたいな意見もあるんですが。。。

------- ----------- ------------ -------------
[致命的エラー] ユニット SqlExpr は異なるバージョン
SqlConst.SNOERRORによりコンパイルされています
------- ----------- ------------ -------------

SqlConstって、拡張子が「dcu」と「dcu.jp」ってのが
ありますね。後者は7.1でアップデートされている
わけですが。。。

このエラーって、7.1へのアップデートに失敗した結果?
0218デフォルトの名無しさんNGNG
>>215
別にリークしてるとは思わないけど。ほかの部分に問題があるのでは?

それよりプロセス間をまたいでポインタを渡すなら、GetMem じゃなくて
GlobalAlloc を使ってグローバルヒープに変数を確保しないと駄目な気が
するけど。
0219デフォルトの名無しさんNGNG
> GlobalAlloc を使ってグローバルヒープに変数を確保しないと駄目な気が

おいおい、GlobalAlloc WM_COPYDATA を知っててそんなこと言ってるのか?
0220204NGNG
>216
ぐはっ*2。ぐぐればすぐにでも出てきそうなものを、よう探さんかったとは
己の不分明を恥じるのみ。
というわけで216とドイツのスーパーハカーに謝意を表しつつ逝ってきます。
0221デフォルトの名無しさんNGNG
senderを偽装 というのをやりたいのですが、
(Sender: TObject);のついているプロシージャを呼び出したい時に、
Senderを持ってない関数からSenderなしで呼び出すとエラーになってしまうので、
Senderをとりあえず捏造して呼び出したいのですが、どうするのがよいのでしょう。
googleで探すのは不可能でした。
0222デフォルトの名無しさんNGNG
適当にselfとかいれとけ
0223デフォルトの名無しさんNGNG
TObjectっていったらほとんどなんでもOKだよな・・
0224デフォルトの名無しさんNGNG
>>221
プロシージャ内部で何やってるか調べないとまずいんじゃね?
必要ないのにSenderのメンバ弄ってるとかならいいけど
必要だから弄ってるなら適当なの渡すのもまずいじゃん?
0225デフォルトの名無しさんNGNG
stringでtabや改行を盛り込むにはどう記述すればいいんでしょう
0226デフォルトの名無しさんNGNG
制御コード

タブは  #9
開業は  #10

シングルクオーテーションで囲んじゃだめ。ただの文字列になる。
0227デフォルトの名無しさんNGNG
変換ミスはスルーで・・・
0228デフォルトの名無しさんNGNG
改行は sLineBreak 定数を使った方がよさげ
0229225NGNG
ありがとうございました。
0230デフォルトの名無しさんNGNG
起動すると必ず最大化されてしまうプログラムを、Windowモードで起動するように指示するプログラムを作りたいのですが、
どのように書けば良いでしょうか・・・。
0231デフォルトの名無しさんNGNG
そういう起動パラメータがあるかどうか調べる
0232デフォルトの名無しさんNGNG
TDBGridで、商品名 価格 数量 小計 を表示するような
プログラムを作成しています。価格*数量で計算した小計を
静的に作成したColumunsに表示させたいと思いますが、
どうやってセルを指定して入力するかがわかりません。
StringGridとは全く扱いが違うようなのですが、ヘルプを
読んでみてもよくわかりませんでした。

よろしくお願いします。
0233デフォルトの名無しさんNGNG
>>230
ショートカットの「実行時の大きさ」を変更してもダメなプログラムは
いったん起動させた後でないとウインドウの変更は無理だと思います。
0234デフォルトの名無しさんNGNG
>>232
TDBGridだけを何とかしようとしても、目的は達成できないよ。
TDBGridのDataSourceプロパティの元になっているTQueryのSQL文で

SELECT 商品名, 価格, 数量
FROM 商品

を
SELECT 商品名, 価格, 数量, 価格 * 数量 AS 小計
FROM 商品

にして、小計を計算する項目を作成して、小計フィールドをあらかじめ作ってしまう。
小計はTQueryを開くと実行されるからこれで小計は計算される。
あとはTDBGridのColumnsに小計を追加すればOK。

TTableが元になっているならば、このようにすることはできないので、
TTableのOnCalcFieldsイベントを使う必要があるけど、長くなるのでここでは割愛
(もしTQueryを使っていない場合は教えてくれれば後で説明します)。
0235デフォルトの名無しさんNGNG
>>234さま

早速のご回答ありがとうございます。
TQueryを使っています。教えていただいた方法
早速試してみます!!
0236デフォルトの名無しさんNGNG
>>235
こういう質問をするときには、
・DelphiのバージョンとEdition (Personalとか・・・)
・データベースの名前(OracleとかAccessとか)
などを付記しておいた方が適切なレスがつきやすいよ。
0237デフォルトの名無しさんNGNG
Assignedって何か意味あるの?
if p <> nil thenって書いて問題になるケースって存在する?
0238デフォルトの名無しさんNGNG
Assigned(P) はポインタ変数の場合は P<> nil,
手続き型変数の場合は @P <> nil というテストに相当します。
0239デフォルトの名無しさんNGNG
で、ポインタ変数のチェックでAssigned使う意味あるの?
0240デフォルトの名無しさんNGNG
>>239
で、ポインタ変数のチェックでAssigned使わない意味あるの?
0241デフォルトの名無しさんNGNG
お前の人生に意味は無いよ
0242デフォルトの名無しさんNGNG
お世話になります。ローカル変数について二点ほど質問があります。

ある関数内で宣言したローカル変数は、使う、使わないにかかわらず
呼び出しが起こる度に、常に確保されるものなのでしょうか?

array[0..255] of Char のような大きい変数が必要な場合、
このように宣言するのと、動的変数を関数内で確保して使うのとでは
速度に差が出ますか?
0243デフォルトの名無しさんNGNG
自分で確かめれば?
0244デフォルトの名無しさんNGNG
>>242
スタックにとったほうが速度的には有利。
ただしあまり大きくとるとスタックが足りなくなるので
その時はヒープで確保する。
0245デフォルトの名無しさんNGNG
どうもありがとうございます。

速度という書き方をしましたが、別に実効速度がどう変化するかを
知りたいわけではありません。
可能ならより効率のいいコードを書きたいと思っただけです。

実はコンピュータのコアな部分のしくみをぜんぜん知らないので、
スタックやヒープというのをまず勉強してきます。
0246デフォルトの名無しさんNGNG
>>242
正直たった256バイトごときじゃ大差ないだろうね
0247デフォルトの名無しさんNGNG
文意を汲み取れないアホはもう寝ていいよ
0248242NGNG
          lヽ、            /ヽ
           i! ゙ヽ、    ,,,..-'"/  ゙i!⌒ヽー-、.,,.-イ''⌒ヽ
            l    ゝ-─‐-/'    i!  ヽ、     i,  ,ノ
         ,/"             i!  .... ゙'';;..   Y"
        ,/'              〈  :::::.  '';;...  'i- 、,,
         i'                'i,  ::::::::   ::::  'i!   ゙"ヽ、
          i! ー-      ,,_         'i  :::::::::  ''':;;;  ヽ、  ゙)
        'i,:::::   ,--、     ̄     ,/ヽ ''''        'i,-‐'"
       /⌒ヽ、 i,_,〉   :::::,,-‐    ゝ   .............    ヽ、
       (    ヽ、   ,,.-‐''"       ,)  :::::::::      '\,
        ヽ、,,  ノ,.-‐''"      ノ-‐''"´( :::::::::::          )
          "~ (       ,. -'"     ヽ、    _,,... -‐─'''"
             ヽ、,,.. -‐'''"
寝る!
0249デフォルトの名無しさんNGNG
いや、>>246 の指摘は重要。質問者は >>245 で書いているように実行速度が
どうこうではなく、より効率のいいコードを書きたいと言っている。256バイト
程度でぐちゃぐちゃ悩むのは全く効率よくない。
0250246NGNG
>>247
えーと、あなたは何を汲み取ったのですか?とても興味がありますww
0251デフォルトの名無しさんNGNG
ttp://mo-retsu.jp/unchi/nagare/musyuu.gif
0252デフォルトの名無しさんNGNG
ListBoxについて質問させてください。
例えばフォーム上にListBox,EditBoxがある時にListBoxの選択肢をEditBoxに表示
させたいのですがプロパティが見つかりません。教えてください。
ComboBoxのTextのような物が見つからないのです。
■ このスレッドは過去ログ倉庫に格納されています