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

このエントリーをはてなブックマークに追加
592デフォルトの名無しさん
誰か例のTGifImageの脆弱性なおしておくれ
593デフォルトの名無しさん:2008/05/09(金) 08:06:58
JaneStyleはTGifImageを修正してるみたいですね
594デフォルトの名無しさん:2008/05/09(金) 09:37:06
gifimage.pasの5992行から

while (code >= ClearCode) do
begin
//ここから
if UINT(Source) > UINT(@stack[High(stack)]) then
begin
Dec(Source);
Result := Source^;
Exit;
end;
//ここまで
Source^ := table1[code];

検証お願いします
595デフォルトの名無しさん:2008/05/09(金) 11:04:57
>>594
行けたぜGJ!
でも俺の場合5873行なんだがこれはバージョンの違い?
一応2.2なんだが・・・
596Zzz:2008/05/09(金) 11:24:39
質問お願いします
Delphi7なんですけど
(最大化最小化閉じるボタンを非表示などをした)Formを
同プロジェクト内の別のFormでも使いたくFormごとコピーして
使用したいのですがコピーやり方がわかりません
どうやれば実現できるのでしょうか???
597デフォルトの名無しさん:2008/05/09(金) 11:37:16
ExplorerでForm1.pas/.dfmをForm2.*にコピー&リネームして
ファイル内のユニット名、クラス名、Nameプロパティ名を調整。

フォーム上のコンポーネントやプロパティの設定は.dfm
イベントハンドラ等のコードは.pasにあるから適当に切り貼りしてもいいかも。

名前をつけて保存でForm2とかやっちゃうとForm1が破棄されForm2を使い出すからわけわかってないと悲惨なことに。

IDEでは使いまわし支援でリポジトリなるものをサポートしているけどほとんど使ったことない。
活用してる人っているのかね。

なんにしてもプロジェクト全体のバックアップをしてから試したほうがいいかもね。
598Zzz:2008/05/09(金) 11:40:36
やはり意外と、つらそうな道のりですね
了解しました
地味に作成しようと思います
リポジトリの使用方法も忘れてつつあるので・・・
ありがとうございました
599デフォルトの名無しさん:2008/05/09(金) 11:40:40
うちは5846行目だった

TGIFSubImgae.Decompressプロシージャ内のNextLZW関数内だよね?
600デフォルトの名無しさん:2008/05/09(金) 12:45:27
ver2.2のNextLZWの中です

ASSERT(Code < TableSize, 'Code too large');
while (code >= ClearCode) do
begin
//ここから
if UINT(Source) > UINT(@stack[High(stack)]) then
begin
Dec(Source);
Result := Source^;
Exit;
end;
//ここまで
Source^ := table1[code];
Inc(Source);
if (code = table0[code]) then
Error(sDecodeCircular);
code := table0[code];
ASSERT(Code < TableSize, 'Code too large');
end;
601デフォルトの名無しさん:2008/05/09(金) 13:17:57
>>596
継承して使うと似たようなフォームで少しだけ違うような場合に便利だよ
ファイル⇒新規作成⇒その他 で出たダイアログのタブの今のプロジェクト内から Form1を選んで
下の ・継承 を確認して [OK]
602Zzz:2008/05/09(金) 16:50:32
たびたびすいません
質問です
リストボックスやコンボックスのItems欄に選択「文字」を追加する
方法が分かりません
・・・と書くとItem addとか思われると思いますが、もう一歩進んで
その追加したを随時に追加し、且つ保存したいのです
プログラムを終了させる、プログラムを起動させる
「追加したデータが消えてる(涙・・・」
どうやれば保存できるのでしょうか
最終的には、マイナーなコンポーネントに対し保存したいのですが
基本のリストボックスやコンボックスのやり方を教授していただければ
自分で考えますので(当たり前ですけど)ヒントの程お願い致します
603デフォルトの名無しさん:2008/05/09(金) 17:09:42
終了時にファイルに保存して起動時にファイルから読み込む。
604Zzz:2008/05/09(金) 17:23:32
>>603 おしい
それも一つの手ではあるんですが、最終的にコンポーネントの
Items欄に追加したいのでItems欄に保存する方法はないのかと
言うのを知りたいのです
605デフォルトの名無しさん:2008/05/09(金) 17:31:18
質問する前に日本語を勉強する
606デフォルトの名無しさん:2008/05/09(金) 17:41:48
いまいちよくわからないがexeのどこかに保存されているであろうItemsのデフォルト値に対して保存・読み出ししたいってことか?
もしそうなら、コンパイルする度に値が吹き飛ぶぞw
607デフォルトの名無しさん:2008/05/09(金) 18:42:09
そういうことができるなら ini ファイルはいらんがな・・
608デフォルトの名無しさん:2008/05/09(金) 18:57:18
リソースを書き換えたいのか? 出来るだろうが、なんでiniファイルは駄目なんだ?
609デフォルトの名無しさん:2008/05/09(金) 21:18:12
少なくともコード書いて試して 603 に対して「おしい」とかいってるのか?
const
  DatEx='.dat';
var
  ListDat:string;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox1.Items.Add(Edit1.Text);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ListDat:=ChangeFileExt(Application.ExeName,DatEx);
  if FileExists(ListDat) then
    ListBox1.Items.LoadFromFile(ListDat);
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  ListBox1.Items.SaveToFile(ListDat);
end;
ちなみにみんなの言っている「日本語でおk」は
「Items欄に保存」ってのがわからんってことだぞ
610Zzz:2008/05/09(金) 23:16:25
>>609
むむー
ListBox1.Items.SaveToFile(ListDat); で行けるかも

えっと
Items欄に保存ってゆうのは・・・・・・
コンボボックスとかは、選択肢をItems.Addしなくても事前に入れて置けるじゃないですか(うろ覚えすまん)
あれってPgで、あるボタンを押した時のイベントでItems.Addして追加しても、
Pg終了して、再度Pg再開してコンボボックスの中見ると消えてるじゃないですか(あたりまえですけど)
つまり、そのItems欄の中にデータを残しておきたい訳です

(↓コンボの中)
にんじん
だいこん
トマト

↓(いもを追加)

(↓コンボの中)
にんじん
だいこん
トマト
いも

↓(システム落として再起動)

(↓コンボの中)
にんじん
だいこん
トマト

(がーん いもは・・・・・)
611デフォルトの名無しさん:2008/05/10(土) 00:01:24 BE:348454-PLT(12660)
iniかレジストリ使うのが普通じゃね?
612デフォルトの名無しさん:2008/05/10(土) 00:55:11
自分で言ってるけど消えるのは当たり前なんです
そういうのは外部のファイルに記録しておいて
再開したときに読み込むのがいいと思います
613デフォルトの名無しさん:2008/05/10(土) 07:42:56
だから、設計時に追加した情報は、コンパイルするとリソースとしてexeに含まれるの。
614デフォルトの名無しさん:2008/05/10(土) 10:03:01
TIniFile使ってやるのが一般的じゃね?
>>610の気持ちもわからんではないが・・・逆にIDEで初期値を入れられるだけでも便利と思え!

ListBox1.Items.Commatext:=ReadString('ListBox1','Items','');

WriteString(ListBox1','Items',ListBox1.Items.CommaText);

615デフォルトの名無しさん:2008/05/10(土) 10:27:37
dfmファイルを外部に持たせればOK.
616デフォルトの名無しさん:2008/05/10(土) 11:28:00
    彡川三三三ミ
   川出 ::::::⌒ ⌒ヽ  パクリ星からやってきたお!
  出川::::::::ー●-●-)
 ..川(6|::::::::  ( 。。)) パクリ星の王子様の◆Style/kK.sだお!
 出川;;;::∴ ノ  3  ノ  
   ノ\_;;;;;;;;;;;;;;;;ノ   Janeスレ荒らしてるヒキコモリだから友達できないお!
  ( *  ヽー--'ヽ )
  (∵ ;)  ゚ ノヽ  ゚ ):) チンポは極小で包茎だお!!ちなみに童貞だお!!
  (: ・ )--―'⌒ー--`,_)
  (___)ーニ三三ニ-)
  (∴ ー' ̄⌒ヽωニЗ 好きなものは他人のソースとオナニーとwarezだお!!
   `l ・  . /メ /
    ヽ ∵  /~- /.    今日もたくさんソースパクリまくるお!!
    (__)))))_)))))
617デフォルトの名無しさん:2008/05/10(土) 14:33:41
>>566
おー、Sliverpoint乙
618デフォルトの名無しさん:2008/05/10(土) 15:14:34
>>587
今頃で申し訳ないんですがエラーが出てインストール出来ません・・・
d6perだからですかね?proだとインストールできるんでしょうか
619デフォルトの名無しさん:2008/05/10(土) 16:15:29
>>618
alpha版はdel7から対応だったように思う
2.1beta1↓
ttp://www.fileup.org/fup183413.zip.html
TB2Kのパッチは自分で探してね
620デフォルトの名無しさん:2008/05/10(土) 16:15:47
>>619
passはtbx
621デフォルトの名無しさん:2008/05/10(土) 16:22:52
>>619-620
わざわざうpしていただいてありがとうございます!
インストールしてみます
622デフォルトの名無しさん:2008/05/10(土) 16:46:04
インストールできました!
ありがとうございました!
623デフォルトの名無しさん:2008/05/10(土) 18:24:43
インストールできたのはいいんですがメニューがボタンのようになってしまいます・・・
これじゃ当初の目的が達成できないのですが、どのようにすれば普通のメニューのように出来るのでしょうか
624デフォルトの名無しさん:2008/05/10(土) 18:28:59
すみません、自己解決しました・・・
625デフォルトの名無しさん:2008/05/10(土) 18:30:40
わけわかんねー事言ってんじゃねぇよタコ
小学生からやりなおせ
626デフォルトの名無しさん:2008/05/10(土) 19:07:00
今小学5年生です・・・・
627デフォルトの名無しさん:2008/05/10(土) 19:15:49
「相撲」って人気有るんだな
映画化されて・・・と思った・・・おれは小学生からやり直すべき?
628デフォルトの名無しさん:2008/05/10(土) 19:17:12
相模だろw
629デフォルトの名無しさん:2008/05/10(土) 19:18:37
意味の解らない俺はどれからやり直せばいいんだ?
630デフォルトの名無しさん:2008/05/10(土) 20:02:46
アセンブラからだろ とーぜん
631デフォルトの名無しさん:2008/05/10(土) 20:30:43
精子から
632デフォルトの名無しさん:2008/05/10(土) 20:42:11
Office2007でコンテキストメニューを表示したとき
その上にツールバーも一緒に表示するUIが何気に便利なんだけど
あれどうやって実現するんだろう。
633デフォルトの名無しさん:2008/05/10(土) 21:24:25
実現も何も・・ただそういうウィンドウを表示してるだけだよ。
634デフォルトの名無しさん:2008/05/11(日) 03:52:32
うまく言えないんですがエスケープシーケンスのある文字列を変換するにはどうすればいいんでしょうか
たとえばabc\ndefという文字列があった時に
abc#10def(#10はもちろん文字列としてではなく)に変換するみたいなのです
635デフォルトの名無しさん:2008/05/11(日) 03:56:24
お願いします。APIを使ったプログラムに不自由してるくらいの実力の者です。

http://d.hatena.ne.jp/Wacky/20080114/1200315830
ここのサイトの通りにTMemoに検索をつけてみたんですが、検索方向が下向きに検索できるのですが、上向きには検索できません。
どうすればできるようになるのでしょうか?

ちなみに環境はWindowsXPHome,Delphi5Proです。
636デフォルトの名無しさん:2008/05/11(日) 05:17:38
>>634
つStringReplace

>>635
TFindDialog.OptionsにfrDownが設定されているかを確認して
自分で切り替える必要があります
637634:2008/05/11(日) 05:27:03
>>636
一応\nだけではなくて\tとか漢字とかもエスケープされてるようなので使えないです・・・
638デフォルトの名無しさん:2008/05/11(日) 07:56:46
>>637
つ正規表現 TRegExp
639デフォルトの名無しさん:2008/05/11(日) 08:09:33
function DecodeEscStr(const s: string): string;
var i: integer;
begin
 Result := ''; i := 1;
 while i <= length(s) do
  if s[i] in LeadBytes then
  begin Result := Result + copy(s, i, 2); inc(i, 2);
  end else begin
   if s[i] = '\' then
   begin  inc(i); case s[i] of
     'x':try
       Result := Result + char(StrToInt('$' + s[i + 1] + s[i + 2]));
       inc(i, 2);
      except end;
     'b': Result := Result + #$08;
     'a': Result := Result + #$07;
     'f': Result := Result + #$0C;
     'r': Result := Result + #$0D;
     't': Result := Result + #$09;
     'v': Result := Result + #$0B;
     'n': Result := Result + #13 + #10;
     else Result := Result + s[i];
    end;
    inc(i);
   end else begin
    Result := Result + s[i]; inc(i);
   end;
  end;
end;
640デフォルトの名無しさん:2008/05/11(日) 08:11:02
>>634 はもしかして C言語スタイルの \ エスケープでエンコードされた
文字をデコードしたいって事じゃないかと思ってサンプルコードを書いてみた
641634:2008/05/11(日) 08:27:34
>>638
TRegExpは何だかさっぱりであまり使ってません・・・

>>639,640
ありがとうございます
元のプログラムはCのようなのですがそれの仕様が良く分からないもので・・・
一応「テスト」という文字が「\83e\83X\83g」になるということは分かってます
642デフォルトの名無しさん:2008/05/11(日) 09:08:54
それは独自仕様って事だね。
     'x':try
       Result := Result + char(StrToInt('$' + s[i + 1] + s[i + 2]));
       inc(i, 2);
      except end;

この部分を

     '0'..'9' , 'A'..'F':try
       Result := Result + char(StrToInt('$' + s[i ] + s[i + 1]));
       inc(i);
      except end;

とすれば、その部分には対応すると思うけど、他にも違いがありそうだね。
仕様が判ってるのはあなただけだから、自分でやってね
643634:2008/05/11(日) 09:26:00
>>642
それで出来たようです!
ご迷惑かけました!
そしてありがとうございました!
644デフォルトの名無しさん:2008/05/11(日) 12:15:59
フォームのボタンなどのキャプションに付けるアクセラレータって言うんでしょうか
(&A)みたいにするとAltキーとAを一緒に押すとクリックされるやつですが、
コントロールが多くなってくると、どれが使われていないのか探すのが大変です。
便利なワザみたいなの、ありませんでしょうか。
645デフォルトの名無しさん:2008/05/11(日) 12:40:14
ActionList
646デフォルトの名無しさん:2008/05/11(日) 13:24:12
適当に書いてみたが何気に便利かも・・・
表示をまともにしてコマンドラインツールにして外部ツールとして実行できると使い物になりそう。
オープンダイアログで調べたいフォームのdfmファイルを指定するとこんな感じで出る。
C: Caption = '&ClickMe!'
C: Caption = 'Button1(&C)'
F: Caption = #12501#12449#12452#12523'(&F)'
R: Caption = '&Run'
X: Caption = #32066#20102'(&X)'
procedure TForm1.Button1Click(Sender: TObject);
var
    dfm, res: TStringList;
    i, idx: Integer;
begin
    OpenDialog1.InitialDir := ExtractFilePath(ParamStr(0));
    if not OpenDialog1.Execute then Exit;
    dfm:= TStringList.Create;
    res := TStringList.Create;
    try
        dfm.LoadFromFile(OpenDialog1.FileName);
        for i := 0 to dfm.Count-1 do
        begin
            idx := AnsiPos('&', dfm[i]);
            if idx > 0 then
                res.Add(UpperCase(dfm[i][idx+1]) + ':' + dfm[i]);
        end;
        res.Sort;
        ShowMessage(res.Text);
    finally
        dfm.Free;
        res.Free;
    end;
end;
647デフォルトの名無しさん:2008/05/11(日) 18:17:09
質問です。

TMemo に長いテキストを読み込ませたいのですが LoadFromFile で一気に読み込むと一瞬フリーズしたようになります。
そこで、スクロールに合わせて小分けに読み込むようにしたいのですが何か良い方法はありませんか?
648デフォルトの名無しさん:2008/05/11(日) 18:50:47
>>647
マルチスレッド
649デフォルトの名無しさん:2008/05/11(日) 19:08:34
>>648
お答えありがとうございます。
ですが、メモリを節約して小分けに読み込み表示してスクロールバーの振る舞いはファイルサイズに合ったものにしたいのですが、どうにかなりませんか?
650デフォルトの名無しさん:2008/05/11(日) 19:23:38
はなっからスクロールバーを適正サイズにしたいってこと?そりゃ無理。どれだけの行数があるのかは
読み込んでみないとわからないっしょ?
651デフォルトの名無しさん:2008/05/11(日) 19:26:12
>>650
確かにそうですね。妥協することにします。

>>647 終了です。ご回答くださった方ありがとうございました。
652デフォルトの名無しさん:2008/05/12(月) 07:36:01
TStringListにいったん読み込めばいい。
653デフォルトの名無しさん:2008/05/12(月) 15:29:15
複数キー入力を検出するにはどうすればよいでしょうか?
Ctrl+Alt+Delとかのことです。
よろしくお願いします。
654デフォルトの名無しさん:2008/05/12(月) 15:31:32
そんな無作法なツールは死ねばいい
655デフォルトの名無しさん:2008/05/12(月) 16:01:57
>>653
TShiftState
656デフォルトの名無しさん:2008/05/12(月) 23:00:01
>653
検出はいいけど、何をしたいのか具体的に書いたほうがいいと思うが。

ちなみにCtrl+Alt+Delは捕捉できないので念のため。
657デフォルトの名無しさん:2008/05/12(月) 23:01:57
BBS へ行ったと思われ
658デフォルトの名無しさん:2008/05/12(月) 23:42:30
TMemo でスクロールせずに表示できる行数を知るには ClientHeight を Font.Height で割れば良いのでしょうか?
659デフォルトの名無しさん:2008/05/13(火) 00:07:26
1分で確かめられる事をわざわざ聞きにくるな
660デフォルトの名無しさん:2008/05/13(火) 02:25:24
1分使って自分で確かめるくらいなら2分使って質問を投げる勇気を私はもちたい。
661デフォルトの名無しさん:2008/05/13(火) 03:02:10
:::::::::::.: .:. . ∧_∧ . . . .: ::::::::
:::::::: :.: . . /彡ミ゛ヽ;)ヽ、. ::: : ::
::::::: :.: . . / :::/:: ヽ、ヽ、i . .:: :.: :::
 ̄ ̄ ̄(_,ノ  ̄ ̄ヽ、_ノ ̄
662635:2008/05/13(火) 12:49:06
>>636
ありがとうございます。帰ってやってみます。
663デフォルトの名無しさん:2008/05/13(火) 21:40:18
これからDelphiをはじめる初心者ですが
TurboDelphi用の初心者向け参考書はありますか?
お勧めがあれば教えて下さい。
664デフォルトの名無しさん:2008/05/13(火) 21:50:23
>>594
>>595
>>599

melander ってしらないうちにオンラインにカムバックしてたのね
http://melander.dk/delphi/gifimage/

ここで各種 Delphi のバージョンアップ対応のメンテ版を公開していたので
同じ 2.2 でもバージョン違いが存在する
http://www.tolderlund.eu/delphi/

で、そもそも TGIFImage は CodeGear に寄贈されて最新版の3.0は Delphi 2007 に同梱と
665デフォルトの名無しさん:2008/05/13(火) 23:38:58
>>664
D2007のTGIFImage3も>>594のはバグってる
でも他のInterlaceなGifの問題は直ってたりするけど
http://www2.ttcn.ne.jp/~honkawa/images/2770.gif
666デフォルトの名無しさん:2008/05/14(水) 02:11:31
(;^ω^)今更ながらtypeとポインタが便利な事に気付いたwwww今まで時間無駄にしてたわwwwwwww
667デフォルトの名無しさん:2008/05/14(水) 05:23:00
で、TGIFImage の開発元にフィードバックしたいのだが。

で、いくつか問題起こす gif を見ましたが、なんつーか児童ポルノに厳しい国でも
レポートできるようなアニメーション GIF で再現できない物ですかねぇ
668デフォルトの名無しさん:2008/05/14(水) 09:45:09
var
Attr: Cardinal;
dv: string;


Attr:= GetFileAttributes(pchar(dv));
if (Attr and FILE_ATTRIBUTE_COMPRESSED) <> 0 then
begin
MessageDlg('Compressed.', mtError, [MBOK], 0);
end;
if (Attr and FILE_ATTRIBUTE_ENCRYPTED) <> 0 then
begin
MessageDlg('Encrypted.', mtError, [MBOK], 0);
end;

dv はドライブ名 C:\ or D:\

これで9x系のドライブスペースとNT系の圧縮フォルダとプロの
暗号化されたやつを判定できますか?
669デフォルトの名無しさん:2008/05/14(水) 14:03:27
ウィンドウハンドルを指定してそのウィンドウのキャプチャをCanvasに描くのってどうやるの?
670デフォルトの名無しさん:2008/05/14(水) 16:52:05
ランダムな2バイト文字を生成するにはどうすればいいんでしょうか
671デフォルトの名無しさん:2008/05/14(水) 17:27:16
'ランダム'


お約束すぎた?
672デフォルトの名無しさん:2008/05/14(水) 21:06:49
>>669
GetWindowRect(ハンドル,Rect);
GetDC
673デフォルトの名無しさん:2008/05/15(木) 13:49:45
calendarExと言うdelphiのカレンダーコンポーネント使ってるんですけど
Appendで特別な祭日(2008/5/6)の追加できたんですけど削除の仕方がわかりません^^;
どうやればいいのでしょう
すれ違いだと思いますが罠にもすがる思いで質問します 
674デフォルトの名無しさん:2008/05/15(木) 14:18:30
罠にすがられたいという事なんで レスしてみる

calendarEx と言われても、誰もが付けそうな名前なんで判らん。
とりあえず一番簡単なのは、Createをメソッドとして読んで
再度 設定しなおしたら駄目?
レジストリやファイルに保存してないならだけどさ
675デフォルトの名無しさん:2008/05/15(木) 15:30:39
罠???
糸・・・藁だ 藁
なるほどその手もありましたか
このソフトなんか10年くらいの前のソフトらしく四苦八苦してます
ヒントくれてありがとうございます ;;
676デフォルトの名無しさん:2008/05/15(木) 15:51:13
>>670
全2二バイト文字を抽出しておいて、そこからランダムに選んだらどうだろう。
677デフォルトの名無しさん:2008/05/15(木) 20:20:00
うーん、2バイト文字ってのも良く分からないけど
何でランダムに抽出したいのか、その使い道が気になるにょ
678デフォルトの名無しさん:2008/05/16(金) 19:09:21
>>670
文字コードにもよるが、SJISのランダムな日本語を得たいのかな?
 
679670:2008/05/16(金) 19:55:14
>>676
それだけでかなりの時間がかかりそうですですね

>>677
色々です、色々

>>678
そうです、SJISです
680デフォルトの名無しさん:2008/05/16(金) 22:17:52
結果はファイルにでもキャッシュしておけばいい。
SJISに割り当てられている全文字合わせても20KBくらいだし。
681デフォルトの名無しさん:2008/05/17(土) 01:28:40
無効な文字なら、アウトラインを取得できないかもしれないから、
それ使って判断できるかも。
682デフォルトの名無しさん:2008/05/17(土) 11:41:06
ListViewのMultiSelect=Trueの状態で
ボタンを押すと選択行を1段下げる処理をしたいのですが
<<2のところで「EAccessViolation クラスの例外」と出てしまいます
また<<2だけの処理だと複数行選択してしまいます

with ListView do begin
Items[Selected.Index].Selected := False;  //<<1
Items[Selected.Index + 1].Selected := True; //<<2
end;

他にもMultiSelectをFlaseにしてから
リストをClearSelectionしてからなど試しましたが
同じようにエラーが出てしまいます
何かよい方法はないでしょうか?
683番組の途中ですが名無しです:2008/05/17(土) 11:59:35
>>682
>選択行を1段下げる
MultiSelectだと飛び飛びで選択している場合もあるけど
その場合は?
684デフォルトの名無しさん:2008/05/17(土) 12:13:48
>>682
var
 hoge:integer;
begin
 if listview1.itemindex<0 then exit;
 hoge:=listview1.ItemIndex+1;
 listview1.ClearSelection;
 listview1.Items[hoge].Selected:=true;
 listview1.Items[hoge].focused:=true;
 listview1.SetFocus;
end;

こういう事?
MakeVisibleや行数を超える場合は知らない
685デフォルトの名無しさん:2008/05/17(土) 14:06:00
>>682
<<1でTListItem.SelectedをFalseにしているのだから
<<2のTListView.Selectedはnilになってる
686682:2008/05/17(土) 14:58:57
>>683
>>684
>>685
あ!なるほど
こんな感じで実装したら思ったようにいきました。
ありがとうございます!助かりました。

procedure TMainForm.ListMove(Next: Boolean);
var i, idx: Integer;
begin
if Next then i := 1
else i := -1;
with ListView do begin
idx := Selected.Index;
ClearSelection;
Items[idx].Selected := False;
Items[idx + i].Selected := True;
Items[idx + i].Focused := True;
end;
end;
687デフォルトの名無しさん:2008/05/17(土) 15:16:38
マルチセレクトでないなら
ListView.ItemIndex := ListView.ItemIndex + 1
でいいんじゃない?
688デフォルトの名無しさん:2008/05/18(日) 17:56:34
指定した文字列がファイルとして作成できるか確認する方法はありますか?
例えばC:\Delphi.txtを渡すとTrue、C:\Delphi\を渡すとFalseを返す、などということです
689デフォルトの名無しさん:2008/05/18(日) 18:06:56
ListViewについて質問です。
二つのカラムを作成し(A、B)、カラムAの1番目に文字列'1-1'、カラムBの1番目に文字列'1-2'、
カラムAの2番目に文字列'2-1'、カラムBの2番目に文字列'2-2'という形でリストを作成したいのですがどうすればいいでしょうか?
よろしくお願いします。
690デフォルトの名無しさん:2008/05/18(日) 18:17:14
>>688
ヘルプでFileCreate検索しろ

>>689
ListViewの扱い方をまず学べ
691デフォルトの名無しさん:2008/05/18(日) 18:21:32 BE:261735-PLT(12660)
>>689
var
  TestColumn: TListColumn;
begin
  with ListView1 do begin
    TestColumn := Columns.Add;
    TestColumn.Caption := 'A';
    TestColumn.Width := 100;
    TestColumn := Columns.Add;
    TestColumn.Caption := 'B';
    TestColumn.Width := 100;
    with Items.Add() do begin
      Caption := '1-1';
      SubItems.Add('2-1')
    end;
    with Items.Add() do begin
      Caption := '1-2';
      SubItems.Add('2-2')
    end;
  end;
end;
692デフォルトの名無しさん:2008/05/18(日) 18:24:22
>>688
字面の正しさは正規表現でチェック
'^([a-zA-Z]\:)|(\\)(\\{1}|((\\{1})[^\\]([^/:*?<>"|]*(?<!\[\])))+)$'

ディレクトリが存在してるか、アクセス権があるか等々で失敗する要因が他にもあるから
あまりがんばらずに、実際に書き込んでみてから例外拾って対応するのが定石。

>>689
for i := 1 to 2 do
 with ListView1.Items.Add do
 begin
  Caption := Format('%d-1', [i]);
  SubItems.Add(Format('%d-2', [i]);
 end;
693デフォルトの名無しさん:2008/05/18(日) 18:30:13
>>690,692
FileCreateで行けるようですね、ありがとうございました
694デフォルトの名無しさん:2008/05/18(日) 18:39:52
>>690
色々なサイトを回ったのですがSubItemの使い方について書いてあるところが見つかりませんでした。

>>691-692
ありがとうございます。
しかし、そのとおり実行してみるとカラムAの1番目に'1-1'、3番目に'2-1'
カラムBの2番目に'1-2'、4番目に'2-2'と表示され、
カラムAの2,4番目は空欄、カラムBの1,3番目も空欄、というようになります。
どうすれば1番目と2番目とで納められるでしょうか?
695デフォルトの名無しさん:2008/05/18(日) 18:48:41
本当にすみません。
>>692さんのコードでできました。お騒がせいたしました。

また、答えてくださった方ありがとうございました。
696デフォルトの名無しさん:2008/05/18(日) 18:56:07
>>691さんのコードもできました。
変に打ち間違えていたようです。
すみませんでした。
697デフォルトの名無しさん:2008/05/20(火) 06:08:00
>>696
うるせ馬鹿
死んで詫びろ
698デフォルトの名無しさん:2008/05/20(火) 06:10:06
>>690
お前も死ね
699デフォルトの名無しさん:2008/05/20(火) 17:44:20
ActionListをダブルクリックすると編集ウィンドウが開きますが、
この位置や大きさをプロジェクト単位で覚えさせとくってできます?
700デフォルトの名無しさん:2008/05/21(水) 00:32:41
知らぬ間にPngDelphi氏んでたのね
http://www.codeplex.com/PNGImage
701デフォルトの名無しさん:2008/05/21(水) 07:14:42
>>699
フリーウェアでそんなのがありそうだな。
ソフトウェア板行って聞いてみたら。
702デフォルトの名無しさん:2008/05/21(水) 11:04:56
Memo1.Lines.LoadFromFile(FileName);
とかでEUCのテキストを読み込むと文字化けしますが
これを読めるように表示することってできるのでしょうか?
テキストエディタだと見た目はeucで読み込んで表示し
保存もeucのまましてるように見えるけどあれは
内部でシフトJISに変換して表示して、保存時は再度eucに変換してるだけなんでしょうか?
703デフォルトの名無しさん:2008/05/21(水) 11:35:28
TMemoryStreamで読み込んで
nkf32.dllで変換して
Memo1.Lines.LoadFromStream
704:2008/05/21(水) 11:52:01
正整数Nを読み込み、x^2≦N<(x+1)^2となる整数x、つまり√Nの近似値を求めるプログラムを、
sqrtなどの標準関数を使わないで作りなさいという問題なんですが。。。
わかりません。教えてもらえませんか?PASCALでやっているんですが。
705702:2008/05/21(水) 11:54:14
>>703
やはりnkf32.dll等で自動判別して読み込んでsjisで表示するんですね
ありがとうございます
706デフォルトの名無しさん:2008/05/21(水) 12:04:07
>>704
良く知られた方法は 奇数を順に累計していったらという方法
function iSqr(n:Integer):Integer;
var i,sum:Integer;
begin
sum:=0;
for i:=0 to $B505 div 2 do begin
sum:=sum+1+i*2;
if sum>n then begin Result:=i;exit;end;
end;
Result:=i;
end;

大きな数字で速度がある程度必要ならバイナリー法(2分検索を行う)
さらに浮動小数点等で速度が必要ならニュートン法
707デフォルトの名無しさん:2008/05/21(水) 12:05:02
あ  div 2 は 不要だ。
708デフォルトの名無しさん:2008/05/21(水) 14:20:05
助けてください。

Form3で

procedure TForm3.FormCreate(Sender: TObject);
begin
IniFile := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
try
pass := IniFile.Readinteger('pass', 'Pno',0);

finally
IniFile.Free;
end;

edit1.text:=inttostr(pass);
end;

んでForm1で
procedure TForm1.N1Click(Sender: TObject);
begin
Form3.ShowModal;
end;

しても
Form3のEdit1にiniのPnoデータ表示されません(;;
709デフォルトの名無しさん:2008/05/21(水) 14:50:47
わざわざForm3のOnCreateを使ってiniを読む理由は?
710デフォルトの名無しさん:2008/05/21(水) 14:54:04
>>708 何が表示されるの?
もしかして Edit1 って文字のまま? だとしたら例外が出てるんじゃないの?
711デフォルトの名無しさん:2008/05/21(水) 15:12:04
>>709
Form3(バージョン情報の画面)に
シリアルb入力してiniファイルを作成してます。
んで次回起動時にForm3を開くと
iniファイルを読んでシリアルb表示させたいんです。

712デフォルトの名無しさん:2008/05/21(水) 15:15:40
>>710
シリアルbニして数値を表示させています。
一度入力すれば問題ないのですが
起動一発目の読み込みがうまくいきません(;;
713デフォルトの名無しさん:2008/05/21(水) 15:16:52
コピペした部分のコードにはおかしいところはなさそうな気がする。
edit1.text:=inttostr(pass);
の下に
ShowMessage(Format('edit1.text=''%s'', pass=%d', [edit1.text, pass]));
って行を入れてメッセージダイアログが表示され、更に値が望んだものかどうかをチェックしてみたら。
714デフォルトの名無しさん:2008/05/21(水) 15:22:28
>>713
ダイアログ表示せず・・・
FormCreate走ってないようです
orz
715デフォルトの名無しさん:2008/05/21(水) 16:03:00
>>714
プロジェクトのオプションでForm3を自動作成の対象から外して
Form1のボタンイベントを↓に変えて実行したらどうなる?

procedure TForm1.N1Click(Sender: TObject);
begin
Form3 := TForm3.Create(nil);
Form3.ShowModal;
Form3.Free();
end;

716デフォルトの名無しさん:2008/05/21(水) 16:53:00
メニューアイテムにビットマップを動的に割り付けようと
下記のようなコードを書いたのですが、反応がありません(エラーも出ない)

New1.Bitmap.LoadFromFile('C:\hogehoge\new.bmp');

設計時にオブジェクトインスペクタから、あらかじめ bitmapを割り当てていた場合は、
その画像と入れ替わりに、ビットマップが更新されます

インスタンスがないのかと

New1.Bitmap := TBitmap.Create;
New1.Bitmap.LoadFromFile('C:\hogehoge\new.bmp');

もやってみましたが、結果は同じでした
ビットマップ読み込み後に、アップデート処理などが必要なのでしょうか?
717:2008/05/21(水) 17:34:29
>>706 $B505ってなんですか?すみません。なにもわからないもんで・・・
718デフォルトの名無しさん:2008/05/21(水) 18:35:45
>>716
新しいTBitmapオブジェクトを作ってTMenuItem.Bitmapに代入するとうまくいくよ
NewBitmap := TBitmap.Create;
NewBitmap.LoadFromFile('....');
New1.Bitmap := NewBitmap;
NewBitmap.Free; // 解放を忘れずに
719デフォルトの名無しさん:2008/05/21(水) 18:53:15
>>716
New1.Bitmap.LoadFromFile('C:\hogehoge\new.bmp');
New1.Bitmap.Canvas.Refresh;
720デフォルトの名無しさん:2008/05/21(水) 19:22:32
copy関数で何文字目とか文字数とかの設定は
関数にできないんでしょうか?
721デフォルトの名無しさん:2008/05/21(水) 19:26:32
日本語でry
722デフォルトの名無しさん:2008/05/21(水) 19:41:31
>>720
こういうこと?

function TForm1.CopyEx(S:String; Idx, Cnt:Integer):String;
begin
  Result := Copy(S,Idx,Cnt);
end;
723デフォルトの名無しさん:2008/05/21(水) 20:23:11
>>722
申し訳ないです。
関数にできないんでしょうか?
は変数にできないんでしょうか?
の間違いです。
724デフォルトの名無しさん:2008/05/21(水) 20:30:50
722に申し訳がるこた全くなし  つうか変数使えるでしょ?たぶん
725デフォルトの名無しさん:2008/05/21(水) 20:32:56
>>723
こういうこと?

var
  Idx,Cnt:Integer;
begin
  idx := 1;
  Cnt := 2;
  Edit2.Text := Copy(Edit1.Text, idx, Cnt);
end;
726デフォルトの名無しさん:2008/05/21(水) 20:45:03
>>725

a1 := edit1.text;
a2 := strtoint( a1 );

data := copy( Edit2.Text,a2,1 );

ここで悩んでます。
727デフォルトの名無しさん:2008/05/21(水) 20:49:51
はぁ?
728デフォルトの名無しさん:2008/05/21(水) 20:50:09
>>726
edit1.textに数字を入力すれば普通に動くと思う

↓またはこうする
a1 := edit1.text;
try
  a2 := strtoint( a1 );
finally
  a2 := 0;
end;

data := copy( Edit2.Text,a2,1 );
729デフォルトの名無しさん:2008/05/21(水) 20:54:58
a1 := edit1.text;
a2 := Length( a1 );

data := copy( Edit2.Text, a2, 1 );

こーゆーこと?
730デフォルトの名無しさん:2008/05/21(水) 21:16:39
いやあエスパーさんばっかいるなwww
731デフォルトの名無しさん:2008/05/21(水) 21:24:18
>>728
そこはexceptだろ
732デフォルトの名無しさん:2008/05/21(水) 21:26:00
>>731
細かいなw
733デフォルトの名無しさん:2008/05/21(水) 21:26:02
>>731
strtointdefで
734デフォルトの名無しさん:2008/05/21(水) 21:27:24
>>728
var
bno:string;
 keta:string;
k1,k2 : string;
kk1,kk2 : integer;
a1,a2 : string;

procedure TForm1.Button2Click(Sender: TObject);
begin
a1 := copy(bno,kk1,1);
a2 := copy(bno,kk2,1);

edit2.Text := a1+a2;
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
keta := edit2.text;
k1 := copy(keta,1,1);
kk1 := strtoint(k1);
k2 := copy(keta,2,1);
kk2 := strtoint(k2);
end;

コンパイルは通るのに実行するとエラーが出ます(涙)
735デフォルトの名無しさん:2008/05/21(水) 21:30:36
edit2でキー押したとたんに落ちたの?>>734
736デフォルトの名無しさん:2008/05/21(水) 21:32:51
とりあえず書き方がうざすぎる
737デフォルトの名無しさん:2008/05/21(水) 21:33:00
>>735
はい。
デバッガ例外通知が出たので
継続ってすると
”は整数ではありません
と怒られました。
738デフォルトの名無しさん:2008/05/21(水) 21:33:35
>>734
bnoには何が入ってるのよ
739デフォルトの名無しさん:2008/05/21(水) 21:34:50
>>738
ほかのEditから取り込んだ数値が入ってます。
740デフォルトの名無しさん:2008/05/21(水) 21:39:46
>>739
↓この行にブレークポイント置いてketaの中身をチェックしてみ
k1 := copy(keta,1,1);
741デフォルトの名無しさん:2008/05/21(水) 21:43:16
>>740
やってみます。
ありがとうございました
742デフォルトの名無しさん:2008/05/21(水) 21:45:58
とりあえず1度深呼吸してからヘルプのOnChangeを10000回ぐらい読んでこい>>741
743デフォルトの名無しさん:2008/05/21(水) 21:47:05
Edit&数値処理の基本
var
 n: Integer;
begin
 try
  n := IntToStr(Edit1.Text);
  ShowMessage(Format('%dの二倍は%d', [n, n * 2]));
 except
  ShowMessage(Edit1.Text + 'は数値ではない'); 
 end;
end;
744デフォルトの名無しさん:2008/05/21(水) 21:50:31
>>740
>>742
>>743

EditChangeに入れてた式を
ButtonClickに移動したらエラーが出なくなりました。

もっと勉強します
745デフォルトの名無しさん:2008/05/21(水) 21:51:48
例外がどこで起こってるかくらいてめぇで調べられないのかよ・・・
嘆かわしいのぅ
746デフォルトの名無しさん:2008/05/21(水) 21:54:31 BE:348454-PLT(12660)
>>744
頑張ってね
747デフォルトの名無しさん:2008/05/21(水) 22:56:18
IDEで挿入されるもの以外小文字で書いてる人よく見るけど見づらくないのかな
748デフォルトの名無しさん:2008/05/21(水) 23:16:44
大文字と小文字が区別されないという特徴をうまく使っていると思っている方々なんですよ、わかりません。
749デフォルトの名無しさん:2008/05/22(木) 04:34:37
TDateTimePickerのKindプロパティをdtkTimeにし、Formatプロパティに日付を表示するように設定した場合、
日付を編集し、その後に時刻を編集すると日付が元に戻ってしまうのですが、
OnChangeなどを監視するなどしか対策方法はないでしょうか
ヘルプには
「Format プロパティに日付フィールドのコードが含まれている場合には日付部分も編集できます。」
と書いてあるのに・・・
750716:2008/05/22(木) 10:04:22
>>718-719
ありがとうございました
751デフォルトの名無しさん:2008/05/22(木) 19:06:30
Delphi5, TStringGrid にデータ表示
1レコード1行の場合OnDrawCellイベントで

if Grid.Row = ARow then
begin
Grid.Canvas.Brush.Color := '紺色';
Grid.Canvas.Font.Color := '白色';
Grid.Canvas.FillRect(Rect);
end
else
begin
Grid.Canvas.Brush.Color := Grid.Color;
Grid.Canvas.Font.Color := Grid.Font.Color;
Grid.Canvas.FillRect(Rect);
end;

として、フォーカスが当たっているように見せています。

1レコード2行の場合はどうすればいいでしょうか?
Grid.Row が2の倍数で ARow = Grid.Row + 1
Grid.Row が2の倍数以外で ARow = Grid.Row - 1 の条件の時にも

背景・前景色を変更したけど、フォーカス色が残ってしまう場合があります。
OnDrawCell内で Grid.Repaint; を実行するとチラつきます。
Grid.Invalidate; だと さらに チラつきっぱなしです。

複数行フォーカスってどうやるんでしょうか?


752デフォルトの名無しさん:2008/05/22(木) 19:33:21
>>751
一行が二行に見えるように描画すればいい。
753デフォルトの名無しさん:2008/05/23(金) 10:53:01
Delphi過去ログ検索が見つからないのですが、
もしかして畳んでしまわれたのかな・・・?
http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/nsearch.cgi
754デフォルトの名無しさん:2008/05/23(金) 11:16:34
>>753
みたいです。MLでも話題になっています
755デフォルトの名無しさん:2008/05/23(金) 15:10:14
Webサーバのあるディレクトリのファイル名の一覧を FindFirst, FindNext
みたいに HTTPで取得する方法ってあります?Delphi7 + Indy9 ですけど
756デフォルトの名無しさん:2008/05/23(金) 16:55:39
お前は行ったことの無い店の商品が分かるのか?
そういうことだ
でも店によっちゃホームページとかで公開してる場合もある
それと同じようにファイル一覧が見れるページもある
757デフォルトの名無しさん:2008/05/23(金) 17:56:19
出来たらCGIがスケスケで大問題だね
758デフォルトの名無しさん:2008/05/23(金) 17:56:57
>>753-754

MLにご本人からポストがありましたがWeb鯖が停止しているだけのようで。
閉鎖の予定は無いそうですよ。
759デフォルトの名無しさん:2008/05/23(金) 19:08:33
>>756 >>757
あ、自分のサーバーなんです。ユーザーに配るプログラムから、
特定のディレクトリのファイルを全部 GET でダウンロードできるように
したいと思いまして(そこに置くファイルは変化します)。
でも出来ないみたいなのかあ。
760デフォルトの名無しさん:2008/05/23(金) 19:12:38
>>759
それなら、ファイルの一覧を取得して返すCGIを置いといて、それにアクセスすればいいと思うよ
761デフォルトの名無しさん:2008/05/23(金) 19:31:11
自鯖ならFTPか何かで取得してもいいんじゃ?
762デフォルトの名無しさん:2008/05/23(金) 20:34:51
あ、そうか。CGI方式もFTPでもいけそうかあ。
ありがとう。FTPはパスワード変更しそうなんでCGIで検討してみます。
# 最初の質問、説明不足でスミマセンでした。
763デフォルトの名無しさん:2008/05/23(金) 23:13:48
TComboBoxでドロップダウンのアイテム選択しているとき、
DELキーを押したら選択アイテムをItemsからむ削除したいんだけど出来るかな?
ブラウザの検索履歴を消すイメージで
764デフォルトの名無しさん:2008/05/23(金) 23:18:07
そりゃできるだろ
765デフォルトの名無しさん:2008/05/23(金) 23:21:07
>>764
どーやるの?
766デフォルトの名無しさん:2008/05/23(金) 23:29:11
どこがわからないんだよ
767デフォルトの名無しさん:2008/05/23(金) 23:29:52
こいつのがんばり方が正直よくわからない
768デフォルトの名無しさん:2008/05/23(金) 23:55:45
TComboBoxでやるのは意外と大変かもよ。
ブラウザは独自のComboBoxもどきでしょうね。
769デフォルトの名無しさん:2008/05/24(土) 00:04:18
>>766
itemsの中身がペロッと出て、
そのペロッと出たリストを選んでいる状態で、
DELキーを押したときの処理なんだけど…
説明がヘタですまん
770デフォルトの名無しさん:2008/05/24(土) 00:08:32
ボタンイベントを監視してDELが押されたら現在選択中の番号取得してそこをリストから削除すりゃーいい話だろう
771デフォルトの名無しさん:2008/05/24(土) 00:12:22
ん?よくわからないんだがこれじゃだめなの?

procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
 i:integer;
begin
 if key=VK_DELETE then
  for i:=0 to combobox1.Items.Count-1 do
   if combobox1.Text=combobox1.Items[i] then combobox1.Items.Delete(i);
end;

772デフォルトの名無しさん:2008/05/24(土) 00:15:18
あぁItemIndex使えばいいか
773デフォルトの名無しさん:2008/05/24(土) 00:18:20
keyPressだとうまく行かなかったけど、KeyDownならうまく行きそうだね
>>771
ありがとう
774デフォルトの名無しさん:2008/05/24(土) 00:36:26
たびたびすいません
>>771でうまくいったと思うんだけど、
ペロッと出してない状態でも、textにitemsと同じ文字列が入ってる状態で
DELキー押すとitemsから削除されちゃうのは、しょうがないですかね?
775デフォルトの名無しさん:2008/05/24(土) 00:39:13
>>774
DroppedDownは?
776デフォルトの名無しさん:2008/05/24(土) 00:43:24
>>775
それはイベントですか?
DroppedDownの意味がわからなくてすいません
777デフォルトの名無しさん:2008/05/24(土) 00:44:25
ヘルプは?
778デフォルトの名無しさん:2008/05/24(土) 00:47:27
>>777
ヘルプに乗ってました
↓こうしたらうまくいきました
助かりました!
if (ComboBox1.DroppedDown) and (key=VK_DELETE) then begin
779デフォルトの名無しさん:2008/05/24(土) 00:53:43
ループしてる時に固まることがあるのでUpdateWindowを毎回やってるのですが、それでも固まってしまいます
UpdateWindowよりも確実な方法はあるのでしょうか?
Application.ProcessMessageは遅い印象があるので使いたくないです
780デフォルトの名無しさん:2008/05/24(土) 00:56:39
>>779
スレッドに分ける
781デフォルトの名無しさん:2008/05/24(土) 01:05:51
>>780
なるほど、マルチスレッドにはあまりしたことがないので思いつきませんでした
ですがループで毎回メインフォーム弄ってたらそれも遅くなったりしませんかね?
782デフォルトの名無しさん:2008/05/24(土) 02:02:11
>779
> Application.ProcessMessageは遅い印象があるので使いたくないです
印象だけで排除するのはどうよ?つかたぶんその印象は間違っている。
783デフォルトの名無しさん:2008/05/24(土) 03:52:27
>>781
自分で考えてください
784デフォルトの名無しさん:2008/05/24(土) 07:08:07
>>779
・マルチスレッド化する
・Sleep();を入れる
マルチスレッドにしてもWait入れたりSleepしないと重くなるけどな
785デフォルトの名無しさん:2008/05/24(土) 08:37:59
特定のコンポーネントの表示を頻繁に行いたいなら
ListBox1.Items.Add('foo');
ListBox1.Repaint
みたいにすればいいし、ウィンドウのリサイズなんかの操作が固まるのを避けたいなら
Application.ProcessMessagesかスレッド使うしかない。
どうやるにしろ表示の更新は重いのには変わりない。
786デフォルトの名無しさん:2008/05/24(土) 08:39:45
ListViewならBeginUpdate / EndUpdateで大幅に高速化できるな
787デフォルトの名無しさん:2008/05/24(土) 15:08:40
Invalidateしないと、UpdateWindowだけでは更新しなかった気がするのですが。
788デフォルトの名無しさん:2008/05/24(土) 17:54:38
質問させてください。(2つに分けます。長くて申し訳ありません)

次のような宣言をされた DLL があります。(Microsoft Visual C++ 6.0)

typedef struct {
SOCKET fd; /* Socket Handle */
struct sockaddr_in m_lcd;
struct sockaddr_in m_para;
struct sockaddr_in m_serial;
timeval timeout;
int registered;
} PICNIC;

extern "C" {
__declspec(PICNIC_DLL) PICNIC *PN_open(char *ip, u_short lcd_port, u_short para_port, u_short serial_port);
__declspec(PICNIC_DLL) void PN_close(PICNIC *pn);
__declspec(PICNIC_DLL) int PN_setwhole(PICNIC *pn, int addr, int cn, ...);
}

つづく
789デフォルトの名無しさん:2008/05/24(土) 17:55:32
>>788 のつづき

この DLL にアクセスしたくて Delphi 7 でこのようにプログラムを書いてみましたが

uses WinSock

type
TPICNIC = record
fd: TSocket;
m_lcd: sockaddr_in;
m_para: sockaddr_in;
m_serial: sockaddr_in;
timeout: timeval;
registered: Integer;
end;

function PN_open(ip: PChar; lcd_port: Word; para_port: Word; serial_port: Word): TPICNIC; cdecl;
external 'PICNIC.DLL' name 'PN_open';
procedure PN_close(pn: TPICNIC); cdecl;
external 'PICNIC.DLL' name 'PN_close';
function PN_setwhole(pn: TPICNIC; addr: Integer; cn: Integer): Integer; cdecl;
external 'PICNIC.DLL' name 'PN_setwhole';

C での SOCKET 型が Delphi では TSocket と宣言すれば正しいのかわからないです。(Longint ?)
それと、PN_setwhole(PICNIC *pn, int addr, int cn, ...); の最後の「...」を
Delphi では、どのように記述すればいいのかわかりません。
どなたか教えていただけないでしょうか?
790デフォルトの名無しさん:2008/05/24(土) 19:02:15
少し書き間違ってました。
function PN_setwhole(pn: TPICNIC; addr: Integer; cn: Integer; arg: array of Integer): Integer; cdecl;
です。DLL 側のソースで
va_start(arg, cn);
for(i=0;i<cn;i++){
mask = va_arg(arg, int);
or = va_arg(arg, int);
frame[3+i*2] = mask;
frame[3+i*2+1] = or;
}
va_end(arg);
と記述されています。

791デフォルトの名無しさん:2008/05/24(土) 19:46:48
>>758
あせったわw

MLみたら、2chの書き込みまで引用されててひどい
誰だよ武内さん語ったの・・・いたずらにしてはひどい話だよ
792デフォルトの名無しさん:2008/05/24(土) 20:07:10
あれは、たかだか2chのソースでしかない話を引用した方も悪い
793デフォルトの名無しさん:2008/05/24(土) 20:17:59
くだらない筆問ですが
下記サイトで言語習得を目指そうと思います
全てを呼んだわけではありませんがサイトから抜粋

Delphiの
Object Pascal という言語をつかって、Windows 95/98/2000 が DLL
(ダイナミック・リンク・ライブラリ)として提供している
Win32 API (アプリケーション・プログラミング・インターフェース)という
関数群を呼び出してウィンドウズアプリケーションをつくる方法を解説しています

現在仕様しているソフトは無償版Turbo Delphiです
RAD環境などサイトとは異なる点がいくつかあると思いますが問題なく勉強していけるでしょうか?

これだけのボリュームと内容なので当事はかなり有名な人だったのでしょうね

ttp://homepage2.nifty.com/Mr_XRAY/Halbow/ShousaiIndex.html
794デフォルトの名無しさん:2008/05/24(土) 20:21:51
>>789
"..."は末尾にvarargsを付ける。詳しくはヘルプを読め
SOCKETはたぶん同じ。あとTPICNICをそのまま使うんじゃなくて
type
PPICNIC = ^TPICNIC
としてPPICNICを使わないとだめ(ポインタだから)
795デフォルトの名無しさん:2008/05/24(土) 20:45:52
実体を渡す事が多いようなら 参照にしてもいいと思うよ
 (var pn: TPICNIC;
みたいにさ
796デフォルトの名無しさん:2008/05/24(土) 21:18:38
ListViewに何万個ものアイテムを追加するとClearした時やフォーム自体を終了した時にものすごく時間がかかるのですが、
時間のかからないClearの方法はないでしょうか?
797デフォルトの名無しさん:2008/05/24(土) 21:45:26
仮想リストビュー使っとけ
めちゃ軽くなる
798デフォルトの名無しさん:2008/05/24(土) 21:56:23
TreeViewも標準で仮想にして欲しい
799デフォルトの名無しさん:2008/05/24(土) 22:12:19
>>797
ありがとうございます。助かりました!
800デフォルトの名無しさん:2008/05/24(土) 22:45:31
>>793
入門にはお勧めしない

勉強していくうちに言語仕様の勉強にはなるだろうが、
そのサイトでやっているのはDelphiで主に使われるライブラリ、VCLとは真逆の方向性だから。

ここに書いてあるように、Delphiの本流ではないのでいばらの道だよ
http://homepage2.nifty.com/Mr_XRAY/Halbow/Chap00.html#object
801デフォルトの名無しさん:2008/05/24(土) 22:50:52
>>794,795
とりあえず、794 さんの方法で試したところ、上手く行きました。
ありがとうございました。

特に varargs は存在そのものを知らなかったので
勉強になりました。
802デフォルトの名無しさん:2008/05/26(月) 00:04:22
CreateUpDownControlでアップダウンコントロールを
直前に作ったEditに関連付けて作ったのですが、
ウィンドウスタイルにUDS_ARROWKEYSを設定し、矢印キーで位置を移動したら
アップダウンコントロールが凹んだまま元に戻らないのですがこれは直せるのでしょうか?
アップダウンコントロールをクリックすれば元に戻るのですが・・・
また、C++で試したところ問題はなかったのですが、なぜDelphiでのみ症状が発生するのでしょうか?
803デフォルトの名無しさん:2008/05/26(月) 11:55:39
Webページの更新をチェックしたいんですが、サーバーにあるファイルの更新日時は
どうすれば取得できるのでしょうか?
804デフォルトの名無しさん:2008/05/26(月) 12:39:24
>>803
HEADリクエスト投げてLast-Modifiedでも見れば?
805デフォルトの名無しさん:2008/05/26(月) 13:18:49
>>804
出来ました!ありがとうございます。
806デフォルトの名無しさん:2008/05/27(火) 19:21:11
「'」を文字列で使いたい場合どうするんでしょう?
コードとして解釈されてしまいます。
807デフォルトの名無しさん:2008/05/27(火) 19:26:59
''''
808デフォルトの名無しさん:2008/05/27(火) 19:33:53
>>806
Chr(39)
809デフォルトの名無しさん:2008/05/27(火) 23:46:15
今から始めるなら Delphi6とTurbo Delphiどっちがいいですか?
810デフォルトの名無しさん:2008/05/27(火) 23:48:07
ガゼンDelphiだろ
811デフォルトの名無しさん:2008/05/28(水) 05:00:52
両方ともDelphiだろw
812デフォルトの名無しさん:2008/05/28(水) 07:20:01
TMediaPlayerコンポーネントを使ったソフトでmp3ファイルを開こうとすると
「指定されたファイル名拡張子からデバイスの種類を判断できません」
というエラーメッセージがでるという不具合報告がありました

ttp://d.hatena.ne.jp/tomoemon/20051031/p4
↑を読むと、DeviceTypeを明示的に指定する必要があるみたいなんですが
"MPEGVideo"に相当するTMPDeviceTypesの値はどれでしょう?
Delphi6を使っているのですが、もしかして対応してなかったりするのでしょうか?
813デフォルトの名無しさん:2008/05/28(水) 13:07:24
>>812
DeviceTypeはdtAutoSelectでmp3再生できたけど?(Del6)
書き込む前に自分で試してね
814デフォルトの名無しさん:2008/05/28(水) 13:46:59
dtAutoSelectでも、↓に拡張子とデバイスタイプを結びつけるキーが無いと>>812のエラーが出る。

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\Current Version\MCI Extensions (NT系)

不具合報告を送ってきた人の環境には、それが無いか別の値になってるのかもしれない。
ちなみにTMediaPlayerに"MPEGVideo"を指定するのはソースを見る限り無理だと思う。
815デフォルトの名無しさん:2008/05/28(水) 20:07:25
あ、オレのアプリ(Del7)のMediaPlayer使ったBGM機能もいつの間にか
mp3再生できなくなってる… wavで使ってきたから全然気が付かなかった。
開発時は再生できてたのに何でレジストリ変わっちゃったんだろ!?

それよりクレーム全然無いってのも、悲しいもんだね
816デフォルトの名無しさん:2008/05/28(水) 21:13:39
BCB使いだけどTMediaPlayerは使い勝手悪かったから、自分でDirectShow叩いてプレイヤーコンポ作っちゃったなぁ
IGraphBuilderインタフェース作成して、そこからコントロールとかビデオウィンドウとかの必要なインタフェース呼び出すだけだから
最低限の物なら50行も行かないと思う。
Delだとヘッダ使えないから面倒そうだけど。
817デフォルトの名無しさん:2008/05/28(水) 21:26:13
>>813
不具合報告がありましたってんだから環境によるものだろ
自分の環境が全てではないぞ
不具合報告にはOS書いてなかったのか?
95とかだったのでは?
818812:2008/05/28(水) 22:11:31
>>814
あやや、アプリ側で吸収してあげるのは無理っぽいですか
レジストリの値をいじってもらうのには抵抗ありますが致し方ないですな

>>815
反応ないと寂しいのは、あるある
無茶なクレームつけられるのは困るけど、
今回の人はきちんと対話ができる人だったんで
対応するほうもやる気がでます

>>817
いや、XP Proらしいっす
ただ、気になる点があるとすればMP3に関連付けられてるのが
Media Player Classicだってことでしょうか
もしかしたら、そのせいでレジストリにキーが登録されなかったのかも

レジストリの値をチェックしてもらう方向で対応してみようかと思います
皆様ありがとうございましたm(__)m
819デフォルトの名無しさん:2008/05/28(水) 22:20:35
820デフォルトの名無しさん:2008/06/01(日) 10:07:41
>>817
うるせ、バカ
821デフォルトの名無しさん:2008/06/01(日) 17:22:38
BDS2006 + Vistaのインストールに関する質問です。
http://bousyo.blog45.fc2.com/blog-entry-116.html
の手順に従ってインストールが完了しました。
(アップデートはまだです)

まずは、認証登録をしようとしたのですが、
インターネット経由では、「登録サーバーに接続できません。」で×
http://dn.codegear.com/article/33586
によると、プロクシのせいとかかれていますが、当方はプロクシが不要の環境です。

次に、webによる登録で登録を無事にすませ、
認証用テキストがかかれたメールを受取、
そのreg722.txtというファイルをホームフォルダ(.borlandの上位フォルダですよね?)
に突っ込みましたが、
「Borland Developer Studio for Windowsは動作を停止しました。
問題が発生ししたため、プログラムが正しく動作しなくなりました。
プログラムは閉じられ、解決策がある場合はWindowsから通知されます。プログラムの終了」
とダイアログが出て、まったく起動ができません。
管理者権限で実行しています。

大変困っております。
うまく起動する方法はありませんでしょうか?
822821:2008/06/01(日) 19:31:20
アップデート1、2と当てて、ホットフィックス全部当てたら起動しました。

実は、アップデート2が同じような落ち方をして、
うまくインストールできなかったのですが、
UAC切って、DEPも切ったら当てられました。

おさわがせしました。
ありがとうございました。
823デフォルトの名無しさん:2008/06/02(月) 20:08:31
あたらしいデルファイはでるんかい?
824デフォルトの名無しさん:2008/06/02(月) 21:04:25
で、出るふぁい!
825デフォルトの名無しさん:2008/06/03(火) 10:15:44
ボタンをクリックするたびに
1
2
4
8

・と2乗の数を表示させるプログラムを作りたいのですが、
{$R *.dfm}
var s: integer;
str: string;
procedure TForm1.Button1Click(Sender: TObject);
var i :integer;
begin

s :=1;
for i :=1 to 44444444 do s := i * 2;
str := IntToStr(s);
Memo1.Lines.Add(' = ' +str);
end;

end.
こんな風にしてやったら失敗しました。他にも試したのですが、ループ制御変数がどうとか出てできませんでした。
どなたか教えてください。
826デフォルトの名無しさん:2008/06/03(火) 10:27:05
DelphiのGUIプログラミングはプログラミングの仕方がちょっと独特だから最初は戸惑うかもな
type
    TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
private
        { Private 宣言 }
        num: Integer; // <- 変数はここ
    public
        { Public 宣言 }
    end;

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
    // 変数の初期値はここで設定
    num := 1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
    // ボタンが押されるたびに呼び出される
    // なのでループを書く必要はない
    Memo1.Lines.Add(IntToStr(num));
    num := num * 2;
end;

end.
827デフォルトの名無しさん:2008/06/03(火) 11:14:03
>>826
ありがとうございます。
828デフォルトの名無しさん:2008/06/03(火) 15:49:25
DeviceIoControl(Handle, FSCTL_SET_SPARSE, nil, 0, nil, 0, BytesReturned, nil);

スパースファイルを作りたいんですけど
未定義の識別子 : 'FSCTL_SET_SPARSE'となります。
何をインクルードすればいいんでしょうか?
Delphi6 personal です。
829デフォルトの名無しさん:2008/06/03(火) 16:00:43
RTLには含まれていないので自分で定義してください。
830828:2008/06/03(火) 16:57:30
>>829
ども、わかりました。
831デフォルトの名無しさん:2008/06/03(火) 22:11:26
>>825
> 1
> 2
> 4
> 8
> ・
これは2乗ではないな、 1 を 起点に x2 していってるだけ

> ボタンをクリックするたびに
なら、ボタンクリックだけでいきなり44444444回もループしたらダメだろ?

Button1のTagプロパティに1をセットして、
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add(IntToStr(Button1.Tag));
Button1.Tag:=Button1.Tag*2;
end;
これでいいんではないか?
832デフォルトの名無しさん:2008/06/03(火) 23:10:46
2^0 = 1
2^1 = 2
2^2 = 4
2^3 = 8

1^2 = 1
2^2 = 4
3^2 = 8

の違いか。
833デフォルトの名無しさん:2008/06/03(火) 23:43:13
ぢゃ、こうか?
Button1のTagプロパティを0に戻して
Memo1.Lines.Add(FloatToStr(IntPower(2,Button1.Tag)));
Button1.Tag:=Button1.Tag+1;
834デフォルトの名無しさん:2008/06/04(水) 09:34:00
>>825
>for i :=1 to 44444444 do s := i * 2;

>>831 が
>なら、ボタンクリックだけでいきなり44444444回もループしたらダメだろ?

と、つっ込んではいるものの、なぜ「44444444」と記述したのか?
それを知りたい。
835デフォルトの名無しさん:2008/06/04(水) 10:41:03
825です
すいません。2のn乗でした。
444444としたのはとにかくどこまでも2倍ができるように作りたかったからです。
836デフォルトの名無しさん:2008/06/04(水) 11:03:00
それならforよりもwhileじゃね?
837デフォルトの名無しさん:2008/06/04(水) 11:13:03
forつかって書いてみなさい的な課題だったので・・・。
バリバリ初心者なのでわからないのですが・・・。
838デフォルトの名無しさん:2008/06/04(水) 11:30:05
なんだよその課題
教師アホすぎてワロタw
839834:2008/06/04(水) 11:53:59
>>835
とりあえず納得、ありがと。
840デフォルトの名無しさん:2008/06/04(水) 21:13:37
for でも while でも case でも if でも何でもいいじゃん
目の前の問題が解決できりゃ万々歳 でしょ?

とりあえず Delphi 実行できる環境があるんなら何でも試してみたら
いいじゃん。それで出来なかったらガンガン質問すりゃいいじゃん!

このスレ、結構ガンガン突っ込む人多いみたいだから安心だよ。
841デフォルトの名無しさん:2008/06/04(水) 21:39:52
ボタンをクリックするたびに、*2するんじゃないのか?
forの中で、キー入力待ちするの?
それとも、forで一気に*2していくのか? 見えないぞ。
842デフォルトの名無しさん:2008/06/04(水) 21:40:58
2レスで解決してるのに引っ張るねぇ
843825:2008/06/04(水) 22:28:29
先生が見せてた見本ではクリックするたびに2,4,8,16,とMemoに表示されていってました。
長引かせてしまいすいません;
プログラム板の人は親切な人が多いですね。
ありがとうございました。これからは授業ちゃんと聞きます。
課題は途中経過を書いて出します。
844デフォルトの名無しさん:2008/06/05(木) 03:17:04
こういうことじゃね?

procedure Form1.Button1Click(Sender: TObject);
var
i,j: Integer;
begin
j := 1; // 計算用変数jの初期値として1を入れておく
with Button1 do
begin
Tag := Tag + 1; // ボタンを押した回数をTagに記録
for i := 1 to Tag do// ボタンを押した回数分jに2を掛ける処理
j := j * 2;
end;
Memo1.Lines.Add(IntToStr(j));
end;
845デフォルトの名無しさん:2008/06/05(木) 15:56:11
これくらいでwith使うな
OnCreateでButton1.Tag = 1;
Button1.OnClickで
Button1.Tag = Button1.Tag * 2;
Memo1.Lines.Add(IntToStr(Button1.Tag));

又は
Button1.Tag = Button1.Tag + 1;
Memo1.Lines.Add(IntToStr(Math.Power(2,Button1.Tag)));
846デフォルトの名無しさん:2008/06/05(木) 18:09:56
>>826
でいいじゃん。
numはグローバル変数にして、
var
 num: Integer = 1;
のほうが楽かも。
847844:2008/06/05(木) 18:13:04
>>845
Button1のNameプロパティ変えたりすることを考えると、
どうしてもwith使ってしまう悪い癖は抜け切れそうに無い。
Form1のプロパティを参照したい時に面倒になるのは承知済み。
この場合、複数のボタンで使いまわし出来るよう
with TButton(Sender)の方が良かったけどね。

>>837に従って無理やりfor文を入れたけど、
for文を使わなくても良いのなら>>845でFA。
848デフォルトの名無しさん:2008/06/05(木) 19:52:52
すごい初心者で申し訳ないんのですが、
http://dn.codegear.com/jp/article/36347
ここを参考にデータベースでなんか作ってみたのですが
これをコンパイルしたときに、interbaseを起動していないとエラー落ちしてしまいます。
たとえばexeを配布するときにはどうしたいいのですかね。

すごくしょうもないこと言っていたらすいません。
849デフォルトの名無しさん:2008/06/05(木) 20:11:47
>>848
そりゃInterbaseに接続して処理するんだからしょうがない。
それと配布するとなるとインストール先にもInterbaseのライセンスが必要になる。

単一アプリケーションの内蔵データベースとしてしか使わないんであれば、Interbaseの代わりにEmbeded Firebirdの使用をおすすめ。
FirebirdはInterbase6.0互換だからVCLのInterbase接続コンポがそのままつかえる。
※IDEからデバッグ実行したときにカレントディレクトリとexeファイルのパスの違いで問題起きるので、
 アプリケーションの初期化のところでexeファイルの場所にSetCurrentDirectoryを使ってカレントディレクトリを変更しておくといい。
850デフォルトの名無しさん:2008/06/05(木) 21:35:19
A-Zの26人の人がいて、8人くらいでじゃんけんをしたとする。
その結果を書いたtxtがあって、
1.自分の勝率(自分はAとする)
2.自分のBに対する勝率
3.自分が相手にすると勝率が高い人TOP5
4.自分と一緒に勝つ確立が高い人TOP
を出力したいのですが、全然ナにやっていいかわからないで困っています。

1.テキストをTmemoに取り込んだ
2.勝った人の1人目をlistboxに出力してみた、うまくいかなかった
3.データベースは使い方がよくわからなかった
4.試合数だけ数えてみた:これはできた
5.やりたいことをするために何をすればいいのかわからなくなってきた
いまここ
851デフォルトの名無しさん:2008/06/05(木) 21:42:30
> うまくいかなかった
そのうまくいかなかった部分を言おうよ
852デフォルトの名無しさん:2008/06/05(木) 22:10:50
>>851
ReadInがうまく使えなかったw
853デフォルトの名無しさん:2008/06/05(木) 22:12:48
それじゃ誰にも答えてもらえないよ
さようなら
854デフォルトの名無しさん:2008/06/05(木) 23:02:58
>>850
文字列解析の課題かな。 txtファイルがどんなのかわからないと答えようがない。
csv形式なら、TStringList.CommaTextを使ってデータを切り分けれる。
855デフォルトの名無しさん:2008/06/05(木) 23:36:43
プログラム以前の問題でしょう。
やるべきことを整理して箇条書きにして、一歩一歩解決していくしかないでしょう。
質問が具体的じゃないと、具体的に回答できるはずもありません。
856デフォルトの名無しさん:2008/06/06(金) 00:44:00
txtをどっかにうpすれば誰かやってくれそうなもんだけどな
857デフォルトの名無しさん:2008/06/06(金) 01:43:47
書き方悪くてすいません。850です。
http://irsj.bestplaying.com/modules/result/
ここのページのhtmlを取得してやろうと思ったんですが、まずはテキストと思い、

39274 フリー@(´゚ω゚`)ナッツエレガント 2008/06/06 01:30
Win genzouzi(1648) satou(1717) Molt(1437) hujisan(1438)
Lose masa4_(1864) hyakusiki(1152) parusah(1610) against(1600)
Upload コメント (0)
こんな感じで出力されました。
これが一個のレコード?になります。なのでCSVではないです。

で、フローチャートを考えてみたのですが、それがまずわからなくて悩んでいます。

858デフォルトの名無しさん:2008/06/06(金) 03:12:34
>>855を1000回読んでから出直して来い
859デフォルトの名無しさん:2008/06/06(金) 20:44:15
何言ってんのかさっぱりわからんな
860デフォルトの名無しさん:2008/06/06(金) 22:25:14
htmlから必要なデータを抜き出したいのか。
StrPosを使って、'>Win<'を探す。
それ以降にある '</a>'を探す。 名前は >mog</a> となっているから、>から<まで抜き出す。
こんな感じでやればいいよ。
861デフォルトの名無しさん:2008/06/07(土) 10:11:55
>>859
お前がバカだからだよ
862デフォルトの名無しさん:2008/06/07(土) 13:16:05
俺ほどぢゃないだろ
863デフォルトの名無しさん:2008/06/07(土) 19:20:24
つうかこんなスレ、リキ入れて読んでられないからさ〜
酒のみながらみてるときもあるし…
できるだけわかり易い文章か母性本能くすぐりーの感じで書かないと
864デフォルトの名無しさん:2008/06/07(土) 22:15:08
>>863
MLでやれ
865デフォルトの名無しさん:2008/06/07(土) 23:31:06
質問です。
壁紙を手前に表示するソフトを作ろうと思っています。
そこで TForm と TImage を半透明にして常に手前に表示してマウスなどの入力は背後のウィンドウに渡すようにしたいのですがどうすればできますか?
866デフォルトの名無しさん:2008/06/07(土) 23:36:04
GetNextWindowで次にあるウィンドウ出して送ればいいと思う
867デフォルトの名無しさん:2008/06/08(日) 00:21:32
>>866
ありがとうございます。GetNextWindow を調べてみます。
868デフォルトの名無しさん:2008/06/08(日) 06:48:50
Delphiのフォームに画像はりつけて全画面かつ最前面表示して
後ろのExcelやExplorerを自然に操作するってことか。

フォームへのウィンドウメッセージをすべての他の適切なウィンドウに再送信しまくるなんて
かなり面倒なことをしないといけなさそうだな。たぶん挫折するだろう。

付箋紙のイメージ表示機能で我慢しておいた方がいいんじゃね。
869デフォルトの名無しさん:2008/06/08(日) 08:52:20
>>865
つ SetLayeredWindowAttributes
つ WS_EX_TRANSPARENT
870デフォルトの名無しさん:2008/06/08(日) 08:57:30
ここの人、親切。
でも「付箋紙のイメージ表示機能で我慢」になりそうです。
クリックすると逃げるようにして邪魔にならないようにしています。
でも多謝。
871デフォルトの名無しさん:2008/06/08(日) 13:48:56
delphi6なんだけど
ListViewでオーナーデータだとマルチセレクト出来ない?
出来ない場合出来るようにする方法とか教えてください
872デフォルトの名無しさん:2008/06/08(日) 23:00:30
TClientSocketでデータを数値として受け取るにはどうすればいいんでしょうか?
Ordで大丈夫なんでしょうか
873デフォルトの名無しさん:2008/06/08(日) 23:32:36
バイナリデータを受信したとき、ってこと?1バイトならOrdでいいかな。複数バイトならバイトオーダの考慮も
忘れずに。
874デフォルトの名無しさん:2008/06/08(日) 23:58:47
普通にテキスト化して送ったら
875デフォルトの名無しさん:2008/06/09(月) 23:29:59
TListViewからの派生クラスを書いているのですが、縦スクロールバー出現によるクライアントエリアの横サイズ変更に追従するには
どのメソッドで変更に追従する処理をすればよいのでしょうか?
派生クラスで実装するので、できればメソッドのオーバーライドで処理したいです。
876デフォルトの名無しさん:2008/06/10(火) 07:19:56
RGB0~255を三次元空間に見立てて
その中に数十個のピクセルをFormなりImageなりに表示するのを支援してくれる
ライブラリってないですか?
DirectXやOpenGLほどハイパフォーマンスで大げさなのじゃなくて
ちょっとしたグラフライブラリ程度のもので。
877デフォルトの名無しさん:2008/06/10(火) 13:53:10
いっていることがわからないのだが、ボクセルということだろうか
878デフォルトの名無しさん:2008/06/10(火) 14:25:41
色立体とかいう物を表示したいんじゃなかろうか。
879デフォルトの名無しさん:2008/06/10(火) 23:32:26
>>877
バカか?
880デフォルトの名無しさん:2008/06/10(火) 23:33:25
>>870
シナ人失せろ
881デフォルトの名無しさん:2008/06/10(火) 23:37:13
スマン
ど忘れして しかも ググッテも出てこない
範囲指定して字下げするのってどうやるんだっけ?
忘れちまった・・・・・
年だ・・・・
882デフォルトの名無しさん:2008/06/10(火) 23:44:14
>>881
Ctrl+Shift+I/U

フリーカーソル無効化してるならTab/Shift+Tabでもできる。
883デフォルトの名無しさん:2008/06/10(火) 23:58:55
>>882

やるね!!
まあああああああああああベラス!!
ありがとう!!

フリーカーソル?・・・・ググッタ!コンポーネントかぁ メモメモ

ついでに、選択したところ全て注釈にする方法わかりますか?
これも出来たはずなんだが・・・
884デフォルトの名無しさん:2008/06/11(水) 00:13:32
テプラ作った大切にするぉ
サンキュウ デルファイ マイスターズ
885デフォルトの名無しさん:2008/06/11(水) 09:34:41
>>879
バカっていうんなら、人にわかるように説明しろよ
886デフォルトの名無しさん:2008/06/11(水) 09:43:27
グラフライブラリって書いてあるじゃんw
887デフォルトの名無しさん:2008/06/11(水) 10:35:03
TChartって2次元までだっけか?
888デフォルトの名無しさん:2008/06/11(水) 13:39:59
>>883
選択状態にして選択範囲を右クリックしてみるといいよ。
ちなみに、Ctrl+/で出来る。
889デフォルトの名無しさん:2008/06/11(水) 14:29:00
TlistBoxを3つ並べてスクロールを同期させたいんだがどうすればいい?
890デフォルトの名無しさん:2008/06/11(水) 14:36:13
>>886
いやそこの前の話
891デフォルトの名無しさん:2008/06/11(水) 19:59:06
>>889
OnScrollで他もスクロールさせる。
892デフォルトの名無しさん:2008/06/11(水) 20:38:46
>>888

ふむふむ
ありがとう
テプラットきます
893デフォルトの名無しさん:2008/06/12(木) 12:31:07
>>888
それ、D7で出来ないみたい
あと、いつの間にか右クリックして「しおり」のテンキーの数字が効かなくなってるし
894デフォルトの名無しさん:2008/06/12(木) 21:33:02
>>893
うん
やってみた
ターボの方は出来るんですけれど
7はダメでした
報告ありがとう
でも 7でもやる方法があった様な気がするが
はて 勘違いかなあ
895デフォルトの名無しさん:2008/06/12(木) 23:12:29
MainMenuについて聞きたいんですが
項目の右側に勝手に(Z)と付くのはどうにか出来ませんか?
896デフォルトの名無しさん:2008/06/13(金) 00:38:15
>895
AutoHotKeysをmaManualに。
897デフォルトの名無しさん:2008/06/13(金) 00:50:17
>>896
ありがっとう!
898デフォルトの名無しさん:2008/06/13(金) 09:30:41
>>894
GExpertsのマクロでコメントアウトなどできた気がするよ
899デフォルトの名無しさん:2008/06/13(金) 10:59:51
http://homepage2.nifty.com/Mr_XRAY/Delphi/plSamples/790_ListView.htm#04
ここの通りにやってlistviewのカラムクリックでソートができたのですが
カラムをもう一回クリックしたら逆順ソートになるようにしたいのですが、どうしたらいいか教えてください。
900デフォルトの名無しさん:2008/06/13(金) 11:09:25
>>899
フラグでも立てて、Compareに-1掛ければいい。
901デフォルトの名無しさん:2008/06/13(金) 11:17:28
>>900
それはわかるんですけど、そのフラグがわからんのです。
そもそもcompareイベントの仕組みがよくわからなくてコピペしたのがいけないんですが・・w
902デフォルトの名無しさん:2008/06/13(金) 11:39:40
デバッガで追いかけろ
903デフォルトの名無しさん:2008/06/13(金) 11:46:29
前に書いたソートサンプル。適当に解読してくれ。

{ Private 宣言 }
ColumnToSort: Integer;
LastColumnToSort: Integer;
Ascending: Integer;

procedure TForm1.FormCreate(Sender: TObject);
begin
ColumnToSort := -1;
LastColumnToSort := -1;
end;

procedure TForm1.listviewColumnClick(Sender: TObject; Column: TListColumn);
begin
ColumnToSort := Column.Index;

if (Ascending > 0) and (ColumnToSort = LastColumnToSort) then
Ascending := -1
else
Ascending := 1;
LastColumnToSort := ColumnToSort;
listview.AlphaSort;
end;

procedure TForm1.listviewCompare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
begin
Compare := ( StrToInt(Item1.SubItems[ColumnToSort-1]) - StrToInt(Item2.SubItems[ColumnToSort-1]) ) * Ascending;
end;
904デフォルトの名無しさん:2008/06/13(金) 11:59:15
>>903
助かった。thx!
コピペでできてしまったので、次使うときのために解読しとくわ。
905デフォルトの名無しさん:2008/06/13(金) 13:44:41
コピペだけでアプリ一本作りそうな勢いだなww
906デフォルトの名無しさん:2008/06/13(金) 15:35:05
>>905
教科書はネットのみだからおのずとコピペが多くなってしまうのは仕方ない気がw
アプリはもうできてて今は改善している段階でふ。
907デフォルトの名無しさん:2008/06/14(土) 01:34:51
ifの条件が複数あるときはVBのようにandで繋ぐことは出来ないんでしょうか?
908デフォルトの名無しさん:2008/06/14(土) 01:38:27
そんなの入門サイトに乗ってそうだけどなあ
回答としては「出来る」よ
909デフォルトの名無しさん:2008/06/14(土) 16:33:57
listviewで表を作っているんですが
ある条件を満たしたときに画像を文字の後ろに付け足したいのですがどうすればいいですか?

column1,column2,・・・
名前,数学の点数,国語の点数,

で、数学の点数や国語の点数が80点を越えたときに
各々数学マーク.bmp、国語マーク.bmpを名前の後ろに付け足したいという意味です。
910デフォルトの名無しさん:2008/06/14(土) 17:20:45
>>907
自分で答えを書いているじゃないかw
911デフォルトの名無しさん:2008/06/14(土) 17:47:55
>>909
OwnerDrawするしかないと思う
912デフォルトの名無しさん:2008/06/14(土) 18:59:06
listviewのownerdrawか・・・激しく挫折しそうだ・・
913デフォルトの名無しさん:2008/06/14(土) 20:38:35
>>907-908
演算子の優先度がVBと違うからできないと思ったのかもしれないな
if (条件) and (条件) 〜
みたいに括弧で括らないといけないから
914 ◆XcB18Bks.Y :2008/06/15(日) 01:09:49
>>912
ListViewのOwnerDrawはOwnerDataを使っていなければそんなに難しくないと思います。
OwnerDataを使っているならHeaderコントロール+ListBoxマジオススメ。
915デフォルトの名無しさん:2008/06/15(日) 11:58:17
ListViewやListBoxの内容は直接編集出来ないんでしょうか?
916デフォルトの名無しさん:2008/06/15(日) 12:36:59
クリックしたときに、カーソル直下のセルに内容入れたTEdit生成して、TEditがフォーカス失ったらTEditの内容をセルに書き込めばいいと思うよ。
TStringGridで用が足りることも多いけどNE
917デフォルトの名無しさん:2008/06/15(日) 22:17:04
formcreateでiniファイルを読み込んで、listboxにiniの内容を書き出したいのですが
for do でループしようと思ったら、iniファイルのセクションの項目数をカウントする方法が思いつかずに
困っているのですが、これはどうしたらいいのでしょうか

逆にtxt形式にしてreadlnでuntil Eofとかしないとだめなのでしょうか。ご教授ください。
918デフォルトの名無しさん:2008/06/15(日) 22:43:28
>>917
ReadSections
919デフォルトの名無しさん:2008/06/15(日) 22:47:52
>>918
ありがとう
920デフォルトの名無しさん:2008/06/17(火) 08:04:52
>>919
自演おつ
921デフォルトの名無しさん:2008/06/18(水) 16:54:27
AnsiやUTF8の文字列をUTF32にエンコードするにはどうすればいいんでしょう?
WikipediaのUnicodeの項目を見るとUCS4とUTF32は互換性があるらしいですが、
WideStringToUCS4Stringでエンコードしても、UCS4StringをStringに正常にキャストする方法が見つからず、
UTF32かどうか確かめられません
よろしくお願いします
922デフォルトの名無しさん:2008/06/18(水) 18:44:59
WideStringToUCS4Stringがあれば、当然UCS4StringToWideStringもあるわけだけど、
直接Stringにしたいって事?
923921:2008/06/18(水) 19:30:09
すみません、自己解決しました
MBCSUtils(http://cc.codegear.com/item/25496)のAnsiStringToUtf8をしたあと、Utf8ToWideStringをしたら
望むとおりの結果がでました

>>922
そうです
UTF8にしたときは普通にStringとして取得できますが、WideStringToUCS4Stringだと
取得できないので、それを取得しようと思ったのです
924デフォルトの名無しさん:2008/06/19(木) 00:25:06
初心者です。教えて下さい。
「Borland Delphi 7 Professional」と
「Borland Delphi 7 Studio Professional」は
なにがどうちがうのですか?
925デフォルトの名無しさん:2008/06/19(木) 00:36:50
>>924
自分で調べろよ馬鹿。
926デフォルトの名無しさん:2008/06/19(木) 01:29:17
Studio は Kylix3 が付いているみたいだけど、
非Studioはどうなのか、検索しても良く分からないや。
927デフォルトの名無しさん:2008/06/19(木) 09:56:09
TMemoryStreamのオブジェクトを別のExeに渡したりできますか?
928デフォルトの名無しさん:2008/06/19(木) 11:25:48
やめとけ。MemoryStreamのデータ領域のアドレスとサイズを渡すようにするのが吉。
ん?他のexeってプロセス間通信ってこと?WM_COPYDATAかメモリマップドファイルで。
929927:2008/06/19(木) 11:31:35
巨大なメモリプールなので、2つ持ちたくないんです(><)
930デフォルトの名無しさん:2008/06/19(木) 11:33:42
ならmemmapfileだな。
MemoryStreamじゃなくてただのメモリの固まりとして共有するしかない。
931デフォルトの名無しさん:2008/06/19(木) 22:20:57
メモリマップファイルは、名前の通り、実態はファイルなんだけどね
932デフォルトの名無しさん:2008/06/19(木) 22:41:18
とは限らないよ。オプションによる。
http://itpro.nikkeibp.co.jp/article/COLUMN/20071107/286607/?P=4&ST=techskill

 メモリー・マップト・ファイルが,プロセス間の共有メモリーを実現できることはわかったが,
そのためにいちいちファイルを作成するのは面倒な話だ。
実は,CreateFileMappingの第1引数には,INVALID_HANDLE_VALUE
(ファイル・ハンドルの無効な値)を指定できるようにもなっている。
つまり,ファイルを指定せずに,ファイル・マッピング・オブジェクトを作れるのである。

 それではファイル・マッピングにならない,と思うかもしれないが,
マップするのがシステムのページング・ファイルになっただけと考えればよい。
これは結局のところ,VirtualAllocでコミットされたページと同じ状態なのである。
933デフォルトの名無しさん:2008/06/20(金) 17:30:36
Http := TIdHttp.Create
Memo.Lines.Text := Http.Get(URL)
これでcharset:EUC-JPのソースを取得すると化けるのですが解決方法あれば教えてください。
934デフォルトの名無しさん:2008/06/20(金) 17:58:00
EUCからSJISに変換する
ググればすぐ出てくる
935デフォルトの名無しさん:2008/06/20(金) 17:58:04
Shift-JISコードに変換
936933:2008/06/20(金) 22:14:26
EUC→ShiftJIS
ググった結果なんですが
1.変換テーブルみたいのを書く
2.NKF32で変換する
とでてきたわけですが

UTF8Decode(IdHttp1.Get(url));
こんな感じの簡単なIndyの関数的なものはないでしょうか?
937デフォルトの名無しさん:2008/06/20(金) 22:20:11
俺はTPzConv使ってる
938デフォルトの名無しさん:2008/06/20(金) 23:15:45
こちらもどうぞ。

jconvert.zip 1.6
http://www.geocities.jp/janeiyayo/files.html
939デフォルトの名無しさん:2008/06/21(土) 10:10:14
DelphiでUnicodeベースのアプリの作成ってどの程度現実的なんですか?
TNTを使うとコンポーネントだけでなくWindows, Classes, SysUtilsあたりの基本クラスの代替はだいたいそろっているんですか?
実際にDelphi製フリーウェアでそういうアプリも出ているんですかね。
940デフォルトの名無しさん:2008/06/21(土) 10:28:27
次期バージョンで対応する。それまでは完全対応ではなくコントロールごとの
一時しのぎだと。でないと、次期バージョンの価値がない。
941デフォルトの名無しさん:2008/06/21(土) 19:22:43
数年Delphiを使っていなかった者ですが、
Delphian worldをなくなってしまったのでしょうか?
コンポーネントが多数あり、便利に使っていたのですが。
942デフォルトの名無しさん:2008/06/21(土) 19:43:23
このスレを抽出してみたら?
俺は何とかWebArchiveで凌いでるけど・・・
943デフォルトの名無しさん:2008/06/21(土) 20:37:52
お返事とヒントどうも。
いろいろ探してみます。
944デフォルトの名無しさん:2008/06/21(土) 21:00:04
>>940
そうなのか?ウレシイ!
文字コードの対応は疲れる こんなことで時間とられたくない
なんかホントウにしんどい ってつくづく思ってた。
945デフォルトの名無しさん:2008/06/21(土) 21:03:14
Delphi2008かTiburonでググレカス
946デフォルトの名無しさん:2008/06/21(土) 21:29:19
Genericsまだ?
947デフォルトの名無しさん:2008/06/21(土) 21:40:59
Genericsと匿名メソッドもTiburonで。
948デフォルトの名無しさん:2008/06/21(土) 22:16:12
最新版のDelphi(無料)ってどれですか?
949デフォルトの名無しさん:2008/06/21(土) 22:22:53
Turbo Delphi
950デフォルトの名無しさん:2008/06/21(土) 22:30:16
>>949
ありがとうございます
早速勉強させていただきます
951デフォルトの名無しさん:2008/06/21(土) 23:57:41
>>950
うるせー馬鹿。
今度から自分で調べろ。
952デフォルトの名無しさん:2008/06/22(日) 00:52:13
pagecontrolであるタブを隠すことはできますか?

editbox使いまくってたらこんがらがってきたので、pagecontrolで整理しようと考えているんですが、
今まではvisibleでfalseにして隠していたのですが、tabsheet2に隠すとしてもタブが表示されてしまうと
何も表示されないタブが出現してしまうので困っています。

tabのvisibleをfalseにしても実行するとtrueに戻って表示されてしまうんですよね・・・
953デフォルトの名無しさん:2008/06/22(日) 01:03:19
tabvisible
954デフォルトの名無しさん:2008/06/22(日) 01:39:53
>>952
自演お疲れ
955デフォルトの名無しさん:2008/06/22(日) 02:13:58
tabcontrolにはtabvisibleがあるんですが
pagecontroleにはtabvisibleがなくて困ってるんです・・・
956デフォルトの名無しさん:2008/06/22(日) 02:26:34
すいません逆に考えてました。
自己解決sry
957デフォルトの名無しさん:2008/06/22(日) 03:10:52
Jane Doe Styleのスレッド本文の表示には何のコンポーネントを使っているのでしょうか?
958デフォルトの名無しさん:2008/06/22(日) 06:32:57
>>939
SpTBXLibとか使っているのがちらほら散見される。
使っている人は使っているという印象だな。
959デフォルトの名無しさん:2008/06/22(日) 06:34:18
>>957
つWinSpector
960デフォルトの名無しさん:2008/06/22(日) 08:08:52
無料だしDelphi始めてみようと思って、一番新しそうな2007を
入れてみようと思ったが有償じゃねーか!!!
結局何をインストールすりゃいいんだよ!
961デフォルトの名無しさん:2008/06/22(日) 08:34:43
960
ターボデルファイ
962デフォルトの名無しさん:2008/06/22(日) 08:35:24
考えてみたらデルファイって毎年VerUpしてねえ?
963デフォルトの名無しさん:2008/06/22(日) 10:17:57
ここ数年は「お布施」でしたよ。D7 で十分。
964デフォルトの名無しさん:2008/06/22(日) 12:18:59
>>957
JaneLovelyで使われてたもの。名前はTMDITextView

StyleはLovelyベースてゆうかパクリ版。Lovelyのソースが今公開されてるのかは知らん。
なければOpenJaneDoeのTHogeTextView使え
965960:2008/06/22(日) 12:19:54
>>963
おk、D7ってやつを入れてみるぜ
966デフォルトの名無しさん:2008/06/22(日) 12:32:27
Delphi7? どこで手に入れるんだ?
967デフォルトの名無しさん:2008/06/22(日) 12:33:23
>>964
mjk!!
LovelyのソースみてみたけどTHogeTextViewじゃなかったのか・・・orz

>>965
まあちょっと前くらい嫁って話なんですけどね
968デフォルトの名無しさん:2008/06/22(日) 12:45:09
ってTMDITextViewはTHogeTextView継承やん・・・
969デフォルトの名無しさん:2008/06/22(日) 13:13:32
>>968
当たり前だろ、この馬鹿。
970デフォルトの名無しさん:2008/06/22(日) 13:17:15
なんか変なのが湧いてるが、
> 無料だし
そういうかたはVSへどうぞ。
971デフォルトの名無しさん:2008/06/22(日) 13:37:00
>>959>>964
ありがとうございました!
972デフォルトの名無しさん:2008/06/22(日) 13:45:22
無料だからいいっていうなら、Visual Stuidoをお勧めしておくぞ。
さすがに今は・・・
973デフォルトの名無しさん:2008/06/22(日) 14:57:24
ふじさんwwwwwww
974デフォルトの名無しさん:2008/06/22(日) 18:23:03
あ、無料じゃないのね・・・
すまん、調査不足。
VBに挑戦してみるわ
何回もすまん
975デフォルトの名無しさん:2008/06/22(日) 18:38:22
Delphi for Rubyっていつ出るの?
976デフォルトの名無しさん:2008/06/22(日) 19:28:17
7の無料ってなんか本についてなかったけ
記憶違いかもしれない蹴れど
アマゾンで検索してくり
977デフォルトの名無しさん:2008/06/22(日) 19:34:25
無料じゃなくて体験版では?
978デフォルトの名無しさん:2008/06/22(日) 19:52:14
>975
多分永久に出ない。3rd Railなら既に出てるけど。
979デフォルトの名無しさん:2008/06/22(日) 22:25:17
Delphi6をインストールした後に、Turbo Delphiをインストールすると
関連付けがTurbo Delphiに変わってしまいました。
再び、Delphi6に戻すにはどうすればよいですか?
980デフォルトの名無しさん:2008/06/22(日) 22:30:10
インストール時に関連付けするかどうか選べたはずだが・・
981デフォルトの名無しさん:2008/06/22(日) 22:30:15
コントロールパネルのフォルダオプション
982デフォルトの名無しさん:2008/06/23(月) 18:46:55
Editに
kanji
と言う文字列が入っていた場合に
IMEを起動して
かんじ
という入力状態にするやり方があったら教えてください
983デフォルトの名無しさん:2008/06/23(月) 23:44:36
>>982
しるかよバカ。
984デフォルトの名無しさん:2008/06/23(月) 23:45:28
>>974
自演うぜぇ
985デフォルトの名無しさん:2008/06/24(火) 00:16:09
>982
Imm*系のAPIでできるのかもしれないけどよくわからない。
986デフォルトの名無しさん:2008/06/24(火) 10:02:24
987デフォルトの名無しさん:2008/06/24(火) 11:10:56
おおすごい。短いコードだけど、知らないとまったく手がでません。
988デフォルトの名無しさん:2008/06/24(火) 12:25:47
すいません質問です。
PageControlでMultilineを使用した際、特定の行で折り返したいのですがそんなことは可能なんでしょうか?

ex)
A|B|C|D|E|F|G

Eで折り返したい

E|F|G
A|B|C|D|
989デフォルトの名無しさん:2008/06/24(火) 13:51:10
>>988
TabWidthで無理矢理とか。
990デフォルトの名無しさん:2008/06/24(火) 14:27:03
>>989
レスありがとうございます。
すいません説明が足りませんでした。
H|I|J|K|L|
E|F|G
A|B|C|D|

のようにさらに上にカテゴリがあるのです。
やはりPageControlを重ねるかCaptionで無理やり調整するしかありませんかね。
991 ◆XcB18Bks.Y :2008/06/24(火) 16:20:17
もう990なのでスレ立て行ってきますね。
書き込みはもう少し我慢してくださいまし。
992デフォルトの名無しさん:2008/06/24(火) 16:25:26
>>988
TabControl三段重ねとかw
993 ◆XcB18Bks.Y :2008/06/24(火) 16:26:28
立ちました。

くだすれDelphi(超初心者用)その47
http://pc11.2ch.net/test/read.cgi/tech/1214292265/

>>1の過去スレページへのリンクがうまくいかなかったので変更しました。
関連スレはすべて生き残っていたのでそのままです。
994デフォルトの名無しさん:2008/06/24(火) 16:50:01
教えてください。
Builderで
int hoge;
AnsiString s;
s.printf("%d",hoge);
これをDelphiではどのように記述すればいいのでしょうか。
995デフォルトの名無しさん:2008/06/24(火) 17:11:10
s := Format('%d', [hoge]);
996デフォルトの名無しさん:2008/06/24(火) 17:12:53
>>994
var
997デフォルトの名無しさん:2008/06/24(火) 17:13:14
>>994
hoge:Integer;
998デフォルトの名無しさん:2008/06/24(火) 17:13:35
>>994
s:String;
999デフォルトの名無しさん:2008/06/24(火) 17:13:56
>>994
begin
1000デフォルトの名無しさん:2008/06/24(火) 17:14:17
>>994
s:=Format('%d',[hoge]);
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。