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

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

<過去スレ>
DelWiki避難所(Delphi 関連の過去スレッド)
http://delwiki.info/?%E3%83%AA%E3%83%B3%E3%82%AF%2F%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%2FDelphi%20%E9%96%A2%E9%80%A3%E3%81%AE%E9%81%8E%E5%8E%BB%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89

209 :デフォルトの名無しさん:2012/03/20(火) 17:46:37.20
現在のところ
delphiを無料で手に入れることはできるのでしょうか?
入門っていうか、少し興味があり今やっているpythonと同じく勉強してみたいのですが…

301 :デフォルトの名無しさん:2012/04/18(水) 00:36:46.33
なんか今の流れをブッちぎるようで申し訳ないけど

アプリAのフォーム上に、アプリBの画面を重ねて表示し、
外見上はあたかも一つのプログラムであるかのようにするって
可能でしょうか?

もちろん、両アプリともDelphiで作るものですが。

訳あって、機能の一部をまったく別アプリにしたいので
よろしくお願いします。


327 :デフォルトの名無しさん:2012/04/21(土) 01:16:08.47
じゃあ俺が超初心者の質問するよ。
interface ってbuilderでいうヘッダファイル?
delphiはなぜヘッダファイルがないの

331 :デフォルトの名無しさん:2012/04/21(土) 16:03:12.02
DelphiにC/C++でいうヘッダファイルはない。ヘッダファイルがない理由はusesで他のユニットの
interface部の内容を取り込む仕様だから。
$I($INCLUDE)はそのファイルの内容をその行に置き換えるという、Cの#includeと全く同じ意味を
持つが、言語仕様の差から同じ効果をもたらすわけではない。

332 :デフォルトの名無しさん:2012/04/21(土) 17:49:30.84
>>331
>interface部の内容を取り込む仕様だから。
それは必須ではないです。INCLUDEをC++と同じような用途で使用したいなら
//Project1.dprファイル
program Project1;
uses
SysUtils,
Dialogs;
{$INCLUDE filename.txt}
var
aaa: Taaa;
begin
aaa := Taaa.Create;
aaa.bbb;
aaa.Free;
end.

#filename.txtファイル
type
Taaa = class
procedure bbb;
end;

procedure Taaa.bbb;
begin
ShowMessage('Taaa.bbb');
end;
このようにUnitを使わずC++と同等程度の”効果をもたらす”書き方も出来ます。
(もちろん、こんな書き方を推奨しているわかではないですが)
>>327,331
解答を用意しているということは、これは質問ではなく自分の知識を自慢したいのですか?
それなら、ここは初心者のスレなので正確な質問と解答を書いた方がいいですよ。

339 :331:2012/04/21(土) 20:28:13.46
多分1から

>332
> それは必須ではないです。
意味不明。usesはC#のusing同様に宣言の内容を取り込むのであって、C/C++の
#INCLUDEのようにその行をファイル全体で置き換えるわけではない。
その例だと2カ所以上でfilename.txtを$INCLUDEした場合、Taaaが2回定義され、
しかも異なるものと解釈される、ってのはわかってるか?

> 解答を用意しているということは、これは質問ではなく自分の知識を自慢したいのですか?
> それなら、ここは初心者のスレなので正確な質問と解答を書いた方がいいですよ。
自分以外がみんな敵に見えるのは病気だよ?ちなみに>>327-330は俺じゃないから。

345 :デフォルトの名無しさん:2012/04/22(日) 16:06:47.33
>>339
>意味不明。usesはC#のusing同様に宣言の内容を取り込むのであって、C/C++の
>#INCLUDEのようにその行をファイル全体で置き換えるわけではない。
ソースのファイル分割がUnit形式だけと限らないという意味です。
Unitを使った >interface部の内容を取り込む仕様だから。
この方法以外でもファイルを取り込めます。だからこの”取り込む仕様”だけが必須ではないと書きました。

>その例だと2カ所以上でfilename.txtを$INCLUDEした場合、Taaaが2回定義され、
>しかも異なるものと解釈される、ってのはわかってるか?
すみません、言いたいことの意図がわかりません。
インクルードファイルなので、記述されれば何回でもソースに展開されますし
それを認識して不具合なくソースを書くのは他の言語同様で当然のことだと思います。
それにUnit形式の場合でも、usesに二つ以上Unitを定義できないのもある意味同様だと思いますが。
すみませんが本当に、何を言いたいのかわかりません。

397 :デフォルトの名無しさん:2012/04/30(月) 13:29:45.24
質問です。
Delphi(Delphi7)からコンソールアプリケーションを操作したいと思っています。

例えば、Delphiのプログラムから、すでに開いているDOSプロンプトに
DIRコマンドを送るみたいなことをしたいのですが、どのようにしたらできるのでしょうか?

C#だと
ProcessStartInfo g = new ProcessStartInfo();
みたいなのを作って操作できるようなんですが、
Delphiでする方法を探してみると
keybd_eventなどでDIRと送る方法みたいなのしか見付かりませんでした。

何か他に良い方法がありましたら教えていただけないでしょうか。

411 :デフォルトの名無しさん:2012/05/01(火) 07:53:33.57
動かしてみた感じだと結果は同じなんですが
Memo1.Lines.Clear; と Memo1.text :=''; の違いって厳密には
どう違うんでしょうか?

419 :デフォルトの名無しさん:2012/05/01(火) 15:25:17.22
学生でもない初心者がDelphiはじめようとすると最低いくらくらいお金かかるの?

435 :デフォルトの名無しさん:2012/05/02(水) 10:07:40.50
どちらも最終的にはウィンドウメッセージを介すので
どちらかを使うべきということはないです。文脈に合った方で。
ただMemo1.Lines.ClearよりはMemo1.Clearの方がいいです。

481 :デフォルトの名無しさん:2012/05/07(月) 07:27:14.35
>自分で実装すればいいだけ
すべてのコードが自分のコードならな。共同作業にそんなの持ち込まないでくれよな。
俺がお前の同僚なら、そんな危険なコードを持ち込むな。自慰行為は自分の家でやれ。っていうよ。


502 :デフォルトの名無しさん:2012/05/07(月) 14:33:38.39
ガベージコレクションってそんなに簡単にできるものなん?
そんなに簡単なら、なんで標準装備してくれないの?

507 :デフォルトの名無しさん:2012/05/07(月) 15:59:19.01
>>502
簡単なものなら、多少のDelphi経験があれば作れるよ。

メモリーマネージャ(MM)との間にアダプターを噛ませて
メモリー確保と解放を記憶しておき、終了時に解放されていなければ解放するだけなら。

でも、メモリを使うたびに記憶するからレスポンスは遅くなるし終了時にしか解放されない。
それに、OSがWindowsならプロセス終了時に解放してくれるから有り難みは少ない。

PascalやC/C++みたいにスピード重視だと「標準装備」ちょっとって感じかな。

513 :デフォルトの名無しさん:2012/05/07(月) 21:14:33.19
>動作的には検出ついでに解放しているに過ぎないし
検出して解放するのをGCというのだが、コイツはバカ?


526 :デフォルトの名無しさん:2012/05/08(火) 10:30:12.03
>>513
>>507は終了時に「未だに使われたまま」のメモリを解放するわけでしょ?
使われていないメモリを検出して解放するのとは全然違うじゃん

533 :デフォルトの名無しさん:2012/05/08(火) 12:16:16.74
>>526
GCとは、”不要”になった領域を自動的に解放する機能。

554 :デフォルトの名無しさん:2012/05/10(木) 13:16:03.93
D7でつくったDBアプリを数台のクライアントに入れてるんですが
アップデートするたびにいちいち全部に入れて回るの面倒なので
簡単に配布する方法ってないですか
更新するのはEXEファイル1つだけです
ネットワークの構成は2008サーバーとクライアントにwin7が5台です

582 :デフォルトの名無しさん:2012/05/12(土) 21:30:43.68
Delphi7を使用してます。
プロジェクト内にあるフォーム&ソースをコピーして新規フォームを
作りたいのですが、スマートに行う方法はないでしょうか。

今は、フォームAからフォームA'を作成する際
新規フォーム作成,A'に名称変更→フォームAのコンポーネントをA'にコピペ→
フォームAのPASをA'にコピペして名称置換 とやっているのですが、
もっとまともなやり方があるような・・・

585 :デフォルトの名無しさん:2012/05/12(土) 23:15:00.39
>>582
コピーであって継承ではない、というのは意味わかってやってんだよね?

フォームAの.pasと.dfmを別ファイルにコピーして新しいユニット名に合わせたファイル名にして、
この状態でエディタで.pasと.dfmを開いて、.pasの先頭のユニット名をファイル名に変更、
.pasにあるフォームクラス(TForm1とか)を新しいものに一括置換、その下にあるフォームの
変数(Form1)をフォームクラス名に合わせたものに変更、.dfmの先頭の
object フォーム変数名: フォームクラス名の部分を上に合わせて変更、これでエディタを終了、
IDEでプロジェクトにこのユニットを追加、という手順でいいはず。

586 :デフォルトの名無しさん:2012/05/12(土) 23:57:09.06
>>585
アホだな~w、ファイル名とUnit名だけ変えればいいだよ。
カプセル化とかの概念を理解出来ている?

588 :デフォルトの名無しさん:2012/05/13(日) 00:20:03.83
>>586
まあそれもそうだな。ユニット名以外はあとでIDEで変えれば問題ないか。
カプセル化の概念とはあんまり関係ないけど。最近知った言葉だから使ってみたかったの?

594 :デフォルトの名無しさん:2012/05/13(日) 20:55:44.11
それが普通じゃないのかw

599 :デフォルトの名無しさん:2012/05/14(月) 00:15:54.35
>>594-598
惨めにアホの上塗りか~w、お前は、本当に可哀想だなw。

結果が「ファイル名とUnit名だけ変えればいい」で
その為の手段が「名前付けて保存」なんだよ。

結果と手段も分からんバカとはw

609 :デフォルトの名無しさん:2012/05/14(月) 18:47:23.61
自分以外の全員が敵に見えるのは病気だから気をつけなさいよ
すくなくとも>>585以降は一人じゃない

624 :デフォルトの名無しさん:2012/05/16(水) 22:34:43.23
質問です。
DelphiのUnitはカプセル化だと主張している人がいたのですが、
これまでそういう主張をした本や(ピヨピヨ)を見たことがありません。
公式のヘルプでUnitについて調べてもそのような記述はありませんでした。
具体的にどういうことなのか分かる方はいないでしょうか?
もしくはそれを説明した本やサイトを紹介して頂けるとありがたいです。

636 :デフォルトの名無しさん:2012/05/20(日) 19:01:31.20
質問です。
TBottun1を押した時に、TMemoに直前に打ち込まれた1文字(1byteか2byte)を削除するにはどうしたらよいですか?
また、複数回押した時には複数文字削除したいのですが、よろしくお願い致します。

639 :デフォルトの名無しさん:2012/05/20(日) 19:34:44.22
>>636

procedure TForm1.Button1Click(Sender: TObject);
var
WorkStr: string;
WorkInt: Smallint;
begin
WorkStr := Memo1.Lines[Memo1.Lines.Count - 1];
WorkInt := Length(Memo1.Lines[Memo1.Lines.Count - 1]);
Delete(WorkStr, WorkInt, 1);
Memo1.Lines[Memo1.Lines.Count - 1] := WorkStr;
end;

642 :デフォルトの名無しさん:2012/05/21(月) 01:00:48.67
>>639
質問者が納得してるんならいいんだけど、このコード厳密には一番下の行の右端を削ってるだけで
最後に書かれた文字とは限らないよね。

644 :デフォルトの名無しさん:2012/05/21(月) 02:20:56.88
>>642

先ほどそれに気づいて今悪戦苦闘していますが…
無理です。どうしたらいいのでしょうか。

667 :デフォルトの名無しさん:2012/05/23(水) 13:14:45.96
というかエディタメインのプログラム作るならみんなのために作ってよ。今、ホンダさんソースをさらりと
みたけど、メインのHEditor.pasは1万2千行くらいで、色々、文字の操作や折り返しやキャレット配置・レイアウト
などでごみごみしてやってるけど、DirectWrite使えば、それら全部ごっそり削除して
3千行くらいに圧縮できると思うから。まぁ、他のコントロール同様、基本的なキーボード、マウス、スクロールメッセージの
処理とかは他と一緒でやらなきゃいけんけど、
後、Highlighterをプラグインできるようにするならそこらへも必要だけど。
DirectWriteは最強だよ。XPで使えんけど・・

671 :デフォルトの名無しさん:2012/05/23(水) 16:18:47.78
>>667
3桁ぐらいもらえればいつでも作るよ

672 :デフォルトの名無しさん:2012/05/23(水) 16:36:49.51
>>671
頼む、お願いします。

673 :デフォルトの名無しさん:2012/05/23(水) 17:16:40.04
>>672
じゃあtorcoloor467あっとyahoo.co.jpまで連絡を。

727 :デフォルトの名無しさん:2012/06/03(日) 15:24:56.41
こんなこと書いてる人がいるんだけど、本当?

この検索で出てくる、「天 徳 院」とかいう人のブログ記事。
http://www.google.co.jp/search?q=Delphi+%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88+%E3%83%96%E3%83%AD%E3%82%B0

731 :デフォルトの名無しさん:2012/06/03(日) 18:33:44.37
>>727
PCharへのキャストは文字列が空ならnil、そうでなければ先頭文字のアドレス。

776 :デフォルトの名無しさん:2012/06/30(土) 23:45:17.78
delphi6、win7の環境ですが、コンポーネントが古臭く見えます。
実害はないのですが改善できないものですか?

780 :デフォルトの名無しさん:2012/07/01(日) 11:28:21.24
>>776
http://www.geocities.jp/asumaroyuumaro/program/tips/xpstyle.html
これとかも

782 :デフォルトの名無しさん:2012/07/02(月) 01:07:50.60
TComboBoxの基本的な使い方が分かりません。
実行中、Edit部分に文字列を入力すれば、特に何もしなくてもItemsに追加されるのかと
思ってましたが、違うようです。
どのようにしたら追加できるでしょうか?

784 :デフォルトの名無しさん:2012/07/02(月) 18:19:21.28
>>782
ComboBox内に入力した文字列をそのままItemsに追加したいのであれば

procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
 // Enterキーで追加する場合
 if Ord(Key)=VK_RETURN then ComboBox1.Items.Add(ComboBox1.Text);
end;

793 :776:2012/07/04(水) 23:57:30.22
>>780の方法は反映されないコンポーネントもあってちょっと残念でした
結局Delphi7で難なく解決しました

せっかくなのでいろいろなバージョンで試してみたけど、
同じソースでもバージョンを上げるごとに、作成されるファイルサイズが大きくなっていくので
困っています

800 :デフォルトの名無しさん:2012/07/05(木) 19:46:16.35
昔からメモリ(ファイルサイズ)と速度はトレードオフの関係にあるけど、
最近はメモリもディスクスペースも余り気味だから、
速度を優先してメモリやサイズが増えるケースの方がほとんどだよ。
そもそもバージョンアップしたら普通は機能が増加してサイズが増えるのは当たり前だしね。
ファイルサイズを減らすだけの最適化しかしてない新しい環境をわざわざ買う人なんていないし。

だからもしメモリやサイズが増えただけで技術力を疑う人がいたら、
その人の技術センスは10年以上前で止まってるんだろうね。そんな人はいないと思うけど。
あ、いたかw > 798

826 :デフォルトの名無しさん:2012/07/18(水) 14:21:38.77
継承したフォームで、派生元でのプロパティ値(ClientHeightとか)を取得する方法はありますか?


827 :デフォルトの名無しさん:2012/07/18(水) 19:50:24.93
はぁぁぁぁぁ?? 継承したプロパティは全部見れるだろ じゃあなんのための継承だ?
オブジェクト指向をイチから勉強し直せ

850 :デフォルトの名無しさん:2012/07/31(火) 14:32:55.99
Delphi XE starterで勉強し始めたものですが
ちょっと教えてください。

訳あってプロジェクトを保存したフォルダを
リネームしたいんですが、単にリネームする
だけじゃダメですよね。

プロジェクトの一部の設定ファイルに絶対パスが
書き込まれてるみたいですが、リネームした後、
どうすれば、新しいフォルダでDelphiの開発を継続できますか?

861 :デフォルトの名無しさん:2012/08/03(金) 18:03:32.37
D6です。
動画合成用の素材動画データを作りたく
数値データから文字を avi ファイル(1 ~10 fps)に出力するプログラムを組みたいのです
どういう手順がベストでしょうか?

作業目的の全体像は
(1)テキストの計測文字データを時間軸で動画にして
 ~.txt(例)
 09:59:58 計測値1
 09:59:59 計測値2
 10:00:00 計測値3
 10:00:01 計測値4
  ↓出力
 ~.avi
 ┌────────┐
 │09:59:59 計測値2
 └────────┘
(2)同時間実写ビデオ映像 と 時間+数値などの(1)を合成する。← これはフリーの動画合成を探します。


873 :デフォルトの名無しさん:2012/08/24(金) 22:07:45.05
D4でのフォームの継承について教えてください。

あるフォーム(このフォーム自体も多重継承しています)を継承して
新しくフォームを作ろうとしているのですが、
この継承元フォームのコンポーネントを継承先フォーム設計時に
表示するにはどうすれば良いのでしょう。

実行時はコンポが表示されますが、設計時には表示されないので
レイアウトが決めにくく悩んでいます。

<やってみたこと>
継承元のdfmがあるので、それを流用すれば何とかなるのではと
思ってdfmの先頭行を
inherited oldForm:ToldForm → inherited newForm:TnewForm
のように書き換えて新規フォームのdfmと入れ替えてみたのですが
フォーム読み込み中のエラー(中略)読み込み違反がおきました 
とメッセージが出て上手くいきませんでした。




http://toro.2ch.net/test/read.cgi/tech/1325028195/l50/../人気ブログランキングへ