誰か例のTGifImageの脆弱性なおしておくれ
JaneStyleはTGifImageを修正してるみたいですね
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]; 検証お願いします
>>594 行けたぜGJ!
でも俺の場合5873行なんだがこれはバージョンの違い?
一応2.2なんだが・・・
596 :
Zzz :2008/05/09(金) 11:24:39
質問お願いします Delphi7なんですけど (最大化最小化閉じるボタンを非表示などをした)Formを 同プロジェクト内の別のFormでも使いたくFormごとコピーして 使用したいのですがコピーやり方がわかりません どうやれば実現できるのでしょうか???
ExplorerでForm1.pas/.dfmをForm2.*にコピー&リネームして ファイル内のユニット名、クラス名、Nameプロパティ名を調整。 フォーム上のコンポーネントやプロパティの設定は.dfm イベントハンドラ等のコードは.pasにあるから適当に切り貼りしてもいいかも。 名前をつけて保存でForm2とかやっちゃうとForm1が破棄されForm2を使い出すからわけわかってないと悲惨なことに。 IDEでは使いまわし支援でリポジトリなるものをサポートしているけどほとんど使ったことない。 活用してる人っているのかね。 なんにしてもプロジェクト全体のバックアップをしてから試したほうがいいかもね。
598 :
Zzz :2008/05/09(金) 11:40:36
やはり意外と、つらそうな道のりですね 了解しました 地味に作成しようと思います リポジトリの使用方法も忘れてつつあるので・・・ ありがとうございました
うちは5846行目だった TGIFSubImgae.Decompressプロシージャ内のNextLZW関数内だよね?
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;
>>596 継承して使うと似たようなフォームで少しだけ違うような場合に便利だよ
ファイル⇒新規作成⇒その他 で出たダイアログのタブの今のプロジェクト内から Form1を選んで
下の ・継承 を確認して [OK]
602 :
Zzz :2008/05/09(金) 16:50:32
たびたびすいません 質問です リストボックスやコンボックスのItems欄に選択「文字」を追加する 方法が分かりません ・・・と書くとItem addとか思われると思いますが、もう一歩進んで その追加したを随時に追加し、且つ保存したいのです プログラムを終了させる、プログラムを起動させる 「追加したデータが消えてる(涙・・・」 どうやれば保存できるのでしょうか 最終的には、マイナーなコンポーネントに対し保存したいのですが 基本のリストボックスやコンボックスのやり方を教授していただければ 自分で考えますので(当たり前ですけど)ヒントの程お願い致します
終了時にファイルに保存して起動時にファイルから読み込む。
604 :
Zzz :2008/05/09(金) 17:23:32
>>603 おしい
それも一つの手ではあるんですが、最終的にコンポーネントの
Items欄に追加したいのでItems欄に保存する方法はないのかと
言うのを知りたいのです
質問する前に日本語を勉強する
いまいちよくわからないがexeのどこかに保存されているであろうItemsのデフォルト値に対して保存・読み出ししたいってことか? もしそうなら、コンパイルする度に値が吹き飛ぶぞw
そういうことができるなら ini ファイルはいらんがな・・
リソースを書き換えたいのか? 出来るだろうが、なんでiniファイルは駄目なんだ?
少なくともコード書いて試して 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欄に保存」ってのがわからんってことだぞ
610 :
Zzz :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かレジストリ使うのが普通じゃね?
自分で言ってるけど消えるのは当たり前なんです そういうのは外部のファイルに記録しておいて 再開したときに読み込むのがいいと思います
だから、設計時に追加した情報は、コンパイルするとリソースとしてexeに含まれるの。
TIniFile使ってやるのが一般的じゃね?
>>610 の気持ちもわからんではないが・・・逆にIDEで初期値を入れられるだけでも便利と思え!
ListBox1.Items.Commatext:=ReadString('ListBox1','Items','');
WriteString(ListBox1','Items',ListBox1.Items.CommaText);
615 :
デフォルトの名無しさん :2008/05/10(土) 10:27:37
dfmファイルを外部に持たせればOK.
彡川三三三ミ 川出 ::::::⌒ ⌒ヽ パクリ星からやってきたお! 出川::::::::ー●-●-) ..川(6|:::::::: ( 。。)) パクリ星の王子様の◆Style/kK.sだお! 出川;;;::∴ ノ 3 ノ ノ\_;;;;;;;;;;;;;;;;ノ Janeスレ荒らしてるヒキコモリだから友達できないお! ( * ヽー--'ヽ ) (∵ ;) ゚ ノヽ ゚ ):) チンポは極小で包茎だお!!ちなみに童貞だお!! (: ・ )--―'⌒ー--`,_) (___)ーニ三三ニ-) (∴ ー' ̄⌒ヽωニЗ 好きなものは他人のソースとオナニーとwarezだお!! `l ・ . /メ / ヽ ∵ /~- /. 今日もたくさんソースパクリまくるお!! (__)))))_)))))
>>587 今頃で申し訳ないんですがエラーが出てインストール出来ません・・・
d6perだからですかね?proだとインストールできるんでしょうか
>>619-620 わざわざうpしていただいてありがとうございます!
インストールしてみます
インストールできました! ありがとうございました!
インストールできたのはいいんですがメニューがボタンのようになってしまいます・・・ これじゃ当初の目的が達成できないのですが、どのようにすれば普通のメニューのように出来るのでしょうか
すみません、自己解決しました・・・
わけわかんねー事言ってんじゃねぇよタコ 小学生からやりなおせ
今小学5年生です・・・・
627 :
デフォルトの名無しさん :2008/05/10(土) 19:15:49
「相撲」って人気有るんだな 映画化されて・・・と思った・・・おれは小学生からやり直すべき?
相模だろw
意味の解らない俺はどれからやり直せばいいんだ?
アセンブラからだろ とーぜん
精子から
Office2007でコンテキストメニューを表示したとき その上にツールバーも一緒に表示するUIが何気に便利なんだけど あれどうやって実現するんだろう。
実現も何も・・ただそういうウィンドウを表示してるだけだよ。
うまく言えないんですがエスケープシーケンスのある文字列を変換するにはどうすればいいんでしょうか たとえばabc\ndefという文字列があった時に abc#10def(#10はもちろん文字列としてではなく)に変換するみたいなのです
>>634 つStringReplace
>>635 TFindDialog.OptionsにfrDownが設定されているかを確認して
自分で切り替える必要があります
637 :
634 :2008/05/11(日) 05:27:03
>>636 一応\nだけではなくて\tとか漢字とかもエスケープされてるようなので使えないです・・・
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;
>>634 はもしかして C言語スタイルの \ エスケープでエンコードされた
文字をデコードしたいって事じゃないかと思ってサンプルコードを書いてみた
641 :
634 :2008/05/11(日) 08:27:34
>>638 TRegExpは何だかさっぱりであまり使ってません・・・
>>639 ,640
ありがとうございます
元のプログラムはCのようなのですがそれの仕様が良く分からないもので・・・
一応「テスト」という文字が「\83e\83X\83g」になるということは分かってます
それは独自仕様って事だね。 '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; とすれば、その部分には対応すると思うけど、他にも違いがありそうだね。 仕様が判ってるのはあなただけだから、自分でやってね
643 :
634 :2008/05/11(日) 09:26:00
>>642 それで出来たようです!
ご迷惑かけました!
そしてありがとうございました!
フォームのボタンなどのキャプションに付けるアクセラレータって言うんでしょうか (&A)みたいにするとAltキーとAを一緒に押すとクリックされるやつですが、 コントロールが多くなってくると、どれが使われていないのか探すのが大変です。 便利なワザみたいなの、ありませんでしょうか。
ActionList
適当に書いてみたが何気に便利かも・・・ 表示をまともにしてコマンドラインツールにして外部ツールとして実行できると使い物になりそう。 オープンダイアログで調べたいフォームの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 で一気に読み込むと一瞬フリーズしたようになります。 そこで、スクロールに合わせて小分けに読み込むようにしたいのですが何か良い方法はありませんか?
649 :
デフォルトの名無しさん :2008/05/11(日) 19:08:34
>>648 お答えありがとうございます。
ですが、メモリを節約して小分けに読み込み表示してスクロールバーの振る舞いはファイルサイズに合ったものにしたいのですが、どうにかなりませんか?
はなっからスクロールバーを適正サイズにしたいってこと?そりゃ無理。どれだけの行数があるのかは 読み込んでみないとわからないっしょ?
>>650 確かにそうですね。妥協することにします。
>>647 終了です。ご回答くださった方ありがとうございました。
TStringListにいったん読み込めばいい。
複数キー入力を検出するにはどうすればよいでしょうか? Ctrl+Alt+Delとかのことです。 よろしくお願いします。
そんな無作法なツールは死ねばいい
>653 検出はいいけど、何をしたいのか具体的に書いたほうがいいと思うが。 ちなみにCtrl+Alt+Delは捕捉できないので念のため。
BBS へ行ったと思われ
658 :
デフォルトの名無しさん :2008/05/12(月) 23:42:30
TMemo でスクロールせずに表示できる行数を知るには ClientHeight を Font.Height で割れば良いのでしょうか?
1分で確かめられる事をわざわざ聞きにくるな
1分使って自分で確かめるくらいなら2分使って質問を投げる勇気を私はもちたい。
:::::::::::.: .:. . ∧_∧ . . . .: :::::::: :::::::: :.: . . /彡ミ゛ヽ;)ヽ、. ::: : :: ::::::: :.: . . / :::/:: ヽ、ヽ、i . .:: :.: :::  ̄ ̄ ̄(_,ノ  ̄ ̄ヽ、_ノ ̄
662 :
635 :2008/05/13(火) 12:49:06
>>636 ありがとうございます。帰ってやってみます。
これからDelphiをはじめる初心者ですが TurboDelphi用の初心者向け参考書はありますか? お勧めがあれば教えて下さい。
(;^ω^)今更ながらtypeとポインタが便利な事に気付いたwwww今まで時間無駄にしてたわwwwwwww
で、TGIFImage の開発元にフィードバックしたいのだが。 で、いくつか問題起こす gif を見ましたが、なんつーか児童ポルノに厳しい国でも レポートできるようなアニメーション GIF で再現できない物ですかねぇ
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系の圧縮フォルダとプロの 暗号化されたやつを判定できますか?
ウィンドウハンドルを指定してそのウィンドウのキャプチャをCanvasに描くのってどうやるの?
ランダムな2バイト文字を生成するにはどうすればいいんでしょうか
'ランダム' お約束すぎた?
>>669 GetWindowRect(ハンドル,Rect);
GetDC
673 :
デフォルトの名無しさん :2008/05/15(木) 13:49:45
calendarExと言うdelphiのカレンダーコンポーネント使ってるんですけど Appendで特別な祭日(2008/5/6)の追加できたんですけど削除の仕方がわかりません^^; どうやればいいのでしょう すれ違いだと思いますが罠にもすがる思いで質問します
罠にすがられたいという事なんで レスしてみる calendarEx と言われても、誰もが付けそうな名前なんで判らん。 とりあえず一番簡単なのは、Createをメソッドとして読んで 再度 設定しなおしたら駄目? レジストリやファイルに保存してないならだけどさ
罠??? 糸・・・藁だ 藁 なるほどその手もありましたか このソフトなんか10年くらいの前のソフトらしく四苦八苦してます ヒントくれてありがとうございます ;;
>>670 全2二バイト文字を抽出しておいて、そこからランダムに選んだらどうだろう。
うーん、2バイト文字ってのも良く分からないけど 何でランダムに抽出したいのか、その使い道が気になるにょ
>>670 文字コードにもよるが、SJISのランダムな日本語を得たいのかな?
679 :
670 :2008/05/16(金) 19:55:14
結果はファイルにでもキャッシュしておけばいい。 SJISに割り当てられている全文字合わせても20KBくらいだし。
無効な文字なら、アウトラインを取得できないかもしれないから、 それ使って判断できるかも。
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してからなど試しましたが 同じようにエラーが出てしまいます 何かよい方法はないでしょうか?
>>682 >選択行を1段下げる
MultiSelectだと飛び飛びで選択している場合もあるけど
その場合は?
>>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や行数を超える場合は知らない
>>682 <<1でTListItem.SelectedをFalseにしているのだから
<<2のTListView.Selectedはnilになってる
686 :
682 :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;
マルチセレクトでないなら ListView.ItemIndex := ListView.ItemIndex + 1 でいいんじゃない?
指定した文字列がファイルとして作成できるか確認する方法はありますか? 例えばC:\Delphi.txtを渡すとTrue、C:\Delphi\を渡すとFalseを返す、などということです
ListViewについて質問です。 二つのカラムを作成し(A、B)、カラムAの1番目に文字列'1-1'、カラムBの1番目に文字列'1-2'、 カラムAの2番目に文字列'2-1'、カラムBの2番目に文字列'2-2'という形でリストを作成したいのですがどうすればいいでしょうか? よろしくお願いします。
>>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;
>>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;
>>690 ,692
FileCreateで行けるようですね、ありがとうございました
>>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番目とで納められるでしょうか?
本当にすみません。
>>692 さんのコードでできました。お騒がせいたしました。
また、答えてくださった方ありがとうございました。
>>691 さんのコードもできました。
変に打ち間違えていたようです。
すみませんでした。
697 :
デフォルトの名無しさん :2008/05/20(火) 06:08:00
698 :
デフォルトの名無しさん :2008/05/20(火) 06:10:06
ActionListをダブルクリックすると編集ウィンドウが開きますが、 この位置や大きさをプロジェクト単位で覚えさせとくってできます?
>>699 フリーウェアでそんなのがありそうだな。
ソフトウェア板行って聞いてみたら。
702 :
デフォルトの名無しさん :2008/05/21(水) 11:04:56
Memo1.Lines.LoadFromFile(FileName); とかでEUCのテキストを読み込むと文字化けしますが これを読めるように表示することってできるのでしょうか? テキストエディタだと見た目はeucで読み込んで表示し 保存もeucのまましてるように見えるけどあれは 内部でシフトJISに変換して表示して、保存時は再度eucに変換してるだけなんでしょうか?
TMemoryStreamで読み込んで nkf32.dllで変換して Memo1.Lines.LoadFromStream
704 :
k :2008/05/21(水) 11:52:01
正整数Nを読み込み、x^2≦N<(x+1)^2となる整数x、つまり√Nの近似値を求めるプログラムを、 sqrtなどの標準関数を使わないで作りなさいという問題なんですが。。。 わかりません。教えてもらえませんか?PASCALでやっているんですが。
705 :
702 :2008/05/21(水) 11:54:14
>>703 やはりnkf32.dll等で自動判別して読み込んでsjisで表示するんですね
ありがとうございます
>>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分検索を行う)
さらに浮動小数点等で速度が必要ならニュートン法
あ div 2 は 不要だ。
助けてください。 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データ表示されません(;;
わざわざForm3のOnCreateを使ってiniを読む理由は?
>>708 何が表示されるの?
もしかして Edit1 って文字のまま? だとしたら例外が出てるんじゃないの?
>>709 Form3(バージョン情報の画面)に
シリアルb入力してiniファイルを作成してます。
んで次回起動時にForm3を開くと
iniファイルを読んでシリアルb表示させたいんです。
>>710 シリアルbニして数値を表示させています。
一度入力すれば問題ないのですが
起動一発目の読み込みがうまくいきません(;;
コピペした部分のコードにはおかしいところはなさそうな気がする。 edit1.text:=inttostr(pass); の下に ShowMessage(Format('edit1.text=''%s'', pass=%d', [edit1.text, pass])); って行を入れてメッセージダイアログが表示され、更に値が望んだものかどうかをチェックしてみたら。
>>713 ダイアログ表示せず・・・
FormCreate走ってないようです
orz
>>714 プロジェクトのオプションでForm3を自動作成の対象から外して
Form1のボタンイベントを↓に変えて実行したらどうなる?
procedure TForm1.N1Click(Sender: TObject);
begin
Form3 := TForm3.Create(nil);
Form3.ShowModal;
Form3.Free();
end;
メニューアイテムにビットマップを動的に割り付けようと 下記のようなコードを書いたのですが、反応がありません(エラーも出ない) New1.Bitmap.LoadFromFile('C:\hogehoge\new.bmp'); 設計時にオブジェクトインスペクタから、あらかじめ bitmapを割り当てていた場合は、 その画像と入れ替わりに、ビットマップが更新されます インスタンスがないのかと New1.Bitmap := TBitmap.Create; New1.Bitmap.LoadFromFile('C:\hogehoge\new.bmp'); もやってみましたが、結果は同じでした ビットマップ読み込み後に、アップデート処理などが必要なのでしょうか?
717 :
k :2008/05/21(水) 17:34:29
>>706 $B505ってなんですか?すみません。なにもわからないもんで・・・
>>716 新しいTBitmapオブジェクトを作ってTMenuItem.Bitmapに代入するとうまくいくよ
NewBitmap := TBitmap.Create;
NewBitmap.LoadFromFile('....');
New1.Bitmap := NewBitmap;
NewBitmap.Free; // 解放を忘れずに
>>716 New1.Bitmap.LoadFromFile('C:\hogehoge\new.bmp');
New1.Bitmap.Canvas.Refresh;
copy関数で何文字目とか文字数とかの設定は 関数にできないんでしょうか?
日本語でry
>>720 こういうこと?
function TForm1.CopyEx(S:String; Idx, Cnt:Integer):String;
begin
Result := Copy(S,Idx,Cnt);
end;
>>722 申し訳ないです。
関数にできないんでしょうか?
は変数にできないんでしょうか?
の間違いです。
722に申し訳がるこた全くなし つうか変数使えるでしょ?たぶん
>>723 こういうこと?
var
Idx,Cnt:Integer;
begin
idx := 1;
Cnt := 2;
Edit2.Text := Copy(Edit1.Text, idx, Cnt);
end;
>>725 a1 := edit1.text;
a2 := strtoint( a1 );
data := copy( Edit2.Text,a2,1 );
ここで悩んでます。
はぁ?
>>726 edit1.textに数字を入力すれば普通に動くと思う
↓またはこうする
a1 := edit1.text;
try
a2 := strtoint( a1 );
finally
a2 := 0;
end;
data := copy( Edit2.Text,a2,1 );
a1 := edit1.text; a2 := Length( a1 ); data := copy( Edit2.Text, a2, 1 ); こーゆーこと?
いやあエスパーさんばっかいるなwww
>>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;
コンパイルは通るのに実行するとエラーが出ます(涙)
edit2でキー押したとたんに落ちたの?
>>734
とりあえず書き方がうざすぎる
>>735 はい。
デバッガ例外通知が出たので
継続ってすると
”は整数ではありません
と怒られました。
>>738 ほかのEditから取り込んだ数値が入ってます。
>>739 ↓この行にブレークポイント置いてketaの中身をチェックしてみ
k1 := copy(keta,1,1);
>>740 やってみます。
ありがとうございました
とりあえず1度深呼吸してからヘルプのOnChangeを10000回ぐらい読んでこい
>>741
Edit&数値処理の基本 var n: Integer; begin try n := IntToStr(Edit1.Text); ShowMessage(Format('%dの二倍は%d', [n, n * 2])); except ShowMessage(Edit1.Text + 'は数値ではない'); end; end;
>>740 >>742 >>743 EditChangeに入れてた式を
ButtonClickに移動したらエラーが出なくなりました。
もっと勉強します
例外がどこで起こってるかくらいてめぇで調べられないのかよ・・・ 嘆かわしいのぅ
IDEで挿入されるもの以外小文字で書いてる人よく見るけど見づらくないのかな
大文字と小文字が区別されないという特徴をうまく使っていると思っている方々なんですよ、わかりません。
TDateTimePickerのKindプロパティをdtkTimeにし、Formatプロパティに日付を表示するように設定した場合、 日付を編集し、その後に時刻を編集すると日付が元に戻ってしまうのですが、 OnChangeなどを監視するなどしか対策方法はないでしょうか ヘルプには 「Format プロパティに日付フィールドのコードが含まれている場合には日付部分も編集できます。」 と書いてあるのに・・・
750 :
716 :2008/05/22(木) 10:04:22
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; だと さらに チラつきっぱなしです。 複数行フォーカスってどうやるんでしょうか?
>>751 一行が二行に見えるように描画すればいい。
753 :
デフォルトの名無しさん :2008/05/23(金) 10:53:01
>>753 みたいです。MLでも話題になっています
Webサーバのあるディレクトリのファイル名の一覧を FindFirst, FindNext みたいに HTTPで取得する方法ってあります?Delphi7 + Indy9 ですけど
お前は行ったことの無い店の商品が分かるのか? そういうことだ でも店によっちゃホームページとかで公開してる場合もある それと同じようにファイル一覧が見れるページもある
出来たらCGIがスケスケで大問題だね
>>753-754 MLにご本人からポストがありましたがWeb鯖が停止しているだけのようで。
閉鎖の予定は無いそうですよ。
>>756 >>757 あ、自分のサーバーなんです。ユーザーに配るプログラムから、
特定のディレクトリのファイルを全部 GET でダウンロードできるように
したいと思いまして(そこに置くファイルは変化します)。
でも出来ないみたいなのかあ。
>>759 それなら、ファイルの一覧を取得して返すCGIを置いといて、それにアクセスすればいいと思うよ
自鯖ならFTPか何かで取得してもいいんじゃ?
あ、そうか。CGI方式もFTPでもいけそうかあ。 ありがとう。FTPはパスワード変更しそうなんでCGIで検討してみます。 # 最初の質問、説明不足でスミマセンでした。
TComboBoxでドロップダウンのアイテム選択しているとき、 DELキーを押したら選択アイテムをItemsからむ削除したいんだけど出来るかな? ブラウザの検索履歴を消すイメージで
そりゃできるだろ
どこがわからないんだよ
こいつのがんばり方が正直よくわからない
TComboBoxでやるのは意外と大変かもよ。 ブラウザは独自のComboBoxもどきでしょうね。
>>766 itemsの中身がペロッと出て、
そのペロッと出たリストを選んでいる状態で、
DELキーを押したときの処理なんだけど…
説明がヘタですまん
ボタンイベントを監視してDELが押されたら現在選択中の番号取得してそこをリストから削除すりゃーいい話だろう
ん?よくわからないんだがこれじゃだめなの? 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;
あぁItemIndex使えばいいか
keyPressだとうまく行かなかったけど、KeyDownならうまく行きそうだね
>>771 ありがとう
たびたびすいません
>>771 でうまくいったと思うんだけど、
ペロッと出してない状態でも、textにitemsと同じ文字列が入ってる状態で
DELキー押すとitemsから削除されちゃうのは、しょうがないですかね?
>>775 それはイベントですか?
DroppedDownの意味がわからなくてすいません
ヘルプは?
>>777 ヘルプに乗ってました
↓こうしたらうまくいきました
助かりました!
if (ComboBox1.DroppedDown) and (key=VK_DELETE) then begin
ループしてる時に固まることがあるのでUpdateWindowを毎回やってるのですが、それでも固まってしまいます UpdateWindowよりも確実な方法はあるのでしょうか? Application.ProcessMessageは遅い印象があるので使いたくないです
>>780 なるほど、マルチスレッドにはあまりしたことがないので思いつきませんでした
ですがループで毎回メインフォーム弄ってたらそれも遅くなったりしませんかね?
>779 > Application.ProcessMessageは遅い印象があるので使いたくないです 印象だけで排除するのはどうよ?つかたぶんその印象は間違っている。
784 :
デフォルトの名無しさん :2008/05/24(土) 07:08:07
>>779 ・マルチスレッド化する
・Sleep();を入れる
マルチスレッドにしてもWait入れたりSleepしないと重くなるけどな
特定のコンポーネントの表示を頻繁に行いたいなら ListBox1.Items.Add('foo'); ListBox1.Repaint みたいにすればいいし、ウィンドウのリサイズなんかの操作が固まるのを避けたいなら Application.ProcessMessagesかスレッド使うしかない。 どうやるにしろ表示の更新は重いのには変わりない。
ListViewならBeginUpdate / EndUpdateで大幅に高速化できるな
Invalidateしないと、UpdateWindowだけでは更新しなかった気がするのですが。
質問させてください。(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, ...); } つづく
>>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の書き込みまで引用されててひどい
誰だよ武内さん語ったの・・・いたずらにしてはひどい話だよ
あれは、たかだか2chのソースでしかない話を引用した方も悪い
くだらない筆問ですが
下記サイトで言語習得を目指そうと思います
全てを呼んだわけではありませんがサイトから抜粋
Delphiの
Object Pascal という言語をつかって、Windows 95/98/2000 が DLL
(ダイナミック・リンク・ライブラリ)として提供している
Win32 API (アプリケーション・プログラミング・インターフェース)という
関数群を呼び出してウィンドウズアプリケーションをつくる方法を解説しています
現在仕様しているソフトは無償版Turbo Delphiです
RAD環境などサイトとは異なる点がいくつかあると思いますが問題なく勉強していけるでしょうか?
これだけのボリュームと内容なので当事はかなり有名な人だったのでしょうね
ttp://homepage2.nifty.com/Mr_XRAY/Halbow/ShousaiIndex.html
>>789 "..."は末尾にvarargsを付ける。詳しくはヘルプを読め
SOCKETはたぶん同じ。あとTPICNICをそのまま使うんじゃなくて
type
PPICNIC = ^TPICNIC
としてPPICNICを使わないとだめ(ポインタだから)
実体を渡す事が多いようなら 参照にしてもいいと思うよ (var pn: TPICNIC; みたいにさ
ListViewに何万個ものアイテムを追加するとClearした時やフォーム自体を終了した時にものすごく時間がかかるのですが、 時間のかからないClearの方法はないでしょうか?
仮想リストビュー使っとけ めちゃ軽くなる
TreeViewも標準で仮想にして欲しい
800 :
デフォルトの名無しさん :2008/05/24(土) 22:45:31
>>794 ,795
とりあえず、794 さんの方法で試したところ、上手く行きました。
ありがとうございました。
特に varargs は存在そのものを知らなかったので
勉強になりました。
CreateUpDownControlでアップダウンコントロールを 直前に作ったEditに関連付けて作ったのですが、 ウィンドウスタイルにUDS_ARROWKEYSを設定し、矢印キーで位置を移動したら アップダウンコントロールが凹んだまま元に戻らないのですがこれは直せるのでしょうか? アップダウンコントロールをクリックすれば元に戻るのですが・・・ また、C++で試したところ問題はなかったのですが、なぜDelphiでのみ症状が発生するのでしょうか?
Webページの更新をチェックしたいんですが、サーバーにあるファイルの更新日時は どうすれば取得できるのでしょうか?
>>803 HEADリクエスト投げてLast-Modifiedでも見れば?
806 :
デフォルトの名無しさん :2008/05/27(火) 19:21:11
「'」を文字列で使いたい場合どうするんでしょう? コードとして解釈されてしまいます。
''''
今から始めるなら Delphi6とTurbo Delphiどっちがいいですか?
ガゼンDelphiだろ
両方ともDelphiだろw
TMediaPlayerコンポーネントを使ったソフトでmp3ファイルを開こうとすると
「指定されたファイル名拡張子からデバイスの種類を判断できません」
というエラーメッセージがでるという不具合報告がありました
ttp://d.hatena.ne.jp/tomoemon/20051031/p4 ↑を読むと、DeviceTypeを明示的に指定する必要があるみたいなんですが
"MPEGVideo"に相当するTMPDeviceTypesの値はどれでしょう?
Delphi6を使っているのですが、もしかして対応してなかったりするのでしょうか?
>>812 DeviceTypeはdtAutoSelectでmp3再生できたけど?(Del6)
書き込む前に自分で試してね
dtAutoSelectでも、↓に拡張子とデバイスタイプを結びつけるキーが無いと
>>812 のエラーが出る。
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\Current Version\MCI Extensions (NT系)
不具合報告を送ってきた人の環境には、それが無いか別の値になってるのかもしれない。
ちなみにTMediaPlayerに"MPEGVideo"を指定するのはソースを見る限り無理だと思う。
あ、オレのアプリ(Del7)のMediaPlayer使ったBGM機能もいつの間にか mp3再生できなくなってる… wavで使ってきたから全然気が付かなかった。 開発時は再生できてたのに何でレジストリ変わっちゃったんだろ!? それよりクレーム全然無いってのも、悲しいもんだね
BCB使いだけどTMediaPlayerは使い勝手悪かったから、自分でDirectShow叩いてプレイヤーコンポ作っちゃったなぁ IGraphBuilderインタフェース作成して、そこからコントロールとかビデオウィンドウとかの必要なインタフェース呼び出すだけだから 最低限の物なら50行も行かないと思う。 Delだとヘッダ使えないから面倒そうだけど。
>>813 不具合報告がありましたってんだから環境によるものだろ
自分の環境が全てではないぞ
不具合報告にはOS書いてなかったのか?
95とかだったのでは?
818 :
812 :2008/05/28(水) 22:11:31
>>814 あやや、アプリ側で吸収してあげるのは無理っぽいですか
レジストリの値をいじってもらうのには抵抗ありますが致し方ないですな
>>815 反応ないと寂しいのは、あるある
無茶なクレームつけられるのは困るけど、
今回の人はきちんと対話ができる人だったんで
対応するほうもやる気がでます
>>817 いや、XP Proらしいっす
ただ、気になる点があるとすればMP3に関連付けられてるのが
Media Player Classicだってことでしょうか
もしかしたら、そのせいでレジストリにキーが登録されなかったのかも
レジストリの値をチェックしてもらう方向で対応してみようかと思います
皆様ありがとうございましたm(__)m
820 :
デフォルトの名無しさん :2008/06/01(日) 10:07:41
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から通知されます。プログラムの終了」
とダイアログが出て、まったく起動ができません。
管理者権限で実行しています。
大変困っております。
うまく起動する方法はありませんでしょうか?
822 :
821 :2008/06/01(日) 19:31:20
アップデート1、2と当てて、ホットフィックス全部当てたら起動しました。 実は、アップデート2が同じような落ち方をして、 うまくインストールできなかったのですが、 UAC切って、DEPも切ったら当てられました。 おさわがせしました。 ありがとうございました。
あたらしいデルファイはでるんかい?
で、出るふぁい!
ボタンをクリックするたびに 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. こんな風にしてやったら失敗しました。他にも試したのですが、ループ制御変数がどうとか出てできませんでした。 どなたか教えてください。
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.
DeviceIoControl(Handle, FSCTL_SET_SPARSE, nil, 0, nil, 0, BytesReturned, nil); スパースファイルを作りたいんですけど 未定義の識別子 : 'FSCTL_SET_SPARSE'となります。 何をインクルードすればいいんでしょうか? Delphi6 personal です。
RTLには含まれていないので自分で定義してください。
830 :
828 :2008/06/03(火) 16:57:30
>>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;
これでいいんではないか?
2^0 = 1 2^1 = 2 2^2 = 4 2^3 = 8 1^2 = 1 2^2 = 4 3^2 = 8 の違いか。
ぢゃ、こうか? Button1のTagプロパティを0に戻して Memo1.Lines.Add(FloatToStr(IntPower(2,Button1.Tag))); Button1.Tag:=Button1.Tag+1;
>>825 >for i :=1 to 44444444 do s := i * 2;
>>831 が
>なら、ボタンクリックだけでいきなり44444444回もループしたらダメだろ?
と、つっ込んではいるものの、なぜ「44444444」と記述したのか?
それを知りたい。
825です すいません。2のn乗でした。 444444としたのはとにかくどこまでも2倍ができるように作りたかったからです。
それならforよりもwhileじゃね?
forつかって書いてみなさい的な課題だったので・・・。 バリバリ初心者なのでわからないのですが・・・。
なんだよその課題 教師アホすぎてワロタw
839 :
834 :2008/06/04(水) 11:53:59
for でも while でも case でも if でも何でもいいじゃん 目の前の問題が解決できりゃ万々歳 でしょ? とりあえず Delphi 実行できる環境があるんなら何でも試してみたら いいじゃん。それで出来なかったらガンガン質問すりゃいいじゃん! このスレ、結構ガンガン突っ込む人多いみたいだから安心だよ。
ボタンをクリックするたびに、*2するんじゃないのか? forの中で、キー入力待ちするの? それとも、forで一気に*2していくのか? 見えないぞ。
2レスで解決してるのに引っ張るねぇ
843 :
825 :2008/06/04(水) 22:28:29
先生が見せてた見本ではクリックするたびに2,4,8,16,とMemoに表示されていってました。 長引かせてしまいすいません; プログラム板の人は親切な人が多いですね。 ありがとうございました。これからは授業ちゃんと聞きます。 課題は途中経過を書いて出します。
こういうことじゃね? 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;
これくらいで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)));
>>826 でいいじゃん。
numはグローバル変数にして、
var
num: Integer = 1;
のほうが楽かも。
847 :
844 :2008/06/05(木) 18:13:04
>>845 Button1のNameプロパティ変えたりすることを考えると、
どうしてもwith使ってしまう悪い癖は抜け切れそうに無い。
Form1のプロパティを参照したい時に面倒になるのは承知済み。
この場合、複数のボタンで使いまわし出来るよう
with TButton(Sender)の方が良かったけどね。
>>837 に従って無理やりfor文を入れたけど、
for文を使わなくても良いのなら
>>845 でFA。
>>848 そりゃInterbaseに接続して処理するんだからしょうがない。
それと配布するとなるとインストール先にもInterbaseのライセンスが必要になる。
単一アプリケーションの内蔵データベースとしてしか使わないんであれば、Interbaseの代わりにEmbeded Firebirdの使用をおすすめ。
FirebirdはInterbase6.0互換だからVCLのInterbase接続コンポがそのままつかえる。
※IDEからデバッグ実行したときにカレントディレクトリとexeファイルのパスの違いで問題起きるので、
アプリケーションの初期化のところでexeファイルの場所にSetCurrentDirectoryを使ってカレントディレクトリを変更しておくといい。
A-Zの26人の人がいて、8人くらいでじゃんけんをしたとする。 その結果を書いたtxtがあって、 1.自分の勝率(自分はAとする) 2.自分のBに対する勝率 3.自分が相手にすると勝率が高い人TOP5 4.自分と一緒に勝つ確立が高い人TOP を出力したいのですが、全然ナにやっていいかわからないで困っています。 1.テキストをTmemoに取り込んだ 2.勝った人の1人目をlistboxに出力してみた、うまくいかなかった 3.データベースは使い方がよくわからなかった 4.試合数だけ数えてみた:これはできた 5.やりたいことをするために何をすればいいのかわからなくなってきた いまここ
> うまくいかなかった そのうまくいかなかった部分を言おうよ
それじゃ誰にも答えてもらえないよ さようなら
>>850 文字列解析の課題かな。 txtファイルがどんなのかわからないと答えようがない。
csv形式なら、TStringList.CommaTextを使ってデータを切り分けれる。
プログラム以前の問題でしょう。 やるべきことを整理して箇条書きにして、一歩一歩解決していくしかないでしょう。 質問が具体的じゃないと、具体的に回答できるはずもありません。
txtをどっかにうpすれば誰かやってくれそうなもんだけどな
書き方悪くてすいません。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ではないです。
で、フローチャートを考えてみたのですが、それがまずわからなくて悩んでいます。
何言ってんのかさっぱりわからんな
htmlから必要なデータを抜き出したいのか。 StrPosを使って、'>Win<'を探す。 それ以降にある '</a>'を探す。 名前は >mog</a> となっているから、>から<まで抜き出す。 こんな感じでやればいいよ。
861 :
デフォルトの名無しさん :2008/06/07(土) 10:11:55
俺ほどぢゃないだろ
つうかこんなスレ、リキ入れて読んでられないからさ〜 酒のみながらみてるときもあるし… できるだけわかり易い文章か母性本能くすぐりーの感じで書かないと
865 :
デフォルトの名無しさん :2008/06/07(土) 23:31:06
質問です。 壁紙を手前に表示するソフトを作ろうと思っています。 そこで TForm と TImage を半透明にして常に手前に表示してマウスなどの入力は背後のウィンドウに渡すようにしたいのですがどうすればできますか?
GetNextWindowで次にあるウィンドウ出して送ればいいと思う
>>866 ありがとうございます。GetNextWindow を調べてみます。
Delphiのフォームに画像はりつけて全画面かつ最前面表示して 後ろのExcelやExplorerを自然に操作するってことか。 フォームへのウィンドウメッセージをすべての他の適切なウィンドウに再送信しまくるなんて かなり面倒なことをしないといけなさそうだな。たぶん挫折するだろう。 付箋紙のイメージ表示機能で我慢しておいた方がいいんじゃね。
>>865 つ SetLayeredWindowAttributes
つ WS_EX_TRANSPARENT
ここの人、親切。 でも「付箋紙のイメージ表示機能で我慢」になりそうです。 クリックすると逃げるようにして邪魔にならないようにしています。 でも多謝。
delphi6なんだけど ListViewでオーナーデータだとマルチセレクト出来ない? 出来ない場合出来るようにする方法とか教えてください
TClientSocketでデータを数値として受け取るにはどうすればいいんでしょうか? Ordで大丈夫なんでしょうか
バイナリデータを受信したとき、ってこと?1バイトならOrdでいいかな。複数バイトならバイトオーダの考慮も 忘れずに。
普通にテキスト化して送ったら
TListViewからの派生クラスを書いているのですが、縦スクロールバー出現によるクライアントエリアの横サイズ変更に追従するには どのメソッドで変更に追従する処理をすればよいのでしょうか? 派生クラスで実装するので、できればメソッドのオーバーライドで処理したいです。
RGB0~255を三次元空間に見立てて その中に数十個のピクセルをFormなりImageなりに表示するのを支援してくれる ライブラリってないですか? DirectXやOpenGLほどハイパフォーマンスで大げさなのじゃなくて ちょっとしたグラフライブラリ程度のもので。
877 :
デフォルトの名無しさん :2008/06/10(火) 13:53:10
いっていることがわからないのだが、ボクセルということだろうか
色立体とかいう物を表示したいんじゃなかろうか。
879 :
デフォルトの名無しさん :2008/06/10(火) 23:32:26
880 :
デフォルトの名無しさん :2008/06/10(火) 23:33:25
881 :
デフォルトの名無しさん :2008/06/10(火) 23:37:13
スマン ど忘れして しかも ググッテも出てこない 範囲指定して字下げするのってどうやるんだっけ? 忘れちまった・・・・・ 年だ・・・・
>>881 Ctrl+Shift+I/U
フリーカーソル無効化してるならTab/Shift+Tabでもできる。
>>882 やるね!!
まあああああああああああベラス!!
ありがとう!!
フリーカーソル?・・・・ググッタ!コンポーネントかぁ メモメモ
ついでに、選択したところ全て注釈にする方法わかりますか?
これも出来たはずなんだが・・・
884 :
デフォルトの名無しさん :2008/06/11(水) 00:13:32
テプラ作った大切にするぉ サンキュウ デルファイ マイスターズ
885 :
デフォルトの名無しさん :2008/06/11(水) 09:34:41
>>879 バカっていうんなら、人にわかるように説明しろよ
グラフライブラリって書いてあるじゃんw
TChartって2次元までだっけか?
>>883 選択状態にして選択範囲を右クリックしてみるといいよ。
ちなみに、Ctrl+/で出来る。
TlistBoxを3つ並べてスクロールを同期させたいんだがどうすればいい?
890 :
デフォルトの名無しさん :2008/06/11(水) 14:36:13
>>889 OnScrollで他もスクロールさせる。
>>888 ふむふむ
ありがとう
テプラットきます
>>888 それ、D7で出来ないみたい
あと、いつの間にか右クリックして「しおり」のテンキーの数字が効かなくなってるし
>>893 うん
やってみた
ターボの方は出来るんですけれど
7はダメでした
報告ありがとう
でも 7でもやる方法があった様な気がするが
はて 勘違いかなあ
MainMenuについて聞きたいんですが 項目の右側に勝手に(Z)と付くのはどうにか出来ませんか?
>895 AutoHotKeysをmaManualに。
898 :
デフォルトの名無しさん :2008/06/13(金) 09:30:41
>>894 GExpertsのマクロでコメントアウトなどできた気がするよ
>>899 フラグでも立てて、Compareに-1掛ければいい。
>>900 それはわかるんですけど、そのフラグがわからんのです。
そもそもcompareイベントの仕組みがよくわからなくてコピペしたのがいけないんですが・・w
デバッガで追いかけろ
前に書いたソートサンプル。適当に解読してくれ。 { 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;
>>903 助かった。thx!
コピペでできてしまったので、次使うときのために解読しとくわ。
コピペだけでアプリ一本作りそうな勢いだなww
>>905 教科書はネットのみだからおのずとコピペが多くなってしまうのは仕方ない気がw
アプリはもうできてて今は改善している段階でふ。
ifの条件が複数あるときはVBのようにandで繋ぐことは出来ないんでしょうか?
そんなの入門サイトに乗ってそうだけどなあ 回答としては「出来る」よ
listviewで表を作っているんですが ある条件を満たしたときに画像を文字の後ろに付け足したいのですがどうすればいいですか? column1,column2,・・・ 名前,数学の点数,国語の点数, で、数学の点数や国語の点数が80点を越えたときに 各々数学マーク.bmp、国語マーク.bmpを名前の後ろに付け足したいという意味です。
910 :
デフォルトの名無しさん :2008/06/14(土) 17:20:45
912 :
デフォルトの名無しさん :2008/06/14(土) 18:59:06
listviewのownerdrawか・・・激しく挫折しそうだ・・
>>907-908 演算子の優先度がVBと違うからできないと思ったのかもしれないな
if (条件) and (条件) 〜
みたいに括弧で括らないといけないから
>>912 ListViewのOwnerDrawはOwnerDataを使っていなければそんなに難しくないと思います。
OwnerDataを使っているならHeaderコントロール+ListBoxマジオススメ。
ListViewやListBoxの内容は直接編集出来ないんでしょうか?
クリックしたときに、カーソル直下のセルに内容入れたTEdit生成して、TEditがフォーカス失ったらTEditの内容をセルに書き込めばいいと思うよ。 TStringGridで用が足りることも多いけどNE
formcreateでiniファイルを読み込んで、listboxにiniの内容を書き出したいのですが for do でループしようと思ったら、iniファイルのセクションの項目数をカウントする方法が思いつかずに 困っているのですが、これはどうしたらいいのでしょうか 逆にtxt形式にしてreadlnでuntil Eofとかしないとだめなのでしょうか。ご教授ください。
920 :
デフォルトの名無しさん :2008/06/17(火) 08:04:52
AnsiやUTF8の文字列をUTF32にエンコードするにはどうすればいいんでしょう? WikipediaのUnicodeの項目を見るとUCS4とUTF32は互換性があるらしいですが、 WideStringToUCS4Stringでエンコードしても、UCS4StringをStringに正常にキャストする方法が見つからず、 UTF32かどうか確かめられません よろしくお願いします
WideStringToUCS4Stringがあれば、当然UCS4StringToWideStringもあるわけだけど、 直接Stringにしたいって事?
923 :
921 :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
Studio は Kylix3 が付いているみたいだけど、 非Studioはどうなのか、検索しても良く分からないや。
TMemoryStreamのオブジェクトを別のExeに渡したりできますか?
やめとけ。MemoryStreamのデータ領域のアドレスとサイズを渡すようにするのが吉。 ん?他のexeってプロセス間通信ってこと?WM_COPYDATAかメモリマップドファイルで。
929 :
927 :2008/06/19(木) 11:31:35
巨大なメモリプールなので、2つ持ちたくないんです(><)
ならmemmapfileだな。 MemoryStreamじゃなくてただのメモリの固まりとして共有するしかない。
メモリマップファイルは、名前の通り、実態はファイルなんだけどね
とは限らないよ。オプションによる。
http://itpro.nikkeibp.co.jp/article/COLUMN/20071107/286607/?P=4&ST=techskill メモリー・マップト・ファイルが,プロセス間の共有メモリーを実現できることはわかったが,
そのためにいちいちファイルを作成するのは面倒な話だ。
実は,CreateFileMappingの第1引数には,INVALID_HANDLE_VALUE
(ファイル・ハンドルの無効な値)を指定できるようにもなっている。
つまり,ファイルを指定せずに,ファイル・マッピング・オブジェクトを作れるのである。
それではファイル・マッピングにならない,と思うかもしれないが,
マップするのがシステムのページング・ファイルになっただけと考えればよい。
これは結局のところ,VirtualAllocでコミットされたページと同じ状態なのである。
Http := TIdHttp.Create Memo.Lines.Text := Http.Get(URL) これでcharset:EUC-JPのソースを取得すると化けるのですが解決方法あれば教えてください。
EUCからSJISに変換する ググればすぐ出てくる
Shift-JISコードに変換
936 :
933 :2008/06/20(金) 22:14:26
EUC→ShiftJIS ググった結果なんですが 1.変換テーブルみたいのを書く 2.NKF32で変換する とでてきたわけですが UTF8Decode(IdHttp1.Get(url)); こんな感じの簡単なIndyの関数的なものはないでしょうか?
俺はTPzConv使ってる
DelphiでUnicodeベースのアプリの作成ってどの程度現実的なんですか? TNTを使うとコンポーネントだけでなくWindows, Classes, SysUtilsあたりの基本クラスの代替はだいたいそろっているんですか? 実際にDelphi製フリーウェアでそういうアプリも出ているんですかね。
次期バージョンで対応する。それまでは完全対応ではなくコントロールごとの 一時しのぎだと。でないと、次期バージョンの価値がない。
941 :
デフォルトの名無しさん :2008/06/21(土) 19:22:43
数年Delphiを使っていなかった者ですが、 Delphian worldをなくなってしまったのでしょうか? コンポーネントが多数あり、便利に使っていたのですが。
このスレを抽出してみたら? 俺は何とかWebArchiveで凌いでるけど・・・
お返事とヒントどうも。 いろいろ探してみます。
>>940 そうなのか?ウレシイ!
文字コードの対応は疲れる こんなことで時間とられたくない
なんかホントウにしんどい ってつくづく思ってた。
Delphi2008かTiburonでググレカス
Genericsまだ?
Genericsと匿名メソッドもTiburonで。
最新版のDelphi(無料)ってどれですか?
Turbo Delphi
>>949 ありがとうございます
早速勉強させていただきます
951 :
デフォルトの名無しさん :2008/06/21(土) 23:57:41
>>950 うるせー馬鹿。
今度から自分で調べろ。
pagecontrolであるタブを隠すことはできますか? editbox使いまくってたらこんがらがってきたので、pagecontrolで整理しようと考えているんですが、 今まではvisibleでfalseにして隠していたのですが、tabsheet2に隠すとしてもタブが表示されてしまうと 何も表示されないタブが出現してしまうので困っています。 tabのvisibleをfalseにしても実行するとtrueに戻って表示されてしまうんですよね・・・
tabvisible
954 :
デフォルトの名無しさん :2008/06/22(日) 01:39:53
tabcontrolにはtabvisibleがあるんですが pagecontroleにはtabvisibleがなくて困ってるんです・・・
すいません逆に考えてました。 自己解決sry
Jane Doe Styleのスレッド本文の表示には何のコンポーネントを使っているのでしょうか?
958 :
デフォルトの名無しさん :2008/06/22(日) 06:32:57
>>939 SpTBXLibとか使っているのがちらほら散見される。
使っている人は使っているという印象だな。
959 :
デフォルトの名無しさん :2008/06/22(日) 06:34:18
960 :
デフォルトの名無しさん :2008/06/22(日) 08:08:52
無料だしDelphi始めてみようと思って、一番新しそうな2007を 入れてみようと思ったが有償じゃねーか!!! 結局何をインストールすりゃいいんだよ!
960 ターボデルファイ
考えてみたらデルファイって毎年VerUpしてねえ?
ここ数年は「お布施」でしたよ。D7 で十分。
>>957 JaneLovelyで使われてたもの。名前はTMDITextView
StyleはLovelyベースてゆうかパクリ版。Lovelyのソースが今公開されてるのかは知らん。
なければOpenJaneDoeのTHogeTextView使え
965 :
960 :2008/06/22(日) 12:19:54
Delphi7? どこで手に入れるんだ?
>>964 mjk!!
LovelyのソースみてみたけどTHogeTextViewじゃなかったのか・・・orz
>>965 まあちょっと前くらい嫁って話なんですけどね
ってTMDITextViewはTHogeTextView継承やん・・・
969 :
デフォルトの名無しさん :2008/06/22(日) 13:13:32
なんか変なのが湧いてるが、 > 無料だし そういうかたはVSへどうぞ。
972 :
デフォルトの名無しさん :2008/06/22(日) 13:45:22
無料だからいいっていうなら、Visual Stuidoをお勧めしておくぞ。 さすがに今は・・・
ふじさんwwwwwww
あ、無料じゃないのね・・・ すまん、調査不足。 VBに挑戦してみるわ 何回もすまん
Delphi for Rubyっていつ出るの?
7の無料ってなんか本についてなかったけ 記憶違いかもしれない蹴れど アマゾンで検索してくり
977 :
デフォルトの名無しさん :2008/06/22(日) 19:34:25
無料じゃなくて体験版では?
>975 多分永久に出ない。3rd Railなら既に出てるけど。
Delphi6をインストールした後に、Turbo Delphiをインストールすると 関連付けがTurbo Delphiに変わってしまいました。 再び、Delphi6に戻すにはどうすればよいですか?
インストール時に関連付けするかどうか選べたはずだが・・
コントロールパネルのフォルダオプション
Editに kanji と言う文字列が入っていた場合に IMEを起動して かんじ という入力状態にするやり方があったら教えてください
983 :
デフォルトの名無しさん :2008/06/23(月) 23:44:36
984 :
デフォルトの名無しさん :2008/06/23(月) 23:45:28
>982 Imm*系のAPIでできるのかもしれないけどよくわからない。
おおすごい。短いコードだけど、知らないとまったく手がでません。
すいません質問です。 PageControlでMultilineを使用した際、特定の行で折り返したいのですがそんなことは可能なんでしょうか? ex) A|B|C|D|E|F|G Eで折り返したい ↓ E|F|G A|B|C|D|
>>989 レスありがとうございます。
すいません説明が足りませんでした。
H|I|J|K|L|
E|F|G
A|B|C|D|
のようにさらに上にカテゴリがあるのです。
やはりPageControlを重ねるかCaptionで無理やり調整するしかありませんかね。
もう990なのでスレ立て行ってきますね。 書き込みはもう少し我慢してくださいまし。
994 :
デフォルトの名無しさん :2008/06/24(火) 16:50:01
教えてください。 Builderで int hoge; AnsiString s; s.printf("%d",hoge); これをDelphiではどのように記述すればいいのでしょうか。
s := Format('%d', [hoge]);
>>994 s:=Format('%d',[hoge]);
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。