くだすれDelphi(超初心者用)その47at TECH
くだすれDelphi(超初心者用)その47 - 暇つぶし2ch445:デフォルトの名無しさん
08/08/24 05:45:16
どうも、443っす。
結局のところ、自己解決したっす。
原因は、WM_QUERYENDSESSIONを補足しきれてなかったことみたいっす。
WM_QUERYENDSESSIONをちゃんと補足したときにTrayIconを非表示にするだけで何とかなったっす。
つまり、アプローチは間違って無かったっす。
汗顔のイタリーっす。板汚し、失礼したっす。
それじゃ、天上の調べをオリーブの枝に接ぐ作業に戻るっす。
チャオっす。

446:431
08/08/24 06:30:05
>>442
ありがとうございました

447:デフォルトの名無しさん
08/08/26 14:13:11
Excelで管理していたToDoのメモを使いやすくしたいと思い、
愛用のDelphiでDB化できないかと思っています。

可搬性を考え、Delphiの通常のアプリ同様インストールなしでDBを使いたいのですが、
なにかよいエンジンは何かないでしょうか?
手持ちの最新版は Delphi2006です。

448:デフォルトの名無しさん
08/08/26 15:21:06
EmbeddedFirebirdとか
インタフェースはInterbaseそのままだからIBXとかも普通に使える。ただしDLLなので、動作時のカレントディレクトリに注意。

449:デフォルトの名無しさん
08/08/26 15:33:36
プロパティを絶対に変更しないって前提なら
TTodoItem = class
published
にいろいろデータ溜め込んでTStream.WriteComponent, ReadComonentすればいいんだけど
リスク高すぎなんだよな。
ここら辺もうちょっと柔軟にXMLに対して読み書きしてくれるライブラリはないものか。

450:デフォルトの名無しさん
08/08/26 16:05:15
>>447
SQLiteが一番手軽かと

451:デフォルトの名無しさん
08/08/26 16:15:53
>>448-450
ありがとうございます。
Embedded Firebird(Interbase6互換)、Write(Read)Component、SQLite などですね。

あと、MyBaseも使えるようです。こちらが参考になりました。
Delphi@WCIMH
URLリンク(hp.vector.co.jp)

SQLiteはビジュアルコンポーネントと連携できるのでしょうか?

452:447=451
08/08/26 16:28:25
SQLiteのライブラリがいくつかありました。

Tim Anderson’s ITWriting - Tech writing blog ≫ A simple Delphi wrapper for Sqlite 3
URLリンク(www.itwriting.com)

Aducom Software [Delphi SQLite Components]
URLリンク(www.aducom.com)

18385 SQLite DbExpress driver
URLリンク(cc.codegear.com)
Delphi8以降で使えない?

いくつか試してみます。ありがとうございました。

453:322
08/08/26 16:38:56
>>369
遅レスですいません。

エンバカデロ日本に電話してみました。
直販はやってないとのことで、個人の場合は量販店やネットなどで買ってほしいとのことでした。

通販の値段はこちらを参考にすることにします。
ボーランド/Borland Borland Delphi 2007 for Win32 Professional R2 アップグレード版 価格比較 [coneco.net]
URLリンク(www.coneco.net)

42000円前後でしょうか。
アップグレード割引期間内にアップグレードしておけばよかったと後悔してます。
2006の時は期間を延長したりしてくれてたのに・・・

454:デフォルトの名無しさん
08/08/26 19:34:14
>>447
ToDo リスト程度なら、TcrientDataSet でも十分実用になると思います。

455:デフォルトの名無しさん
08/08/26 20:34:40
つかDBいらねぇだろ。

456:デフォルトの名無しさん
08/08/26 20:55:00
URLリンク(enterprise.watch.impress.co.jp)

>価格は、Delphi 2009、C++Builder 2009とも、
>Professional版が10万2900円、Enterprise版が25万2000円、Architect版が44万1000円。
>両製品のバンドルパッケージも用意されており、
>Professional版が13万4400円、Enterprise版が29万4000円、Architect版が50万4000円となっている。

どう考えても、高いよな。

457:デフォルトの名無しさん
08/08/26 20:56:48
日本のPCゲーム業界みたいなことになってるな

458:デフォルトの名無しさん
08/08/26 21:13:14
アカデミック無いのかな

459:デフォルトの名無しさん
08/08/26 21:16:02
5年前にやっとけよといいたいがようやく標準でまともなUNICODEアプリが作れるようになったか。

 新版では、IDE、コンパイラ、フレームワーク、ランタイムがすべてUnicodeに対応し、
ANSIデータとUnicodeのシームレスな利用をサポートした。
また、新しいVCL(Visual Component Library)コンポーネントを搭載。
Office 2007から採用されたリボンをはじめとする、
新しいWindowsのルック&フィールに対応している。
さらに、RADテクノロジーを用いた多層データベースアプリケーションアーキテクチャ
「DataSnap」により、コンポーネントベースのデータベースアプリケーション開発を行えるとのこと。

 これらに加えてDelphiでは、ジェネリックスや無名メソッドなど、
Delphiが持つ言語機能を強化し、開発効率の向上を実現。
一方のC++Buildeでは、新しい言語標準「C++0x」などもサポートしたとしている。

460:デフォルトの名無しさん
08/08/26 21:17:34
オッチャスレ池

461:デフォルトの名無しさん
08/08/26 21:28:23
>>460
ここですか?><
スレリンク(pot板)

462:デフォルトの名無しさん
08/08/27 03:54:49
どんどん高くなっていくなぁ

463:デフォルトの名無しさん
08/08/27 06:16:53
>>459
これは欲しい。
次のバージョンアップが待ち遠しいぜ。

464:デフォルトの名無しさん
08/08/27 08:01:15
オッチャスレみていない俺のために張っておく

新規購入価格
Delphi 2009 Professional  ¥98,000  (税込:¥102,900)
Delphi 2009 Enterprise  ¥240,000  (税込:¥252,000)
Delphi 2009 Architect  ¥420,000  (税込:¥441,000)
C++Builder 2009 Professional  ¥98,000  (税込:¥102,900)
C++Builder 2009 Enterprise  ¥240,000  (税込:¥252,000)
C++Builder 2009 Architect  ¥420,000  (税込:¥441,000)
Delphi 2009 & C++Builder 2009 Bundle Professional  ¥128,000  (税込:¥134,400)
Delphi 2009 & C++Builder 2009 Bundle Enterprise  ¥280,000  (税込:¥294,000)
Delphi 2009 & C++Builder 2009 Bundle Architect  ¥480,000  (税込:¥504,000)
バージョンアップ価格
Delphi 2009 Professional  ¥46,000  (税込:¥48,300)
Delphi 2009 Enterprise  ¥160,000  (税込:¥168,000)
Delphi 2009 Architect  ¥280,000  (税込:¥294,000)
C++Builder 2009 Professional  ¥46,000  (税込:¥48,300)
C++Builder 2009 Enterprise  ¥160,000  (税込:¥168,000)
C++Builder 2009 Architect  ¥280,000  (税込:¥294,000)
Delphi 2009 & C++Builder 2009 Bundle Professional  ¥60,000  (税込:¥63,000)
Delphi 2009 & C++Builder 2009 Bundle Enterprise  ¥180,000  (税込:¥189,000)
Delphi 2009 & C++Builder 2009 Bundle Architect  ¥320,000  (税込:¥336,000)

465:デフォルトの名無しさん
08/08/27 08:40:21
高すぎる

466:デフォルトの名無しさん
08/08/27 10:40:51
Vistaがこけたおかげで、Delphi7が今でも現役だぜぇ。

467:デフォルトの名無しさん
08/08/27 10:59:26
割れ厨急増ですねわかります

468:デフォルトの名無しさん
08/08/27 11:03:18
>>466うんうん
助かるよねぇ
ってか2006買ったが7使ってる

469:デフォルトの名無しさん
08/08/27 15:17:18
>>466
というか製品としても現役じゃないか、Del7とCBuilder6

470:デフォルトの名無しさん
08/08/27 16:49:25
2007の拡張に慣れたらもう戻れない。

471:デフォルトの名無しさん
08/08/27 17:06:21
>>470
kwsk

472:デフォルトの名無しさん
08/08/27 17:08:09
以前買った「Delphi DB&Webプログラミング」を読んでいるのですが
DB初心者にすごくわかりやすくてよい本ですね。

ところで、Delphi7時代の本のせいか、いくつか用語かツールが変わっています。
例えば、SQLエクスプローラー相当はBDS2006時代では何にあたるんでしょうか?

473:デフォルトの名無しさん
08/08/27 21:13:03
BDS2006はもう誰も使ってないんじゃないかな・・

474:デフォルトの名無しさん
08/08/27 21:19:07
いや、俺使いまくってるけどw

475:デフォルトの名無しさん
08/08/28 00:05:29
URLリンク(www.geocities.jp)
これを利用して多重起動させないようにしようとしてるんですが
新しい起動パラメータでリスタートさせるにはどうしたらいいでしょうか?

476:デフォルトの名無しさん
08/08/28 00:32:16
起動させるためのexeを作る

477:デフォルトの名無しさん
08/08/28 02:30:28
最初のexe起動。
次のexeをパラメータ付きで起動。
すでに起動済みならパラメータを最初のexeへ渡して自分は終了する。
タイミングによっては難しいかな。
最初のexeを終了させる方がいいかも。 いろいろ試して。

478:デフォルトの名無しさん
08/08/28 02:35:53
>>476>>477
やっぱりそうゆうやり方しか無いんですかね。
やってみます。有難うございました。


479:デフォルトの名無しさん
08/08/28 05:23:51
>>475
自分でExe側をコーディングしているのなら、起動パラメータを弄るのではなく、
多重起動した場合、前のを落として
起動パラメータによって変更されるパラメータを変更するだけではないのかな?

480:475
08/08/28 12:49:11
>>479
すいません。
前のを落とす方法がわかりません。

481:デフォルトの名無しさん
08/08/28 14:22:09
mutexで排他制御をして
すでに起動していたらWM_COPYDATAでパラメータを丸投げして
新しい方が自爆して
すでに起動している方がパラメータを受け取ってリスタートする。

あるいは
WM_COPYDATAで死ねというコマンドを送って古い方を終了させて
新しい方がそのままパラメータを処理する。

前者の方が初期化を省ける分軽くなる可能性はある。
後者の方が実装が楽になる可能性がある。

482:475
08/08/28 14:26:22
いい機会だからWM勉強してみます。
みなさん有難うございましたm(_ _)m

483:デフォルトの名無しさん
08/08/28 14:50:53
TWebBrowserにhtmlでフォームを表示してるんですが
フォームのtextarea内で改行出来ません
ie・fxでは正常に改行できます

484:デフォルトの名無しさん
08/08/28 15:46:53
UIWebBrowserとか使っとけ

485:デフォルトの名無しさん
08/08/28 16:33:06
>>475
DDEを使って、既に起動している方に終了命令を送るかな

後から起動した方が、パラメータを既に起動している方に送って、
すぐに終了ってのはよくあるけど

486:485
08/08/28 16:59:49
>>475 DDEを使うとこんな感じ

※同じプログラム内に送受信を書きます

【メッセージ受信】
1. Systemパレットから DdeServerConv をフォームに置く
2. DdeServerConv の Name プロパティを "AAA" とかにする ← 後でトピック名に使われる
3. DdeServerConv の OnExecuteMacro イベントに受け取ったときの記述をする 例) Caption := Msg.Text;

【メッセージ送信】
1. uses 節に DDEMan 等(Formsも?)を追加
2. DdeClientConv を使って送信項目を書く↓

// アプリケーションが HogeHoge.exe で、トピック名が AAA の場合
SendStr = 'Tojiro-Goma'; ←送信するメッセージ
with TDdeClientConv.Create(Application) do begin
    if SetLink('HogeHoge', 'AAA') then begin
        ExecuteMacro(PChar(SendStr), False);
        CloseLink;
    end;
    Free;
end;


487:475
08/08/28 17:02:44
>>485
今回は>>481さんの前者の方で無事成功しました。
DDEは別のところで使えそうなので参考にさせていただきます。
有難うございました。

488:デフォルトの名無しさん
08/08/28 22:11:06
文字列'ABCD'があって、その文字列に1文字置きに'#'を挿入したいのですがどのようにすればいいでしょうか?

こんな感じです。
A#B#C#D

よろしくお願いします。

489:デフォルトの名無しさん
08/08/28 22:13:35
insert

490:デフォルトの名無しさん
08/08/28 23:01:40
Insertとforループでどうにかできました
ありがとうございました

491:デフォルトの名無しさん
08/08/29 00:07:10
二重ループの中で中側をブレークしてそのまま外をコンティニューするにはどうしたらいいで初夏?
取り敢えずフラグ立ててみたのですがこれしかないでしょうか?

for i:=0 to Files.Count-1 do
begin
while .. do
begin
case xx of
mrOk :zzz;
mrIgnore:begin
Flag:=True;
Break;
end;
else exit;
end;
xxxx
end;
if Flag then Continue;
zzzzzz;
end;

mrIgnoreの時はxxxxもzzzzzzを処理せずfor i:=ループを続けたい

492:デフォルトの名無しさん
08/08/29 03:55:45
速度は遅いかもしれんけど中のループはbreakではなくcontinueで全部終わらせば
外のループへ出れる

493:デフォルトの名無しさん
08/08/29 07:52:05
goto使え

494:デフォルトの名無しさん
08/08/29 08:49:03
>>481
そっちのほうがスマートだな

495:デフォルトの名無しさん
08/08/29 13:36:05
bsNoneに設定したフォームで
Form1.WindowState := wsmaximized
を実行するとタスクバーの領域を浸食してしまうんだがお手軽に
システムメニューの最大化を実装する方法ってあります?

496:デフォルトの名無しさん
08/08/29 21:31:01
こちらのサイトの方法を汎用化する方法はありませんでしょうか?

Delphi VCL継承コンポーネントをインストールなしで使う/Tips & Tricks
URLリンク(www.geocities.jp)

Edti1 := CloneComponent(Edit1);
みたいな方法で使いたいのですが・・・。

Hoge.Createすると、生成されずに、Createだけよばれてしまいます。

class helper使えばできる気もするのですが、class helperの同時に1つしか使えないという制限から困っています。

497:496
08/08/29 21:40:44
Result := TComponent(Original.ClassType).Create(Owner);
でいける気がしました。
ちょっと試してみます。

498:496
08/08/29 21:51:58
>>497は勘違いでした。orz
とりあえずいけた気がします。

function CloneComponent(Owner, Original: TComponent; ClassType: TComponentClass): TComponent;
var
  Stream: TMemoryStream;
begin
  Result := ClassType.Create(Owner);
  if Original is TWinControl then
    (Result as TWinControl).Parent := (Original as TWinControl).Parent;

  Stream := TMemoryStream.Create;
  try
    Stream.WriteComponent(Original);
    Original.Free;
    Stream.Position := 0;
    Stream.ReadComponent(Result);
  finally
    Stream.Free;
  end;
end;


使い方:
Panel1 := CloneComponent(Self, Panel1, TPanelEx) as TPanel;

問題点は、PanelならPanelの上におかれたものが全部開放されちゃうことです・・・
なんとかならないかなあ・・・

499:デフォルトの名無しさん
08/08/29 23:08:08
再帰

500:デフォルトの名無しさん
08/08/30 15:57:40
2つのアプリを同じPCで動かしているのですが、
競合する動作があるので片方が動作すつときはもう片方の動作を止めるために
WM_COPYDATAを送っています。
開発環境はxpで正常に動作しますが動作環境は98で
「このプログラムは不正な処理をおこなったので・・・」とゆうエラーが出ます。
このエラーは送信側が送信した瞬間に送信側で出ますが受信側は受信できています。
片方を落として動作させたり、片方の受信機能を外して送信した場合はエラーが出ません。
こちらの1と2をほぼそのまま利用しました。
URLリンク(homepage2.nifty.com)

501:デフォルトの名無しさん
08/08/30 16:12:36



502:デフォルトの名無しさん
08/08/30 16:57:25
>競合する動作があるので片方が動作すつときはもう片方の動作を止めるために
そういうときには「ミューテックス」というモンを使うんですわ。
URLリンク(docs.codegear.com)

503:デフォルトの名無しさん
08/08/30 17:50:03
Win98上での開発・デバッグ環境を用意しろとしか

504:デフォルトの名無しさん
08/08/31 03:59:43
短い文字列型でやってみるとか。 ShortStringね。

送信側のEdit1.Textが空のときも問題ないのかな。
PCharでキャストすると、コード領域にある#0のアドレス返すから、
その辺でおかしくなるのかも。 良く分かりません。



505:デフォルトの名無しさん
08/08/31 11:32:33
>>498
TReaderのメソッドの中に、
コンポーネントの構成を再帰的に追っかけて読み込んでくれるメソッドがあった希ガス

このメソッド使うと、イベントも含めたコンポーネントのクローンを作成することも可能。


506:デフォルトの名無しさん
08/08/31 19:37:44
>>502
そこはもう通り過ぎてるだろw

507:496
08/08/31 19:49:11
>>498のコードは不完全でして、イベントハンドラ等のコピーができません。
それらをカバーするにはこちらが参考になるようです。

DelFusaBlog コンポーネントをインストールせずに使う方法
URLリンク(delfusa.blog65.fc2.com)

TMemoryStreamでイベントハンドラを別のオブジェクトにコピーするには?
URLリンク(hpcgi1.nifty.com)

私はも書いてみようと思います。

508:デフォルトの名無しさん
08/09/01 11:01:26
DLLについて質問です。
-----------------------------------
PCOPRS1CONTROL_RET Open(int port_no)

port_no
使用するCOMポート番号(0 - 255)

出力
PCOPRS1CONTROL_RET_OK = 0
成功
PCOPRS1CONTROL_RET_ERR = 1
失敗
-----------------------------------
DLL内の上のような関数をテストしようと以下のようなコードを書いて実行すると関数はちゃんと走っているようなんですが矢印のところで毎回'privileged instruction at 0x0012f6d6'とエラーがでてしまいます。
これはDLLの呼び出し方が悪いのでしょうか?それとも他に原因があるのでしょうか?
----------------------------------
function Open(port_no: Integer): Integer; stdcall; external 'hogehoge.dll';

procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
 i := Open(0);
 ShowMessage(IntToStr(i));
end; //←
----------------------------------

509:デフォルトの名無しさん
08/09/01 11:49:53
>>500
メッセージと一緒にデータも送ってるのか?
サンプルはCDSがローカル変数になってるのが良くないと思われるが


別のやりかたとしては、wmuser,wmapp,resisterwindowmessage()、ファイルマッピングオブジェクト、ミューテックスあたり


510:デフォルトの名無しさん
08/09/01 18:18:00
>>500
CDS.lpData:=PChar(Edit1.Text); がダメじゃないの?

S := Edit1.Text;
CDS.lpData := PChar(S);
でどうだ。

>>508
呼び出し規約が合ってないかもね。
Cならデフォルトはcdecl。

511:508
08/09/01 20:51:26
>>510
function Open(port_no: Integer): Integer; cdecl; external 'hogehoge.dll';
ズバリその通りで上記のようにしたらエラーが出なくなりました。
ありがとうございます!

512:デフォルトの名無しさん
08/09/02 09:37:22
すいません、listviewのコラムの順番を変えたいんですけど
ListView_SetColumnOrderArray(ListView1.Handle,3,pi);
これって、3番目を1番目に移動するには pi に何を指定すれば良いんですか

あと、これは全6個のうち3番目を1番目に移動するという事ですか
SendMessage(ListView1.Handle,LVM_SETCOLUMNORDERARRAY,6,3)

なんか、具体的な使い方が解からないので、お願いします

513:デフォルトの名無しさん
08/09/02 11:17:29
>>512
少しはググろうぜ
ListView_SetColumnOrderArrayはLVM_SETCOLUMNORDERARRAYのマクロだからどちらも同じと受け取っておk
piにはarray of Integerへのポインタを指定するっぽい
三つのカラムのうち一番右のカラムを一番左に持ってくるときは
pi: array[0..2] of Integer
pi[0] := 2;
pi[1] := 0;
pi[2] := 1;
でいいと思う
んで第二引数のとこには並べ替えるカラムの個数を指定するんだと思う
だからListView_SetColumnOrderArray(ListView1.Handle, Length(pi), @pi);でいいような悪寒

以上ググった結果から適当に推測した結果でした

514:512
08/09/02 18:02:04
>>513
うまく出来ました
しかし、コラムの内容は位置番号と一致してるけど
それ以下の内容は位置番号と一致しないです
やっぱり一致させるのは無理なのかな
でも、使い方が解かったんで助かりました、ありがとうございますw

515:デフォルトの名無しさん
08/09/03 13:41:01
SpTBXLibを使っている方は、おられませんでしょうか?
Silverpoint Development
URLリンク(club.telepolis.com)

SpTBXLibは標準で便利なドッカブルパネルがあるのですが、
いくつものドッカブルパネルを上に載せて設計時にGUIデザインすると、
画面が狭くなるためフレームを使って分離できないかと考えています。

しかし、TSpTBXMultiDock に載せた TSpTBXDockablePanel 上に
他の出作ったTFrameから継承したフレームを載せると、
載せたフレームが真っ黒になってしまいます orz

いままでSpTBXLib以外でのフレームでこのようなことはなかった気がします。
何か解決方法はないものでしょうか?
SpTBXLib 2.2です。OSは、Vista SP1、XP SP3で確認しました。

516:515
08/09/03 14:23:56
どうやら、TSpTBXDockablePanel以外にも TSpTBXPanel 上にFrameを載せた場合にも起こるです。

上に載せたフレームの
ParentColor := True でも無効な様子で、
Color := clNone から、Color := clBtnFaceにしたところ、通常のように表示されました。
しかし、残念ながらフレーム上では SpTBXLib の Theme設定が効きません。
他の部分がTheme対応なので不恰好になってしまいます。

VCLのソースを覗いてみてわかったのですが、
TXPManifest を載せて ParentBackground を有効にさせると、
設計時はダメですが、実行時は一応、SpTBXLibのThemeが効いてくれます。
しかし、画面リサイズ時などで画面のフレームの描画が崩れることが多々あります。

バグっぽい仕様な気がしてきました。(もしくはFrameに対応してない)
ので公式サイトのリンク先のニュースグループで聞いてくることにします。
もし何かわかりましたら、こちらでも報告いたします。

517:デフォルトの名無しさん
08/09/03 15:25:20
AVGがDelphi7で生成したexeをウィルス扱いしやがったぜというお話
URLリンク(www.delphipages.com)

I have the new AVG 8 with Delphi 7 Pro
With AVG fully updated.

Create a new Delphi Project and add nothing and
no controls and try and run. AVG throws a false positive

Downloader.Banload.ZKA

And the exe cannot be created.
Add one piece of code or one simple component and
no problem and no warnings.

518:デフォルトの名無しさん
08/09/03 16:11:31
Avast!もDelphiで生成したwin32コンソールアプリをたまに誤認するよ

519:デフォルトの名無しさん
08/09/03 16:28:11
ICSというコンポーネントをインストールしたんですが、いざ使おうとすると
「ユニット名~が解決できません」と出て使えないのです。
何か他に特別なことがいるのでしょうか?
インストールするのにに参照したサイトはここです。
URLリンク(mrxray.on.coocan.jp)
verは2007です

ICS
URLリンク(www.overbyte.be)

520:デフォルトの名無しさん
08/09/03 17:59:24
これIndyとどう違うの?

521:デフォルトの名無しさん
08/09/03 18:05:38
It is yet another internet component.

522:デフォルトの名無しさん
08/09/03 18:08:36
日本語でおk

523:519
08/09/03 18:40:06
なんだか色々と弄ってたらどうにか使えるようになりました!
お騒がせしました

524:デフォルトの名無しさん
08/09/03 18:44:03
.cbkってファイルがいつのまにかできていたのですが・・・?
これは一体どのようなファイル?
なのでしょう

HogeFrameUnit.dfm.cbk
というような

ファイルでした

環境:BDS2006

525:デフォルトの名無しさん
08/09/03 20:05:26
google ブラウザのせいでChromeがOxygeneに名前変わっててワロタ

RemObjects Software: Oxygene 3.0
URLリンク(www.remobjects.com)

526:デフォルトの名無しさん
08/09/03 20:09:20
質問させてください<(_ _)>

Delphiのボタンの色を変える方法ってありますでしょうか??
Bitボタンの文字の色を変えることはできるんですが
ボタン表面自体の色を変えたいです。
imageなどで画像貼り付けも試してみましたが
ボタン全体に被さってしまい、立体感がなくなってしまいます。
どなたかいい方法ご存知の方おられましたらぜひご教授ください。

527:デフォルトの名無しさん
08/09/03 20:24:03
>>526
ボタンにピッタリサイズのimageを作ればいいんじゃないかな

528:526
08/09/03 20:45:28
>>527
全体に合わせてしまうと立体感がなくなってしまうし
表面だけに会わせると、周りの色との違いがでてしまいます。
立体感含むボタンそのものの画像を作るしかないんでしょうか?
それだと大きさによって変わるからたいへんですね^^;

529:デフォルトの名無しさん
08/09/03 21:20:26
>>528
WM_ERASEBKGNDを捕まえて適当に塗る

530:デフォルトの名無しさん
08/09/03 21:29:20
>>528
ちょっと大きいPanelに乗せれば立体的に

531:526
08/09/03 21:41:50
>>529、530
それは実行時にボタンを押したときに
ちゃんと凹みますか??

532:デフォルトの名無しさん
08/09/03 21:44:19
やってみればいいじゃない

533:デフォルトの名無しさん
08/09/03 22:11:47
>>526
TButtonの色変えは、かなーり昔からのFAQくさいw

色変更が可能なボタン
URLリンク(rakasaka.fc2web.com)

534:デフォルトの名無しさん
08/09/03 22:15:04
その手の小細工を効かせたアプリは
大抵センスがよろしくないものになってしまうという

535:526
08/09/03 22:17:04
>>533
おお!
これはいけそうですね!!
どうもありがとうございます♪

536:デフォルトの名無しさん
08/09/04 13:51:28
ここで質問する内容ではなさそうなので躊躇したのですが、他で該当するような
活発なスレが見付からないのでお許しください。

Delphi2009が発表されるので購入を考えているのですが、非常に高いですね・・・。
バージョンアップ版をと思ったのですが、私が以前に購入したのが10年くらい前の
初期バージョンの時代で、その後は会社購入版を使用していたため、私個人の
IDを紛失してしまっています。
会社では業務の都合上Delphiの必要性がなくなったので今後のバージョンアップは
見込めない状態です。

そこで質問ですが、Delphiのバージョンアップ版を使用するにあたって過去製品で個人が
登録したIDが必要になると思うのですが、その必要性はどれくらいありますか?
というのも、Microsoftのバージョンアップ版ではインストール時に過去の製品での
ID等を聞かれないものですから、Delphiも大丈夫かと思いましたので質問させていただきました。

変な質問で申し訳ありませんが、私個人の出費としてはあまりにも大きな差があるもの
ですから質問させていただきました。もしお分かりなられる方がいらっしゃいましたなら
よろしくお願いいたします。



537:デフォルトの名無しさん
08/09/04 13:58:45
某時代はそもそもユーザー登録してないとバージョンアップ版買えなかったから誰も知らないと思うぞ
おそらくアクティベーション時に登録するCDNのアカウントで判断するんだろうけど。

538:デフォルトの名無しさん
08/09/04 18:13:40
会社に電話して事情を説明して購入可能か聞くしかない。
正規ユーザーの条件はIDを持っていることであり
バージョンアップ版は正規ユーザーであることが条件である。
ゆえにバージョンアップは不可能。とか適当なレスはつけられるが
実際に購入可能かどうかとは何の関係もないしな。

539:デフォルトの名無しさん
08/09/04 18:35:34
会社で購入したことを根拠に個人でバージョンアップはどう見ても変でしょ。

540:デフォルトの名無しさん
08/09/04 18:45:09
>>539
初期バージョンの頃に個人で買ったって書いてあるじゃん!

541:デフォルトの名無しさん
08/09/04 19:25:07
それを証明できないから問題なんでしょ。
これが通るなら、新規バージョンの購入者はいなくなる。

542:デフォルトの名無しさん
08/09/04 19:30:42
てか、Delphi2009の販促の封筒かはがきがこないんですけど、
皆さんのところには着ましたか?

プレスリリースだけで後は店で買ってねってことなのかな・・・

543:デフォルトの名無しさん
08/09/04 19:31:58
仕事でつかえないなら、趣味としてつかうの?
Turbo Explorer でいいんじゃないの。

544:デフォルトの名無しさん
08/09/04 19:40:57
仕事で使う人がこんなとこで質問するの?

545:デフォルトの名無しさん
08/09/04 19:56:51
ActionListはどこにおくのがよいものでしょうか?

FrameなどでコードやUIを分離してデザインする場合にユニットがそれぞれ分散しますよね?
それぞれ、DataModuleにActionListおいておいて、
それぞれFrameなどから、
中央集権的にアクセスする感じでよいのかなあ?


それと Frame を使った場合やFormがたくさんある場合に、
ほかのFormを含むユニットの依存関係ってどう処理したものなんでしょうか?
ほかのFormやFrameをそのまま依存(つまり、uses)させてしまうと、分離している意味が少ない気がします。
DataModuleを介すれば、依存ユニットをusesする必要はあまりないですが、
解決になってない気もします。

546:デフォルトの名無しさん
08/09/04 20:03:26
>>545
自分もいろいろ試行錯誤したけど
メインフォームに置くのが最適と判断した。
各フレームに対するアクションをそのフレームに委譲していくと
アプリにとって本質的な状態の管理やらの制御のコードがフォームに残る。
データモジュールだとそのメインフォームに対する処理も冗長になるからちょっと面倒で無駄な感じ。
フォームユニットをスカスカにしても得るものがないしね。

547:デフォルトの名無しさん
08/09/04 20:55:40
デルピィ

548:Delフサギコ ◆A6VzDeLphI
08/09/04 23:41:51
           _________
   ∧,,∧∩  / 
  ミ,,゚Д゚彡 <  日本がんがれ!
   ミつ旦.ミ   \ 
 @ミ   ミ     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪

やあ、元気っすか?

さて、いきなり、質問っす。
コマンドラインの出力をクリップボードにとりこむような
exeを作りたいんだよ。

dir > clip.exe

みたいな実行ができるexeをつくりたいっす。

誰かおしえてくださいな。

BlueLeaf1336-PROBLEMS-2004_0013
URLリンク(www.geocities.jp)
これを使うといいのかな?


549:デフォルトの名無しさん
08/09/05 00:01:17
それやるとclip.exeが死亡するんだが…
dir|clipだよね?


まあ標準入力をTStringListに放り込んでいって
最後にClipBoard.Text = Strlist.Textでいけると思う。

550:デフォルトの名無しさん
08/09/05 00:56:51
ゴミは消しとけよ>Delフサ

551:Delフサギコ ◆A6VzDeLphI
08/09/05 00:57:10
  ∧,,∧  どもー
  ミ,,゚ 3 ゚彡 
  ミ つ旦)~~
~と,,,~),,~) 
んーーー、こんなの書いてみて動きましたが

標準入力は、どうやって受け取るんでしょう?

program ToClip;
{$APPTYPE CONSOLE}
uses
 SysUtils,
 Classes,
 Clipbrd,
 GrabConsole in 'GrabConsole.pas';
var
 SL: TStringList;
begin
 SL := TStringList.Create; try
 PipeConsole('ipconfig', SL, nil);
 Clipboard.AsText := SL.Text;
 finally SL.Free; end;
end.


552:デフォルトの名無しさん
08/09/05 01:25:24
APIのGetStdHandleで得てReadFileで読む

RTLのRead関数はCのstdinなんかに比べて貧弱だから使わない方が良い

553:デフォルトの名無しさん
08/09/05 03:32:42
Delphi2009のバージョンアップは、今までより1~2万高そう。

554:デフォルトの名無しさん
08/09/05 04:52:23
dir > clip.exe
ワロタ

555:デフォルトの名無しさん
08/09/05 07:14:12
program cbin;

uses
Windows, Classes, SysUtils, Clipbrd;

{$R *.res}

var
    s, line: String;
    n: Integer;
begin
    line := '';
    n := 0;
    while not Eof(Input) do
    begin
        Readln(s);
        if n = 0 then
            line := line + s
        else if n = 1 then
            line := line + sLineBreak + s + sLineBreak
        else
            line := line + s + sLineBreak;
        Inc(n);
    end;

    Clipboard.AsText := line;
end.

556:デフォルトの名無しさん
08/09/05 07:16:26
program cbout;

uses
Windows, Classes, SysUtils, Clipbrd;

{$R *.res}

begin
    Write(Clipboard.AsText);
end.

これで
dir | cbin # クリップボードに取り込み
cbout # クリップボードを出力

cbout | sort | cbin # クリップボードをソート
な感じで使える

557:デフォルトの名無しさん
08/09/05 18:09:41
このへんのはC++Builderのほうが楽だと思うよー
#include<vcl.h>
#pragma link "rtl.lib"
#pragma link "vcl.lib"
だけしとけば何も考えずにVCL使えるし

558:デフォルトの名無しさん
08/09/05 18:42:07
パイプで繋ぐのはシェルの役目であって
プログラム自体はただの標準入出力するだけのコンソールアプリだろ。
言語選ぶようなもんでもない。

559:Delフサギコ ◆A6VzDeLphI
08/09/06 00:44:14
  ∧,,∧  ♪
 ミ,,゚∀゚彡   ♪
 ミつ[|lllll]).
@ミ   ミ   ♪
  ∪''∪ 

すっげー、
ありがとう。

でも、cbinだと、こういうエラーが出るんだ。なんでかな?

---------------------------
デバッガ例外が発生
---------------------------
プロジェクト ClipboardIn.exe が EInOutError クラスの例外を生成しました。
'I/O エラー (6)'
プロセスは停止しています。再開するにはステップ実行または実行を選択してください。
---------------------------
OK ヘルプ(H)
---------------------------


560:デフォルトの名無しさん
08/09/06 00:48:23
{$apptype console}が抜けてるんじゃね

561:Delフサギコ ◆A6VzDeLphI
08/09/06 00:56:59
んん?ちゃんと動きました。>>560さん。原因、そうかも。

    ∧,,∧   ありがとう
    ミ゚Д゚*彡  ございます。
   ミ(旦⊂ ミ  
    (~,,(~,,,ミ~   

こんどは、ping -t 192.168.0.1 というずっと続く
コマンドを、Memo1コントロールあたりに
DOSプロンプトと同じ風に、1行つづ、出力したかったりするんですが

こういうのはどのようにしたらよろしかりけり?

それにしても、cbin、かっこいいな。

こういう実装もあるようです。どぞどそ。

File Area
URLリンク(www.slis.keio.ac.jp)


562:デフォルトの名無しさん
08/09/06 02:56:02
>>561
CreateProcess, CreatePipeのサンプルがMLにあったはず。
中村氏だか戸田氏のコード。
それをサブスレッドで動かしてやれば標準出力を一行ごとに取れるだろう。

標準入力も受け付けるようなコンポーネントもあったな
T*Dos*だかなんだか。かなり大昔の話だけど。
delphi component pipeあたりで探してれば見つかるんじゃねーの。知らんけど。

にしてもコマンドラインもパイプもネットワークもまるで興味なさそうだったのに
猫も進化するもんだなw

563:デフォルトの名無しさん
08/09/06 07:33:05
フサギコは犬だよ

564:デフォルトの名無しさん
08/09/06 08:35:50
Ω ΩΩ ナ、ナンダッテー!!

565:Delフサギコ ◆A6VzDeLphI
08/09/07 00:56:56
わ・・・わん・・・・・・・


   ∧.,,∧   >>562さん
  ミ.,,゚Д゚彡
  ミ つ目(ミ . 相変わらずですね。
~ミ,,O,,,,,,つ  まあ、いいけど。

Autch.netさんところや、
[プロセスコミュニケートコンポーネント(適当w)]さんのところで
かかれているような応用すれば

> こんどは、ping -t 192.168.0.1 というずっと続く
> コマンドを、Memo1コントロールあたりに
> DOSプロンプトと同じ風に、1行つづ、出力したかったりするんですが

こういうのできるのかなあ。

んーー、ちょっとコーディングの感覚を取り戻す必要があるなあ。


566:デフォルトの名無しさん
08/09/07 05:12:03
TMemIniFileのUNICODE対応版(WideString)はどこかにありませんでしょうか?

567:デフォルトの名無しさん
08/09/07 09:56:55
INIファイル自体MS非推奨だからPrivate~W系APIはない。
ついでに言えばUNICODE≠WideStringな。
MemInifileのソース抜いて頭にtype String = WideString;入れて再コンパイルしたら。

568:デフォルトの名無しさん
08/09/07 11:14:50
TMemIniFileはAPI非依存だから、改造すればいけそうだね

569: ◆XcB18Bks.Y
08/09/07 15:32:45
>>566
ワイド文字列の値を保存するだけなら
UTF8Encode関数でUTF-8に変換すればよいと思います
ワイド文字列のファイル名だと大変そうですね。

>>545
アクションリストは基本的にメインフォームに置いています。
データモジュールはユーザーインターフェース(U/I。表示や編集)と無関係な
内部情報や内部処理を置く場所に徹するべきだと思います。

フォームを複数使うプログラムでは
サブフォームやフレームがメインフォームを参照しないようにしています。


570:545
08/09/07 15:56:17
>>569
UIに関するものはメインフォームに置く、ということですが、その場合
サブフォームやフレームがメインフォームを参照しないようにできるんでしょうか?

571:デフォルトの名無しさん
08/09/07 16:56:06
Frame側でFileExecuteなんてpublicメソッドを用意して
メインフォーム側のFileExecuteイベントハンドラから呼び出せば依存関係がなくなる。
publicをpublishedにしてSender.Name + 'Execute'を検索すれば少し楽になる。

572:545
08/09/07 20:04:55
いやそうでなく、フレーム側からメインフォームを参照するって話なのですが・・・

動的にメソッド呼ぶのはなんか違くないですか?

573:571
08/09/07 20:31:26
(その逆はともかく)どうしてもフレーム、サブフォーム側からフォームを参照したくなければしなくてすむという話をしたつもりだったんだが。
動的かどうかはあまり本質的ではないと思うが。

574:デフォルトの名無しさん
08/09/07 23:22:24
Delphi2007にUpdate3を当てると、System.pasが見つかりませんという
DCCエラーが出るのですがどうすればいいんでしょうか?
他のUpdateも必要なのかと思い、
December2007 UpdateとApril08 Hotfixも当ててみましたが改善されません。

誰かご存知でしたら、教えてください


575:デフォルトの名無しさん
08/09/08 12:29:46
System.pasが見つからないは大抵コンパイラ起動する引数が多かったりするだけ
ライブラリパスとか減らせば直ると思うよ
こっちはd6per(笑)だから参考になるか分からんけども

576: ◆XcB18Bks.Y
08/09/08 15:35:41
>>570
・内部情報と内部処理は全てデータモジュールに置く
・内部処理クラスや汎用関数は別のユニットに書く

とやるようにしたらメインフォームを参照することはなくなりました。

ただ、メインフォームにデータの保持とUIが一体化しているコンポを置く場合は
難しいかもしれません。


577:デフォルトの名無しさん
08/09/08 21:53:44
>574
この件はローカライズの不具合で対応パッチがあったと思うけど。これか。
URLリンク(hiderin.air-nifty.com)

578:574
08/09/08 22:19:48
>575
アドバイスありがとうございます。
手動でライブラリパスを変更して、Delphiを再起動するとうまくいきました

>577
あ、問題はたぶんそれです
でも、それ今はアップデートリストに出てこなくなってるようです。

一応手動ではありますが、解決しました
ありがとうございました

579:デフォルトの名無しさん
08/09/09 07:57:56
Delphi最新版の予約語一覧をネットから見られるとこないですかね。

580:デフォルトの名無しさん
08/09/09 13:02:45
イメージ上でMouseDownしたときの処理A
同じくDlClickしたときの処理B

処理B実行後に時折Aが発動するんですが回避方法あります?
Bの端末にReleaseCapture入れてみたがダメだった。

581:デフォルトの名無しさん
08/09/09 13:45:56
マウス操作ミスじゃないのか?
ダブルクリック後一定時間以内ならMouseDownを無視してはどうでしょう?

582:デフォルトの名無しさん
08/09/09 17:26:47
マウスがチャタリング起こしてたりしない?

583:デフォルトの名無しさん
08/09/09 21:00:44
>579
URLリンク(docs.codegear.com)

584:デフォルトの名無しさん
08/09/09 21:30:02
出勤前、帰宅後で自作自演、ご苦労さん

585:デフォルトの名無しさん
08/09/10 08:24:08
>>580
処理Aで↓

if not (ssDouble in Shift) then

586:デフォルトの名無しさん
08/09/10 21:59:09
>>581>>582>>585どもです。
操作ミスではないようです。チャタリング?は調べてみたところ大丈夫みたい。
>>585で問題なく動作しました。ありがとうございます。
ssDubleについてはこれから調べてみます。

587:デフォルトの名無しさん
08/09/12 19:13:43
少し相談にのっていただけないでしょうか?

TFrameをつくり、
フレームを使ってみる - DelWiki
URLリンク(delwiki.info)
こちらの方法で動的生成しているのですが、
実行時に以下のようなエラーが出てしまいます。

.dfmを見ると、ClientHeightが確かにあるのですが、削除しても
フレームを表示すると、ClientHeightが再生成されてしまいます。
(ClientHeightを一時的に削除しても、同様に PixelsPerInch、OldCreateOrderプロパティでも同じようにエラーがでます)
どのような対処したらよいものでしょうか?

---------------------------
mogemage
---------------------------
PropertyToolFrame.ClientHeight の読み込み中のエラー : プロパティ ClientHeight は存在しません.
---------------------------
OK
---------------------------

588:デフォルトの名無しさん
08/09/12 19:16:04
環境を書き忘れていました。
BDS2006 OS: Vista SP1
です。

589:デフォルトの名無しさん
08/09/12 19:38:52
>>587
おまいら、教えろ!

まで読んだ。

590:587
08/09/12 20:08:04
>>587 です。
実は、Frameにこちらの TSpTBXFrame を、
Web interface to jrsoftware.org newsgroups - Re: Does SpTBXLib support TFrame ?
URLリンク(news.jrsoftware.org)

使っておりまして、どうも TSpTBXFrame にしたときに
ClientHeight が published property にないのになぜか.dfmに保存されてしまうタイミングがあるようです。
(Forms.pasの property ClientHeight write SetClientHeight stored IsClientSizeStored が原因あるんでしょうか?)

そこでアドホックですが、

・「エディタで表示」(Alt + F12)でいったんIDE内でテキストで表示する
・エディタでエラーになる該当部分を消す。(ClientHeightなど)
・「フォームとして表示」(Alt + F12)で再表示する
・フレームのサイズを変更してみる
・コンパイル、実行

で修正OKでした。

結果的にエスパー必要としてスイマセン……

その後、「エディタで表示」で再度いじろうと思ったら、
---------------------------
情報
---------------------------
モジュール '(パス)hoge.pas' は継承またはリンクされたモジュールで使われています。.閉じること はできません。
---------------------------
OK
---------------------------
とかでで「エディタで表示」できなくなりました orz
これはどうしたもんでしょうか?

591:587
08/09/12 20:31:37
> モジュール '(パス)hoge.pas' は継承またはリンクされたモジュールで使われています。.閉じること はできません。

の件は、どうやら フレーム名とフレームの型が .dfm と.pasで異なっていた(入力ミス?)
のための影響でした。整合性をたもちましたら、解消されました。


592:587
08/09/12 20:41:59
何度もすいません。原因がわかってきました(´д`;)

こちらの TSpTBXFrame、
Web interface to jrsoftware.org newsgroups - Re: Does SpTBXLib support TFrame ?
URLリンク(news.jrsoftware.org)

つまり、これなのですが、
gist: 8945 ? GitHub
URLリンク(gist.github.com)

デザイン時にTFrameを新規作成から生成し、
 THogeMyFrame = class(TSpTBXFrame)
という風に書き換えて、コンパイルし、いったん閉じて再度ひらいたところ
デザイン画面がTFormのものになっており(TFrameの場合、枠がないはずなのに枠がある)、
.dfmの保存時もあたかもTFormのように振舞ってしまい、ClientHeight以下、
その他もろもろが保存されてしまうようです。
(ちなみに、TTnTFrameに置き換えた際は大丈夫でした)

これは一体どのような現象なのでしょうか?

593:デフォルトの名無しさん
08/09/12 21:39:56
もう日記にでも買いたら。そんな一般性のない自問自答はしらんがな

594:デフォルトの名無しさん
08/09/12 22:56:07
>>592
おそらくIDEのバグ
回避方法はもう忘れた
発生のタイミングはフレーム上のコンポを弄って保存した時。なのであまり弄るなw

595:デフォルトの名無しさん
08/09/13 09:08:18
TMainmenuのソース眺めてたらコンストラクタがなかったんだけど
こいつを弄りたいときはドコ見れば良いんでしょ?
複数のペインがあるソフトでToolBarとかじゃなく個々にメインメニューを
置けないもんかとふと思ってね。縦置きとか下段置きとかやれんもんかと。

596:デフォルトの名無しさん
08/09/13 10:07:57
継承して弄りたいなら

TMyMainMenu = class(TMainMenu)
public
  constructor Create(AOwner: TComponent); override;

でいいんじゃないの。TMainMenuになければその親~TComponentのコンストラクタがそのまま使われる。

597:デフォルトの名無しさん
08/09/13 10:38:08
メニューそのものはウィンドウズのメニューだよ。ウィンドウズのメニュー
そのものの振るまいをかえることはできない。

598:デフォルトの名無しさん
08/09/13 17:08:49
ToolBarのMenuBar := Trueにする方法がなかったけ?

599:デフォルトの名無しさん
08/09/14 02:42:51
フォーム画面での「パネル」コンポーネントについて質問です。

すでにフォーム上に置いてあるコンポーネントを、
新たに配置したパネルの上に乗せたいのですが、
どうすればいいでしょうか?

画面左上の「構造」ウィンドウでドラッグしても、
駐車禁止マークみたいなものが出て、ドラッグできません。
(出来る時もあったように思うのですが・・・・)

600:デフォルトの名無しさん
08/09/14 02:50:45
カット&ペースト

601:599
08/09/14 03:08:38
できました!ありがとうございます。

602:デフォルトの名無しさん
08/09/14 07:46:48
コンポーネントからParentのFormのイベントに対して反応することや、メソッドをフックするようなことは可能でしょうか?
具体的には、あるコンポーネントをFormに置くと、
CreateParamsを上書きして設定を書き換える、といったようなことです。

普通は、TMyForm.CreateParamsを定義して、
コンポーネントで定義したUpdateCreateParamsみたいなのを呼ぶものと思います。
ただ、もっと簡単にコンポーネントを利用できるようにならないかと思った次第です。

603:デフォルトの名無しさん
08/09/14 18:33:57
継承のメカニズムに外部から干渉できるとすると大問題。
コンポーネントはポトペタができるクラスに過ぎない。
過大視するのは危険。

イベント横取りやメッセージフックは簡単にできる。あらかじめ外部から
干渉可能なメカニズムはコンポーネント化が有効かもね

604:602
08/09/14 18:50:09
>>603
サンクス。
>>602には書いていなかったのですが一部やりたかった、
ウインドウメッセージの横取りは MakeObjectInstance でいけました。
調べたらサブクラス化といってDelphiでは定番の方法みたいですね。

CreateParamsはさすがにprotectedだし、というか普通のメソッドの横取りは無理だよなあ・・・
CreateParams時に、コンポーネントから呼び出してとドキュメントに書くしかないか。


どっかでアセンブラ使ってフックするような方法をみたんだけどあれはどこだったかなあ?
単なるWin32API呼び出しのフックだったかもしれない・・・。


605:602
08/09/14 18:53:18
ありました。

madshi.net - madCodeHook description
URLリンク(www.madshi.net)

前にQuality CentralでVCLのバグを修正するのに利用されているのをみました。

606:デフォルトの名無しさん
08/09/14 20:18:53
Delphi8あたりから導入された class helper ですが、
2つのhelperが同時に使えないのが痛いと感じています。
これって、改善の要望みたいなのってどこかに出ていないのでしょうか?

607:デフォルトの名無しさん
08/09/15 21:43:14
すいません質問なのですが、Delphiには、任意の単語を登録して自動的にハイライトしてくれる機能を持ったテキストコントロールクラスがあると聞きました。
それってTRichEditというやつでしょうか??
教えて頂けると幸いです。

608:デフォルトの名無しさん
08/09/15 21:51:43
>606
そういう積極的な使い方は非推奨だから…QCに出しても相手にされないと思う。
つかInterfaceとか使うべきなんじゃね?

>607
少なくともTRichEditではない。TRichEditはWindowsのWordPad相当のrtfエディタ。
TEditorとかSynEditとかかなぁ?

609:デフォルトの名無しさん
08/09/15 22:21:25
RichEditも指定した単語をハイライトしたりというのは出来るけど
全部自分でコード書いてやらないといけないんだよな。

610:デフォルトの名無しさん
08/09/15 22:49:15
DelphiIDEに使われてる16x16のツールバーのビットマップってどっかにないですか?
C:\Program Files\Common Files\Borland Shared\Images
のは数が少なかったり古臭かったりで微妙なんで

611:607
08/09/15 23:39:52
ありがとうございます。

>>TEditorとかSynEditとかかなぁ?
ああ、調べてみるとどうやらTEditorのことだったようです。ありがとうございました。

>> RichEditも指定した単語をハイライトしたりというのは出来るけど
全部自分でコード書いてやらないといけないんだよな。
そなんですよね!なのでTEditorのようなのがあるといいんのですが、DelphiじゃなくてC++(MinGW)で使いたいんですよね。
TEditorみたいののC++版みたいのがあればいいんですが・・ってDelphiスレで聞くことではないですね。。

612:デフォルトの名無しさん
08/09/15 23:42:11
C++BuilderならTEditorとか使えるがな

613:607
08/09/15 23:43:50
URLリンク(www.kanazawa-net.ne.jp)
ここにBCBでも使えるって書いてありますね。MinGWじゃだめなのかしら。。

614:デフォルトの名無しさん
08/09/15 23:45:30
BCB(CCB?ECB?)だとDelphiのコードがコンパイルできる
なので他のコンパイラじゃ無理ぽ

615:607
08/09/15 23:46:25
>>614
ああ、そうなのですか・・知りませんでした。ありがとうございますm(_ _)m

616:デフォルトの名無しさん
08/09/16 14:41:18
C++Builderは、コンパイラがC++クラスとDelphiクラス両方のクラス扱えるようになってたりと、結構特殊な環境。

617:デフォルトの名無しさん
08/09/16 14:56:54
質問です。
htmlの<form>~</form>のデータを
Indyのpostで送信するプログラムを作成したいのですが
<input タグの
name="hoge" value="hogehoge"
等のデータを解釈して読み込み、post用にURLエンコードする必要がありますが
<input name="hoge value="hogehoge">
この name="文字列" 形式の、"文字列"部分を効率良く取得する方法がいまいちわかりません。
泥縄式に文字列を操作して書けばなんとかなりそうではあるのですが
スパっと取得できるワザはないでしょうか。
xxxx="xxxxx"形式を一発で取得する方法とか
よろしくおねがいします。


618:デフォルトの名無しさん
08/09/16 16:28:33
>>617
TWebBrowserからIHTMLDocument2取ってきてDOMで操作するのは?

619:587
08/09/16 16:37:51
TFrameの継承クラスが、デザインして保存後にTFormに化ける問題ですが、
TTnTFrameのソース見て、原因がわかってきました。

設計時のコンポーネントとして、Delphiに登録しないといけないようです。
登録していないと>>587のようにTFormとして認識され、おかしなことになります。
TTnTFrameはインスコ時にちゃんとDelphiに登録しているので大丈夫のようでした。

TTnTFrameの設計時インスコ用ライブラリのソースを真似て解決できそうです。

620:デフォルトの名無しさん
08/09/16 16:54:42
>>618
他の処理もIndyなので、postするときだけIEコンポだと
ログインしている状態とかが引き継がれないので、
それは無理っぽいです。
<form>~</form>を解釈してpostデータにしてくれるコンポがあれば一番いいのですが。
それか、name="hoge" value="hogehoge"を簡単に取得できる文字操作はないでしょうか。


621:デフォルトの名無しさん
08/09/16 17:02:47
xhtmlならXMLパーサでなんとかできないっけ?

622:デフォルトの名無しさん
08/09/16 17:04:03
普通はPosかwhileで探すんじゃね?

623:デフォルトの名無しさん
08/09/16 17:07:30
Posとかだと変態チックなhtml投げられると詰まね?

624:デフォルトの名無しさん
08/09/16 17:14:40
MBCSにも対応してないしな

625:デフォルトの名無しさん
08/09/16 17:20:06
お前らなんで例にマジレスしてんの?

626:デフォルトの名無しさん
08/09/16 17:30:46
こんなの投げられたら困るじゃない(`・ω・´)
スレリンク(tech板:46番)


627:デフォルトの名無しさん
08/09/16 19:13:24
>>620
正規表現は?

628:デフォルトの名無しさん
08/09/16 22:08:33
Tmemoから右クリックでメニューを出したいんですが
TPopupMenuとTPopupActionBarの違いがよくわかりません

629:デフォルトの名無しさん
08/09/16 23:20:30
計氏のMP3Playerコンポを使っていますが
VolumeプロパティがVistaで機能しません
中の人はMMSystem.WaveOutSetVolumeとかしてるようですが

630:デフォルトの名無しさん
08/09/16 23:29:26
作者に言え

631:デフォルトの名無しさん
08/09/17 00:10:05
>>620
Indyで取得したソースを書き込んでパーサ機能だけ利用すればいいじゃん、ってことじゃないの?
ま、実際はWebBrowser使わずに直接パーサだけ利用できるんだけど

632:デフォルトの名無しさん
08/09/17 00:15:11
>>631
おすすめのパーサは?

633:デフォルトの名無しさん
08/09/17 00:26:31
おすすめも何もTWebBrowserが使ってるパーサが取替え可能とでも?

634:デフォルトの名無しさん
08/09/17 01:05:30
>>620
2chのCookie程度で効率とか考えなくても

635:デフォルトの名無しさん
08/09/17 08:45:02
スクリプト言語だとスクレイピング用のパーサーなんて一杯あるのにねえ
マイナー言語だとこの辺が面倒なんだよなあ・・・

636:デフォルトの名無しさん
08/09/17 12:34:23
パーサーもろくにかけないのにプログラマー気取りか

637:デフォルトの名無しさん
08/09/17 13:14:13
んでDelphi2009の体験版使ったやついないの?

638:デフォルトの名無しさん
08/09/17 14:02:09
いくつかブログがヒットするな

639:デフォルトの名無しさん
08/09/17 15:38:48
>>637
使ったよ

640:デフォルトの名無しさん
08/09/17 20:11:24
MLで中村先生が少しだけレビューしてくれてるじゃないか

641:デフォルトの名無しさん
08/09/17 20:16:17
DBすっぱり削っていいからソースつき&基本機能の制限なしのTurbo出してくれよ~

642:デフォルトの名無しさん
08/09/17 22:33:59
637 以降はオッチャネタだね。あっちへどうぞ。

643:デフォルトの名無しさん
08/09/17 22:46:17
Delphi2009ってドトネトインスコ必須?

644:デフォルトの名無しさん
08/09/17 23:28:39
>>643
必須

645:デフォルトの名無しさん
08/09/18 02:38:44
>>636
そういうあおりでは釣れないよ~
ただでさえDelphiは車輪の再発明ばかりで、うんざりしてるんだから
愚痴ぐらい言ってもよかろう

646:デフォルトの名無しさん
08/09/18 09:51:57
拾ってきたソースで楽ばっかしようとばっかで
己の才能のないことをDelphiのせいにするなよ

647:デフォルトの名無しさん
08/09/18 10:22:55
そんなこと言う奴はVCL使うの禁止だなw


まあパーサぐらい正規表現使ってぱっぱとやるべきだろうけど。

648:デフォルトの名無しさん
08/09/18 13:33:36
Delphiで改行はさせないけど、ボックスいっぱいになったら
次の行に表示させるようにしたいんだけど

普通のEditだとそもそも一行しか表示できないっぽいから
RichEdit使ってみたんだけど、今度はMaxLengthに問題がでた。

EditではMaxLengthはバイト数なのにRichだと文字数になるらしい
どうすりゃいいんだろう;


649:デフォルトの名無しさん
08/09/18 13:41:08
>>648
TMemoを使えばいいと思うよ。
ScrollBarsプロパティを ssNone か ssVertical にすれば勝手に折り返して表示してくれる

650:デフォルトの名無しさん
08/09/18 14:00:24
できました!!
ありがとうございます!

651:デフォルトの名無しさん
08/09/18 14:50:01
Delphi2006だけど、TADOTable.Refresh を実行すると、激しくメモリリークしないか?

652:デフォルトの名無しさん
08/09/18 19:09:39
UNICODE文字列をANSI文字列方に変換したいから
WideCharToString関数を使ってみたがString型だったため
使えませんでした。

他にStringをANSI文字列方に変換する方法ってありませんかね?

653:デフォルトの名無しさん
08/09/18 19:11:32
>>>652

ちなみにDelphi5です。

654:デフォルトの名無しさん
08/09/18 19:20:48
StringはUnicode格納できないぜ?

655:デフォルトの名無しさん
08/09/18 19:31:47
>>654

そうなんすか;
ありがとうございます

じゃぁ問題は他のとこか…;

656:デフォルトの名無しさん
08/09/18 19:40:57
どんなことをしたら文字化け(だよな?)したんだ?

657:デフォルトの名無しさん
08/09/18 19:49:04
文字化けっていうかBDEからADOに変えたら
DBに入力した文字数ではいらないんすよ;

必ず何文字かなくなる上に、消える文字数に規則性がみつからないんです;

658:デフォルトの名無しさん
08/09/18 20:39:33
>>657

全く同じ症状です。
どうすればよいのでしょうか。
情報お願いします。

659:デフォルトの名無しさん
08/09/18 21:32:27
Parameters.ParamByName('W_NAME').SIZE:= 40;

サイズ指定したら直りましたよ!


660:デフォルトの名無しさん
08/09/19 06:19:21
2009どこに売ってるの?
昨日秋葉回ったけど無かった

661:デフォルトの名無しさん
08/09/19 07:10:43
>>651
ReportsMemoryReaks := True
だったかで確認した?

662:デフォルトの名無しさん
08/09/19 07:11:42
>>660
@nifty
seshop.com

663:デフォルトの名無しさん
08/09/19 09:58:30
バージョンアップも店で買うようになったんだな。
ハガキが来ないからどうなったことだと思った。

664:デフォルトの名無しさん
08/09/19 11:39:56
>>659

ありがとうございます!

665:デフォルトの名無しさん
08/09/19 12:01:46
UnicodeStringにCRLFを挿入するときって#13#10でOK?

666:デフォルトの名無しさん
08/09/19 12:13:32
Asciiと同じで#0が必要

667:デフォルトの名無しさん
08/09/19 17:40:52
>Asciiと同じで#0が必要

ハツミミです。

668:デフォルトの名無しさん
08/09/19 17:50:01
ネコミミでつ。

669:デフォルトの名無しさん
08/09/19 19:32:21
文字コードの判定は何が良いでしょうか?
UTF-8なども判定したいのでjconvertは使えません

670:デフォルトの名無しさん
08/09/19 22:44:09
好きな方法でどうぞ。ちなみに完全に正しく判別する方法はありません。
詳しくは文字コードスレあたりで。

671:デフォルトの名無しさん
08/09/20 07:11:29
rubyのkconvみたいに適当でいいから判定してよライブラリがほしいのだろうと思う

672:デフォルトの名無しさん
08/09/20 07:50:41
性格出るよねこういうときって

673:デフォルトの名無しさん
08/09/20 09:51:04
たくさんの文字を調べれば遅くなるし
少しの文字しか調べないと甘くなるしな

674: ◆XcB18Bks.Y
08/09/21 11:57:09
>>652
var
 s: string;
 ws: widestring;
begin
 ws := 'くだすれ';
 s := ws;
end;

…こういうことではなくて?


675:669
08/09/21 21:41:47
皆さんありがとうございます
nkf32.dllを使おうと思ったのですがWideStringを渡す方法が分からなかったので使えませんでした
とりあえず自動判定は諦めるとして、文字コードの変換だけは実装しておきたいのですが、
WideStringのまま変換する例が無いのですが、何か良い方法はないでしょうか?

676:デフォルトの名無しさん
08/09/21 22:43:01
エクスプローラのツリービューはフォルダをマウスダウン→アップで選択すると
リストビューにファイルが表示されますが、DelphiのTreeViewとListViewで同様の処理をする場合
どのイベントで記述すれば良いのでしょうか?TreeViewのOnChangeイベントだと
マウスダウンの段階でイベントが発生します。OnClickイベントならダウン→アップで
イベントが派生するので都合が良いのですが、OnClickはノード選択処理に使うのは不便です。
何か良い方法はありませんか?

677:デフォルトの名無しさん
08/09/22 13:05:09
>>663

おいらもびっくりしたよ。いつも来ているバージョンアップ版の案内がこないからさー。
SEShop.comで買って大丈夫なんだよね?

678:676
08/09/22 16:14:42
自己解決しました><

679:デフォルトの名無しさん
08/09/22 23:17:20
Delphiで作られたランチャで、オープンソースのものってありまふか?
参考にしたいんですが。

680:デフォルトの名無しさん
08/09/22 23:45:13
ランチャってただ起動処理を外部アプリに飛ばすだけなんじゃね?

あとはUIの秀逸さだけが勝負かと。

681:デフォルトの名無しさん
08/09/23 00:51:30
どうやら久しぶりに会社でDELPHIにかかわることになりそうなんだけど
操作が全然覚えていない・・・
3.0の頃の書籍とか全部処分しちゃってるし

最近のお勧めってなんですか?

682:デフォルトの名無しさん
08/09/23 00:57:06
>>681
なんですかって?お勧めの本?

683:デフォルトの名無しさん
08/09/23 01:02:42
はい

684:デフォルトの名無しさん
08/09/23 02:42:34
ない

685:デフォルトの名無しさん
08/09/23 03:52:11
これなんかどう。
中身も読めるし。
URLリンク(books.google.co.jp)

2005以降はMarco Cantuさんの洋書がお勧め。

686:デフォルトの名無しさん
08/09/23 04:22:00
ああ、世界中で1000部やっと、ってやつね。

687:デフォルトの名無しさん
08/09/23 04:48:38
>>685
なにこれww売る気無いのか?ww

688:デフォルトの名無しさん
08/09/24 20:39:01
くだらない質問失礼
TFormのonShowってのはFormのVisible弄らない限り起動時にのみ呼び出されるの?

689:デフォルトの名無しさん
08/09/24 21:09:57
>>688
いえす。

690:デフォルトの名無しさん
08/09/24 22:49:24
Delphiの本スレってどこ?実質ここ?
別に超初心者じゃないんだけど。

691:デフォルトの名無しさん
08/09/24 22:53:14
>>688
メインフォームならYES。メインフォーム以外ならケースバイケース。
「Visibleいじらない限り」というのがShowやShowModalも含むのなら
それ以外で呼び出されるってことはないんじゃないかな。


692:デフォルトの名無しさん
08/09/24 22:59:48
質問スレはここだけみたいな気がする。

693:デフォルトの名無しさん
08/09/24 23:31:04
昔はあったよね。本スレっぽい(雑談だったっけ?)スレが。

694:デフォルトの名無しさん
08/09/24 23:35:00
寺子屋もあるぜよ

695:デフォルトの名無しさん
08/09/25 01:56:45
Delphi2から使ってるんで、超初心者でも初心者でもないんだが
2009どうよ、とかそういう話題はどこですればいいんかなー。

696:デフォルトの名無しさん
08/09/25 02:17:31
2chのDelphiスレは終わってるからMLでおk

697:デフォルトの名無しさん
08/09/25 05:00:58
>>693
こっちでもやってるよ。

【Embarcadero】CodeGearオッチャ その12
スレリンク(tech板)l50

698:デフォルトの名無しさん
08/09/25 11:42:49
>>690
質問スレここしかない。
超初心者じゃない俺も質問しているからOK

699:デフォルトの名無しさん
08/09/25 16:04:17
TMemoの改行を不可にしたいからこういう処理書いてみたが、
BackSpace使うと即行Tmemo内の文字の最後尾に移動してしまうんですが。

Tmemo.Text := StringReplace(Tmemo.Text,#13#10,'',[rfReplaceAll]);
Tmemo.SelStart := Length(Tmemo.Text);

本来はどう書くのが正解?

700:デフォルトの名無しさん
08/09/25 16:11:53
>>699
普通にonKeyPressで#13殺したらいいんじゃね?

701:デフォルトの名無しさん
08/09/25 16:12:20
WantRetuensをFalseにするだけじゃダメなの?


702:デフォルトの名無しさん
08/09/25 16:37:18
>>700
>>701

できました!!ありがとうございます!!!

703:688
08/09/25 22:05:42
ありがとうございます


704:デフォルトの名無しさん
08/09/26 05:22:48
指定した位置から、指定したバイト分の文字列を抜き出す関数ってありますか?

705:デフォルトの名無しさん
08/09/26 05:23:52
Copyのまんまやん

706:デフォルトの名無しさん
08/09/26 08:31:34
Toolbar2000のD2009対応バージョンでたよー
URLリンク(www.jrsoftware.org)

707:デフォルトの名無しさん
08/09/26 08:37:04
Toolbar2000よりTurboDelphi2009はまだかー

708:デフォルトの名無しさん
08/09/26 08:58:09
CodeGearは出す気はあるらしいけどね
学習用として出すらしいから機能は減るけど

709:デフォルトの名無しさん
08/09/26 09:35:23
作ったソフトを配布できないとか意味不明な事はやめて欲しいのう

710:デフォルトの名無しさん
08/09/26 09:38:29
>>709
経済のお勉強しような。

711:デフォルトの名無しさん
08/09/26 09:41:01
(経済)笑い

712:デフォルトの名無しさん
08/09/26 10:05:47
他人に上げるソフトなんて1部だけだし俺はそれでも構わんけどね

713:デフォルトの名無しさん
08/09/26 16:27:13
>>705
Copyの引数ってバイト数じゃなくて文字数じゃないの?

714:デフォルトの名無しさん
08/09/26 16:38:33
Copyはバイト数だよ。逆に文字数にしたかったらWideStringにキャスト

Copy('へべれけ', 2, 2) ==> '??'
Copy(WideString('へべれけ'), 2, 2) ==> 'べれ'

715:デフォルトの名無しさん
08/09/26 20:53:50
>>711
カッコ逆w

716:デフォルトの名無しさん
08/09/26 20:56:24
)経済(笑い

717:デフォルトの名無しさん
08/09/26 22:07:34
>>716
そうそう、次からは間違えんなよ

718:デフォルトの名無しさん
08/09/27 00:49:31
Turbo Explorerのことは、あきらめな。おそらくDelphi/C++Builderではなく、
Object Pascal/C++学習用環境、ということに…。

719:デフォルトの名無しさん
08/09/27 13:13:53
Delphi 6 で仮想リストビュー使ってます。
チェックボックスも表示したいのですが、OnData イベントで StateIndex にセットしないと表示しないようなので、
どうせならマウスカーソルのポイントの有無で色を分けようと、イメージリストに4種類の絵を用意しました。
インデックスは 0: チェックなし、1: チェックなしポイントあり、2: チェックあり、3: チェックありポイントありです。

リストアイテムの上でカーソルを動かすと OnData イベントが発生するようなので、WM_MOSEMOVE を処理して
カーソルの位置からポイントしているアイテムを割り出して、OnData イベントでセットしわけようとしました。
WM_MOSEMOVE メッセージは Application.OnMessage イベントハンドラで処理しています。

コードの抜粋です。

【Application.OnMessage イベントハンドラ】
procedure TForm1.AppMessage(var Mesg: TMsg; var Handled: Boolean);
var
 Point: TPoint;
 idr: TRect;
begin
 if Mesg.message = WM_MOUSEMOVE then
   if Mesg.hwnd = ListView1.Handle then
   begin
    if ListView1.Items.Count > 0 then
    begin
     idr := ListView1.Items[0].DisplayRect(drBounds);
     if FListView1ItemHeght <> (idr.Bottom - idr.Top) then
      FListView1ItemHeght := (idr.Bottom - idr.Top);
    end;
    Point := ListView1.ScreenToClient(Mouse.CursorPos);
    FListView1MouseX := Point.X;
    FListView1MouseY := Point.Y;
    FListView1ItemIndex := (FListView1MouseY - ListView1.Top) div FListView1ItemHeght - 1;
   end;
end;

720:719
08/09/27 13:15:17
(つづき)

【OnData イベント】
procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem);
var
 ColumnWidth: Integer;
begin
 ColumnWidth := ListView1.StringWidth(Format('Item%d', [Item.Index]));
 Item.Caption := Format('Item%d', [Item.Index]);

 if (FListView1ItemIndex = Item.Index) and (FListView1MouseX < 16) then
  Item.StateIndex := 1
 else
  Item.StateIndex := 0;

 if ListView1.Columns[0].Width < ColumnWidth + 30 then
  ListView1.Columns[0].Width := ColumnWidth + 30;
end;

しかしこれだとマウスカーソルをチェックボックスにポイントしても変化しません。
ポイントアイテムの特定がめちゃくちゃなのはわかってますが、ズレてても変化ぐらいはしてもいいと思うのですが…。
アイテムの特定に無理やりな計算をしているのは、GetItemAt メソッドの使用が原因かどうか切り分けたかった
からです。

URLリンク(mackerel205.ddo.jp)

一応ここにプロジェクト一式置いておきますんで、興味があったら見てみてください。

721:デフォルトの名無しさん
08/09/27 23:32:31
そんなもん使わないでぶあーちゃるつりーびゅぅーを使おうぜ!

722:デフォルトの名無しさん
08/09/28 00:48:13
TListViewにファイル一覧を表示して、ドラッグ&ドロップで並び順を変更できるようにしています。
これにさらにOLE Drag and Dropの機能を追加して、ファイルを他のアプリケーションへドロップできるようにしようとしています。
この場合、どうすればOLE Drag and Dropと並び順の変更機能を共存させられるでしょうか?
並び順の変更もOLE Dropを受けて行うしかないのでしょうか。

723:722
08/09/28 21:33:39
やっぱりOLE Dropの処理と統合するしかなさそうですね。
素直にそう実装することにします…。

724:デフォルトの名無しさん
08/10/01 22:56:08
SpTBXLib 2.3 released.

Installation and requirements:
TNT is not used on Delphi/C++Builder 2009
URLリンク(club.telepolis.com)

Web interface to jrsoftware.org newsgroups - ANN: SpTBXLib 2.3
URLリンク(news.jrsoftware.org)

SpTBXLib のDelphi2009版はついに TNT 要らずになった

725:デフォルトの名無しさん
08/10/02 08:55:23
自作のアプリのUIはMainMenu+Coolbar+ToolbarなXPのExplorer風からまったく進歩してないな・・・
ActionManagerとかって最新の環境だと普通に使われるくらい安定してるの?

726:デフォルトの名無しさん
08/10/03 13:10:14
>>724
すごい。

727:デフォルトの名無しさん
08/10/03 13:35:11
質問です。

TStringGridを使ってます。
例えば、Rowを削除したいのですが、簡単なメソッドがありません。
そこで、OnSelectCell内でRowの内容をずらして行って、最後に
RowCountを-1使用と試みても、
OnSelectCell内でCellsの内容をいじると再帰で呼ばれて、オーバフローに
なってしまいます。

簡単にRowを削除する方法ありますか?


728:デフォルトの名無しさん
08/10/03 13:38:23
>>727
DelRow:=StringGRid1.Row;
for N=0 to StringGrid1.ColCount-1 do
StringGrid1.Cols[N].Delete(DelRow);
StrinGgrid1.RowCount:=StringGrid1.RowCount;

729:デフォルトの名無しさん
08/10/03 13:59:26
>>728さん
ありがとうございます。
頂いたコードを試したりしたのですが、
”グリッドの行を追加/削除することは出来ません”
というエラーが出てしまうんです。

簡単にTValueListEditorのように空のRowを削除できないものでしょうか・・・

あ、すみません。環境はD6+XP SP3です。
よろしくお願いします。


730:デフォルトの名無しさん
08/10/03 14:10:07
>>729
ごめん、なんか勘違いしてるわ。今は↓こんなんしか思いつかん。

for N:=StringGRid1.Row to StringGrid1.RowCount-2 do
 StringGrid1.Rows[N].Text:=StringGrid1.Rows[N+1].Text;
StrinGgrid1.RowCount:=StringGrid1.RowCount-1;


731:デフォルトの名無しさん
08/10/03 14:22:21
730さん
何回もすみません。
ですよね。文字列を詰めて、最後にRowCountを調整するって簡単に考えていたのですが
それをOnSelectCell内で行うとスタックオーバーフローになるし、
どうしたもんかと思っていたんですよ・・・

ちょっと、ググったら、ビンゴかなと思われるページがありました。
URLリンク(delfusa.main.jp)
まだ、解読及び検証中ですが・・・

なにはともあれ、ありがとうございます。



最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch