トップページ⇒tech
983コメント337KB

Delphi初心者のための寺子屋

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2005/11/23(水) 23:31:08
Delphi初心者が問題をコツコツと解きながらレベルアップするためのスレです。
0153デフォルトの名無しさん2006/09/13(水) 22:39:21
>>152
お前はそのままでいいよw
0154デフォルトの名無しさん2006/09/13(水) 23:24:42
>>152 は、今後大変だな・・・
0155デフォルトの名無しさん2006/09/14(木) 00:35:54
>>150
お主、俺を超えたな!?
0156デフォルトの名無しさん2006/09/14(木) 04:04:15
カレントディレクトリが変わるたびに、あちこちにいっぱい ini をつくるけどね
0157デフォルトの名無しさん2006/09/14(木) 05:19:24
TIniFile って相対パス渡すとプロファイルフォルダに作られなかったっけ?
0158デフォルトの名無しさん2006/09/14(木) 07:56:03
なんにせよそういう不安定要素は削除しないとな
0159デフォルトの名無しさん2006/09/14(木) 10:09:08
>Delphiで無料でプログラミングしてみるお
>ttp://pc8.2ch.net/test/read.cgi/tech/1139675970/239
>ソースと実行ファイル
>http://vipperup.orz.hm/miniup/src/viup0403.zip

これって、もう手に入らないの?
0160デフォルトの名無しさん2006/09/14(木) 16:02:35
 
0161デフォルトの名無しさん2006/09/29(金) 18:21:31
授業を受けに来たのに先生がいませんよ。有給ですか?
0162デフォルトの名無しさん2006/09/29(金) 18:37:24
>>132
0163デフォルトの名無しさん2006/10/06(金) 22:25:29
別のアプリケーションにエンターキーを送りたいのですが、アプリケーション側でなにか
対策をしているらしく、keybd_event ではエンターキーだけが認識されません。
(そのアプリ上でエンターキーを直接押せば認識される)

こういった場合、どのようにすればいいのでしょうか?
01641632006/10/06(金) 22:49:19
>>163
すみません、、、スレ間違えました。別スレに行ってきます。
0165デフォルトの名無しさん2006/10/16(月) 03:02:58
Delphiで
Vbでいうところの Validate イベントを実現したい。
どうすればいい?

Procedure TXXXXX.OnValidate(Sender : TObject;Cancel : Boolean);

Cancel := True;

とすれば、フォーカスが抜けないようにする。
どうやったらできるんだろう?

TEdit を継承して、
WndProc を オーバーライドして
CM_EXIT をフックしてみた。

TEdit ではうまくいったが
TComboBox ではうまくいかなかった(DropDownList では おk で DropDown ではNg だった)。

誰か経験者か、うまいやり方知ってるひと教えてください。
0166デフォルトの名無しさん2006/10/16(月) 09:10:19
やったことないけどOnEnterでValidateすべきかどうか(どこかで)設定しといて
WM_KILLFOCUS受け取ったときに上記状態なら指定されたところにチェックしにいくとか
0167デフォルトの名無しさん2006/10/16(月) 09:25:28
OnChangeかOnExitの時に、
Cancel=Falseなら、Combobox.setfocus
0168デフォルトの名無しさん2006/10/16(月) 10:42:34
procedure TForm1.hogeExit(Sender: TObject);
begin
  チェック処理
  if エラー then
  begin
    Enabled := False;
    Application.ProcessMessages;
    Enabled := True;
    hoge.SetFocus;
  end;
end;
0169デフォルトの名無しさん2006/10/16(月) 16:57:31
TPrinterで印刷の集約指定等の設定変更できますか?
0170デフォルトの名無しさん2006/10/16(月) 17:36:53
印刷設定ダイアログ結果をWindowsに反映する方法教えて下さいでつ。
0171デフォルトの名無しさん2006/10/17(火) 01:33:57
>>166
ありがとうございます。
WM_KILLFOCUSでも同じでした。

>>167,168
ありがとうございます。

TComboBox の派生クラスに OnValidate イベントを実装したいのです。
0172デフォルトの名無しさん2006/10/19(木) 10:09:05
DoExitをオーバーライドするのはどうですか?

procedure TMyCombo.DoExit;
var
  Cancel: Boolean;
begin
  if Assigned(FOnValidate) then begin
    Cancel := False;
    FOnValidate(Self, Cancel);
    if Cancel then begin
      SetFocus;
      Exit;
    end;
  end;

  inherited;
end;
0173デフォルトの名無しさん2006/10/19(木) 10:47:13
Delphi7
SQLServer2000 使用です。

exceptにて、EDatabaseErrorが発生した場合に、
そのエラーNoを取得したいのですが、どのように書けばよいのでしょうか?
現時点では下のように書くところまでやりました。

except
on E: EDatabaseError do
begin
Result := False;
end;
end;
0174デフォルトの名無しさん2006/10/19(木) 11:09:58
>>173
いろいろ考えられるね。
・E.MessageにエラーNoが入ってるならそこから抽出する。
・E.ErrorNoみたいのがあるならそれを使う。
・SQLServer2000にGetLastDBError見たいな関数があるならそれを利用する。
0175デフォルトの名無しさん2006/10/19(木) 11:19:34
>>173
BDE使ってるならEDBEngineErrorでcatchすれば
エラーの詳細が取れるけど。
どうやって接続してるの?
01761732006/10/19(木) 11:24:15
>>174
すみません、もっと根本的な問題だったようです。
やりたいことは、レコードロックによるタイムアウトエラーを取得したいのですが、
タイムアウトはEDatabaseErrorではないようです。

タイムアウトはEDatabaseError以外のどのExxxErrorでとれるのでしょうか?
01771732006/10/19(木) 11:25:55
>>175
データモジュールにADOConnectionを貼り、ADOQueryで実行しています。
0178デフォルトの名無しさん2006/10/19(木) 11:35:44
>>176
そこまで細かいことは自分で調べちゃった方が早くね?
0179デフォルトの名無しさん2006/10/19(木) 11:46:42
>>176
on E: Exception で捕まえて、E.ClassNameを調べる
01801732006/10/19(木) 15:30:24
>>178、179
ありがとうございました。
調べたところ、EOleExceptionと出ました。

0181デフォルトの名無しさん2006/11/04(土) 19:10:27
SyncObjsの中にあるTCriticalSectionですが、
EnterとAcquire、LeaveとReleaseの違いは何ですか?
いろいろ試した限りでは同じ処理に見えるのですが・・・
0182デフォルトの名無しさん2006/11/04(土) 22:59:27
>>181
ヘルプ見た?
その上で動作が同じだと判断するなら同じなんです
深く考えすぎないほうが良いかと
0183デフォルトの名無しさん2006/11/06(月) 22:23:11
>>182
TCriticalSectionのページに行こうとしても、
リンクがみつかりません って出るんですよ
無料のDelphi6だからかな? まぁ気にしないことにします
0184デフォルトの名無しさん2006/11/07(火) 11:13:41
QuickReport印刷内容をビットマップ(Jpegでもおk)に落とす方法教えて下さい。
0185デフォルトの名無しさん2006/11/07(火) 18:24:07
そういうプリンタドライバがあるよ
0186デフォルトの名無しさん2006/11/23(木) 13:53:16
リレー動作のプログラムなんですが64個のリレーを
チェックボックスに分けて選んでリレーを
ON/OFFしたいんですが

procedure TForm1.Button1Click(Sender: TObject);
begin
Relay[Time]:=True;
Time:=Time+1;

RelayChange;
end;

これからどう増やせばいいでしょうか?
どうかよろしくお願いいたします。
0187デフォルトの名無しさん2006/11/23(木) 20:25:23
>>186
日本語でおk
0188デフォルトの名無しさん2006/11/25(土) 17:27:49
IsDelphiで、このソフトが、Delphi製とでるのですが、
http://www.highdots.com/css-tab-designer/
オフィスっぽいGUIは、どんなコンポーネントを使っているんでしょうか?
01891882006/11/25(土) 17:28:27
すみません。超初心者スレと間違えました(汗
0190デフォルトの名無しさん2006/12/25(月) 17:35:38
コンストラクタ内で例外を発生させるのってまずい?

自作クラスのコンストラクタの引数で作業フォルダのパスを指定して
フォルダが存在しなければ作成ってのをやろうと思うんだけど、
try〜finallyの手前でCreateすると例外が発生したときに例外を捕まえられないし
try内の先頭でCreateするとコンパイルで「初期化されていない可能性があります」と警告が出る。

コンストラクタは内部変数の初期化だけにしておいて
作業フォルダのパス指定は別メソッドにしておいたほうがいいのだろうか・・・
0191デフォルトの名無しさん2006/12/25(月) 19:14:46
>>190

try
 Create
 try
  hoge
 finally
  hoge
 end;
finally
 hoge
end;
0192デフォルトの名無しさん2006/12/29(金) 14:20:58
>190
Delphiにおいてはコンストラクタ内で発生して捕捉されない例外は
コンストラクタの失敗を意味する。
0193デフォルトの名無しさん2007/01/06(土) 19:54:05
hosyu
0194デフォルトの名無しさん2007/01/27(土) 03:40:04
2chブラウザのJaneみたいな動かせるメニューバーってどうやって作ったらよいのでしょうか。
0195デフォルトの名無しさん2007/01/27(土) 03:58:26
>>194
TCoolBar のバンドの .Control に TToolBar 設定して、
TToolBar.Menu に TMainMenu 設定。
0196デフォルトの名無しさん2007/01/31(水) 17:58:13
Bitmap画像をレイアウト部分はコーディングでなくてポトペタで作成したいのですが、
良い方法はありますか?

QuickReportで良いのですがQuickReportは汎用画像出力が出来ないので...
01971962007/01/31(水) 19:05:07
そういう機能をレポーティング コンポーネントって言うらしいですね。
でもWin32用が無いお。
0198デフォルトの名無しさん2007/01/31(水) 23:11:14
>196
日本語でおk
0199デフォルトの名無しさん2007/01/31(水) 23:15:30
グラフィックソフトとか、ワープロでつくるようなをDelphiでやりたいんじゃないの?
で、最終的に、印刷じゃなくて、画像にしたいと。
0200デフォルトの名無しさん2007/03/02(金) 07:58:21
.netを普及させる方法を思いついた!
win32に、WCaption: WideString みたいなメンバを追加して
さらにくそでかく遅いバイナリしか生成できなくする。
これなら.netでいいや、ってなりwin32死滅。
0201デフォルトの名無しさん2007/03/02(金) 16:54:35
日本語でおk
0202入門きぼん2007/03/18(日) 23:52:34
 すみません。教えて下さい。
DelphiTurboExplorerを、サイトからDLして使用したいと考えているのですが、
ユーザー登録をすませても、DLページに行けずに困っています。

それと、フリーのデーターベースであるFirebirdと
繋げられるのでしょうか?
やはり製品版でないと無理なのでしょうか?

自分は、単純に初心者向けプログラムである。
CDやDVDの在庫管理アプリを作りたいだけなんですが、
自分の労力以外は、極力フリーで作りたいと思っています。
可能でしょうか?

宜しくお願いします。
0203デフォルトの名無しさん2007/03/19(月) 00:54:43
http://www.turboexplorer.com/downloads
0204デフォルトの名無しさん2007/03/19(月) 01:06:50
>>203
The page cannot be found
0205デフォルトの名無しさん2007/03/19(月) 06:01:06
http://www.turboexplorer.com/mirror
0206デフォルトの名無しさん2007/03/19(月) 11:33:22
>>204,205

HTTP Error 404 - File or directory not found.
0207デフォルトの名無しさん2007/03/19(月) 20:46:50

ttp://torrent.borland.com/turbodelphi_jp.exe
02082022007/03/19(月) 21:55:11
>>207

すみません。
やはりHTTP Error 404 - File or directory not found.になります。

みなさん、ありがとうございました。
残念で、悲しいですが、すみませんがDelphiあきらめます。
0209デフォルトの名無しさん2007/03/19(月) 22:07:23
繋がるけどなぁ
http://www.codegear.com/tabid/144/Default.aspx
0210デフォルトの名無しさん2007/03/20(火) 00:22:27
>203 >205 >209は普通に繋がるね。
0211デフォルトの名無しさん2007/03/21(水) 07:19:26
普通につながるけど?
0212デフォルトの名無しさん2007/03/21(水) 23:56:26
条件文がたくさんあって、それらを同じ処理するときはどうしたらいいですか?
ifのあとに条件をズラーッとandでくっつけるしかないのでしょうか?
例えばxが1 3 5 6 7 10・・100と不規則なときに、一定の動作をさせたいです。
0213デフォルトの名無しさん2007/03/22(木) 00:14:26
case x of
1,3,5,6,7,10,100: 〜〜';
else
〜〜;
end;
0214デフォルトの名無しさん2007/03/22(木) 07:13:44
if x in [1,3,5,6,7,10..100] then XX;
ってのもあるよ
0215デフォルトの名無しさん2007/03/22(木) 14:14:54

二次元配列があり地図のようになってるとします。

その時に●から一番近い5(複数ある)への経路を求める問題。
マスは30*30
●は(16、16)
0は通れる、1は通れない、4はいやな人
で、5の周りに4がいた場合それは目的の5にはなりません。

000000000000000000000000000000
000000000000000000000000000000
000000111100000000050000000000
000000001100000000000000000000
000000000100541110000000000000
000000000000111111000000000000
000000000000000000000000000000
001100000000000000000000000000
00000000000000●000000000000000
000100000000000000000000000000
000100000000000111111110000000
000000000000000000000000000000
000000500000000000050000000000
000000000000000000000000000000
000000000000000000000000000000
0216デフォルトの名無しさん2007/03/23(金) 12:23:28
>>215
2chのレス数じゃ無理w
試しに幅優先探索して書こうとしたら、600行超えたからやめたw
0217デフォルトの名無しさん2007/03/23(金) 17:39:42
>>215
たけしのコマ大かと思った・・・。

斜め移動はあり?
地形は固定?
障害物1等のオブジェクトは、定数?

つっこむ所が多々ありそうだなぁ。
0218デフォルトの名無しさん2007/03/24(土) 19:35:42
>>215
普通にA*でいいんじゃないの?

>>216
600行はありえん。
0219デフォルトの名無しさん2007/03/25(日) 00:12:27
>>217
俺は斜め移動無し、固定でMAPはファイルからそのまんま読み込んだ状態としたよ
んで、今の箇所から上下左右で自分の関数を呼び出して、再起関数にして探してった。
でもこれじゃ全数検索になってしまう。
こういうアルゴリズム習ったけどやり方有ってるか不明

>>218
A*って何?
0220デフォルトの名無しさん2007/03/25(日) 04:42:33
工場勤務でブルーワーカなのだが、明日から夜勤なので睡眠時間調整の
暇つぶしに >>215 をやってみた。5時間かかったお。

再帰呼び出しとかは使えないし分からんので、長めになっちゃった。
キュー(FIFO)をやってみようと思って、ポインタとか使ってみたけど訳分からん。

ttp://strawberry.web-sv.com/cgi/up/iuy/nm4383.zip.html
(フォームにボタン1個要)

だって、MC工作機械マクロ言語に再帰呼び出しとかポインタなんて無いよ orz
あ、でも、なんちゃってポインタは出来るかな? #(#10) な感じで。
0221デフォルトの名無しさん2007/03/25(日) 07:25:37
A Starでやれ
0222デフォルトの名無しさん2007/03/27(火) 02:25:05
昔Delphi6触ったときにはたしか標準でフォルダ選択ダイアログってなかったような気がするんですが

TurboExplorerにもなかったりします?
0223デフォルトの名無しさん2007/03/27(火) 06:53:37
SelectDirectoryなら昔からあったと思うが?
名前がセレクトフォルダじゃないからダメなの?
0224デフォルトの名無しさん2007/03/28(水) 09:12:04
Delphi6のSelectDirectoryはダイアログの表示位置がずれるバグがあるんだよな
0225デフォルトの名無しさん2007/03/28(水) 09:45:16
バグじゃないよ、たんに場所指定してないだけ。ML の過去ログやら、コンポ
で解決したのがわんさかあったけど、いまは知らない
0226デフォルトの名無しさん2007/03/28(水) 09:54:17
まあ、フォルダのD&Dに対応しとけば、みんなソレ使うから
SelectDirectoryはとりあえずあればいいやみたいなもんだし
0227デフォルトの名無しさん2007/03/28(水) 21:40:15
uses
FileCtrl;

procedure TForm1.Button1Click(Sender: TObject);
var
dir: string;
begin
MoveWindow(Application.Handle , Left ,Top ,0 ,0 ,False);
SelectDirectory('表題', '', dir);
Label1.Caption := dir;
end;
02282152007/03/29(木) 09:06:36
>>220
遅くなったがサンクス!
ただ、速度おっそいなぁw
0229デフォルトの名無しさん2007/03/31(土) 10:40:58
保守
0230デフォルトの名無しさん2007/04/07(土) 19:52:37
現在BDEで作成されているものをFirebirdに簡単に変更できるものでしょうか
Firebirdはまだ触ったこともないし、BDEもそのとき玉々作ってみただけの
データベース素人ですが。
0231デフォルトの名無しさん2007/04/08(日) 13:26:52
>>230
どういう作りになっているのかにも寄るけど
簡単には無理じゃね。
0232デフォルトの名無しさん2007/04/08(日) 20:33:05
>>231
ありがとうございますm(_ _)m
やっぱ作り直しですか。
0233デフォルトの名無しさん2007/04/08(日) 20:57:31
いや、普通にコンポーネント貼り付けて作ってるなら
InterBase Data Access に変えるだけで問題ないだろし
そうでないなら、それなりに大変だろうってだけさ
0234デフォルトの名無しさん2007/04/08(日) 21:59:34
やってみまふ。
0235デフォルトの名無しさん2007/04/10(火) 13:29:14
ヒント: Firebird ODBCドライバ
0236デフォルトの名無しさん2007/04/10(火) 20:04:01
今しばらくは生きていけそうです
0237疑問2007/04/16(月) 02:52:02
なんでIntegerとかが予約語になっていないのでしょうか

var
Integer: string;
begin
Integer := 'Double';
Writeln(Integer);
end.
0238デフォルトの名無しさん2007/04/16(月) 08:03:01
Integerは予約語ではないけど定義済の型名だから
変数として使うと、
使った後整数型の定義とか、型変換とかで困ってしまうよ

他の型名とか自分で定義する型名も同じ事情があるよ。
0239デフォルトの名無しさん2007/04/16(月) 16:19:27
回答になってねぇw
0240デフォルトの名無しさん2007/04/16(月) 23:21:03
>>237
なんでだろ。
Windows.hとかのCからコンバートしたときのための兼ね合い?
似たようなので、引数でも例外あったような
0241名無し@沢村2007/04/17(火) 00:10:20
おみゃーらー♪
Delphiはつまらんぞー!
おみゃーたー、『肥えた語』つー言語があるの知ってる?
おりは知ってるよ。
おりがつくった言語よ。これからh『肥えた語』の時代よ。
URLはここよ↓
http://www.geocities.jp/hontamagod/
感想を頼むなー♪
0242デフォルトの名無しさん2007/04/23(月) 22:52:08
JEDI がDelphi2005にインストールできません。
以前入れたときは確か、すんなり入ったのですが。
..\JEDI\jvcl\run\JvJVCLUtils.pas(7359) エラー: E2010 'Char' と 'string' には互換性がありません
..\JEDI\jvcl\run\JvJVCLAboutForm.pas(115) 致命的エラー: F2063 '..\..\run\JvJVCLUtils.pas' ユニットはコンパイルできませんでした
ほかにも出てきます。
pas は秀丸では欧文フォントで文字化けなしに読めたんですが「TM」とかの特殊文字が
○株みたいに扱われているんでしょうか、Shift-Jis ではChar扱いしてもらえないようです。

OSは Vista
D5 にはインストールされています。
m(_ _)m
0243デフォルトの名無しさん2007/04/23(月) 23:02:28
せめてバージョンくらい書こうよ・・・
0244デフォルトの名無しさん2007/04/23(月) 23:05:38
すんません、JVCL320CompleteJCL197-Build2172.zip でした。
0245デフォルトの名無しさん2007/04/23(月) 23:07:22
なんでそんなに古いのを入れようとしてるの?
0246デフォルトの名無しさん2007/04/23(月) 23:17:26

そんなに古いのー?
0247デフォルトの名無しさん2007/04/23(月) 23:18:12
すみまそん。
しばらくD5で使ってたのでそれをそのままフォルダからインストールしようとしてました。
0248デフォルトの名無しさん2007/04/23(月) 23:19:48
それだとD5でコンパイルされたファイルと混じっておかしくなるんじゃない?
0249デフォルトの名無しさん2007/04/23(月) 23:28:30
やっぱそうですか。
はき出す場所が違うからOKだと思っていたのですが、
とりあえず2005には最新版を入れてみます。
0250デフォルトの名無しさん2007/04/24(火) 20:28:58
JVCL331CompleteJCL199-Build2551.zip
入れてみましたが状況は変わりませんでした(x.x)
0251デフォルトの名無しさん2007/04/24(火) 21:14:09
前にインストールしたときのゴミが残ってるんじゃないかね。
とりあえずJcl*.bplとJv*.bplを削除してみたら?
0252デフォルトの名無しさん2007/04/24(火) 21:28:50
ってことは皆さん問題なく入れていたということなんでしょうね。
結局使わない部分っぽかったので修正して無理矢理入れてしまいました。

JvgUtils.pas
function Transliterate(const Str: string; RusToLat: Boolean): string;
コメントアウトで Result := Str;

JvDBGrid.pas
FCharList :=
['A'..'Z', 'a'..'z', ' ', '-', '+', '0'..'9', '.', ',', Backspace{,
'e', 'e', 'e', 'e', 'o', 'o', 'u', 'u', 'a', 'a', 'a', 'i', 'i', 'c'}];
下半分をコメントアウト

JvJVCLUtils.pas
// Text: Char;
Text: string[2];
Char を string に変更

JvStrToHtml.pas
特殊文字 27 個コメントアウト

ありがとうございましたm(_ _)m
■ このスレッドは過去ログ倉庫に格納されています