1 :
デフォルトの名無しさん :
2011/12/28(水) 08:23:15.61
完走?落ちた?
984で落ちたような
もう人いなんだからスレ立てる必要ねぇよ
時代はLazarus
delphi7なんだけど、CombBoxって文字の右寄せって出来ない? ググったらEditコントロールは出来るみたいだけど。
Delphiじゃなくて WindowsのCOMBOBOXには右寄せというのは無いからね オーナードローで描画すれば右寄せ表示も出来るけど、文字入力もしたいんだよね? Editコントロールで入力して ListBoxを動的に表示させるとか
CreateWndした後だとprotectedなメンバのEditHandleにエディット部分のhwndが入っているようなので、 こいつを使ってStyleを書き換えればできそう。
とりあえずコンポーネントを作らないやりかた。まずフォームのinterface部の先頭に type TComboBox = class(StdCtrls.TComboBox) private FAlignment: TAlignment; procedure SetAlignment(const Value: TAlignment); public constructor Create(AOwner: TComponent); override; procedure CreateWnd; override; property Alignment: TAlignment read FAlignment write SetAlignment; end; とする。
んでもって実装はこんな感じ。 constructor TComboBox.Create(AOwner: TComponent); begin inherited; FAlignment := taLeftJustify; end; procedure TComboBox.CreateWnd; const Alignments: array[TAlignment] of DWord = (ES_LEFT, ES_RIGHT, ES_CENTER); begin inherited; SetWindowLong(EditHandle,GWL_STYLE, (GetWindowLong(EditHandle,GWL_STYLE) and $FFFFFFFC) or Alignments[FAlignment]); end; procedure TComboBox.SetAlignment(const Value: TAlignment); begin if FAlignment <> Value then begin FAlignment := Value; RecreateWnd; end; end;
でフォームに3つTComboBoxを置いて procedure TForm1.FormShow(Sender: TObject); begin ComboBox1.Alignment := taLeftJustify; ComboBox2.Alignment := taRightJustify; ComboBox3.Alignment := taCenter; end; でもこれだと設計時にAlignmentを指定できないので、それがいやならTComboBoxから派生したコンポーネントを 作ってインストールする。注意事項としてはWindows NT4では複数行ではないEDITにES_RIGHT/ES_CENTERを 指定できないためこれだけではうまくいかないということと、ひょっとしたらStyleにES_AUTOHSCROLLも入れたほうが いいかも、ということくらいかな。
13 :
7 :2012/01/06(金) 08:56:08.00
うおおおおおおお 皆さん、ありがとうございます。 10さん、まだ試してないですが使わせていただきます。 本当にありがとうございました。
14 :
デフォルトの名無しさん :2012/01/14(土) 18:22:32.42
DELPHIの既存システムに無線ハンディ売上システムを アドオンしようとしてるんだけど、 ハンディサーバーは既存でVB.NETでいい感じのシステムがあるんだよね 俺はどの戦略をとるべきかな ちなみにDELPHI7だけど、俺の職歴はDEL3.1CSで止まってる 1.DELPHIでハンディサーバーシステムを新規構築 (マルチスレッドなTCPサーバーを作るの面倒) 2.VB.NETサーバー側にDELPHI後方処理を移植 (既存システムの後方処理を使い回しできない) 3.VB.NETサーバーを利用し、DELPHI後方処理をDLLパックしてコール (変数の受け渡し等でシリアライズとか問題発生しないかな) 燃料だとでも思ってなんか意見ください
手間が少ないのは3だろ
16 :
デフォルトの名無しさん :2012/01/16(月) 09:19:10.54
>>15 最近の異言語間のマーシャリングとか得意じゃないんだけど
VB.NETとDEL7ってあんまり気を使わないで済むのかな
COMで呼べばいいじゃん
俺だったら全部Delphiでやるけどね。 既存設計の良い所真似してより便利にしてやれば喜んでくれるだろう。 下手に既存との両立とかしたらアレは向こうの問題だとか 問題の切り分けで面倒な事になる。 でも、久しぶりのDelphiだと慣れてないって事もあるだろうからお勧めは出来ないな。 自作のコンポ大量にある場合向けだな。 で、VB.NETとの共存なら、コールバックとかややこしい事しなくても、DelphiからVB.NETのサーバーにアクセスすりゃいいんじゃないの? プロトコルが判ってるんならだけどさ。 何かデータ加工してもらわないといけないのなら、VB.NET側で加工してファイル渡しで作ればいいじゃない。
Delphi1〜4まで持ってたんだけど 今再開するとしたら有利なアップグレードパスはありますか? フリー版ってもうないんですよね
>>15 ,17,18
ご意見ありがとうございます
TThreadやSocketの経験はあるのですが、
今日実際に通信サーバーを作ろうとしたらApplication.ExeName
すらぐぐらないと思い出せない始末
この分では2週間ぐらいかかってしまうので
VB通信サーバー −> FireBirdトランかきこ
−> Delphi監視サーバー −> 伝票自動発行
の流れで行こうと思います。(監視サーバーは定期監視か可能ならSocket通知)
>>19 とりあえずStarter SKU(Delphi XE2 Starter)でいいのでは?これで足りないようなら今年の9月頃にXE3が出ると思うんで、
そのときにジャンプアップキャンペーンがあればこれでPro以上のSKUにするのがオヌヌメ。
mainmenuを使って メニューを作っています。 コンパイルすると メニューの文字の左側に(アルファベット1文字)が追加されています。 例)ファイル(X) 開く(Y) 閉じる(Z) カッコとアルファベットを消す方法を教えて下さい。
つAutoHotkeys
24 :
22 :2012/01/17(火) 22:58:21.85
maManualにしたらできました。 ありがとうございます。
delphi3の頃から見かける質問だがいまだにこれが出るって事は新規がまだいるんだなぁ
ホットキーがついてないのって出来損ないのクロスプラットフォームアプリでしか見かけないな
ツールボタンしか用意してないものとかもあるもんな
Delphi6使ってるんですが、Indy9はHTTP1.1に対応していますか? ヘルプには IdHTTP1->ProtocolVersion のデフォルトは pv1_1 と書いてありますけど。 Transfer-Encoding: chunked だと途中でファイルが途切れることがあるみたいなのですが・・・
それはDelphiじゃなくてIndy側の問題。どうせオープンソースだから自分で直せ
>>28 chunkedなデータって元々サイズ指定がなかったりするから
途切れてるんじゃなくてそれで正常って可能性もあるんじゃね?
RFC嫁
32 :
28 :2012/01/20(金) 06:55:44.94
ネットモニタで見てみたら、ちゃんとデータは鯖から送信されていました。
なので、Indyがchunkedに対応していない、あるいはバグのようです。
>>30 ちなみに、chunkedはブロックごとにサイズ指定して送信してくる方式ですよ。
いろいろ試行錯誤してみた結果、
ProtocolVersion:=pv1_0 にするとchunked形式ではなく普通の形式で送信される
ので、とりあえずはそれで回避しましたが、なんか鯖の反応が遅くなるみたいです。
Indyのソースは見てみましたが、膨大で挫折しました。
どこを見ればいいんでしょうか。
33 :
デフォルトの名無しさん :2012/01/20(金) 16:39:05.59
Delphi初心者です
34 :
デフォルトの名無しさん :2012/01/20(金) 16:41:04.77
Delphi初心者です マルチクライアントなTCPサーバーを作ろうと思うのですが、 TTcpServerというのを使えばいいんでしょうか? バグとか機能的に使えんとかいうご意見があれば教えてくさい あと、それよりこっちがいいよっていうコンポーネントなんか あったら教えてくさい
Ararat Synapse にマルチクライアントなTCPサーバーのサンプルがついてるよ
36 :
デフォルトの名無しさん :2012/01/20(金) 17:25:43.67
>>35 34です。ありがとうございます。調べてみます。
TTcpServerは使い物にならないってことですかね?
特に理由がなければC#とかの方がいいよ
38 :
デフォルトの名無しさん :2012/01/20(金) 18:51:21.57
ほんとだったら.Net Frameworkでやりたいんですが、今回はDelphi言語指定です
まぁ、TTcpServerぐらいなら元のWinSockラップしてるだけだし。 バグとか大丈夫なんじゃ。ソースも簡単に追える程度でしょ。
40 :
デフォルトの名無しさん :2012/01/20(金) 19:08:38.45
>>39 34です。とにかく情報が少なすぎて不安ですが、チャレンジしてみます
ありがとうございました
42 :
デフォルトの名無しさん :2012/01/20(金) 19:17:51.82
はい、そこは見てます。これぐらいしかないんですw
>>32 サイズって全体のサイズな
細切れ毎のサイズだけでは全体がいくつか分かんないでしょ
>>42 古いものだけど、TServerSocketの方が情報はあるかもしれない
簡単に言えばTTcpServerの旧世代版みたいなもの
標準ではインストールされてなかったと思うけど、一応最新のDelphiにも入ってたはず
導入方法はググれ
>>32 Content-LengthとTransfer-Encoding: chunked が同時に指定されている場合に
鯖によって問題出る事があって昔Janeでバグ修正してるけど関係あるかな?
TIdCustomHTTP.ReadResultの判定順序変えてるけど
.NETはWinForm,WPFなどのクライアントよりASP.NETなどのサーバー分野の方が強いんだけど
いや、別に止めないけど
Delphi+Indyに比べれば何でもましだろ
だな
というかArarat Synapse のサンプルはマルチスレッドだから実用に耐えるよ。 Indyは確かに糞だよ。
52 :
デフォルトの名無しさん :2012/01/24(火) 09:04:17.21
パッケージ・インストールの質問です。 TMS SoftwareのTAdvListViewをインストールしようとしていますが、 次のようなエラーが出ます。 パッケージ C:\Users\Public\Documents\RAD Studio\9.0\Bpl\alvPkgDXE2.bplは 異なる Delphi または CBuilder で作成されたためインストールできません。 コンパイルはエラー無く終了します。上記のalvPkgDXE2.bplは、 正常にコンパイルした結果でファイルの更新日付は新しくなっています。 TMS Softwareのサポートにもメールで問い合わせましたが、解決の 糸口がつかめません。bplのファイルを生成するときに、バージョンを 指定するオプションがあるのかと探していますが、 手詰まりになってきました。 '異なるDelphiまたはCBuilderで作成'というキーワードから、点検のポイント がわかればご教授ください。
私教授じゃないから教示はできても教授はできないわ
この際Lazarusに移行しちゃえば?
_alvPkgDXE2.bpl にでもリネームしてみる
56 :
デフォルトの名無しさん :2012/01/24(火) 23:38:49.03
52です。 この件クローズです。 直接の原因はTAdvStringGridがインストールされているためでした。 そもそも、TAdvListViewと共存できるのかTMS Softwareに確認しています。 お騒がせしました。
Turbo Delphiのテキスト選択に関する質問です。 普段はテキスト選択のあとにキャレットを移動させると テキスト選択が解除されますが 使っているうちに何か変なキー操作をしてしまったのか テキスト選択モードが変わってしまったようで キャレットを移動してもテキスト選択が解除されません。 これはどうやったら元に戻る(切り替えられる)のでしょうか。 ヘルプを見たのですが分かりませんでした。
その質問をするためにはどうしてもトリップを付ける必要があったのでしょうか?
うぜえよ 答えられないならレスすんな、カス
キーボードにコーヒーこぼしてShiftキーが押しっばなし状態になったことはあった
今のデルファイで232c扱うコンポーネントある?
CommPortとかTurboPower Asyncあたり
ドラッグアンドドロップで、画像を配置して表示させるフォーム をつくるには どうすればいいでしょうか。
まずドラッグアンドドロップの処理をフォームに実装します
>>63 「フォームをつくる」の意味が曖昧だけど
usesにShellAPI
WM_DROPFILES
DragQueryPoint
を検索してみたらよろしいかと
ファイルをとは一言も言ってません
はい、次の方
Del2010です。コンパイルオプションの範囲チェックを有効にしたプロジェクトを読み込むと、 var a : UInt64; begin a := $f000f000; a := a shl 32; showmessage(inttohex(a,16)); こういうコードの場合、shlの行でaの上位4バイトに対して負の数だったら、@BoundErrとなるように範囲チェック処理が働きます。 UInt64の場合これはおかしいように思いますが、なぜなんでしょう。実は暗黙的にUInt64もInt64として扱われるんでしょうか。
>>68 この際だから Lazarus に移行しちゃえば?
>>68 IntToHexの引数の型を見たことはある?
こんにちは。 Delphi7でmdbをTADOQueryで読み込んでDBGridに表示しています。 そのADOQueryにはCalcFieldがあり、OnCalcFieldsイベントで データをセットしています。 で、このクエリをDBGridに表示し終わった時に、そのCalcFieldの 値の全レコードの合計をTEditか何かに表示させたいと思って、 OnCalcFieldsイベントプロシジャの中で、 Ruikei := Ruikei + CalcFieldの値; みたいに累計を求める式を書いてるのですが、 OnCalcFieldsイベントはDBGridに表示されているレコードしか 呼び出されないようで、全レコードの合計になってくれません。 CalcFieldの値の全レコード合計を出すにはどうすればよいでしょうか?
>>71 逆に mdb にクエリー投げたくない理由教えて。
なんでわざわざDBGrid 解して計算したいの?
>>72 DBGridには表示してるだけです。
TADOQueryでmdbにSQLを投げてます。
>>72 mdb - TADOConnection - TADOQuery - TDataSource - TDBGrid
75 :
68 :2012/02/02(木) 13:24:05.22
>> 70 はい、あります。Integerですよね。IntToHex自体はaの中身を表示する処理ですが、 それはあくまで、その時点でaにセットされている内容を表示する処理ですよね。 したがってaの中身が$8000000000000000であればそれが表示されるでしょう。 私が思うのは、その前のshlの段階。 shlは符号に無関係な"論理左シフト"である以上、1 shl 63は$8000000000000000と セットされるべきで、ここに符号ありチェックが入るのは、おかしいのではないか? という趣旨です。 参考までに、下記のようなコードでもやはり同様の現象が起きます。 var a : UInt64; begin a := 1; a := a shl 63; pcardinal( pbyte( @a ) + 4 )^ := $f; // とりあえずaを使用するためのダミー処理
>>75 DXEで逆アセのコードを見てみたけど、まずshl 32はシフト命令を使用していない。64bitデータの
左32bitシフトは下位32bitを上位に移動して、下位32bitを0にする、という形に最適化されている。
その上でaがInt64なら範囲チェックなし、UInt64なら範囲チェックあり、というコードが生成されている。
逆じゃね?という指摘はまぁそのとおりのような気もする。
>>73 >>74 よくわからんがどうしてもDBGridを仲介させたいなら
DBGridを全スクロールさせるとかしかないわな。
俺なら別のクエリで計算させるけど。
Delphi6 で質問です。 データの簡易エディタ表示部分を作ろうとしているのですが、 Index | txt | −1− | −2− | −3− |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ☑ฺ 1 | data1txt | −1-1txt− | −1-2txt− | −1-3txt− |▲| ☑ฺ 2 | data2txt | −2-1txt− | −2-2txt− | −2-3txt− | | ☑ฺ 3 | data3txt | −3-1txt− | −3-2txt− | −3-3txt− | |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ [←]_____________________[→] 表示は別ボタンなどで計算結果などを表示するだけ。 項目内で直接書き換えはしません。 行数はデータによって1000行ぐらいまで変動します。 チェックボックス付きの項目(有効/無効)用を入れるには ListView でいけますか? 他にあります? ScrollBox → ListView (ViewStyle vsReport) ?
そういうリストビューコンポーネントを作れば?
ListViewでいいだろ。
ドモドモ Checkboxes というコンポーネントかと思って探しまくってました orz ListView の プロパティCheckboxes を True にするのですね。 これを探してました、ありがとう!
教えてください。 TProgressBarで、カウントする数字が未確定の場合などに 左右にバーが揺れながら移動するのを見かけたのですが どのように実現するのでしょうか。 調べたら、TProgressBarには、pbstMarqueeという形式がありますが pbstMarqueeだと、左から右にブロックが移動しますが 実現したいのは、左右に移動する形式です。
自前で描画
gifアニメでいいんじゃないの?
>>85 ProgressBar1.Position := 0; 〜
を ProgressBar1.Max までの範囲で直接増減させたらダメなの?
読解力に少々問題があるようですね
脳も左右に揺れております
むかし、 Knight2000というコンポーネンがあってだな
XE2 Starterって買ってメリットある? ジャンプアップで1万引きでproが買えるって話なら、結局払ってる金同じじゃん それなら、VS2010のProを5万そこそこで買ってる方が得だと思うけど。 もっと安かったら飛びつくのだけどなdelphi。残念。
貧乏人は麦を食え
今は麦飯にすると高くつくけどな
XE/XE2で tmyclass=class published procedure foo; procedure bar; procedure baz; end; でpublishedなメソッドfoo,bar,bazの一覧を得る方法あったら教えて下さい。 なるべくならRTTIを使った安全な方法でおねがいします。
Rtti.pas
TRRIContext.Create GetTypes(tmyclass) GetMethods ToString こんな流れ
うまくいきました。ありがとうございます。 publishedかどうかの判定はTRttiMethodのメソッド、プロパティに見当たらなかったので TMyClass.MethodAddress(Method.Name) <> nil で判定しました。
TRttiMemberにVisibilityプロパティあるじゃんかよ。
じゃあ最初からそう書いてもらえます?
101 :
97 :2012/02/12(日) 18:27:05.82
うむ、苦しゅうない
Delphi6EnterPriseで、ApplicationEventsのOnMessageイベントの中で、 Msg.Message=WM_KeyDownだった場合に、 テンキーのどのボタンが押されたかを判断するにはどうしたらよいでしょうか? 半角入力時の判断は実装済みで、今回は全角入力時の判断を実装します。
IMEに取られちゃうからうまくいかないんじゃね?
IMEを自分で直接コントロールすれば、不可能ではないだろうな
106 :
103 :2012/02/15(水) 01:09:40.88
AやS等のキーはMapVirtuaklKey(LOBYTE(HIWORD(Msg.lParam)))で判断できました。 ですが、問題はテンキーのどのキーが押されたかどうかが知りたいのです。
Ex付きのを使うのか、VkKeyScanExあたりを使うのか、Imm系関数を使うのか、 あるいは低レベルフックか、可能性がありそうなのはこのあたりか。 本当はWin32APIスレで聞けっていいたいけど、あそこは既知外に粘着されてて 機能してないからな…。
109 :
103 :2012/02/15(水) 11:03:12.67
ImmGetVirtualKey(Handle)で取得したコードで解決できました。
>>104-105 >>107 無視する様な発言をして、すみませんでした。
>>108 ApplicationEventsのOnMessageイベント内で解決したかったので、こちらに投稿してしまいました。
今度からWin32API用スレッドに先に行ってみます。
110 :
108 :2012/02/15(水) 11:57:09.73
>>109 > 今度からWin32API用スレッドに先に行ってみます。
やめとけ。このあたりにいるアンチとは比べ物にならないのがもう1ヶ月以上も粘着してんだから。
コンボボックスのonkeypressに重めの処理書いて123って入力した場合、 321123って表示されてしまう。 これどうすればなおせる?
コード晒せよ禿
禿じゃないので諦めます
114 :
54 :2012/02/18(土) 03:58:55.01
スカルプって毛生えないらしい、ショックだ 勝手に上書きして欲しいんだろうけど、やめた方がいいよ
XE2のヘルプの見方がさっぱりわからん
オンラインヘルプのほうがまだましかも
ヘルプに文句言う人は、何のことについて調べていたのか書かないよね。
youtubeでiosアプリの作り方見たんだけど、 macの上でdelphi使ってた見たいなんだけど、 BootCampじゃなくて、仮想なんチャラみたいなので Windowsを使えばdelphiが使えて、プロジェクトもMacにドロップ 出来るの?
ヘルプでやたら このトピックには現在ドキュメントが存在しません。「ノート」を利用してこのトピックの改良について話しあうことができます 出てくるんだけど、プロパチィとかイベントのヘルプってほとんど無いじゃない?
結果はわかったが何を調べたんだ
>>119 ものによる。最近新しく追加されたようなコンポーネントのヘルプは内容がないことが多いな。
ただ右下の"現在のwikiページを表示"で出てくるものもある。
>>120 何でお前にいちいち報告しないといけないの?
なおるかもしれないじゃん。
炎猿とかはヘルプ無いよね? 追加インスコとかするの?
127 :
デフォルトの名無しさん :2012/02/22(水) 21:46:50.31
ヘルプに、説明抜けが多量にあるわけだが。 マラメータの意味がわからんわ。
StepItすると左からチ○コが生えてくるProgressBarか
129 :
54 :2012/02/24(金) 23:53:20.02
XE2持ってるのに、また買えって案内きた
>>129 この際Lazarusに移行しちゃえば?
131 :
デフォルトの名無しさん :2012/02/25(土) 00:53:40.20
TPanelの上にTImageを置いて TImageがTPanelの大きさを超えたら(TPanelからはみ出したら) スクロールバーを出す(スクロールバーではみ出した部分をスクロールできる)ように設計したいんだけど TPanelのプロパティのどれを使えばいい? もしかしたら滅茶苦茶なこと聞いてるかも…
132 :
131 :2012/02/25(土) 01:21:07.64
追記 TScrollBoxの上にTImage置いて、 TScrollBoxのAutoSizeをTrueにしてもみたけどダメだった。
すみません。教えて下さい。 時間のかかる処理の進捗を知らせるため、プログレスバーを乗せたフォーム(Form2)を表示して ループの中でプログレスバーのPositionを1ずつ増やしてます。 でも、何故かプログレスバーのゲージが増えず、ソフトが止まったみたいになります。 Applicationのメソッドの何かでループの中からソフトの動作を更新(?)すればいいのかとも思うんですが どんなメソッドを使えばいいんでしょう? 支離滅裂ですが教えて下さい。
134 :
デフォルトの名無しさん :2012/02/25(土) 09:01:59.10
デルファイって、VBのように配列の要素数を超えて 値を入れようとすると、デバッカがエラー出してくれる?
そういうコンパイラオプションもあるよ
>>133 Application.ProcessMessages
>>131 そういう時はTPanelじゃなくてTScrollBoxを使う
138 :
デフォルトの名無しさん :2012/02/25(土) 09:20:07.43
>>135 そうなの。あまり気にせず書けて便利ですね。
ということは、兄弟であるCビルダーも同じってことなの?
139 :
デフォルトの名無しさん :2012/02/25(土) 13:30:35.06
Alt+F4が押されるた時、Formを閉じないようにしたいんです 「カーソル位置まで実行」でFormのKeyDown、KeyPress、CloseQueryに 来たら停止するようにしてみたんですけど、停止しないみたいです Formのスタイルとかを変える…という方法でも結構ですので Alt+F4を無効にする方法をお願いします
>>139 KeyDownの中で
Key=0
でよくないか?
試してないが…
141 :
140 :2012/02/25(土) 14:51:20.51
Key:=0 だった orz
>>133 こういうのってWindowsの仕組み自体を知らない人なんだろうな
これから覚えれば良いこと 所詮、プログラムは知識量
炎猿 FMX.TCanvasで、角度を持った文字を出力したんいんだが、 FillTextでは無理、CreateFontらしきものも見当たらない、 TBitMapに書いて、自分で座標変換して出力しないといけないのかなぁ
>>142 超初心者用スレで「この人は超初心者だ」と指摘することにどれだけの意味があるとお考えですか?
146 :
144 :2012/02/26(日) 17:44:48.87
自己解決 炎猿 FMX.TCanvasではなく、 FMX.Formなんかで、 TLabelを書きたい位置に貼って(描画時に生成しても良い) TLabel RotateAngleに角度を代入すれば桶だったわ。 FMXでこういうプロパティが追加されているならVCLにもあるか?と さがしたが、Vcl.TLabelにはRotateAngleはありませんですた。 炎猿で一瞬でできること、VCLで一瞬でできること、それを違うほうで やるときに考え方をコロっと変えなければという現実を見て、orz...
>>145 確かにdelphiは初心者にとって扱いやすくていいのだけど、
やっぱりある程度のことをやろうと思うと、おとなしくCから
学ぶべきなんだろうなと、つい先日林はるひこの本買いました。
精進します。
精々頑張りたまえ
TreeViewにおいてツリー状にノードがある場合に 特定のノードからサブ含む子ノード全てにアクセスしたいのです。 再帰関数の書き方がわかりません。 サンプルいただけないでしょうか?
XE2のIDEでALTキーを押した時に初めて”ファイル”メニューが”ファイル(&F)”と表示されるようになりますが 常時"ファイル(&F)"と表示されるようには出来ませんか。 わかりづらい上にたまに一度ALTを離してからでないと サブメニューのアクセラレータキーが表示されないことがあって困ってます。
151 :
149 :2012/03/03(土) 22:25:04.56
TreeNodeの再帰の件は自己解決しました procedure exNode(TargetNode: TTreeNode); var Node: TTreeNode; begin Node:= TargetNode.getFirstChild; while Node<>nil do begin //ここに処理を書く exNode(Node, b); Node:= TargetNode.GetNextChild(Node); end; end;
えっ
びっ まっ よっ ねーず
s := 'foo#'#13#10'bar'#1#2#3; な文字列を 'foo###13#10bar#1#2#3' のように相互にescape/unescapeしてくれる関数あったら教えて下さい。
155 :
デフォルトの名無しさん :2012/03/05(月) 13:05:28.87
すみません、教えてください。 C#(Visual studio2010 Windowsフォームアプリケーション)で作成したフォームを DelphiでDLLファイルかTLBファイルから呼び出したいんですが、やり方がわかりません。 どなたか教えていただけませんでしょうか
本当に済まないと思っているのか。
痛い。
∩___∩ | | ノ\ ヽ | / ●゛ ● | | | ∪ ( _●_) ミ j 彡、 |∪| | J / ∩ノ ⊃ ヽ >155 ( \ / _ノ | | .\ “ /__| | \ /___ /
ぜんぜんDelphiのこと知らないんだけど Delphi.netってどうなったの
win7のハンドル調べるツールは何を使っていますか?
自作
他作
与作
Delphi XE の 「コード」「履歴」「デザイン」タブの「デザイン」タブが 消えて、フォームが見れなくなったんですが、復活させるのは、どうすれば良いのでしょうか? お願いします。お願いします。お願いします。
[F12]じゃだめなの?
環境オプション-VCLデザイナ-埋め込みデザインにチェックついてるとか
逆だ。チェック外すと昔のIDEようにフォームが独立したウィンドウで表示される。
168 :
164 :2012/03/08(木) 16:22:59.92
とりあえず、自己解決しました。 pas ファイルと dfm ファイルは、残ってるのですが、「デザイン」タブが 無くなったので、[F12]は、効きませんでしたし、編集画面左上の切り替えボタンも 使用不能になってました。 新しく Form2 を作り、Form1 の dfm ファイルの中身をテキストエディタで Form1 を Form2 に置換して貼り付けたら Form2 で、画面は復活しましたが 同じ方法で, pas ファイルを Form1 を Form2 に置換して貼り付けたら また、Form2 も「デザイン」タブが、消えて同じ現象になりました。 新しく Form3 を作り、 dfm ファイルを貼り付けて pas ファイルは、procedure や fanction の枠だけ造り、var i: Integer; だけ、書いて保存し、procedure や fanction の中身だけ貼り付けたら 「デザイン」タブが消えずに復活しました。
169 :
164 :2012/03/08(木) 16:31:28.21
>>166 ,167
そのチェックは、関係無かったです。
現象としては、「デザイン」タブが、完全に無くなり、
編集画面の左上の3番目のボタン「フォーム/ユニットの切り替え(F12)」ボタンが
Enabled := false みたいに使用不可になって使えませんでした。
起動時に複数のフォームを表示させるにはどうすればいいですか?
{$R *.dfm}を消したんじゃね? >170 メインフォームのOnShowで2つめのフォームを作って表示するか、メインフォームと同様に 2つめのフォームを自動生成にする。
173 :
164 :2012/03/09(金) 11:06:26.37
>>171 消してないです。まあ、なんとか復活したので良かったです。
例えば 'dir c:\ /s /b' という外部コマンドを実行して結果を取得するような ライブラリって無いですか。 WinExecで'cmd.exe /c dir c:\ /s /b > temp/result.txt' みたいなことをやってるんですがもうちょっとスマートに(出来ればリアルタイムに1行ずつ)取りたいです。
FindFirst/FindNext/FindCloseとかそういう話じゃなく?単にコンソールアプリを 起動してその出力を取りたいってこと?それならパイプを使うんだけど、 Delphi コンソール パイプとかで検索してみたら?
というかそんなのぐぐればすぐ見つかる
ggrks
これって毎度ググれとか言う割にまともな実装がひとつもないんだよなw
JVCLのTJvCreateProcessとか
181 :
174 :2012/03/13(火) 09:37:39.18
有難うございました。
>>178 ググる能力すらなかったんだね(ニッコリ
これってssl通信できますか?
Indy10ならOKでは?
delphiにプロトタイプ関数ってあるの?
Cのプロトタイプ宣言相当ならこんな感じ unit mylib; interface function add(a, b: integer): integer; implementation function add(a, b: integer): integer; begin Exit(a+b); end; end.
やっぱりpascalはいいなあ
type TFoo<T> = class public function Eq(A, B: T): Boolean; end; function TFoo<T>.Eq(A, B: T): Boolean; begin Result := A = B; // [DCC エラー] E2015 この型には指定した演算子は使えません end; でエラーになってしまう。 Tにはクラスではなく列挙型のみを指定して使いたいんだけど(なのでIなんたらは継承できない) そういうのは現実的ではない? 列挙型制約なんてのはサポートされないんだろうか。 type TMyEnum = (meFoo, meBar, meBaz); var foo: TFoo<TMyEnum>; if foo.eq(meFoo, meBar) then ...
値型制約はあるけど
Result := A = B; なんて書き方できたっけ これじゃ戻り値はどうなるの
>>189 列挙型制約欲しいよな。TFoo<T: enum>とか。
ただ他の制約と違って、指定する列挙型によってSizeOf(T)が変わるから実装が難しいのかもしれない。
現実的な書き方としては、CreateでTypeInfo(T)のKindがtkEnumerationかどうかチェックしつつ、
比較では上記のSizeOf(T)が変わる可能性があるという部分も考慮して、
function TFoo<T>.Eq(A, B: T): Boolean;
begin
Result := CompareMem(@A, @B, SizeOf(T));
end;
って感じだろうな。CompareMemの代わりにPByteArray何かにキャストしてSizeOf(T)分forで回すとかでもいいけど。
>>191 えっ…基本だろ…
もしかしてif文で毎回if A = B = True thenとか書いてるわけ?
そうだとしてもA = BとTrueがエラー無く比較できてる時点で何を返してるかは自明だろ…。
やっぱりpascalはいいなあ ヘッダファイルいらないし。
ヘッダファイルがある言語の方が少ないだろ
StringGridの指定したセルの色を瞬時に変えたい。 指定したセルの色を変えるところまでは procedure TForm1.StringGrid1DrawCell(... begin if (ACol = 5) and (ARow =5) then begin StringGrid1.Canvas.Brush.Color := clBlue; StringGrid1.Canvas.FillRect(Rect); end; end; でよかったんだけどこれに if combobox1.itemindex=0 thenなど条件を加えると条件にすぐさま反応せず、 指定したセルをクリックしたら色が変わるという状態になってしまう。 このstringgridのイベントはプログラム起動時にしか自動で動いてくれないのかな どなたかご教授願います。
refresh とか
>>197 ありがとうございます。
Invalidateのことでしょうか?
いろいろ置く場所を変えて試してみましたが状況変わらずでした
>>196 > このstringgridのイベントはプログラム起動時にしか自動で動いてくれないのかな
そんなわきゃない。
StringGrid.RepaintとかInvalidateRect(StringGrid.Handle,nil)とかをComboBoxの
OnChangeで呼び出せ。
>>199 きたあああああああああああああああああうおっしゃあああ
あざすあざす!
Windows7のコピーダイアログみたいに 見出し+説明がセットになった大きなボタンの配置されたダイアログって どうやって作ればいいですか? ------------------ OK(&O) 長々とした説明 ------------------ ------------------ Cancel(&C) 長々とした説明 ------------------ どっちか選んでください。
RepaintやRefreshは真っ先に思いついて試すだろ普通・・・
Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を 勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが お礼はDelphiの布教と初心者の救済をお願いします。
>>202 ありがとうございます。これ良さそうです。
>>206 なんかいろんな言語スレに張ってるな。広告収入目当てか?
現在のところ delphiを無料で手に入れることはできるのでしょうか? 入門っていうか、少し興味があり今やっているpythonと同じく勉強してみたいのですが…
>>210 こんなのがあるんですね
なるほどです
Lazarusについていろいろ調べてみます
>>209 trubo delphi exploreがあるよ。
vclソースももれなくついてくるよ。
フランスかどこかのミラーサイトがあるから入手可能よ。
736ファイルもそこにあるはずだよ。
>>212 Turbo Delphi 6 Explorerのやつですね
情報ありがとうございます
このスレで他ツール推めるのもアレだけど 今からはじめるならC# Express検討してみるのがいいと思う。 Win32APIなプラットフォームに拘りがあるならDelphiでもいいとは思うけど。
C#wwwwwwwwwwwwwwwwwwwwwwww
結果的に希望のアプリが作れるならC#でもいいじゃない .NETの仕様に沿って完結できるならそんなに悪いものじゃないよ
こういうアプリが作りたいという質問じゃないのに 希望のアプリがどうとか言い出す神経がそもそも異常だということを自覚した方がいい
ちょっと分からないことがあるんですが、教えてください。 pngイメージを読み込んでBitmapにAssignするわけですが、 これを同じ変数Bitmapを使って繰り返した場合、 何か不都合があるんでしょうか? 100回を超えたあたりで、この部分で「リソースが...」とエラーが 出てしまうんですが?
またエスパー待ちの質問か
CreateしてんのにFreeしてないとかそういうオチだろ
100個のpngファイルをロックするアプリケーションか……ゴクリ。。。
メモリは無限にあるわけじゃないだろ どんだけドカ食いしてるんだよ メモリリークしてるはずだから確かめてみな
>>218 最近のなら
System.ReportMemoryLeaksOnShutdown := True;
以前のならFastMM入れてどーたらすれば開放し忘れのオブジェクトがあったら
警告してくれる。
そうじゃなく単に作り過ぎという事なら
自分もファイラーもどきのアプリ作った時Icon作りまくった時にリソース不足でエラーが出たことがあったな。
PNGインスタンスを管理してサイズか個数で制限かけて古いものから自動開放、
必要になったらまた読み込むというのを自動化してくれるキャッシュクラスを作ってみればいいかも知れない。
delphiでポインタを使ってswap関数の実験をしてるのですが、うまくいきません。 メイン側 a:=1000; b:=2000; swap(@a,@b); メソッド側 procedure swap(x:^integer;y:^integer); var z:integer; begin z:=y^; y:=x^; x^:=z; end Cみたいなやり方ではだめなんでしょうか。
y^:=x^;
^-^
>>225 失礼。y^:=x^;のタイプミスでした。
しかし、procedureの中の^でエラーになるんです。
うまくいかないとかエラーになるとか具体的な情報を書こうとしないのは プログラマに向いていないタイプだな。 どういう風にうまくいかないのかとかエラーはコンパイル時なのか実行時なのか どういうエラーメッセージが出るとか具体的な情報を書かないと。
procedure Swap(a, b: PInteger); var tmp: Integer; begin tmp := a^; a^ := b^; b^ := tmp; end;
varでいいじゃんっていう
関数宣言の引数の型には、型名(と、いくつかの例外)しか 許さないので、^ は使えない。ポインタは型名で 使用できるようにするためにあらかじめ定義しておく。
>>231 そうなんですか。
varで充分ことは足りるのですが、
一度やってみます。有難うございます。
環境:Delphi XE2 Update4 TProcをフィールドに持つクラスを生成廃棄した時 FProc._Releaseを明示的に呼ばないとメモリリークするんですが どう書くのが正しいというのはありますか。 イベントハンドラ替わりにこういう使い方は認められていないんでしょうか。 type TCaller = class FProc: TProc; end; var c: TCaller; begin System.ReportMemoryLeaksOnShutdown := True; c := TCaller.Create; c.FProc:= procedure begin end; // c.FProc._Release; c.Free; end. --------------------------- Unexpected Memory Leak --------------------------- An unexpected memory leak has occurred. The unexpected small block leaks are: 13 - 20 bytes: Test$1354$ActRec x 1 --------------------------- OK ---------------------------
2010でコピペして動かすとリークはしないな
とりあえず、program のメインブロックの begin end. での 無名メソッドをやめ、一旦、手続きを呼び出せ。 |uses SysUtils; |type | TCaller = class | FProc: TProc; | end; |var | c: TCaller; |procedure MyProc; |begin | c := TCaller.Create; | c.FProc:= procedure begin end; | c.Free; |end; |begin | System.ReportMemoryLeaksOnShutdown := True; | MyProc; |end.
D7でFireBird2.5とIBXでDBアプリを作っています コード入力したマスターを参照項目で表示させているのですが 既にマスターに登録されているものについては表示されるのですが レコードの入力の途中でマスター未登録のものを別画面を開いて登録しても 参照項目で表示されません どうしたら表示されますか
キャンペーンで配ってる本を買ったんだけど、金をドブに捨てた。
>>236 そういうのはMLで質問するとDB大好きなおじさんたちが嬉々として教えてくれます
データセットを別のデータモジュールあたりに分離させて 両方からそこを見に行けばいいじゃない
参照を更新し直さないと駄目な仕組みだとサーバーに負担掛かるので 過去履歴とかを参照する場合などにしか使わなくなったな。
{$i}は使わないで MyUtilsA.pas, MyUtilsB.pas, MyUtilsC.pasと複数ファイルに分かれているユニットを uses MyUtils; だけで利用できるようにするやり方無いですか
// MyUnits.pas unit MyUnits; interface uses MyUnitsA, MyUnitsB, MyUnitsC; type TFoo = MyUnitsA.TFoo; TBar = MyUnitsB.TBar; const MyConst1 = MyUnitC.MyConst1; procedure MyGlobalProcA; function MyGlobalVarA: Integer; // 変数の書き込みはムリ。変数を書き換える関数を書く procedure SetMyGlobalVarA(Val: Integer); implementation procedure MyGlobalProcA; begin MyUnitsA.MyGlobalProcA; end; function MyGlobalVarA: Integer; begin Result := MyUnitaA.MyGlobalA; end; procedure SetMyGlobalVarA(Val: Integer); begin MyUnitaA.MyGlobalA := Val; end; end.
exeと同じフォルダにiniファイルが無いと初回起動とみなすようにしているけど、 デバッグするのにいちいちiniファイルを消すのが面倒なので良い方法を知りませんか?
デバッグ用のIFDEF使うとか EXEの引数にそれ用のパラメータを用意するとか
[SHIFT]が押されていたら初回起動と見なす
それは嫌です
[CTRL]が押されていたら初回起動と見なす
Post BuildでINIファイルを削除する
例えばLabel1.text := inttostr(random(100)); としてLabel2にも同じテキストを挿入したい時 Label2.text := Label1.text; よりもスタイリッシュな書き方ってありますか? 或いは1行で2つのラベルに同じテキストを入れる方法とか
>>249 ふつうはそれで良し。
繰り返しあるようなら自前で関数つくるべし。
procedure SetLabel(A,B:TLabel; S:String);
ありがとうございます 確かに掘り下げてもよしない疑問でした
254 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/10(火) 21:28:07.80
今時iniファイルなんて使ってんのかよ
xmlってかw編集面倒じゃんw まさかレジストリなうとかいわねーよなw
iniは標準でメモ帳で開いてくれるけど、xmlはブラウザで開いちまうからな 初心者はその程度でも詰まったりするから、iniの方が使う側も作る側も楽
jsonでいいんでねーの
ねーわ
sqliteでいいだろ
わざわざDLL用意すんのかよw本末転倒だろjk
Oracleあたりで落ち着こうぜみんな。
で結局ini以外って何よ
DOMストレージ
ini嫌うのってまさに
>>249 と同じなんじゃねーのw
スタイリッシュw
CSV
ちょっと教えてください。 プログラムの中でTWebBrowserを使ってるんですが、 これはメモリを大量消費するんで、対象Formごと 動的に作成するようにしたんです。 で、WebBrowserを貼り付けたFormをFreeしても メモリがぜんぜん解放されないみたいなんですが なんか特別な処理が必要なんでしょうか? よろしくお願いします。
キャッシュじゃない? NavigateメソッドでnavNoWriteToCache使ってみるべし
>>268 ありがとうございます。
さっそく試してみました。
8M → 50M のままだったのが
8M → 50M → 18M まで減少しました。
俺の厚い胸板を騒がしてくれる質問最近ねぇな
>>270 じゃあ質問。SSE2とかで最適化したいんですけど、どうしたらいいんでしょうか。
しらん はい次
海の水はどうしてですか?
おとうさん か おかあさん と いっしょ に あたま の びょういん に いこうね はい次
↑著作権違反
自分の書き込みを転載することも違反かね。すごいもんだね。
せっかくバカスレがあるんだからそっちでやれ
>>277 証明できないのに自分の書き込みだと言い張る馬鹿もいるんですね
サポートの不安wwww
自身の能力の低さは言うまでも無いから書いてないんだね
単なる生産性の低さ 開発情報のなさ 開発環境のサポートへの不安
生産性は抜群だけどねw
TBitmapってどうしたらコピーできますか?
新しく TBitmap Create して、Assign
生産性抜群とか言ってるやつは経験たりないだけ。 昔の自分を見てるようでおまえの立ち位置が見える。
スレチを繰り返すおまえをみてると 昔の自分を見てるようでおまえの立ち位置が見える。
Delphiの生産性を否定するやつってグーグルなしじゃ何もできなさそうだよな
.NET最高厨だろ。DLLヘルに落ちて氏ね
自分の生産性の低さを道具のせいにする奴は総じてクズ
まぁくだすれだからってそうくだをまくなよ。 初心者こなくなっちまうぞw
道具がすべて同じ能力持ってると思ってるのか?どんだけ馬鹿なんだよ。 10年前のPC使って、おまえの能力で最新のアプリを快適に使えるもんなら使ってみろ馬鹿。
いや、Delphi の能力は最低。
確かに。Lazarusは最高だけどな。
10年以上前のPCで流通系の電算室取りしきってるがダメなの?
>>292 人間としての使えなさと道具の性能は関係ないよ底辺さん^^
何か思い当たることでもあったのかな?^^;
10年前から何も変わってないような環境をいまだに生産性高いとか言ってるのは
自分が10年前から進歩してないことをアピールしてるだけなんだよ。
エンバカスレにも書いたように不満から新しいものが生まれてくるんだよ。
>>296 自分のレベルの低さアピールしておつかれ^^;
>不満から新しいものが C# のことかね。 いやエンバカがわしらの不満を解決してくれると信じている人がまだいるとは噴飯ものでありますな
何百年たとうがいいものはいい。 ビル信者にはそれが分からんのですよ。 スレチはほっときましょうよ
,,-―--、 |:::::::::::::;;;ノ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |::::::::::( 」 < 不満から新しいものが生まれてくるんだよ。 ノノノ ヽ_l \______________ ,,-┴―┴- 、 ∩_ /,|┌-[]─┐| \ ( ノ / ヽ| | バ | '、/\ / / / `./| | カ | |\ / \ ヽ| lゝ | | \__/ \ |  ̄ ̄ ̄ | ⊂|______| |l_l i l_l | | ┬ |
なんか今の流れをブッちぎるようで申し訳ないけど アプリAのフォーム上に、アプリBの画面を重ねて表示し、 外見上はあたかも一つのプログラムであるかのようにするって 可能でしょうか? もちろん、両アプリともDelphiで作るものですが。 訳あって、機能の一部をまったく別アプリにしたいので よろしくお願いします。
アプリBのウィンドウをアプリAのウィンドウの子供にする
>>302 さっそくありがとうございます
で、「ウィンドウの子供」って?
同じアプリ内だとParentプロパティを使ったことあるけど、
アプリ同士の親子って、何をどう操作するんですか?
304 :
301 :2012/04/18(水) 01:33:12.49
>>301 あまりスマートな方法じゃないですが
別EXEの画面をフチなしで作って
もう一方のEXEから表示する位置をSendMessageで送って
その場所に画面を表示したらどうですか?
そのままだと多分[ALT]キーでシステムメニューは表示出来るので
移動・サイズ変更・終了など出来ないようにしないといけないですが。
この手の質問良くあるけど、そいつらって 自分が作ってるものがどう使われるか知ってて開発してんの?
まだいたのかスレチ君
>>303 unit Unit1; // 親(アプリB 上でコントロールする方)
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,ShellAPI, ExtCtrls, ComCtrls,
Unit2; // 子(アプリA 下でコントロールされる方)
type
TForm1 = class(TForm)
〜〜〜〜〜
子アプリの方が「Unit2 Form2」とした場合
unit Unit2; // 子
TForm2 = class(TForm)
親側から → 子へは
Form2.Button1.OnClick(nil);
など Form2 から指定して書く。
Unit2.pas を親側のプロジェクトに加えることを忘れずに
それアプリじゃなくてフォーム分けてるだけでしょ アプリを分けるって書いてあるんだけど、日本語読めない? それともアプリやフォームっていう基本的な用語の意味が理解できてない?
もっとはっきり目的を書けよ。 なにが訳あって別アプリにしたいだよ。 どうせネトゲの自動化とかだろw
くだすれと知ってて聞いてるなら答えは「無理」 本気ならMLかフォーラムに逝け
もう終わってるのにいつまで言ってんのお前ら
315 :
301 :2012/04/19(木) 16:23:47.87
えーーっと
コントロール上に別アプリを表示させたいって質問した者ですけど
結果を報告するのを忘れてすみませんでした。
>>312 別アプリにする理由は、上の方でTWebBrowserのメモリ解放について
質問したレス(
>>267 )に関連したものです。
TWebBrowserを貼り付けたForm(Google map関連のもの)を動的に作成し、
不要になったら解放しても、大量のメモリ(40MBとか)を解放してくれず、
ちょっと精神的によくないんで別アプリにしたいというわけです。
で結局、次スレのようにしました。
316 :
301 :2012/04/19(木) 16:26:47.49
chWND: hWND; procedure TForm1.TabSheet2Show(Sender: TObject); var Count: Integer; begin if chWND <> 0 then exit; WinExec(**別アプリのパス**, SW_HIDE); try Count := 0; repeat chWND := FindWindow(nil, '**別アプリのキャプション**'); if chWND = 0 then begin inc(Count); sleep(100); end; until (chWND <> 0) or (Count > 20); if chWND <> 0 then begin Windows.SetParent(chWND, TabSheet2.Handle ); Windows.MoveWindow(chWND, 0, 0, TabSheet2.ClientWidth, TabSheet2.ClientHeight, false); ShowWindow(chWND, SW_SHOW); SetForegroundWindow(chWND); end else ShowMessage('can not start app'); except on Exception do PostMessage(chWND, WM_CLOSE, 0, 0); end; end;
だからここは超初心者用 お前が来るところではない
というかゲームなんかやること自体が人生の無駄遣いなんだから 仮にゲームでの不正目的でももともと無駄なものを取得しただけだから二重に無駄だよ
Formのことをアプリと呼んでる人がいる(笑)
>>317 そうだな、お前みたいな馬鹿では
>>316 みたいなソース貼られても頭悪くて理解できないもんな
お前はなんで超初心者に絡んでるんだ?
超初心者だらけのスレなんてなんか意味あんの?
323 :
デフォルトの名無しさん :2012/04/20(金) 11:18:55.61
/j /__/ ‘, // ヽ ', 、 // ‘ ! ヽ …わかった この話はやめよう /イ ', l ’ iヘヘ, l | ’ | nヘヘ _ | | l ハイ!! やめやめ | l_| | | ゝ ̄`ヽ | |〈 ̄ノ ゝソノノ `ー‐' l ! ¨/ n/7./7 ∧ j/ / iヽiヽn |! |///7/:::ゝ r===オ | ! | |/~7 i~| | | ,' '/:::::::::::ゝ、 l_こ./ヾ.. nl l .||/ | | | | l {':j`i::::::::::::::::`ーr ' ||ー---{ | '" ̄ ̄iノ .l::::::::::::::::::::::∧ | ゝ ', , 一 r‐‐l γ /、::::::::::::::::::::::::〉ー= ___ ヘ ヽ } / o |!:::::} / o` ー 、::::::::::::i o ,':::::::{`ヽ ヘ ノ / o ノ:::::∧ /ヽ o ヽ::::::::| o i::::::::ヽ、 / / / ノ::::::/ /::::::::ヽ o ヽ:::| o {::::::::::::::Υ /
324 :
デフォルトの名無しさん :2012/04/20(金) 11:19:38.02
.,r‐--,,,_、 .゙l゙'i、 `゙''-,,,,,,,,,,,,,,,,,_ : ゙l `'i、.,r‐-、,,`'-,、 `''ー、_ ゙l ,/゛ `゙''''ミッ、 ゙゙'''-,、 У `!ヽ、 ._,,i、 ,,,,,、 / ゙r゙l, / ‘i、 { ゙i、 | ゙'i゙l ./ |, ゙l、 ゙l | _,,,,_ .゙'},. | ,/ ゚i、 ゙l ゙l、 ゙l ,r'"` `゙゙''',゙',lri、,,/ .゙l ゙l ヽ │ .| .彳 ゚|″ | .| │ │ .ヽ_ _,,-° `i、 .| .,,゙l, .゙ケ'=ッ、 ゙l, ,,,,,,、  ̄ ̄ .゙l,-'シ'',!.゙l ,/゜ ゙'i、 .}i、`.゙'i、 `'| `'i、 ,,,rン・'゙,,,-'i| .| .l、,,」 ゙= | .゙ヽ, .゙!, i″ ゙''i, .l │ /" .゚┓ .| ‘'''l" ゙'-,,、゙l、 .,,「 | ゙l、 ゜ .| ゙l'-,、 `゙''゙‐'" ./ .ヽ .| | ゙'ヽ,、 / '゙l .,ノ ′ .~'―--―ー¬''" ヽ-, |、 " .l゙
ウルトラマンセブンとは古いな
じゃあ俺が超初心者の質問するよ。 interface ってbuilderでいうヘッダファイル? delphiはなぜヘッダファイルがないの
>>327 >delphiはなぜヘッダファイルがないの
あります。
命令文は {$INCLUDE filename}です。
それヘッダじゃないよね 馬鹿なのかな
>>329 >それヘッダじゃないよね
{$INCLUDE filename}はヘッダに書くことも可能です。
DelphiとC++ではヘッダファイル(インクルードファイル)の使用用途がまったく同じという訳ではないですが
だからといって、Delphiにヘッダファイル(インクルードファイル)が無いということにはならないでしょう。
DelphiにC/C++でいうヘッダファイルはない。ヘッダファイルがない理由はusesで他のユニットの interface部の内容を取り込む仕様だから。 $I($INCLUDE)はそのファイルの内容をその行に置き換えるという、Cの#includeと全く同じ意味を 持つが、言語仕様の差から同じ効果をもたらすわけではない。
>>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
解答を用意しているということは、これは質問ではなく自分の知識を自慢したいのですか?
それなら、ここは初心者のスレなので正確な質問と解答を書いた方がいいですよ。
>>332 いろいろ教えて下さりありがとうごうざいます。
でも私327は331ではありませんので
そういうつもりはありません。
そもそもCもヘッダファイル必須じゃねーし。 質問自体がおかしい。
何度も同じこと書くの面倒だからまとめましょぐらいの意味しかないから >328が正解
やめて〜 わたしの美貌を巡って争わないでぇ
>>333 >でも私327は331ではありませんので
そうなんですか、すみませんでした。
しかし、それならこの回答では求めていた解答と違いますよね?
質問をこんな感じに変えてみたらどうですか。(意図する質問と違っていたらすみません)
DelphiはINCLUDEがあるのに何故Unitを使うのか?
Unitを使った場合のメリット・デメリットや特徴は何か?
いつのpascalから$include指令があったん?
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 は俺じゃないから。
このすれ超初心者しか閲覧禁止らしいから仕方ないよ
>>340 そんなこといわないで。
経験豊かなオジサンたちが、delphi初心者にやさしく教えるスレなんだから。
素晴らしい言語であるdelphiを若手に広めるのが目的じゃないか。
delphiもそうだったけれど大抵の言語のinclude文は単なるコピペなので、 ビルドスクリプトで perl,pythonとかをサーバーから呼んで生成してからかますと結構手抜きができる。定数に日付 入れたり、クラス名にユニークな名前入れたり 特定条件でプロパティ変えたりとか
FM関係のドキュメントが一杯出たんだって。 少しずつでも読まないといけないなー。積読・宿題が山積みー
読む前に最初にやる事は、Delphi/FMに将来があるかを考えることだと思う。
>>339 >意味不明。usesはC#のusing同様に宣言の内容を取り込むのであって、C/C++の
>#INCLUDEのようにその行をファイル全体で置き換えるわけではない。
ソースのファイル分割がUnit形式だけと限らないという意味です。
Unitを使った >interface部の内容を取り込む仕様だから。
この方法以外でもファイルを取り込めます。だからこの”取り込む仕様”だけが必須ではないと書きました。
>その例だと2カ所以上でfilename.txtを$INCLUDEした場合、Taaaが2回定義され、
>しかも異なるものと解釈される、ってのはわかってるか?
すみません、言いたいことの意図がわかりません。
インクルードファイルなので、記述されれば何回でもソースに展開されますし
それを認識して不具合なくソースを書くのは他の言語同様で当然のことだと思います。
それにUnit形式の場合でも、usesに二つ以上Unitを定義できないのもある意味同様だと思いますが。
すみませんが本当に、何を言いたいのかわかりません。
馬鹿には無理
>>345 おかしい質問にはおかしい答えしか出ない。
もうやめとけ。
>345 > ソースのファイル分割がUnit形式だけと限らないという意味です。 必須じゃないという意味はわかった。初心者に説明して意味があるかどうかは別だけど。 ソースのファイル分割とユニット分割の違いって初心者に意味ないでしょ?混乱させるだけで。 > >その例だと2カ所以上でfilename.txtを$INCLUDEした場合、Taaaが2回定義され、 > >しかも異なるものと解釈される、ってのはわかってるか? > すみません、言いたいことの意図がわかりません。 あー、やっぱりわかってないような。Unit1とUnit2の2つのユニットでfinename.txtを $INCLUDEすると、Unit1.TaaaとUnit2.Taaaの2つのクラスが別のものとして 作られるのよ。C/C++では宣言(型宣言やプロトタイプ宣言)だけであれば そんなことないでしょ?だからDelphiではこのようなことはしないの。 で、そういう普通しないことを初心者スレに書いて意味あるの? >347 そりゃそうだ。
>>348 >あー、やっぱりわかってないような。Unit1とUnit2の2つのユニットでfinename.txtを
>$INCLUDEすると、Unit1.TaaaとUnit2.Taaaの2つのクラスが別のものとして
>作られるのよ。
意図するところは判りました。
どうやら
>>332 の例が理解出来ていなかったようですね。
例はUnit形式を使わないでファイル分割を行う方法なので、”異なるものと解釈される”ことはありません。
あなたの言っているのは、プログラムをUnit形式を使ってファイル分割したあと
またそれをINCLUDEを使ってファイル分解する場合の事です。
以後、放置でおながいします
馬鹿と馬鹿が争うほど醜いものはないな
一般の方はご存知無いやろうけど、青い銀行のATMの処理の結構な部分はDelphi6時代の コードが今も利用されてて、ボーランド以降転々とする母屋のせいでライセンスとか保守とかが 極めて問題になっとる…らしいよ
おーい くだすれに長文は不要 初心者を遠ざけるだけ
>>352 転々って…1回しか変わってへんがな
ライセンスは引き継がれてるし
ボーランドそのものが開発に参加していたのならともかく、Delphi は開発ツールでしかないしな。 どうすればライセンスとか保守に影響が出るのかがわからん。 だいたい Delphi6時代ってことは10年以上昔なわけで、逆に10年問題を先送りにしていた方が問題じゃないのか?
そんなのこの業界じゃ日常なんだけどw 10年ならむしろ緩いだろw
そりゃ未だにWin2k使ってるところもあるんだしな。 アプリなんかそれ以上に古いの使ってて当たり前だろう。 趣味じゃないから機能満たして安定してれば何も問題ない。
素人はそれでもいいんだろうけどね > 358 ハードウェア追加になった時に OS どうするの?買えるの?コピー? ハードが追加にならないとしたら、安定して問題もないのなら、どうやって食っていくんだ???
という矛盾を普通に抱えているのがこの業界です
ですよねー
思考停止、乙。
古いOSはダウングレードできないこともない。
まあ、いまだにPC98使ってるとこもあるぐらいだから。
XE1を使ってます。 フォルダの選択するためにはググったら SelectDirectory を使うと良いとありました。 SelectDirectory を使うには uses 節に Filectrl を記述すべきとあったのでコンパイルしてみると 「[DCC 警告] Unit2.pas(7): W1005: ユニット 'FileCtrl' は特定のプラットフォームに固有のものです」 と出るのが気になります。この表示を消すにはどうすれば良いのでしょうか?
>>366 Windows固有機能を使って、機能が実装されているので、他OSでは動かないよという警告。
他OSに移植しないなら、気にする必要はない。
警告を消すには、ソースファイルに、
{$WARN UNIT_PLATFORM OFF}
を追加する。
またはプロジェクトオプションで、Delphiコンパイラのヒントと警告から、ライブラリ依存のユニットの警告をFalseにする。
368 :
デフォルトの名無しさん :2012/04/24(火) 08:42:58.03
2007のIDEの環境設定に関して教えてください。 自作のコンポーネントとパッケージがあり、プロジェクトに組み込んであるのですが、 パッケージのdcuとbplのパスを[ライブラリパス]に追加して パッケージのソースのパスを[ブラウザ検索パス]に追加してあります。 この状態だと、IDEのエディタ上で[ctrl+クリック]しても、その変数やユニットを エディタで検索して開いてくれません。 ソースのパスを[ライブラリパス]に追加するとエディタで検索されるのですが、 この状態でコンパイルするとパッケージのソースまでコンパイルされてしまいます。 既存のVCLのコンポーネント郡の様に、エディタで自動検索はされるけどコンパイル対象には ならないようにするにはどのように設定したら良いのでしょうか?
できません。 方法はあるのでしょうが未公開です。
dcpのパスは?
Delphi7でUINT64定義するのやっぱ無理?
どう定義するかによる
373 :
368 :2012/04/24(火) 21:06:32.96
>>370 dcpの出力パスは意識してなかったのでデフォルトだったのですが、
[ライブラリパス]にコンパイルしてみましたが動作は変わりませんでした。
シンボリックな情報は、.dcu にもあるが、パッケージにした場合、 .dcp を使う。というか、逆にアプリケーションからは パッケージの .dcu を見えないようにしておく。 パッケージを組み込んでいるということは、 アプリケーションにパッケージの .dcp をすでに 指定してあるということで解決しているはず。 ところで、デバッグのトレースとかで、 パッケージの関数の中に入っていけるの?
>>368 >プロジェクトに組み込んであるのですが、
まず、プロジェクトから外したら?
まっ、それでも再構築したらdcuは更新されるけど。
そもそも何で、パッケージがコンパイルされたら駄目なの?
リリースポイントとか、ある特定時期のモジュールを残したいのなら
それはVSSやSubversionみたいなバージョン管理の話でしょう。
変更出来なくするとDelphiのUpdateとかでVCLが修正されても
その修正がパッケージに反映されなくなるよ。
それでも、どうしてもdcuを更新したくないのなら
Delphiインストール先のlibにdcuをいれ
ソース(pas)は\source\Win32\rtl\winとかに入れたら。
初心者には厳しいなぁ。
素人はそれでもいいんだろうけどね
手持ちのXE2だとおそらく期待通りの動作をしている。
素人はそれでもいいんだろうけどね
さすが玄人は違うな
delphiは玄人も使うのかい? ぼくは初心者の言語だと思っていた。
初心者の言語って??? どの言語だろうが最初は初心者に決まってるだろ 訳わからんことおっしゃる
初心者に優しい言語って意味だろ
バブゥ語
言語は優しいがスレは厳しい
>>385 タラちゃんにしか分からない超難解言語じゃないか
どうやって食っていくんだ???
/j /__/ ‘, // ヽ ', 、 // ‘ ! ヽ …わかった この話はやめよう /イ ', l ’ iヘヘ, l | ’ | nヘヘ _ | | l ハイ!! やめやめ | l_| | | ゝ ̄`ヽ | |〈 ̄ノ ゝソノノ `ー‐' l ! ¨/ n/7./7 ∧ j/ / iヽiヽn |! |///7/:::ゝ r===オ | ! | |/~7 i~| | | ,' '/:::::::::::ゝ、 l_こ./ヾ.. nl l .||/ | | | | l {':j`i::::::::::::::::`ーr ' ||ー---{ | '" ̄ ̄iノ .l::::::::::::::::::::::∧ | ゝ ', , 一 r‐‐l γ /、::::::::::::::::::::::::〉ー= ___ ヘ ヽ } / o |!:::::} / o` ー 、::::::::::::i o ,':::::::{`ヽ ヘ ノ / o ノ:::::∧ /ヽ o ヽ::::::::| o i::::::::ヽ、 / / / ノ::::::/ /::::::::ヽ o ヽ:::| o {::::::::::::::Υ /
出てくるのおせーよw
r、__ / | ト、,'⌒/7ヽ┘'<i\/L-、,___ `'ー-‐''" ヽ、_ /:/ヽ!::|_」ヽ-ァ'_,,..,__ `´ ロ└、_ /i __ / 〈::::! r「>''" `ヽ、.,__ ロ i>、/::::__i/:::| か ほ そ | i .ノヽ|/ / / / `ヽ.  ̄|/:::/」//i| ァ う ろ | ト^Y/ / /i i ; ヽ、/::/´ `ヽ./ i | が そ ヽ! | 〈! ,' /ヽ!、_ハ /! / i Yi', ヽ. i /! | い ろ > .! ノヘ.! /,ゝ='、,/ | / | _ハ_ | ! i ', '、/ | | い 次 / ,. --,rく`"'ー'<ニ|o/〈 i'´ r! レ'`ァ;=!ニ__ i ,' ハ | i `ヽ.,' | ん ス | i'二'/ i| ノ. |/,,, ひ'ー' i r'; Yレ'i 〈 Y', ハ i | じ .レ | { ‐-:!_,ハ.| _/ ,ヘi7 ' ヽ- '_ノ o 。_,.ゝ/i / ', / ッ .ゃ. た |〉 `"'T´:::| ! ./ニヘ. i7´ ̄`ヽ. U "/|/ ,イ ,ハ ,' i ,' ! ? な て .', '、_/_,.-'"レ'レ' ! !へ. !' | _,.ィ / イ .ノ' , '! ハ/ヽ! .! い. た ヽ、_ ヽ、Yレ'7> 、.,___,,.' r'´/ `ヽ./ / レ' ,i / で / r-、!:::}_レ'´i\,、!イ/ Y ,. ' レ' す / __,,.. -‐ノ ハ::::/`7i::::ヽ、_r _ハ、_,,.. < _____ 彡 〈 \,_____`;rく rく / ハ::::::::ト、 _,r' '" ̄7'´ 〉ー、_ゝ, ,.:'⌒ヽ _r-‐='ト、 ヽサ二7」ー-<フ>r、 i /i__/ / /'〉| __,.r-''":r´く `''ァー- :: 、.,___,.イ::::ヽく `ヽ、 ト、,_>-'、-'´i |
XE2だとWASP周りのInterfaceは定義されてます?
WASAPIだった
なさそうですね
そうですか シコシココンバートしますわ
397 :
デフォルトの名無しさん :2012/04/30(月) 13:29:45.24
質問です。 Delphi(Delphi7)からコンソールアプリケーションを操作したいと思っています。 例えば、Delphiのプログラムから、すでに開いているDOSプロンプトに DIRコマンドを送るみたいなことをしたいのですが、どのようにしたらできるのでしょうか? C#だと ProcessStartInfo g = new ProcessStartInfo(); みたいなのを作って操作できるようなんですが、 Delphiでする方法を探してみると keybd_eventなどでDIRと送る方法みたいなのしか見付かりませんでした。 何か他に良い方法がありましたら教えていただけないでしょうか。
>>398 ありがとうございます。
Lazarusというものを初めて使ってみました。
ただ、自分が使い方をわかってないだけかもしれませんが
リンクの方法の場合、cmdでコンソールを起動した後
dirコマンドを入力ってできますか?
AProcess.CommandLine := 'cmd /c dir';
とかで起動させるのではなく、
AProcess.CommandLine := 'cmd';
で起動させた後、dirコマンドを打つとかがしたいです。
> C#だと > ProcessStartInfo g = new ProcessStartInfo(); > みたいなのを作って操作できるようなんですが、 これが思い違い。
分からないならレスしなくていいです
400が正解。ProcessStartInfoは関係ない。 他のウィンドウにキー入力を送るとかその辺の問題。 できなくはないがプログラムとしては三流でキモイ
(別プロセスの)アプリケーションを操作… という時点でDelphi言語やVCLかどうかではなく Windowsのセキュリティに関連する知識が必要と思われ くだすれレベルではない。
>>399 ども、私も初心者ですが、検索してみたところ、パイプでの入出力に対応しているならば、
パイプというのとWriteFileというWIN32APIを使えば可能なようです。
パイプとかWriteFileで検索すれば、使用方法が見つかると思います。
405 :
397 :2012/04/30(月) 20:05:21.96
みなさんありがとうございます。
GalateaTalkというフリーの音声合成エンジンがあって
ttp://mahoro-ba.net/e1105.html これを利用する場合、コマンドで
cd "gtalk.exeのあるフォルダ"
gtalk.exe -C ssm-win.conf //Ggtalk起動
set Text = こんにちは //読み上げ文字の入力
set Speak = NOW //で読み上げ
というコマンド処理が必要だったので。
ttp://mahoro-ba.net/e1206.html の#Cのサンプルを見たらProcessStartInfoを作ってからいろいろしていたので
Delphiにも同様の処理ができないものかと質問した次第です。
こういった別プロセスを操作する方法は、あまりよい作法ではないんですね。
dllとかあれば使いたいところですが無くて。
>>404 ありがとうございます。
WriteFile検索してみます。
どう見てもパイプです本当にありがとうございました
別プロセスといっても、子プロセスに限っては例外ってことで。
パイプつなげてdirした結果を受け取ればいいんでしょ 「anonymous pipe」でググって勉強せぇ
JCLあたりでそんなのがあったような
410 :
397 :2012/05/01(火) 07:22:01.82
みなさん、ヒントいろいろ、ありがとうございます。
動かしてみた感じだと結果は同じなんですが Memo1.Lines.Clear; と Memo1.text :=''; の違いって厳密には どう違うんでしょうか?
そんなレスする暇があったら自分で調べて教えてくれればいいのでは?
厳密にはっつうことなら自分でソースを追ってみたほうがいいのでは? デバッグ版DCU使う設定にしてF7(ステップイン)で。
>>413 ここにソース上げろってかwwwwwwwwwwwwwwwwwwwwwww
非常識すぎるだろwwwwwwwwwwwwwwwwwwwwwwwwwwww
嫌なら完成したバイナリの比較でもしろw
416 :
デフォルトの名無しさん :2012/05/01(火) 12:06:05.19
>>412 ソース
Memo1.Lines.Clear;
Memo1.text :='';
同じなんですね
初心者的にはどっちでも結果は同じだからそれでいい TMemoを行ごとに扱うならLines.Clearを勧める
>>417 初心者的にはって実際に同一のコードが呼ばれてるけど?
頭悪くない?
学生でもない初心者がDelphiはじめようとすると最低いくらくらいお金かかるの?
>>418 >同一のコードが呼ばれてるけど?
この違いわかる?
Memo1.Lines.Clear;
Memo1.Lines.text :='';
Memo1.text :='';
>頭悪くない?
自虐的自己紹介乙
>>416 Memo1.text :='';の方がいろいろないみで速度が遅いかもね
正確にはバイナリ比較して見なければわからンけど
>>419 Delphi XE2 Starter Edition という奴で、2万弱でしょう。
過去の資産がなくて、技術サポートも必要ないなら、
無償の FPC+Lazarus で間に合うかもしれません。
かつては無償版の Delphi もあり、僕も最近まで常用していたのですが、
開発環境の OS を Windows7 に移したところ使えなくなったので、
仕方なしに恐る恐る FPC+Lazarus に移行してみましたが、
不足に感じるところはありませんでした。
初心者相手にコード検証までしてニヤニヤしてる
>>418 がキモイ
424 :
419 :2012/05/01(火) 16:42:05.19
>>425 MSのC# Express EditionにDelphi付いてるんですか?
>>426 ちゃうちゃう、アップグレードの適用対象になるために、何らかの開発ツールがいるから、
一番お手軽なC#EEでも用意しとけってこと。過去のDelphi/C++BuilderでもVSでも、
多分Eclipseでもいい。ちなみに何を持っているかのチェックはない。
こんなんあったのか まだ5を使ってるオレ 最近C#ばっかだけど買ってしまうか
>>528 ROM版N88-BASICでもかまわないと思います。
基本機能すらそぎ落としてあるからStarterはやめとけ あんなイライラするもん使うならC#でもDelphi7Proでもなんでも他の使っておいたほうが良い 買うなら頑張ってPro買え 色々ツールついててかなり使いでがあるよ 安く買う方法も(以下自粛
そぎ落とされた基本機能と便利なツールって具体的には何?
ライセンス形態が違うだろ。 starterは非営利のみ。儲かったらその上にしろという縛りがある。
434 :
411 :2012/05/02(水) 05:26:31.09
Memo1.text :=''; よりは Memo1.Lines.Clear; を使うべきということを覚えました。 ありがとうございました。
どちらも最終的にはウィンドウメッセージを介すので どちらかを使うべきということはないです。文脈に合った方で。 ただMemo1.Lines.ClearよりはMemo1.Clearの方がいいです。
>>435 「べき」ではなく「ベター」が問題なんですけど
最新マシンなら、心配するような動作速度の低下や実行ファイルの肥大化はないので どっちでもいい というのが正解だろうね。それでは納得できないというのならバイナリ比較したり実験したりするしかない。
>>436 質問者自身がそういう言い方してんだけど
>>434 が読めない文盲ですか?哀れだね
他人の批判ばかりで直接回答しない馬鹿は黙ってたら?
お前ら喧嘩好きだなぁw
Delphi7PROでまだ生きていけそうだ
それ即死だろ
ゾンビ 死んでいると気づいていない。 某 ML に多数生息中
そもそもDelphi自体息をしてない件について
また倒産?
日本では息してないようでも ヨーロッパなどでは 大量に作られた業務用VB6製ソフトの代替えとして Delphiの採用例が多いって本当?
Delphiの対応言語は英語版、ドイツ語版、日本語版、フランス語版で このうち日本語版以外はヨーロッパの言語だから、それなりに使われているのでは? ロシアやブラジルとかでも比較的使われていると聞くけど対応言語がないのを見ると 使われているけど売れていないのか?(海賊版や不正使用?) しかし2バイト文字の対応がいまいちの場合もあるが、こうして対応言語を見ると 2バイト文字は日本語だけで、それに対応しているだけでも有難いと思う。
前から日本語版出してたらから、惰性かね。 日本語で情報出してる人なんてほんの少しだから、日本は全滅宣言だしても いいっぽいよね。
日本じゃ4〜5辺りがピークで6からは下降線だろ。 単にGUI的な意味で生産効率が高いのがいいなんて理由で開発されるソフト自体がないからなぁ。 今の状況ならスクリプトに毛が生えた程度の認識しかないだろ。 趣味でやるには投資金額とか大仰だし仕事でやるなら移植性考えるし。せめてバイナリの最適化できれば考えるけどな。
趣味でバイナリの最適化求めるなんてすげぇな。俺は速度はそこまで気にしちゃいねぇけど。 まぁ、趣味だからこそアセンブラで高速化とかしてみたいとか人いるけど。 FMはどうでもいいけど、XE3に期待するか。2009でUnicode,ジェネリックス,2010で 新RTTI,匿名メソッド、XEが正規表現くらいのしょぼーん、XE2で64bitとLiveBindings
つか、XE3よりXE4の方がいいかもね。XE4辺りで、Metroアプリくるとしたら、 WinRTのDelphiバインディングのため、Nullableとか、非同期あたりもそこらへんで 入ってくるのかなと予想してる。
超初心者にRTTIなんていってもわかるわけなかろうにw
今7だけどジェネリックスだけは欲しい 実際どうなん?
あんま複雑な事しなければいけるけど、複雑な事するとコンパイル時に 内部エラーが出始めたり、で、IDE再起動するとなくなったりなくならなかったり。 後、IDEのエディタが追いついてなくて、いらいらしたり。
なんだそりゃー そのあたりのクオリティは相変わらずなのか
次のXE3で、AndroidがサポートされFree Pascalがなくても iOSアプリが作成出来るから(Macを買わなくてすむ) 久しぶりにDelphiを買ってみるかな。
Lazarusでいいやん
>>457 コンパイラがWin上で動いてもMacは必須
var sl: TStringList; begin sl := TStringList.Create; with using(sl) do; ... end; で自動解放に成功。tryf不要になるからまあまあ使いやすいな。 実装は簡単に思いつくだろう。
with using(TStringList.Create) do ... end; の方が変数宣言も不要だし実装も楽 実装は簡単に思いつくけど460には思いつかなかったみたい
IDisposableインターフェース使うってのは無しね OSが変わると使えないから
Delphiのインターフェース実装にOS依存あったか?
Lazarusでは -gh オプションでメモリリーク見つけてくれるよ!
>>464 ほう今はこんな物がフリーであるのか
これDelphiと比べて互換性と生成する実行ファイルサイズはどんな感じ?
フリーに互換性は求めなさんな
ご本家 Delphi もバージョン間互換性がひくいからなぁ
そうか?他の環境に比べたらかなり高めだと思うが
プッ
上手に放屁できましたね^^
GCないと戦えません
GCうぜえとおもうときもある 勝手なもんである
>>472 >GCないと戦えません
自分で作ったら。
昔作ったときはレスポンスが気になって使うのやめたけど
大きくないアプリなら大丈夫じゃないかな?
GCって何?
グランドチャンピオン
継続企業の前提
ガーベジ・コレクション
GC やったら既存のコードは全滅だろ? だから政治的にできない
というか自分で実装すればいいだけじゃんw GCの仕組み知らないへぼプログラマってだけだろw
>自分で実装すればいいだけ すべてのコードが自分のコードならな。共同作業にそんなの持ち込まないでくれよな。 俺がお前の同僚なら、そんな危険なコードを持ち込むな。自慰行為は自分の家でやれ。っていうよ。
>>481 危険てw
どんだけ無知なんだよw
プログラマやめたほうがいいよw
GCがなければメモリリーク起こす糞ソース書くやつってw
Lazarusでは -gh オプションでメモリリーク見つけてくれるよ!
もう、無駄な討論やめようぜ。エンバカの前スレあたりであった流れと同じ展開だな。
エンバカの前スレの連中が逃げ込んできたんでしょ GC があると中間メモリ消費量爆発問題とか考えないトンデモコードが増えるので正直やめてほしい とりあえず ReportMemoryLeaksOnShutdown := True にしてみるんだな。 Lazarus というか FPC のコンパイルオプションだ。 FastMM のデバッグバージョンのパチもの。
シングルスレッドアプリならいいけど、マルチスレッドアプリしか最近作ってない俺には GCないとだるすぎるんだよね。GCあっても同時実行される部分は保護しなきゃいけないのはこれはGCとは 関係ないからやるのはいいんだけど、GCないとオブジェクトの解放タイミング合わせなきゃ いけなくて、やってらんないんだよな。とりあえず、ユーザー定義のオブジェクトは今はInterfaceベースにして 逃げてるけど。
とりあえずGCをろくに知らずにGC欲しいとか叫んでも無駄w
>>488 だから自分で実装しろよ。多くて20行ぐらいだろ
>>487 禿同。定期的スイープで動作も重くなる品。
20行程度のコードでは自動解放が関の山。それも既存コードと衝突しまくりでバグだらけ。 コンパクションできるようになってから議論に戻ってね。
ロートルの馬鹿議論は馬鹿スレでやってくれ
だから、エンバカウオッチャスレの前スレ読めっておまえら。メモリモネージャとっかえて
できる・できないの話はどうだっていいんだよ。
>>481 が言うみたくオナニーは
家でやれよ。おまえらに欠けてるのはすぐにできる・できないの話しかしなくて
生産性とか信頼性とか全く考えてない事。おまえらはオナニーを他人に見せつけようと
必死すぎるんだよ。
ロートルの馬鹿議論は馬鹿スレでやってくれ
XE3出たか?
/j /__/ ‘, // ヽ ', 、 // ‘ ! ヽ …わかった この話は続けよう /イ ', l ’ iヘヘ, l | ’ | nヘヘ _ | | l ハイ!! もっとやれ | l_| | | ゝ ̄`ヽ | |〈 ̄ノ ゝソノノ `ー‐' l ! ¨/ n/7./7 ∧ j/ / iヽiヽn |! |///7/:::ゝ r===オ | ! | |/~7 i~| | | ,' '/:::::::::::ゝ、 l_こ./ヾ.. nl l .||/ | | | | l {':j`i::::::::::::::::`ーr ' ||ー---{ | '" ̄ ̄iノ .l::::::::::::::::::::::∧ | ゝ ', , 一 r‐‐l γ /、::::::::::::::::::::::::〉ー= ___ ヘ ヽ } / o |!:::::} / o` ー 、::::::::::::i o ,':::::::{`ヽ ヘ ノ / o ノ:::::∧ /ヽ o ヽ::::::::| o i::::::::ヽ、 / / / ノ::::::/ /::::::::ヽ o ヽ:::| o {::::::::::::::Υ /
文末にwをつける彼が問題なんだって。彼の性格を表す典型的なやりとりが
>>447 から
>>457 。
平和にレスが進んで他の人は自分の意見・考えや質問がメインで発言してるのに、
453 :デフォルトの名無しさん:2012/05/04(金) 00:43:41.36
超初心者にRTTIなんていってもわかるわけなかろうにw
彼だけは、自分のすごさをアピールするしか、頭にない。
誰もそんな事興味ねぇし、二の次だから基本彼は放置されてるが、遂に
>>481 が虎の尾を
踏んで、後は、
>>482 ,
>>484 ,
>>489 で彼がぶち切れる。
彼がこの違いに気づかなければ、また起こるだろう。
長駄文乙w
441 :デフォルトの名無しさん:2012/05/02(水) 23:19:25.32 お前ら喧嘩好きだなぁw 自分が喧嘩してるじゃんw
GC厨はそもそもスレ違い
ガベージコレクションってそんなに簡単にできるものなん? そんなに簡単なら、なんで標準装備してくれないの?
この状況でその話を蒸し返すとはつわものめ。
珍しく伸びてると思ったらGCGCって・・・ ウォシュレット付きの最新便器でもウンコしたら自分で手洗うだろ? そこまで自分でやりたくないのか? ウンコ着いたらしっかり洗えよ自分で
>なんで標準装備してくれないの? 互換性。
>>502 簡単なものなら、多少のDelphi経験があれば作れるよ。
メモリーマネージャ(MM)との間にアダプターを噛ませて
メモリー確保と解放を記憶しておき、終了時に解放されていなければ解放するだけなら。
でも、メモリを使うたびに記憶するからレスポンスは遅くなるし終了時にしか解放されない。
それに、OSがWindowsならプロセス終了時に解放してくれるから有り難みは少ない。
PascalやC/C++みたいにスピード重視だと「標準装備」ちょっとって感じかな。
徹頭徹尾無内容な長文書く才能は素直に認めるから そろそろ隔離されてくれるとありがたい。
3DCG製作にあんまり興味がないのに、Blenderの勉強から始めないといけなくて、 じゃあもっと簡単なアプリを作ろうかと思うとMACで何かやっているビデオを延々と見せられて、 ビジネスアプリのデモはピザとか家具とかで、そんなの作らないし。 FireMonkeyはハードルが高いな。
>>510 一般的なGCの作り方とは全然違うというか、そもそもGCですらないよ
簡単なメモリリーク検出機能の作り方と言った方が正しい
動作的には検出ついでに解放しているに過ぎないし
>>511 お前には誰も聞いてない。
他の奴のケチだけ付けて、自分では何一つ生産的ことを言えない。
そろそろこんな奴、隔離されてくれるとありがたい。
>動作的には検出ついでに解放しているに過ぎないし 検出して解放するのをGCというのだが、コイツはバカ?
この惨めなおっちゃんにもうちょっとましな暇の潰し方が見つかりますように…
なんか荒れてるけどスレタイに沿って超低レベル質問を・・・ Delphi6 Personalを使ってWindowsXP上で色々と試している最中なんですが アプリケーションのFormの右上に出てくる×ボタンを押した時、 なんのイベントが発生するのでしょうか。 ×ボタンを押したらonCloseに設定した正常終了の流れに 載せたいのに、無視されてそのまま終了してしまふ
OnCloseQuery→OnClose→OnDestroy
518 :
515 :2012/05/07(月) 22:42:54.54
>>516 ありがたふ
・・・OnClose通ってたんですね。俺は何を勘違いしたんだろう
くだらないレベルの質問するなよ 答えるほうもどうかしてる
最近本当にVBの方が優れてるよね
VB はクソ。C# つかえ
C#は中間言語なんでちょっと抵抗が。
違いが判るようなやつは 2ch には来ない
.NET Frameworkってwindows7なら最初っから入ってる? C#ってアプリ配布がめんどくさい
>>513 >>507 は終了時に「未だに使われたまま」のメモリを解放するわけでしょ?
使われていないメモリを検出して解放するのとは全然違うじゃん
>C#ってアプリ配布がめんどくさい まともなインストーラー使え。 または .config ファイル書いて必要な Runtime 自動で落とすようにしなさい。 まぁたいていの環境では既にインストール済みだが。 デルは実行ファイルの大きさがでかすぎるのが致命的
> デルは実行ファイルの大きさがでかすぎるのが致命的 昔から言われてるけどHDDとかの容量考えたら、そんなに気にすることでもないんじゃないの? 実際本格的なアプリ作ったらどれくらいになるの?
実行時のワーキングセットが大きいと、キャシュからあふれて速度低下がおきるぜ
うちの会社では入力系のプログラムが実行時パッケージを使わないで一番大き くて約7.3メガ
でかいね 社内配布だから大きくてよい て理由なら、 社内使用だから .NET ランタイムのインストールは前提で良い て理由も通るな。
>>526 GCとは、”不要”になった領域を自動的に解放する機能。
デルの実行ファイルが大きい理由って、使ってないVCLとかも含むから?
デルはVCL使用しなければ小さくなる
それなら FPC/らざるすでも良いな。
>>533 そうだなんだよな。だから
>>507 はGCとは言えない。
どういう手法のGCも、ルートが生きてて参照も残ったままの領域は不要かどうか判断ができないからな。
不要になったメモリとリークしてるメモリは全然別物だという認識が無いんだろうね。
Wikipediaにもこういう記述がある。
>ただしガベージコレクションにおいても、今後使用することのないオブジェクトへのポインタを
>いつまでも保持しているようなコードでは、いつまでもオブジェクトが解放されず、メモリ不足を起こしてしまう。
>これは論理的な設計の問題であり、ガベージコレクションを持つ処理系においてもこの種のメモリリークは発生する。
GCがあっても発生するようなリークを、終了時にまとめて解放する処理がGCだなんて言えるわけがない。
まだゴチャゴチャ言うんだったら、まずこの記述を「正しい」記述に書き換えて欲しいね。
>>536 あっちは何もしなくてもDelphiよりでかい
>>537 >ただしガベージコレクションにおいても、今後使用することのないオブジェクトへのポインタをいつまでも保持しているようなコードでは、
>いつまでもオブジェクトが解放されず、メモリ不足を起こしてしまう。これは論理的な設計の問題であり、
>ガベージコレクションを持つ処理系においてもこの種のメモリリークは発生する。
Wikipediaの要約:GCにおいても論理的な設計の問題でメモリリークは発生する。
>GCがあっても発生するようなリークを、終了時にまとめて解放する処理がGCだなんて言えるわけがない。
上のWikipediaとまったく関係がない。上はGCでもメモリリークは発生すると書いてあるだけ。
それを「終了時にまとめて解放するのがGCではない」と、どうしたら読み取れるんだ?
そもそも前半の「GCがあっても発生するようなリークを」と後半の「終了時にまとめて解放する処理がGCだなんて言えるわけがない」が繋がっていない。
論理的思考が欠如している。
>まだゴチャゴチャ言うんだったら、まずこの記述を「正しい」記述に書き換えて欲しいね。
Wikipediaは正しく書いてある。読み手の問題。
>>538 付属のstrip.exeを使うとよいよ
そろそろスレチだと気づいてくれ。
543 :
デフォルトの名無しさん :2012/05/09(水) 11:51:15.08
delphi6 personalをインストールしたいのですがググってもリンクが切れてるページしか出てきません。 どなたかダウンロードできるページを張っていただけませんか?
GC キチガイは RAN かな Fusa かな?
あいつら以外にもバカはたくさんいるだろ?
バカでも、日本語が読めないバカは少ないだろう?
547 :
デフォルトの名無しさん :2012/05/09(水) 12:49:50.02
質問させてください。 TIdTelnetを使って開発しています。 例えばAとBというパソコンで開発していたとして、 IdTelnetのプロパティを適切に設定した後、 procedure TForm1.FormCreate(Sender: TObject); begin IdTelnet1.Connect(); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin IdTelnet1.Disconnect; end; 上のコードをAのパソコンで実行すると全く問題なく動くのですが、 Bのパソコンで実行すると、IdTelnet1.Disconnect;のところで以下のようなエラーが出ます。 --------------------------- プロジェクト Project1.exe が EAccessViolation クラスの例外を生成しました。 'モジュール 'Project1.exe' のアドレス 00459D8C でアドレス 0000006C に対する読み込み違反がおきました。' --------------------------- これの原因としては、どのようなことが考えられるのでしょうか? 一方ではうまくいくのに、もう一方ではエラーが出るというのがよく分らなくて。 PC側の設定とかでしょうか。
XE3 でたか?
Disconnectするまでは動いてるってこと? その部分だけが問題ならトラップして無視すればいいだろ
Cというパソコンで実行してみて、その結果がAと同じかBと同じかによって、 A&C と B&C との共通点と相違点を探る。
>その部分だけが問題ならトラップして無視すればいいだろ そんなヤツの作ったプログラムは使いたくないなぁ...
ありがとうございます。
>>549 はい、Disconnectするまでは普通に動いてます。
自分でもいろいろ、原因を探ってみたのですが、そうするしかなさそうです。
>>550 いまんとこ2台しかPCがないのですが、今度別のPCで試さしてもらおうと思います。
D7でつくったDBアプリを数台のクライアントに入れてるんですが アップデートするたびにいちいち全部に入れて回るの面倒なので 簡単に配布する方法ってないですか 更新するのはEXEファイル1つだけです ネットワークの構成は2008サーバーとクライアントにwin7が5台です
XE3出たか?
>>554 共有フォルダを作って毎回xcopyしてからexeを起動する
もっと簡単に配布する方法ってないですか?
リモートデスクトップ
クライアントにアップデートボタンをつける 押す→ランチャー起動→クライアント終了 WEBからコピーしてくる→クライアント上書き クライアント再起動→ランチャー終了 これでおk
コード書かないで、コンポ一発でできないものでしょうかねぇ
だめだこりゃ
XE3出たか?
JavaWebStartで作り直せ
566 :
デフォルトの名無しさん :2012/05/10(木) 19:31:10.43
>>554 クライアントPCでDBアプリを直接起動させるんじゃなくてさ
DBアプリのバージョンを確認してからDBアプリをShellExecute 起動させるか
上位バージョンがあったらコピーしてきてからShellExecute させる実行ファイルを作って使ってもらえばええがな
AppWaveという手も
.NET なら配布簡単だよ
そーだね
馬鹿には無理
そーだね
572 :
554 :2012/05/11(金) 02:18:28.41
色々な意見ありがとうございました これから試してみます
XE3出たか?
XE3出たか?
XE3出たか?
夜型ですね
多い日の夜用薄型
Tiobe で Ruby にも抜かれきったか
さすがにPL/SQLには勝つだろ
XE3出たか?
Delphi7を使用してます。 プロジェクト内にあるフォーム&ソースをコピーして新規フォームを 作りたいのですが、スマートに行う方法はないでしょうか。 今は、フォームAからフォームA'を作成する際 新規フォーム作成,A'に名称変更→フォームAのコンポーネントをA'にコピペ→ フォームAのPASをA'にコピペして名称置換 とやっているのですが、 もっとまともなやり方があるような・・・
フォームの継承とか言ってくる奴がいると思うが 絶対に耳を貸すんじゃないぞ。
フレームでやれ
>>582 コピーであって継承ではない、というのは意味わかってやってんだよね?
フォームAの.pasと.dfmを別ファイルにコピーして新しいユニット名に合わせたファイル名にして、
この状態でエディタで.pasと.dfmを開いて、.pasの先頭のユニット名をファイル名に変更、
.pasにあるフォームクラス(TForm1とか)を新しいものに一括置換、その下にあるフォームの
変数(Form1)をフォームクラス名に合わせたものに変更、.dfmの先頭の
object フォーム変数名: フォームクラス名の部分を上に合わせて変更、これでエディタを終了、
IDEでプロジェクトにこのユニットを追加、という手順でいいはず。
>>585 アホだな〜w、ファイル名とUnit名だけ変えればいいだよ。
カプセル化とかの概念を理解出来ている?
>Delphi7
>>586 まあそれもそうだな。ユニット名以外はあとでIDEで変えれば問題ないか。
カプセル化の概念とはあんまり関係ないけど。最近知った言葉だから使ってみたかったの?
AをA'にリネームしてから名前を付けて保存 プロジェクトを保存せずに閉じる 再びプロジェクトを開いてA'をプロジェクトに追加 俺はいつもこうやってるけどなんか問題ある? うっかりAを上書き保存しちゃうとかプロジェクトを保存しちゃうと涙目になるけど
>>588 やっぱりアホだ〜w、Unit名だけが変わっていればいいんだよ。
Unit自体がカプセル化だと理解出来ていないだろうw
591 :
デフォルトの名無しさん :2012/05/13(日) 01:55:46.00
>>585 似たようなプログラムを量産する時は、
フォルダにベースとなるプロジェクトを作っておいて
後は新規フォルダにコピーして作ってる(プロジェクト名だけ別にして保存)
Unit1.pas などの構成する名前は共通にしてるよ
TForm1.〜
そうすると関数の使いまわしが楽だから
WHD を使って相互にデータをやりとりするようなのは、TForm1.〜 も変更してるが
Form1.Caption なんかも const で書いてFormCreate で入れるようにしてる。
592 :
582 :2012/05/13(日) 10:07:11.98
>>583-591 ありがとうございます。
>>589 氏のやり方をしていて、修正後うっかりF9押して自動保存→涙目
はやったことが・・・
今回はベースとなるものをある程度作ってあるので
>>585 氏のやり方を使わせていただいて
今後同じようなことがある場合は
>>584 ,591氏の方法を合わせて使わせて頂きます。
ありがとうございました。
つーかコピーしたいユニットをIDEから名前付けて別名で保存→元の名前のユニットをプロジェクトに追加でよくね?
それが普通じゃないのかw
アホだ〜とか言いながら普通のことを難しくやる人がこのスレにはいるからなw
インスタントラーメンを作るのにいちいち講釈たれるようなもんだな
アホだな〜w、カップヌードルにお湯入れたらセロハンテープ貼ればいいだよ。 蓋を閉じるって概念を理解出来ている? ↓ つーかシール付いてんじゃん こうですか?分かりません><
漏れはシール捨てて蓋の端に箸乗せてるだけだわ
>>594-598 惨めにアホの上塗りか〜w、お前は、本当に可哀想だなw。
結果が「ファイル名とUnit名だけ変えればいい」で
その為の手段が「名前付けて保存」なんだよ。
結果と手段も分からんバカとはw
600 :
デフォルトの名無しさん :2012/05/14(月) 09:41:33.21
delphi6 personalのインストーラをダウンロードしたけど、 インストール番号とキーがわからないからインストールできないです。 誰か助けて。
馬鹿には無理
C#でもやればいいんじゃないですか?(笑)
603 :
デフォルトの名無しさん :2012/05/14(月) 11:09:11.43
>>601 うるせぇ。平日のこんな時間から暇なことしてんな。
早く、勉強か仕事に戻るんだ。
>>599 ファイル名だけ変えればUnit名も変わるから、
「ファイル名とUnit名だけ変えればいい」って書くのはおかしいね
馬鹿なんだね
>>599 みたいに後から「実は知ってたけど」って書くのが一番恥ずかしいわ。
必死に煽って自分の惨めさを誤魔化してるようだけど。
この後も必死に言い訳するんだろうけど頑張ってね。
馬鹿には無理
自分以外の全員が敵に見えるのは病気だから気をつけなさいよ
すくなくとも
>>585 以降は一人じゃない
組込用のスクリプトでDelphi側で個別のアクセス用関数を定義することなく自由に application.title = "hello" form1.listbox.items.add("world") と書けるものあったら教えて下さい。
つまりは出来合いのものはないかという質問だと思うが、 RTTIさえ理解してれば簡単に作れるよ
>>609 相変わらずのアホ〜ぷりw、逆も一人じゃないと思わないのかw
お前は、なんでもかんでも考えが浅はかなんだよw
結局、技術や知識でまけると人間性しか批判出来ない負け犬根性がw
:::::::::::::::::::::::::::::::>-、, / ::::::::::::::::::::::::::::,::::::::::::::ヘ / . 自 母 半 こ 実 で ::::::::::::::::::::::::/ .∨ヘ:ヽ | 演 . ち 数 の . は も :::::::::::::::::::::/ ',:', 人 . な ゃ 以 ス . ね :::::::::::::::/ ヽヘ \ ん . ん 上 レ . ・ ::::::::ィ-、、, ',.} / よ . の は の . ・ :::ノ _``ヽ‐ィ 、____ lリ / ・ ・ :ハ =イ、__〇、 ./__´| 人 . . ・ .l | ´`ー─‐' /<´〇 \. . ・ | ヘ ̄` / . \ ../ | ヘ . ' /イ、_____________,,,/ .| __ ,,,〉. ' ,,、、─-、、_ .|l _、´ / /──-、__ \ .J ,'イ─-> / /‐、_ 、___,,,、\ ヘ ____  ̄ / |イnヽ) ィn.ヾ,,.〈 .ハ ∠´ .>、 >、 / | ̄(´`  ̄ |ィヽ' ./'´ ̄`'´ ̄`ヽ ヽ 、 > _,/ / ,二、 .リ6/ 〈 '>、、 `-<.ヽ l ヘヘ |||ヽ___ ヽ 〈三三〉 レ _ノ (.} b__< b_) リハ ヽヽヽ..||| ヽ `ヽ、 _,,、--\ ‐ ,, |ヽ Y ,--、. /ノ ヽヽ、||| .ヽ ヘ / 二二:{ )ゝ--イ ∠ ヘ__ \ -=-` /´ .ヽヽ,'.| ', \ / ──ヽ /, == イ / / ヘ 〉、__,,,イ,,ハ .∨/ l ヘ .| r- ///〇 \ | / ヽ / \ / .ヘ
ってか恥ずかしいやつが居るな。思わず読んでて赤面しちまったよ。
>>613 >結局、技術や知識でまけると人間性しか批判出来ない負け犬根性がw
お前自己紹介うまいな!
馬鹿には無理
言うだけならタダだしな
簡単詐欺
>>616 今日も誹謗中傷だけとはアホ過ぎるw
>>588 >まあそれもそうだな。ユニット名以外はあとでIDEで変えれば問題ないか。
自分で間違いを認めといて、お前って本当に女々しいぞw
知識もないくせに、超初心者向けだからってアホなことばかり書くな、アホがw
アホ以外に知ってる言葉無いのかなこの人
スルーしろ
質問です。 DelphiのUnitはカプセル化だと主張している人がいたのですが、 これまでそういう主張をした本やサイトを見たことがありません。 公式のヘルプでUnitについて調べてもそのような記述はありませんでした。 具体的にどういうことなのか分かる方はいないでしょうか? もしくはそれを説明した本やサイトを紹介して頂けるとありがたいです。
>>624 初心者は、難しいことを考えず
Unitの使い方を覚えれば大丈夫
>>624 interface=public=c言語の.h部分
implementation=private=c言語の.c部分
という意図でそう言っているのだろう。
delphiをpascalに変えて検索してみればoop以前の情報が色々引っかかるかも。
>という意図でそう言っているのだろう。 違います
>>624 >具体的にどういうことなのか分かる方はいないでしょうか?
つまり、カプセル化やUnitの意味が分からないということ?
>>624 酷い質問だ。
>>588 >カプセル化の概念とはあんまり関係ないけど。最近知った言葉だから使ってみたかったの?
を真っ向から否定するような、質問をしなくても...
いくら相手がトンチンカンなことを書いていても
もう少し相手の身になって質問しないと、スレが荒れるから。
100円?
>>630 相変わらずアホだな〜w
Unitがカプセル化だと理解出来ていないだろうw
結局、技術や知識でまけると人間性しか批判出来ない負け犬根性がw
( ´_ゝ`)フーン
質問です。 TBottun1を押した時に、TMemoに直前に打ち込まれた1文字(1byteか2byte)を削除するにはどうしたらよいですか? また、複数回押した時には複数文字削除したいのですが、よろしくお願い致します。
何が分かんないの? TMemoの文字列を取得/設定する方法? 文字列を削除する方法? ボタンを押した時に処理する方法?
>>637 ・TMemoの文字列を取得/設定する方法
・文字列を削除する方法
取得する方法もわからなかったので、できれば両方教えていただきたいです。
>>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;
Backspace送った方が楽じゃね?
>>639 ありがとうございます!
とりあえず動作できました。
>>640 送るとはどういうことでしょうか(汗
>>639 質問者が納得してるんならいいんだけど、このコード厳密には一番下の行の右端を削ってるだけで
最後に書かれた文字とは限らないよね。
>>642 先ほどそれに気づいて今悪戦苦闘していますが…
無理です。どうしたらいいのでしょうか。
なぜそういう動作を実現したいの? あとDelphiのバージョン書いた方がいいんじゃない
>>641 PostMessageでWM_CHAR,使ってキーコードをメモに送りつける。
まぁWM_CHARでググれ。
>>644 ググったらすぐ出てきたぞ。
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Undo;
end;
直前に打ち込まれた文字が最終行の最終文字とは限らないんだったら、結構めんどくさい気がするんだが
最後コピペで貼り付けられたら どういう動作をする仕様かまだわかってないもんな
別にキャレットの位置だけ把握してりゃBSだけで済むってのに
>>649 俺もそう思う。
単純にバックスペース送るのも違うし。
入力される直前の状態を記憶しておいて、ボタンがクリックされたら
無条件に最後に記憶しているものに置き換えるのはどうだろう。
同じなら同じで問題ないと思うし。
>>636 こんな感じで仕様を出してくるSEがいるが、
本当に駄目SEの典型だよ。
この仕様でいくと、まずTABや改行も一文字と考えるのかが疑問で、実装方法として
BSで実装するのは、カーソルが移動可能だから前が直前の文字とは限らない。
Undoで実装は、1文字だけならいいが
>また、複数回押した時には複数文字削除したいのです
という仕様もあるから駄目。しかし
>>648 が言うようなアホじゃない。逆に考えの浅いコイツの方がアホだと思うが。
エディターの「元に戻す」みたいな機能を実装したいなら?
TMomoじゃなく無限Undoを備えたエディターコンポーネントを使うのが楽。
Tea桃
なんかすごく品の良いフレーバーティーを想像した
TMomoとかTOppaiとかの話か
TSumomo = class(TSumomomomomomomomonouchi); TMomo = class(TSumomomomomomomomonouchi);
ずいぶんと、フラストレーションが溜まっている人がいるな。
打ち直したいってことなら、前回の入力を記憶しておいて、書き戻せばいい
本多さんのエディターを使いたいために、未だ7を使ってるんだけど、 新しいデルファイでなんか良さげなコンポある?
Unicode対応版っていってもまともにUnicodeを扱ってないSynEditとか、ホンダさんエディタ にもう意味はねぇよーな。そもそも固定フォント専用だし。
俺みたいに固定フォントで不満がない人間にはホンダさんエディタ便利なんだよ。 あんな凄いの作れるホンダさんでもUnicode対応は大変なんだろうか。 たぶん、円馬鹿の迷走ぶりにやんなったんだろうけど。
Unicodeって言っても日本語だけじゃないんだって。日本語メインだと、1コードポイント=1文字みたいな イメージあるけど、カーソル配置にしたって、書記素という境界におかなきゃいけないし、RTLとLTRの切り替えとか まともにやると死ぬというか無理。WinではDirectWrite使えば、えらい楽になるけど、Uniscribe使うと 幾分楽になるがそれでもUniscribe自体がLowlevelだし。UniSynEditのUniscribe版の使い方は はっきりいって無意味でハンドリングまったくできてない。というか、DirectWrite使えば、 エディタ作成で、テキストのレイアウトやカーソル配置やヒットテスト全部やってくれるから 前に比べれば結構楽だぞ。
というかエディタメインのプログラム作るならみんなのために作ってよ。今、ホンダさんソースをさらりと みたけど、メインのHEditor.pasは1万2千行くらいで、色々、文字の操作や折り返しやキャレット配置・レイアウト などでごみごみしてやってるけど、DirectWrite使えば、それら全部ごっそり削除して 3千行くらいに圧縮できると思うから。まぁ、他のコントロール同様、基本的なキーボード、マウス、スクロールメッセージの 処理とかは他と一緒でやらなきゃいけんけど、 後、Highlighterをプラグインできるようにするならそこらへも必要だけど。 DirectWriteは最強だよ。XPで使えんけど・・
今のデルファイ用コンポーネントでホンダさんエディタくらい、インパクトのあるものって何?
エディタはビュジュアルコンポーネントだし、それだけで、インパクトあるからね・・ 他の分野のコンポと比較しするのはちょっとあれだけど。俺は信頼性に重きおいてるから、 外部コンポ使うのはよほどの事ないと。HTTPなら、Indyより、WinInet,WinHTTPとかちょっと したマルチフォーマットのテキスト表示するならWindowsのRichEditや今回のDirectWrite使うし。 外部コンポ探すより最初はWinAPIの方優先するからよくわからんということで 他の人頼む。スクリプト絡みで、作者がずっと頑張ってるDWScriptなら使ってもいいかなと。
後、Delphiで今のところ、クロスプラットフォームのアプリ作る予定なんて全くないから ブラウザ埋め込む場合は標準のTWebBrowserでいいけど、Delphi Chromium Embedded の作者は応援してる。
>>672 じゃあtorcoloor467あっとyahoo.co.jpまで連絡を。
3桁なら、どっか自販機あされば、100円くらいはみつかるだろうから、 それでお願い。
馬鹿野郎、3桁つったら001円だよ
111(2進)円で
小数点以下3桁かもしれない
Delphiで使えるx86とx64用のディスアセンブルライブラリってありますか?
俺のおしっこ100ccで。
>>673 作れるなら金とっていいからぜひ作って公開し下さい。
>>673 じゃないけど有料ライブラリとして公開した場合リアルな話いくらまで出す?
個人的には2500円位出しても良いかな。 たくさんの人に払ってもらうとなると、1000とかじゃなかろか。
>>682 ソース付きなら TEditor と同額出す
>>684 昔、使ったことあるな。
これもいいよね。
へぇ結構金出すもんなんだ
技量がない分は金でカバー
金がない分はごまかしでカバー
偉い方教えてください。よろしくお願いします。 DELPHI2005を使って、SQLSERVER2000へアクセスしてきました。 このほど、SQLSERVER2008にアップしましたがDELPHI2005から ADO(dbGO)またはODBCで可能かどうか知りたいです。 ADOだと接続テストは成功するのですが、 実際にコンポーネントを配置して、アクセスすると。 ログインのダイアログはでるのですが、ログインできませんでした。 私のミスかしれないです。 ODBCはまだ試していません。
普通は接続できるぞ。
訳あってDelphi5を使ってるんだけど、 ビットマップの上に重ねたビットマップを半透明表示したい。 上のbitmapのPixelFormatをpf32bitにする Scanlineしてalphaをいじって再描画 ってのが浮かんだんだけど、このバージョンって32bitのbmpって扱えなかった筈 何か良い方法は無いかな・・・。
693 :
デフォルトの名無しさん :2012/05/27(日) 23:30:04.59
自分でアルファ処理をするんだよ。scanline つかって。
RGB値の半分だけ足せばいいんじゃないかな それで半透明っぽくなるはず
>>689 ごまかせるのなら技量があるってことだぜ
つかアルファチャンネルが必要な意味がわからない 2枚をただ合成すればいいんでしょ 足し算するだけだから楽勝だ 32bit BMP って R G B A の4つの情報か アルファチャンネルいらねーしw 24bitで十分いける
>>692 32bitのビットマップ自体は扱えるよ。透過処理がされないだけ
半透明ってのが50:50で合成するって意味なら
>>696 の言う通り24bitでいけるが、
足しただけじゃなくて2で割らないといけない(単純に足すだけの方法は加算合成)
古いOSで実行しないのならWin32APIにAlphaBlendというそのままのAPIもある
こいつは計算方法がちょっと特殊だけど、半透明ぽく見せたいだけなら全然問題ない
698 :
692 :2012/05/28(月) 21:27:48.98
ありがとう。 やりたいことは、フォームに複数のビットマップが貼られてて、全部の明度を一度に下げたいんだ。 なら黒いビットマップを上からかぶせて、透明度を変えればいいんじゃねピコーンってなったんだけど、 やっぱり全部列挙してRGBをいじるか、Windows.AlphaBlendになるか。
それならAlphaBlendプロパティを弄ったフォームを上から被せるだけでもいいんじゃね?
>>699 TFormのAlphaBlendプロパティはDelphi6からですよ。
690です。 恥ずかしいことに、プログラムのミスでした。すません。 レスをサンクスです>691
>>700 そっか
なら普通にAPIでレイヤード化で
ちょっと初歩的な質問で恐縮ですが いつのまにか、デバッグ時にエラーが発生しても デバッグ画面の対応行で止まってくれなくなりました。 どこの設定を変更すると、本来の状態に戻るんでしょうか? よろしくお願いします。
バージョンも書かずに質問とな オプションのデバッグ関係のところに例外で停止とかなんとかいう項目があってoffに なっているはずなのでこれをonにする、でどうよ
705 :
703 :2012/05/29(火) 20:33:53.16
>>704 済みませんでした
なんか突然"runtime error 216"が出始めて
706 :
703 :2012/05/29(火) 20:34:46.17
って、またバージョン書くのを忘れました XEです
最適化のチェックを外して、「再構築」を行う。これでデバッグモードでビルドできる
>>707 ありがとうございます。
ただ、Debugの「最適化」はfalseになっています。
後出し細切れいくない ちゃんと全部まとめて書け
プロジェクトのdcuが古くなって再構築されない状態になってんのかね デバッグの位置がずれるソースmysource.pasに対応する myproject\win32\debug\mysource.dcu(または*.dcu全部)を消してみるとか
>>708 再構築に最適化は関係ないので大丈夫。
逆に変えると動作が違ってくる可能性もあるから。
>なんか突然"runtime error 216"が出始めて
ウィルスでは?
"runtime error 216"で検索すると 確かにウイルス関係がヒットするな
今回の原因かどうか分かりませんが、 また最近のバージョンは分かりませんが Delphiのランタイムエラー216は一般保護例外です。 ユニットファイルの初期化部(initiailzation)や終了処理部(finalization)で まだ実体を生成していないオブジェクトのプロパティを読み書きしようとしたりすると デフォルトの例外処理は行われず、Runtime error 216のメッセージボックスが表示されます。 もしプログラムの起動直後に起きるのならこの可能性がありますので F7キーでトレースしていくと良いと思います。 ------------------------ ○おまけ Runtime error 216を起こすサンプル メインフォームForm1を持つUnit1と以下のようなUnit2があるプロジェクトを実行すると ※のところでエラーが発生、Runtime error 216ダイアログが表示されます。 unit Unit2; interface implementation uses Unit1; initialization // ここはフォームが生成される前に呼び出される Form1.Left := Form1.Left + 1; // ※まだForm1 = nilなのでここで発生! end;
ヌルポってことか
ナマポか
Delphi7です 新規アプリでXPManをUsesしてボタン3個設置でコンパイルします 出来上がったExeをWindows7で実行し、おもむろにAltキーを押すと フォーカスが無いボタンは消えてしまいます 誰か直し方知らない?
消えたように見えるだけってことだろ 再描画せぇ
ものっそい基本的なこと聞いてごめん。 Timageを配置して、 image.picture.loadfromfile('なんとかbmp')をすると、image.picture.bitmapにbmpが入る。 image.pictureがnilでなければ画像が保持されてるってことで、image.picture:=nil ってやると画像がクリアされる。 ここまで理解した後、Tbitmapをcreateして、 bitmap.loadfromfile('なんとかbmp')ってやった後、初期化しようとしてbitmap:=nilってやったら、 インスタンス自体がどっか行ってしまった。 初期化したければbitmap.assign(nil)で、画像がassignされてるかはbitmap.emptyで判定、が正解?
>>717 たしかに再描画すれば出てくるんだけど、Altキー押されるたびに
フォームの全コントロール再描画するのってスマートじゃないなーと
VistaAltFixUnitってのを使えばいいと聞いた事があるぞ。
Vista騒動の時にさんざん見たなあw
TBitmapをCreateしてから、何度も使いまわす意味がわからない Freeしときゃいいのに nilを代入するのはただヌルポにするだけで、初期化処理をしているとは言えない 厳密に初期化したいならばCreateしなおすべきだ
VistaAltFixUnitでぐぐったら色々出てきた 再描画するのは同じやったけど参考になったわ
Formを doublebuffered := true すればいいってわけじゃないのか
>>724 やってみたら酷いことになったじゃないか
TImage.Pictureにnilを代入するとクリアされるという仕様を作った馬鹿は
>>718 みたいな勘違い馬鹿を大量に生み出したことを反省すべき
なわけねーだろw
すみません、質問です。
C/Sで2層のWin32アプリを.NET Frameworkのアプリに変更したい場合
何か注意点ありますか? やはり最低でも3層にしないと
.NETでは、クライアントから直にDBをみにいけないんでしょうか?
環境的にはVPNやイントラも可能です
またEXEの配布はサーバー上の
http://www.xxx.com/xxxx.exeを 直に実行しいつでも最新が実行されるように考えています。
何でそれをこのスレで聞こうと思ったのか、私気になります!
>>727 PCharへのキャストは文字列が空ならnil、そうでなければ先頭文字のアドレス。
/j /__/ ‘, // ヽ ', 、 // ‘ ! ヽ …わかった この話はやめよう /イ ', l ’ iヘヘ, l | ’ | nヘヘ _ | | l ハイ!! やめやめ | l_| | | ゝ ̄`ヽ | |〈 ̄ノ ゝソノノ `ー‐' l ! ¨/ n/7./7 ∧ j/ / iヽiヽn |! |///7/:::ゝ r===オ | ! | |/~7 i~| | | ,' '/:::::::::::ゝ、 l_こ./ヾ.. nl l .||/ | | | | l {':j`i::::::::::::::::`ーr ' ||ー---{ | '" ̄ ̄iノ .l::::::::::::::::::::::∧ | ゝ ', , 一 r‐‐l γ /、::::::::::::::::::::::::〉ー= ___ ヘ ヽ } / o |!:::::} / o` ー 、::::::::::::i o ,':::::::{`ヽ ヘ ノ / o ノ:::::∧ /ヽ o ヽ::::::::| o i::::::::ヽ、 / / / ノ::::::/ /::::::::ヽ o ヽ:::| o {::::::::::::::Υ /
>>728 >>731 ですよね。
DelphiのStringは賢いのでヌル文字入りになってるから、余計なことはしなくて良いはず、
しかしこの人はStringから作ったポインタの有効期間について思い違いをしたので迷走…
そういうことでしょうかね?
何でそれをこのスレで聞こうと思ったのか、私気になります! > 733 つか、本人に聞いたら?
>>731 ,733
本当にそんな初心者レベルの話なのか?
文字の最後に2バイトヌルを追加しないと
相手が正しく文字を判断してくれないケースとか考えると
例えば、64bitOSとかUTF-8のBOMの影響とか?
まっ理由が書いてないから、なんともいえないけど。
間違えた >相手が正しく文字を判断してくれないケースとか考えると >PCharが正しく文字を判断してくれないケースとか考えると
>>735 ,736
また間違えた。
よく見たら別に文字列に#0#0を加えているわけじゃなかった。
/j /__/ ‘, // ヽ ', 、 // ‘ ! ヽ /イ ', l ’ iヘヘ, l | ’ | nヘヘ _ | | l | l_| | | ゝ ̄`ヽ | |〈 ̄ノ ゝソノノ `ー‐' l ! ¨/ n/7./7 ∧ j/ / iヽiヽn |! |///7/:::ゝ r===オ | ! | |/~7 i~| | | ,' '/:::::::::::ゝ、 l_こ./ヾ.. nl l .||/ | | | | l {':j`i::::::::::::::::`ーr ' ||ー---{ | '" ̄ ̄iノ .l::::::::::::::::::::::∧ | ゝ ', , 一 r‐‐l γ /、::::::::::::::::::::::::〉ー= ___ ヘ ヽ } / o |!:::::} / o` ー 、::::::::::::i o ,':::::::{`ヽ ヘ ノ / o ノ:::::∧ /ヽ o ヽ::::::::| o i::::::::ヽ、 / / / ノ::::::/ /::::::::ヽ o ヽ:::| o {::::::::::::::Υ /
/j /__/ ‘, // ヽ ', 、 // ‘ ! ヽ いないいない… /イ ', l ’ iヘヘ, l | ’ | nヘヘ _ | | l バァ! | l_| | | ゝ ̄`ヽ | |〈 ̄ノ ゝソノノ `ー‐' l ! ¨/ n/7./7 ∧ j/ / iヽiヽn |! |///7/:::ゝ r===オ | ! | |/~7 i~| | | ,' '/:::::::::::ゝ、 l_こ./ヾ.. nl l .||/ | | | | l {':j`i::::::::::::::::`ーr ' ||ー---{ | '" ̄ ̄iノ .l::::::::::::::::::::::∧ | ゝ ', , 一 r‐‐l γ /、::::::::::::::::::::::::〉ー= ___ ヘ ヽ } / o |!:::::} / o` ー 、::::::::::::i o ,':::::::{`ヽ ヘ ノ / o ノ:::::∧ /ヽ o ヽ::::::::| o i::::::::ヽ、 / / / ノ::::::/ /::::::::ヽ o ヽ:::| o {::::::::::::::Υ /
>>735 ダブルヌルターミネートが必要なShell系のAPIとか?
>>731 違うんじゃ?
文字列Sが空の時、
PChar(S)は空文字列へのポインタ(#0へのポインタ),
Pointer(S)はnil.
というか、型システムとしてstring型はnilと空文字列区別してほしかった・・
と、俺はWinAPIに渡すとき、文字列が空の時を踏まえて PCharにキャストすべきかPointerにキャストすべきか 使い分けてるけど。
>>742 なるほど、文字列(長い文字列)がカラの時は変数の中身はnilポインターになるが
PCharでキャストするとわざわざカラのブロックを作って
そこを指すようになっているのですね。
まぁ、そんな感じ。実際はソース見ると、グローバル定数の#0へのポインタが返されるようになってけど。 string型はnilと空文字列区別して2012 Surveyであった、.NETと同じようなRooted Type Systemお願い・・
どちらにせよ「○○に渡す場合は」等の限定が無く、 一般的な話として書かれている時点で完全に間違い
文字列型なのにnil値と空文字列を区別する言語の方が変。
ポインタの話だが?
みんな普通にスルーしてたとこみると、勘違いしてたっぽさそうだけど。 文字列が空の時PCharへのキャストがnilになると勘違いして、実際違うのを知った時は おいら小便ちびったけどね。
GCネタといい10年遅れの議論が好きだねここw
Boost の Smart pointer が実装されたの何年前だとおもってる? > 752
ARC は所詮 GC ではないので、Free を呼ばなくてもよい。くらいのものだぞ xocde 並みにコンパイラ/IDE がソースコードを変換してくれるなら良いけど
くだすれDelphi(超初心者用)その54
初心者向けの機能は初心者向けの言語に任せとけばよい。 何でもかんでも取り込もうとするのは間違い。
と初心者が申しております
いつもの「標準ライブラリ以外使わない」君、乙
本物は標準ライブラリの代替物から自作
かっこいい
C言語のプログラムをDelphiに移植しようとしています。 long s0[1024], s1[1024], s2[1024], s3[1024]; static long *sa[4] = {s0, s1, s2, s3}; このように宣言されていて、sa[i][j]=〜; とか s0〜s3として使われています。 Delphiだと2次元配列にして、変数名を s0→sa[0] に置換するしかないでしょうか? C言語の知識がほぼゼロなので、演算子とか確認しながら手探り状態で進めています。 不思議に思ったのは、定数も変数もただ static long〜 と書いてあるだけなのですが、 なぜconstしないのでしょうか? Delphiと違って、初期値の設定に制限が無いため、わざわざconstする文化が薄いから? それとも、当該のプログラムが制作されたのが1990年代初頭だからでしょうか??
まずはやったら? そんなこと聞いて何の意味があるの?
大半の人は、実は釣り質問。 単に馬鹿な回答者がいればそれでいい。
Delphiとは全く関係ない質問だな
答える気がない人は書き込まないでください
断る
:type : Long = LongInt; : TLongArray1024 = array [0..1023] of Long; : PLongArray1024 = ^TLongArray1024; :var : s0, s1, s2, s3: TLongArray1024; : sa: array[0..3] of PLongArray1024 = ( @s0, @s1, @s2, @s3 ); :var : I, J: Integer; :begin : for I := Low(sa) to High(sa) do : for J := Low(sa) to High(sa) do : sa[I][J] := 0; :end.
>>769 質問には答えていただけないんでしょうか?
大半の人は、実は釣り質問。 単に馬鹿な回答者がいればそれでいい。
よろしくお願いします。 TCalendarで複数のクリックした日の色を変えるにはどのようにしたらいいのでしょうか? normal色を青などに変えたいです。 delphi7のpersonal、windows7を使用。
Gridなので、派生クラスを作ってDrawCellメソッドをoverrideする
大半の人は、実は釣り回答。 単に馬鹿な質問者がいればそれでいい。
delphi6、win7の環境ですが、コンポーネントが古臭く見えます。 実害はないのですが改善できないものですか?
眼科に行ったら
大半の人は、実は釣り回答。 単に馬鹿な質問者がいればそれでいい。
TComboBoxの基本的な使い方が分かりません。 実行中、Edit部分に文字列を入力すれば、特に何もしなくてもItemsに追加されるのかと 思ってましたが、違うようです。 どのようにしたら追加できるでしょうか?
>>782 AddItem
Items.Add
Items.AddObject
Items.AddStrings
Items.Append
Items.Assign
Items.Insert
Items.InsertObject
Items.LoadFromFile
Items.LoadFromStream
Items.SetText
Items.SetTextStr
Items.CommaText
Items.DelimitedText
Items.Text
好きなのを使いたまえ
>>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;
785 :
782 :2012/07/02(月) 20:06:39.17
釣りでした
>>783 列挙していただき、ありがとうございます。
個々のメソッドやプロパティは理解できるのですが、知りたいことは、入力したものを
とりあえずItemsに保管しておいてくれるようにするにはどうすればよいかということなんです。
>>784 できました。ありがとうございます!
そのままItemsに追加だと同じものがたくさん入ってしまうので、それは防止しました。
procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
var
T: String;
begin
if Ord(Key)<>VK_RETURN then Exit; // Enterキー以外なら何もしないで帰る
T:=Trim(ComboBox1.Text); // 空白除去
if T='' then Exit; // 空文字なら何もしないで帰る
if ComboBox1.Items.IndexOf(T)=-1 then // もしComboBox内に存在しなければ
ComboBox1.Items.Append(T); // 追加する
end;
TComboBox自体にこういう機能があるはずで、きっと何か見落としているんじゃないかと疑って
質問させてもらいましたが、結局自分でやる必要があったんですね。
こういう勘違いをするのは自分の考え方がおかしいのかな、とも思ったんですが…
D6ヘルプの「TComboBox の使い方」をよく見ると、このような記述がありました。
>CLX では,コンボボックスの編集フィールドにテキストを入力して〔Enter〕を押すと,
>ドロップダウンリストに項目を追加できます(VCL のコンボボックスではできません)。
これに早く気付くべきでした。
大半の人は、実は釣り回答。 単に馬鹿な質問者がいればそれでいい。
XE2でDataModuleにActionList置こうとすると コンポーネントパレットから消えちゃうんだけどどうやって置けばいいですか? ビジュアルコンポーネントのタブが消えるのはいいとして System, Dialogsといった非ビジュアルコンポーネントまで消えてしまう…
TDataModuleのClassGroupプロパティをVcl.Controls.TControlに変えてF12を2回押しなさい
うまくいきました。ありがとうございます。
792 :
784 :2012/07/04(水) 19:06:39.21
>>787 >if ComboBox1.Items.IndexOf(T)=-1 then // もしComboBox内に存在しなければ
これ(IndexOf)知らなかったw便利ですね
今までItemsやらLinesやら全部時前でCount分検索してた><
793 :
776 :2012/07/04(水) 23:57:30.22
>>780 の方法は反映されないコンポーネントもあってちょっと残念でした
結局Delphi7で難なく解決しました
せっかくなのでいろいろなバージョンで試してみたけど、
同じソースでもバージョンを上げるごとに、作成されるファイルサイズが大きくなっていくので
困っています
ということは、D6以前でXPテーマを適用させた場合に出る表示の不都合は、
D7ならすっかり直ってるのね。
XPに対応してないD6と対応してるD7だから、当たり前なのか。
>>793 何か特別にファイルサイズを小さくしたい事情でもあるの?
UPXとか結構みんな使ってるよね。
私は使ったことないけど。
>>793 そんなので困ってるって…
ファイルサイズが大きくなると具体的にどう困るの??
>>794 D6はThemeManagerを使えばほぼ問題ナッシング
D7はそれをVCLに組み込んだだけ
そんなので技術力を疑う奴は頭の弱い奴だけだから大丈夫
昔からメモリ(ファイルサイズ)と速度はトレードオフの関係にあるけど、 最近はメモリもディスクスペースも余り気味だから、 速度を優先してメモリやサイズが増えるケースの方がほとんどだよ。 そもそもバージョンアップしたら普通は機能が増加してサイズが増えるのは当たり前だしね。 ファイルサイズを減らすだけの最適化しかしてない新しい環境をわざわざ買う人なんていないし。 だからもしメモリやサイズが増えただけで技術力を疑う人がいたら、 その人の技術センスは10年以上前で止まってるんだろうね。そんな人はいないと思うけど。 あ、いたかw > 798
ちょっとしたアプリ作って、EXEサイズが100MBいくなら死ぬけど、10MBぐらいまでなら 全く気にならん。
802 :
デフォルトの名無しさん :2012/07/05(木) 20:17:06.75
最近のDelphiでメモリリークってどうやって検出するの? メモリマネージャの性能がよくなったからか、解放済みの領域アクセスしてもすぐにエラー吐かなくて どこがエラーか分からん
803 :
デフォルトの名無しさん :2012/07/05(木) 20:17:37.68
間違えたメモリリークじゃなくてアクセスバイオレーション
>>800 それをいかに抑えるかって話なんだけど・・・
805 :
803 :2012/07/05(木) 20:33:26.52
俺バカだった。忘れてね
806 :
804 :2012/07/06(金) 00:31:43.48
俺もバカだった。忘れてね…
807 :
806 :2012/07/06(金) 05:29:54.46
俺はホモ
だが firefox のメモリリークは今だに酷い 技術力を疑わざるを得ない
809 :
808 :2012/07/06(金) 09:55:08.85
俺もバカだった。忘れてね…
玄人の俺が質問すっけど、Windowsのヘッダとか移植するとき、おまえら どういうルールで移植してる?varつかうかoutパラメータ使うかそれともポインタ型使うかとか。 ポインタ型はいちいちtypeで宣言しなきゃいけんのがうざいし・・死ねよ。 Delphiの前方宣言も何げに制限が厳しすぎてウンコなんだよなぁ・・
DelphiってPASCALだろ PASCALを改善したのがCだからな Cにかなう訳ないよ
やっぱ、深く考えないって事が正解か。毎回ヘッダ移植するたびに 悩むんだよな。気にしないということで、移植の続きでもやるか。ありがとう。
NULL(nil)を渡すかどうかで決めてるな。あとは手抜きでJEDIのをもらってくる。
JEDIになかったらとりあえず移植してる。
>>813 それも悩むよね。前まではnil渡しても問答無用でout,varで宣言して、nil渡す時、
PMyRecord(nil)^とかで無理やり渡す方針でいたけど、今回はnil渡せるメソッドが
多くて、再び悩みだした。
そういうときは両方とも定義するという手も。
移植する時は手間だけど、nilが渡せるのはvarとポインタ版両方作って ポインタの方はnilをデフォルト引数にしておくと使う時は楽だな RTLでもそうやって書いてある関数あるし
あとそういうのを用意しておくと、nil渡してもいいパラメータだったかどうか確認する手間が省けるし
移植だいたい終わったけど、移植前のCソースが3万行近くあって、移植後が1万数千行だから、 両方用意するのメンドイな。まぁ、もうちょっとどうするか考えるわ。
多くて面倒な時は一方だけ書いておいて、 その時に対象の引数の後ろ等に決まったコメントを埋め込んで あとでそれを読み取って一括変換かけてるな 自分で形式さえ決めておけば、専用ツールこさえなくてもその辺のテキストエディタの正規表現でいけるし
Interfaceの定義だと両方書いておけないんだよなあ ぜんぶせっせこnil渡せるかチェックしてるわ
GUIDが同じでインターフェース名を変えて定義すればいいだけじゃ?
質問です。よろしくお願い致します。 文字列'abc123'をasciiで数値に直すことはできたのですが、 この逆ができません。 どのようにしたら数値を元の文字列に直せるのでしょうか? delphi7使用です。
D7で作ったFirebirdDBアプリはwin8で動きますか
何をもって動くとするかが分からないので、実際にWin8上で試してください
826 :
デフォルトの名無しさん :2012/07/18(水) 14:21:38.77
継承したフォームで、派生元でのプロパティ値(ClientHeightとか)を取得する方法はありますか?
はぁぁぁぁぁ?? 継承したプロパティは全部見れるだろ じゃあなんのための継承だ? オブジェクト指向をイチから勉強し直せ
TForm1からTForm2を派生しておいて、それぞれ違うClientHeightを指定したときに TForm2でTForm1に指定してあったClientHeightを知る方法があるか、って意味だろ。 継承元(TForm1)のLoadedをoverrideして値を取っておくくらいかなぁ。
じゃあ最初からそう書いたらいいんじゃないですかぁ???
830 :
826 :2012/07/19(木) 00:46:40.40
派生元での値って書いてあるんですが…
>>828 Loadedだと、inherited実行前とかで見てみましたが、新しい値しか取れませんでした。
同名のプロパティやらを追加したってことなら T親クラス(Self).Hoge で取れなかったっけ
>>827 はバカだが
>>826 も分かりにくい
833 :
826 :2012/07/19(木) 09:02:24.55
>>831 828氏の指摘の通りです。
オブジェクトインスペクタでの「敬称元の値に戻す」のように、元の値を取得したいんです。
834 :
826 :2012/07/19(木) 09:31:37.40
自己解決しました。
835 :
826 :2012/07/19(木) 12:34:52.53
自己解決したんだ。よかったね。
アホは
>>832 だったというわけだ。
継承した値とか言ってるけど、TForm1に指定してあったClientHeightってことはオブジェクトインスペクタ等で指定したもの(dfmの値)だろ? あれはOO的に言えばクラスの初期値じゃなくてインスタンスに代入される値だから、継承はそこまで関係ないと思うんだが OOの仕組みが分かってないというより、VCLの仕組みが分かってないと言った方が正しい
>>836 じゃあ親クラスのClientHeightってどうやって知るのかコード書いてよ。
838 :
828 :2012/07/19(木) 13:37:09.34
ちょっろっと追ってみたけど、一般論的にはうまくやる方法はない。 ユニットローカルな関数とかその内部関数とかで処理されているので。 あとはそのプロパティのSetメソッドをoverrideして書き込みを捕捉する、という手は考えられるかなぁ。
>>837 リソースからTForm1のClientHeightにセットされている値を読み出せば良い
840 :
826 :2012/07/19(木) 17:59:28.03
まだできてない人いるんですね(笑)
__、、 , ___ ,≠=ミYムェ、` ,r'ァ'x='く彡'ハミ} / '//,イl!lハ.ヽノハヘ} i|イik!川l|!|| !|〃,!`l! 夏だねぇ・・・・ }i!l't、 _ヽ!l!|'ィi | |liヽ '._ `’川<ヽj . |!|! ー 1イ!リ, ニヽ /:'/イ:::::.:. :.:ヽ j:l:.i:.:l:j:::::.:. :.:}ハ,rァ-、 . _ ,∠ン‐、:.〉:::::.:, :.:.i:_;マハ/ , ‐ ´ ,、`ア´__{:.:. :.:.:\::::{: 〈:.l/〉心、 r,iヒ.ィf´ Y .ィ´  ̄T:ー-: ニヽ_:.:!./. V 〉} l! ` 〈,リ'! 丶|:、:.. : :.`ニ_:.:!-イl下ヽ `、ッ|,hィ /l!: 丶. |:.:ヽ:..:_:ィ:/.:.:ノ:::Yヽ 〉 ”_'En,i:.l! : :i::.::\ |:.:;:i:.:` ̄::.::/:::::.:.i ̄ ,*'jlゞ` |:ll: : :l::.::::i:.:|::.i:.|:l:.:.:.:,∠_:::::.:.:ノ . |:ll: : :.l:;r' ¬__,rL: ィ ヽヽ ̄ ヽ-- ' _〉 ; ヽ} ,rf,‐,-ュ-イ」 ゞ== " ̄
>>834 ,835
アホすぎる、自作自演がばれているw
HTML+JavaScriptでよく半透明のDIVを画面全体に広げて、 その上に別の要素を置くことでモーダルダイアログ的な操作を実現していますが、 Delphiで似たようなこと(他のコントロールを半透明のコントロールで覆う)はできますか?
844 :
デフォルトの名無しさん :2012/07/29(日) 13:13:21.38
できません。
alphaを128とかにした真っ黒フォームを表示して、さらにその上にフォーム
そのモーダルダイアログ風のインターフェース嫌い
質問に回答ではなく好き嫌いで返す頭の湧いた人がいると聞いて
845で十分だろw
誰も十分じゃないとは言ってないけど
Delphi XE starterで勉強し始めたものですが ちょっと教えてください。 訳あってプロジェクトを保存したフォルダを リネームしたいんですが、単にリネームする だけじゃダメですよね。 プロジェクトの一部の設定ファイルに絶対パスが 書き込まれてるみたいですが、リネームした後、 どうすれば、新しいフォルダでDelphiの開発を継続できますか?
851 :
デフォルトの名無しさん :2012/07/31(火) 18:16:46.71
>>850 *.localと*.identcacheを消せばそれ以外は問題ないと思うが。モデリングとかは別だろうけど。
>>852 ありがとうございます。
試してみます。
サンプルなんかにプロジェクト単位のがあるから
可能だと思っていたんですが、何を消していいのか
分からなくて...
主に設定ファイル用の、テキストエディタでも手書きしやすい listとhashの複合データ構造のフォーマットで何か良さ気なのってないですか。 今のところJSON,YAML,luaのテーブルコンストラクタあたりを候補に考えているんですが。
じゃあその中から用途にあったものを選べばいいんじゃね?
YAML
YMCA
858 :
デフォルトの名無しさん :2012/08/01(水) 20:31:40.06
YAMEL
859 :
デフォルトの名無しさん :2012/08/01(水) 20:33:39.34
,.へ ___ ム i 「 ヒ_i〉 ゝ 〈 ト ノ iニ(() i { ____ | ヽ i i /__, , ‐-\ i } | i /(●) ( ● )\ {、 λ ト−┤. / (__人__) \ ,ノ  ̄ ,! i ゝ、_ | ´ ̄` | ,. '´ハ ,! . ヽ、 `` 、,__\ /" \ ヽ/ \ノ ノ ハ ̄r/:::r―--―/::7 ノ / ヽ. ヽ::〈; . '::. :' |::/ / ,. " `ー 、 \ヽ::. ;:::|/ r'" / ̄二二二二二二二二二二二二二二二二ヽ | 答 | YAMEL │| \_二二二二二二二二二二二二二二二二ノ
860 :
デフォルトの名無しさん :2012/08/01(水) 20:34:18.39
>>210 ,r'^''=ァ-
, -、 , -''´_,,r ''"
_______.. 、、-ァr| i´_ ,r'_´__ _ _
 ̄¨``…=''|-─ヒ!--−… '' "゛´
il「~lii r亠、 |
''rへ,、 |・._ |
__.. 、、---‐─…! ├^ー‐_: =====━… , -| `´ |
 ̄  ̄ ̄  ̄二ニ! ̄ |`¨ ̄ _,. -1 |¨¨i | _
| 。 ⌒L、 _ , 、-_''´‐''" _,ゝ._| /7 / `l
| rz─=,ニ=-─===z二 ̄ _< _,. - ''" _」 = 「´ / .|
. | ( ' ̄//  ̄`l¨`i ``T'F ̄  ̄丶. -<´ l凹 | / |
| /´ ̄rュ`'ー┘ ° L0!_ r‐、 ` ''┴==-┴−-、__/ |
…==i=(_ o 。 ° ロ  ̄ ‐┴-⊥., -‐- 、 _≦'、_ |
|┘゙コド"−-、- - _ /F、-、 )イ ̄  ̄´
 ̄ (O  ̄ ̄"``ー- 二 _  ̄ __王ニ-‐ ´ ̄´
r !!、 ̄ ¨¨ ̄(.○゙
゙‐'-'
//Λ_Λ | |
| |( ´Д`)// <うるせぇ、オスプレイぶつけんぞ
\ |
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)を合成する。← これはフリーの動画合成を探します。
862 :
861 :2012/08/03(金) 18:04:30.28
procedure TForm1.〜 (.txt は読み込んであるとして) Var Bmp : TBitmap; begin BMP :=TBitmap.Create; { Bitmap の範囲を決めて文字情報を描画 { avi データに Bitmap バイナリを書き足す { 繰り返し BMP.Free; end; このような流れですか?
863 :
デフォルトの名無しさん :2012/08/03(金) 18:36:41.16
866 :
861 :2012/08/04(土) 17:48:22.23
>>865 テキスト加工出力の方が楽なので、ソレを調べてみます。
ありがとう
他のツールや方法があればご指摘ください。
ほ
オートパイロット・自動操作ツールを作っています 対象ウィンドウにWM_LBUTTONDOWN/UPを送ることでクリックの再現には成功したのですが その際に、そのウィンドウがアクティブになってしまい、フォーカスが奪われます。 フォーカスさせないでクリックさせることは可能ですか? フォアグラウンドにしない方法というのはググったら見つかって Get/SetForegroundWindowで直前のウィンドウを呼び戻したり hPMHandle := FindWindow(null, PChar('Program Manager')); SetParent(hTargetHandle,hPMHandle); というようにProgram Managerの養子にするという方法で実現できました。 が、フォーカスは相変わらず奪われます。特に文字入力中にはにゅうりょくがちゅ うだんされこのようになります。
869 :
868 :2012/08/22(水) 03:57:03.46
すみません。自己解決したかもしれません。(たまたま今うまくいっているだけかも)
>>868 の非フォアグラウンド化とあわせて
Get/SetWindowLongで拡張スタイルのWS_EX_NOACTIVATEを追加指定してやるとうまく?いきます。
それと
fore := GetForegroundWindow();
SendMessage(hoge);
SetForegroundWindow(fore);
SetActiveWindow(fore); <- New!
するといいかも。とりあえず思いつく限りいろいろやったらうまく動いたっぽいです。
□←明日になると(なぜか)動かなくなるスイッチ
どれがキモ、無駄か判明してないけど、もうねるぽ…
ここは ぼくの にっきちょう です
キモ、い。 >870
ここ は ぼく の にっきちょう です。
873 :
デフォルトの名無しさん :2012/08/24(金) 22:07:45.05
D4でのフォームの継承について教えてください。 あるフォーム(このフォーム自体も多重継承しています)を継承して 新しくフォームを作ろうとしているのですが、 この継承元フォームのコンポーネントを継承先フォーム設計時に 表示するにはどうすれば良いのでしょう。 実行時はコンポが表示されますが、設計時には表示されないので レイアウトが決めにくく悩んでいます。 <やってみたこと> 継承元のdfmがあるので、それを流用すれば何とかなるのではと 思ってdfmの先頭行を inherited oldForm:ToldForm → inherited newForm:TnewForm のように書き換えて新規フォームのdfmと入れ替えてみたのですが フォーム読み込み中のエラー(中略)読み込み違反がおきました とメッセージが出て上手くいきませんでした。
874 :
デフォルトの名無しさん :2012/08/24(金) 22:10:31.88
>>873 _i^i__i^i_ i^i ._i^i_ __, -―- 、___
|*||*| ∩___∩ i^i _i^i_ | | |@ll|(_/,,,, ,,,, ヽ_) 山で出会った時は
|≡||≡|| ノ ヽ ([])|;□;|.(≡)|_| |● ● | とりあえず「こんにちわ」が基本だよな
. 二二/ ● |二二( (二二二二 彡(_●_ ) ミ
| ミ ) ) / ` ''∪'' / ヽ
彡、 _ノ Gノ'フ= ___ / /i ` ー '" iヽ |
/ ヽ / / | ! / / | | | .l.
..──|ヽ ヽ/─==i─Y-(_ノ──i二i───(⌒)
___ヽ /ヽノ └-┘ ┴ ..└┘ . ̄
| ___ i ̄ そうだよな。 いきなり銃向けられるって、どこのスラム街だよって話だよな
>>873 D4より新しいバージョンを使って下さい
876 :
873 :2012/08/25(土) 07:36:12.38
>>875 ありがとうございます。
個人的にももっと新しいバージョンを使いたいのですが
業務関係でD4しか使用出来ない状況です。
D4では無理なのでしょうか。
>>873 1.継承元フォーム上で右クリックして「リポジトリに追加」を選択
2.「リポジトリに追加」ダイアログで「タイトル」に「Hoge」と入力して「OK」クリック
3.メニュー「ツール」「リポジトリ」を選択
4.「オブジェクトリポジトリ」ダイアログで「ページ」リストから「オブジェクトリポジトリ」を選択
5.「オブジェクト」リストから「Hoge」を「ページ」リスト内の「フォーム」へドラッグ
6.「ページ」リストから「フォーム」を選択し「Hoge」が追加されているのを確認して「OK」クリック
--- ここまでが準備 ---
1.適当なプロジェクトでメニュー「ファイル」「新規作成」を選択
2.「新規作成」ダイアログで「フォーム」タブを開く
3.「Hoge」を選択し「継承」を選択したら「OK」をクリック
878 :
873 :2012/08/25(土) 16:18:44.69
>>877 週明けに記載の通り実行してみます。
詳細な手順まで書いていただいて
本当にありがとうございます。
879 :
874 :2012/08/25(土) 22:14:43.48
いえいえ、どういたしまして
ほ
Delphi XE で、Bluetooth のデバイス名を列挙して、 選択して、接続、切断するサンプル無いですか? 「WCL_Developer_Demo_VCL.zip」は、見つけたのですが、 最終的に200ドル程必要なので、無料のを探しているんですけど。
はいさおじさん
Acrobat Readerが入っている(Acrobatは入っていない)環境で、閲覧パスワードがかかっているPDFに対し、
PDFのパスワード入力画面をすっ飛ばして(パスワードはあらかじめわかっている)、PDFを単語検索しながら
表示する手段って何かあるでしょうか?
(特定場所にジャンプできれば、単語検索でなくても構いません)
一応3つほど試してみましたが、どれもだめな感じで、手詰りな状況です…。
1. コマンドライン引数でReader起動 → 単語検索しつつ開くことはできるが、パスワードを指定する方法がない
AcroRd32 /a "search=ABCDEFG" "d:\a.pdf"
2. タイプライブラリ(Acrobat 7.0 Browser Control)の取り込み → 検索しつつ開くことも、パスワード指定するメソッドもない
3. Acrobat SDKを使用する → 動作前提にAcrobatが必要?
ttp://mrxray.on.coocan.jp/Delphi/plSamples/724_Acrobat_TAcroApp.htmを参考にさせて頂きつつ 、
AAcroApp := CreateOleObject('AcroExch.App') as CAcroApp;で落ちることを確認
(そもそも冒頭にAcrobatが必要って書いていますが…)
886 :
デフォルトの名無しさん :2012/09/28(金) 02:25:55.08
>>885 その手のはSendMessageないしはSendInput,keybd_eventで操作するのが王道かなぁ?
>>885 pdftk等で暗号解除済みPDFを一時的に生成してそれを表示ってのは?
888 :
885 :2012/09/28(金) 08:59:50.95
>>886 なるほど、やっぱメッセージを使用するしかないんですかね…
どうもありがとうございます
>>887 なるほど。一時的とはいえ、生PDFがローカルに存在してしまいますよね。それを避けたいのです
えっ
delphiの文法って、Cよりも優れてるといってもよい? ポインタの宣言や参照する演算子の使い方を見てもそういう気がするんだけど
コンパイラの視点から言えば優れてると言ってもいいかもしれませんが、 単に一言語として見た場合の評価は個人の好みでしかないと思います
コンパイラの最適化が1段階しかないのが不満 Cみたいに /O2 で徹底的な最適化ができない
イラネ
objectpascal
Cの機能が欲しいならC使えばいいだけじゃん
だよね 頭おかしいわ
ウィルスはだめです
lParamじゃねーの?
D6 です
Integer を 2進数文字列に変換するのに
http://delfusa.main.jp/delfusafloor/technic/technic/099_IntToBin.html function IntToBin(x:Integer) : String;
var
i : Integer;
const
nbyte: Integer = 4;
{上:Integerは符号付き32bitなので4byte}
begin
Result := StringOfChar(' ', (nbyte*10-1)); {←長さ10の文字列がnbyte個}
for i:=nbyte*8 downto 1 do begin
if ((x And 1) = 1) then Result[i+((i-1) shr 2)] := '1'
else Result[i+((i-1) shr 2)] := '0';
x := x shr 1;
end;
end;
を参照しているのですが、戻り値をスペース無しで行うにはどう変更すれば良いのでしょうか?
0000 0000 0000 0000 0000 0000 0000 0001
↓単純にこういう余分なスペースが入らないのが希望
00000000000000000000000000000001
StringOfChar(' ', (nbyte*10-1)); char($20) を39個並べて0 1 を埋めているのだろうとは感じるのですが
なぜ4ビット分ごとにスペースで間が開くのかわかりません orz
今は for 文でスペースを抜いています
((i-1) shr 2)
>>901 原理はまだ分からないけど
Result := StringOfChar(chr($20), (nbyte*8)); ← 32-bit 幅にして
if ((x And 1) = 1) then Result[ia] := '1' else Result[ia] := '0';
で余分なスペースが消えました。
ありがとう
Delphi 7 で、指定したフォルダの容量を調べるには ファイルを全て列挙して足していかないとダメ? フォルダに容量上限を設定して一杯になると設定容量内まで 古いタイムスタンプのログファイルを自動で消す というのを作ろうとしてるんですが
やったことないけどWin32 API関数のGetDiskFreeSpaceをDelphiから使えないかな?
>>904 それだとドライブ(ディスク)全体の空き容量が反ってくるんです
ああそうか。適当な事書いてスマン。ルートディレクトリしか指定できないのか。 となるとSearchRecでrepeatして列挙するしか思いつかん。
>>903 Windowsでフォルダ右クリックして容量見たときもファイルを列挙して
計算しているみたいだから、その方法しか無いんじゃない。
ファイルシステムの設計ミスだな フォルダに使用量のプロパティを持つべきだ
ディスククォータがそうじゃないの?
親フォルダにサイズ報告するんでパフォーマンスが低下するんじゃないか
直下のサイズとサブフォルダ込みのサイズと2種類持つ サブフォルダのときだけ再計算 重くなるなんてありえない
新しいファイルシステム作っていいよ。>912
dir /sをリダイレクトすれば早いよ Delphiでのリダイレクトの方法は誰かがどこかで書いてたと思う
何で↓で、 「[警告] 変数'nVal'が初期化されない可能性があります」 になるんでしょうか?(D2010です) for文の前にnValに何かを代入してやるとこの警告は消えますが…。 var i : Integer; nVal : Integer; begin for i := 0 to 10 do begin if ( i = 0 ) then begin nVal := 0; end else if ( i = 5 ) then begin nVal := 5; end else begin continue; end; ShowMessage( IntToStr( nVal ) ); end; end;
変数'nVal'が初期化されない可能性があるからだね
iが0でも5でも無かったらどうなるのよ?
実際問題としてfor文の0は必ず通るから初期化されないって事はありえないけど コンパイラはif〜then〜elseの部分を機械的に見てて最後のelseだけ通ったら 初期化されないと判断してるんだと思う。
こんな書き方は出来なかったっけ? var i : Integer; nVal : Integer; begin for i := 0, nVal := 0 to 10 do begin if ( i = 5 ) then begin nVal := 5; end else begin continue; end; ShowMessage( IntToStr( nVal ) ); end; end;
>>920 Cだと
int i , j ;
for( i = 0 , j = 0 ; i < count ; i++)
みたいな書き方はあったな。
大学でたまにそう書いている人がいたけど、メリットさっぱり分からん。
外で宣言してるからforスコープの中に入れるとかそういうことも無いし。
ところで誰も突っ込まないけど、do begin や then beginって書き方ってどうなの?
すごくきもく見えるんだが、今はこう言う書き方が主流なのか?
個人的には階層が分かりづらいからbeginとendの頭は揃えたい。 でも上の書き方は実際のソースで見た事があるからむしろ古い書き方なんじゃね?
if ( i = 0 ) then begin nVal := 0; ShowMessage( IntToStr( nVal ) ); end else if ( i = 5 ) then begin nVal := 5; ShowMessage( IntToStr( nVal ) ); end; ↑かいっそ↓でいいんでないの?(#13#10が多すぎると言われたから ShowMessage は同行) if ( i = 0 )or( i = 5 ) then begin nVal := i; ShowMessage( IntToStr( nVal ) ); end;
おまい頭良いな
>>925 頭良いというか普通
>>924 を先に思いつくと思うんだが。
そもそも、処理の流れ上必ず初期化されるのにもかかわらず
コンパイラが警告はいてるよってことを言いたいために
わざわざcontinueつかってあんな風に書いてるんじゃ無いの?
必要最小限の再現コードにするために削ったらそうなっただけで もともとは ==0 と ==5 の中身は違うものだったと思われ候
早漏でおじゃるお
iと同じ値でいいならそもそもnValを用意する意味がない メモリやレジスタの無駄使い
へっ
DELPHI STARTERでMY SQLをodbcでつなげる方法があると聞いたのですが、 よくわかりません。 どなたかお教え願います。
しらねーよヴァーカ!!!
TActionのOnExecuteの呼び出し元ってどうやったらわかりますか? procedure TForm.ActionExecute(Sender: TObject); begin if ? then // ショートカットキーから呼ばれた場合 else if ? then // TMenuItemから呼ばれた場合 else if ? then // TToolButtonから呼ばれた場合 end; って感じの処理がしたいのですが、?の部分はどうすればいいですか
それぞれのtagに番号振っといて case TObject(Sender).tag of で判断出来なかったっけ? 今開発環境がないんで動作確認出来なくてスマン。
>>935 あくまでSenderにはActionのインスタンスが入ってるから駄目でしょ。
そもそもそれが出来るなら、タグ付けしなくてもis演算子使えば良いし。
それに、SenderはもともとTObject型だからキャストする必要ないし、
そのキャストの仕方だと、想定していない型が渡された場合でも例外が発生すること無く
不正なキャストが行われるために、意図しない挙動をしていても気づきにくくデバッグに支障が出るよ。
>>934 前書のことがあるので、呼び出し元の区別の仕方は僕には答えられないが、
ただ、Senderが元々何の形であったかを判別するにはis演算子を使えば良い、
Actionを使うとSenderにはそのActionが代入されているためうまくいかないが
Actionを使わず同じイベントハンドラを共有するようにしておけば以下のようにして判別することが出来る。
if Sender is THoge then //THogeショーカットを登録したコンポーネント、たとえばTMenuItemやTActionなど
else if Sender is TMenuItem then
else if Sender is TToolButton then
Actionを発生させたコンポーネントはActionComponentプロパティでわかる。 コンポーネントの種類を判定したかったらis演算子を使う。 c := (Sender as TAction).ActionComponent; if c is TMenuItem then ... else if c is TToolButton then ... 「ショートカットキーから呼ばれた場合」っていうのがよくわからないな。 アクションに対してショートカットキーを割り当てるものであって、 逆(ショートカットキーにアクションを割り当てる)はできない。 おそらくその場合は、アクションを割り当てたTMenuItemから呼ばれた扱いになると思う。
どのトリガによってイベントが呼ばれたのかを知りたいんだから、 内部的にどう処理されるかはともかく、ショートカットキーからという表現は別におかしくないと思うが
ショートカットキーはTMenuItem側、TAction側のどちらでも別々に設定して使える。
だから(ショートカットキーを設定したメニューアイテムにアクションを割り当てる)
というのは可能だね。
クリックなのかショートカットキー押下なのかという判定はできないみたいだねぇ…。
あとは
>>936 に加えてオブジェクトを特定するくらいか。言わずもがなだけど、このように。
c := (Sender as TAction).ActionComponent;
if c=N1 then ...
DelphiでC++で作られたDLLを使うにはどのようにすればよいのでしょうか?
Win7Pro64bit上でDelphXE2Proを使っています。 今日初めてiosアプリに挑戦しようと FireMonkey HD iOSアプリケーション を選択してもフォームが表示されません。(初期コードは表示されます。) 別のPCのDelphiでは表示されます。 表示されないほうのPCはCドライブがSSDで64GBしかないので、 アプリ類(Delphi含む)はDドライブにインストールして使っています。 表示されるほうはCドライブ上に全てインストールしていますので、 Dドライブにインストールしているのが原因と思うのですが、 対処の仕方がわかりません。 どう対処すればいいか教えてください。 宜しくお願いします。
質問です function ReturnInteger(適当な型): Integer; begin Result := 15; end; で Result には Integer 型の結果数字を返すわけですが、 マウスの座標のように 〜.X 〜.Y というような1回の戻りで複数の値を返す関数はどういうふうに組むのでしょうか?
そういう型を自分で作るか、TPoint型を使う
>>942 function ReturnInteger(適当な型): TPoint;
begin
Result.X := 15;
Result.Y := 15;
end;
って感じでできるよ
945 :
942 :2012/11/13(火) 18:35:53.30
>>943-944 おー 知らなかった! マジありがと
これまでは戻り用の引数込みで送って複数回繰り返してたから楽になります
文字も同様にいけるのかな? やってみよ
>>940 C++のクラスがエクスポートされていたりデータ(グローバル変数)がエクスポートされているのであれば
直接は使えない。そうでなければ普通のCでできたDLLと同じなので
procedure Foo(Bar: Integer): Integer; stdcall; external 'DLLFile.dll' name 'Foo';
のような定義を書いて静的にリンクするか、LoadLibrary/GetProcAddressやdelayedディレクティブを
使って動的にリンクするかお好きにどうぞ。
947 :
942 :2012/11/13(火) 18:59:01.95
TPoint型 は整数だけなんですね Extended の浮動小数点は桁をあげて整数化して返すようにするか orz
>>947 複数の値をやりとりする方法は、レコード型の他に変数パラメータとoutパラメータもあるよ。
procedure AddExtended(A: Extended; var X,Y: Extended);
begin
X:=X+A;
Y:=Y+A;
end;
procedure GetExtended(out X,Y: Extended);
begin
X:=1.56789;
Y:=0.1234;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
X,Y: Extended;
begin
GetExtended(X,Y);
Memo1.Lines.Add(Format('X=%g, Y=%g',[X,Y]));
AddExtended(0.5,X,Y);
Memo1.Lines.Add(Format('X=%g, Y=%g',[X,Y]));
end;
953 :
942 :2012/11/14(水) 01:46:57.69
var渡しで直接書き換えればいい
>>952 と同じことだけど
procedure ReturnInteger(input: Integer; var outputX: Integer; var outputY: Integer);
これで1つの関数でまとまるんじゃないの
ん? また自演が始まったのか。
var Form1: TForm1; DATA : array[0..255] of Integer; (略) procedure TForm1.Button1Click(Sender: TObject); var (略) begin (計算) Edit_0.Text := IntToStr(DATA[00]); Edit_1.Text := IntToStr(DATA[01]); Edit_2.Text := IntToStr(DATA[02]); Edit_3.Text := IntToStr(DATA[03]); (略) end; を for i:=0 to 255 do Edit_+IntToStr(i).Text := IntToStr(DATA[i]); や for i:=0 to 255 do DATA[i] := StrToInt(Edit_+IntToStr(i).Text); みたいにできる方法はありますか? そのさいの書き方と
FindComponentってのを使えばいいと思う。
objlist: Array 1..100 of TObject; objlist[1] := Edit1; TEdit(objlist[1]).Text := DATA[1]; 配列に突っ込んでおけばループで回せる
こうかな? どこに書くのか悩んだけど 270個までつくってたけど組みなおそう unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, (略); type TForm1 = class(TForm) Edit0001_001: TEdit; Edit0001_002: TEdit; Edit0001_003: TEdit; (略); procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end;
var Form1: TForm1; DATA : array[0..1000] of Integer; objlist: Array[1..100] of array[1..10] of TObject; implementation procedure TForm1.FormCreate(Sender: TObject); begin objlist[1][1] := Edit0001_001; (略); end; procedure TForm1.Button1Click(Sender: TObject); begin TEdit(objlist[1][1]).Text := DATA[1]; (略); end;
あらかじめtagに数字入れておけwww procedure DoSome(Sender:TObject); var i:integer; e:TEdit; begin for i:= AContainer.ComponentCount-1 downto 0 do begin if AContainer.Components[i] is TEdit then begin e:=TEditor(AContainer.Components[i]); e.Text:=Data[e.Tag]; end; end; でなきゃ動的生成したほうが早い。どうせ並べてるんだろw
ここんとこ、最近はDelphiを触ってないのが明らかな先輩方がレスくれてますね(笑)
いや結構なことなんですけど、Typoとかいろいろ笑える。
>>959-960 そんなにたくさんのTEditなら動的生成して並べた方がいいに決まっているけど、その前に。
objlist: Array[1..100] of array[1..10] of TObject;
TEdit専用の配列ならば、こうすれば
Editlist: Array[1..100, 1..10] of TEdit;
TEdit(objlist[1][1]).Text := DATA[1];
キャストは不要になる。
Editlist[1][1].Text := DATA[1];
どんなものを作ろうとしてるのか言った方が的確なアドバイスをもらえると思うよ。
Delphiのバージョンは何かな?
>>963 TStringGridで済む気もするんだがw
これで270個もTEditが増えるのがわからない。画面はサブフォームで量産すれば済むし 設計の根本的なところからいろいろまずいかもしれないね オブジェクト指向的な作り方をすれば、もっとすっきりまとまるよ 90年代のVBソフトみたいな印象で、昔はこういう作り方が多かったかもしれない。
具体案を示せない人は黙ってていただけ増すか
TEditのParentが全部同じなら俺ならこうする。 procedure TForm1.Button1Click(Sender: TObject); var I: Smallint; begin for I := Low(DATA) to High(DATA) do TEdit(FindComponent('Edit' + IntToStr(I + 1))).Text := IntToStr(DATA[I]); end;
画面にTEditが40個あるとして、それをいちいちFindComponentしていくのか・・・ 前持って処理してグローバルに覚えて再利用したほうがいいな
まずXE3を捨てます
続いて自分を解き放ちます
>>970 UnicodeなDelphiを触ったことないですけど、たぶんこんな感じだと思います。
・ レコード型のcharをAnsiCharに。2箇所。
・ Wide文字列→PAnsiCharにキャスト。
vbmp3_open(PChar(OpenDialog1.FileName),@info);
vbmp3_open(PAnsiChar(AnsiString(OpenDialog1.FileName)),@info);
違ってたら誰かフォローよろしく。
>>973 できました!!
とても助かりました.
本当にありがとうございます!
975 :
デフォルトの名無しさん :2012/11/16(金) 07:08:12.95
質問です。 WinXP + delphi7(VCL)で開発します。 コンボボックスのコンポーネントで、なめらかな動きをしない (スムーススクロールしない)ようなものはありませんか? あるいは、作る方法はありませんか? Windowsのパフォーマンスオプションで、 「リストボックスを滑らかにスクロールする」のチェックを外せば、 望み通りの動きなのですが。(マウスホイールによる動きが全然違います。) Access2007のフォームにあるコンボボックスは、この設定に関わらず 滑らかな動きをしないようなので、このようなコンポーネントをdelphiでも 用意する方法があるのではないかな、と探しているところなのです。 方法があれば、ぜひ教えてください。お願いします。
しかしstackoverflowはなんであんなに役に立つのか
フルパス名を与える。INIファイルをEXEと同じ場所に配置するのはお勧めしない。
権限のないカレントドライブのルートに書こうとしたんだろ
このスレにはお世話になっているので還元
>>978 procedure TForm1.FormCreate(Sender: TObject);
var
SaveDir : WideString;
SaveFileName : WideString;
begin
// SaveDir = アプリケーションのあるフォルダのフルパスが入る
SaveDir := ExtractFilePath(Application.ExeName);
// アプリケーションのあるフォルダに'Save'というフォルダが無ければ新規に作る
SaveDir := SaveDir + 'Save\';
ForceDirectories(SaveDir);
SaveFileName := SaveDir + 'test.ini'; // その同フォルダにtest.iniを指定できる。'file_0001.dat' など任意名称
// if FileExists(ExtractFilePath(Application.ExeName) + 'test.ini') then
if FileExists(SaveFileName) then
begin
// ファイルが存在していたら行う処理を書く
end;
end;
983 :
982 :2012/11/16(金) 21:38:40.62
>>982 おおお…
まさにこのような答えを待っていました
とても助かりました!
ありがとうございます
いやだからそんなとこに書いちゃだめだって。Program Filesの下は書き込めないという前提。 SHGetFolderPathでCSIDL_APPDATAとかCSIDL_PERSONALの場所を取得して その下に適当なフォルダを作って配置しないと。
986 :
982 :2012/11/16(金) 22:28:47.04
>>985 なぜ? Program Files にコダワルのか判らないです。
OS 依存のシステムディレクトリなんかにプログラムのセットを置かずに
ユーザーが任意の作業フォルダから実行すれば良いだけで
取り外しメディアに入れておけばパソコン環境を変えてもインストール作業なんて不要で
そのまま他機で使用可能ですよ。
俺はインストで勝手に Program Files 固定で鎮座しやがるアプリ以外は別の自分で作ったフォルダに指定してる。
変なアプリ動作でゴミデータが増殖されるのをチェックするうえでも
お行儀が悪いというレベルの話ではないのかw 本来XPならDocument and Settingの所定ユーザフォルダに置くのが望ましいという話で。
まっとうな売り物でもなければ エンドユーザーが把握できないプログラムとデータ群をProgram Filesやレジストリに書き加えて肥大させ システムを不安定化させていく方がお行儀が悪い気がする
989 :
975 :2012/11/17(土) 00:59:00.68
>>976 ありがとうございます。
参考にして、WM_MOUSEWHEELを握りつぶすことはできました。
(ホイールが利かなくなりました。)
ただ、ホイールを無効化するのでなく、
ドロップダウンリストにスクロールバーが出ている状態においては、
リストを1行ずつスクロールさせたく思っております。
その際、スムーススクロールさせると、リストのスクロールが
目で追えなくなってしまうような描画をするので、それを対策したいと思っております。
コンボボックスに、StringGridにおけるTopRowプロパティのようなものがあれば、
対策できそうではあるんですけど、方法ありませんでしょうか?
>>985 初心者に解らない断片で書かずに
Documents and Settings のユーザー名 Dir を取得するコードを
>>982 のようにちゃんと書いてあげれば?
一つのアカウントを共用してるPCが大半を占めていて、
アプリケーションの設定も一つでいいのに、
わざわざユーザーからは分かりづらい場所に設定置くような
>>985 みたいな挙動はどっちかというと嫌われてる
インストーラーが必要で、%ProgramFiles%にインストールされるようなプログラムは
きちんと%AppData%にフォルダ作ってやってほしい。
しかしインストーラーできちんと環境を整える必要が無いようなソフトの場合は
ポータブルアプリみたいな方がいいね。
>>990 どの関数と定数を使えば良いかはすでに書いてあるんだからアレで十分じゃね?
それでどうにか出来ないようであれば初心者以前の問題かと。
1年はかからなかったか
最近質問が増えた気がする。業務でやる人が増えるとも思えんが…。 学校の課題とか趣味のプログラミングとかかね?
>>996 言語としては学校で教えるのに割と適している気もしないでも無いが
開発環境の整えづらさから考えるとあり得ないだろ。
質問内容から言っても課題とは関係なさそう。
自分は趣味ですね delphiやBuilder使わないと未だにどうすればソフトが作れるか分からないもので・・・
ううう
華麗に1000げとー
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。