1 名前:デフォルトの名無しさん mailto:sage [2005/11/23(水) 23:31:08 ] Delphi初心者が問題をコツコツと解きながらレベルアップするためのスレです。
2 名前:デフォルトの名無しさん mailto:sage [2005/11/23(水) 23:38:37 ] 糞スレたてんな。 Delphi関連のスレがいくつあると思ってんだ? 既存のスレを利用しろ池沼 /* 終了 */
3 名前:デフォルトの名無しさん [2005/11/23(水) 23:58:22 ] 早く、問題出せ 俺はやらないが…
4 名前:デフォルトの名無しさん mailto:sage [2005/11/24(木) 00:57:02 ] そもそもDelphiのスレなんて必要ねーよ 糞言語氏ね
5 名前:デフォルトの名無しさん mailto:sage [2005/11/24(木) 01:36:10 ] object pascalをいじめないでください><
6 名前:デフォルトの名無しさん mailto:sage [2005/11/24(木) 02:51:06 ] Dr.Dのマシン語寺子屋ってコーナーがあったなあ・・・・
7 名前:デフォルトの名無しさん [2005/11/24(木) 09:28:17 ] Unicodeはどうやって扱えますか?
8 名前:デフォルトの名無しさん [2005/11/24(木) 09:56:47 ] さあ!私にDelphiを教えなさい!
9 名前:デフォルトの名無しさん mailto:sage [2005/11/24(木) 10:34:28 ] 前スレより問題文を転載 //ここから問題文 次は、例外処理の締めとしてRaiseを使おう。 ファイルが開けないときは writeln(filename)した後、今の例外処理(Writeln(E.Message);) を実行するように、 また、読み込みエラーのときは、E.Messageの内容を "読み込めねー" に変更してみてみてくれ。どちらも Raise を使えば簡単にできる。 //ここまで問題文
10 名前:デフォルトの名無しさん mailto:sage [2005/11/24(木) 10:34:51 ] ちなみにこのプログラムに手を加えろという問題です const filename='test.txt'; var sum: double; fp: TextFile; str: string; begin sum:=0; try AssignFile(fp, filename); Reset(fp); try while (not Eof(fp)) do begin Readln(fp, str); sum:=sum+StrToFloatDef(str, 0); end; writeln(FloatToStr(sum)); finally CloseFile(fp); end; except on E: Exception do Writeln(E.Message); end; end.
11 名前:デフォルトの名無しさん mailto:sage [2005/11/24(木) 10:36:03 ] 現在の回答 sum:=0; try AssignFile(fp, filename); try Reset(fp); except Memo1.Lines.Add(filename); raise; end; try while (not Eof(fp)) do begin try Readln(fp, str); except raise Exception.Create('よみこめねー'); end; sum:=sum+StrToFloatDef(str, 0); end; Memo1.Lines.Add(FloatToStr(sum)); finally CloseFile(fp); end; except on E: Exception do Memo1.Lines.Add(E.Message); end;
12 名前:デフォルトの名無しさん [2005/11/27(日) 18:53:41 ] 次の問題まだぁ〜?
13 名前:デフォルトの名無しさん mailto:sage [2005/11/27(日) 21:46:37 ] >>11 ◎ これで例外処理関係はOKだと思うがどうだろう? それでは次は文字列処理かな。 入力された文字列から'='を探し出し、 (=より前の文字列)'は、'(=より後ろの文字列)'です。' という出力、および、処理にかかった時間を出力 するプログラムを作ってみてくれ。
14 名前:デフォルトの名無しさん mailto:sage [2005/11/28(月) 00:18:18 ] いいかげん自作自演うざいんですけど…
15 名前:デフォルトの名無しさん mailto:sage [2005/11/28(月) 02:18:02 ] >>14 レスアンカーつけないと誰に言ってるんだか分かりませんよd(^-^)b
16 名前:デフォルトの名無しさん mailto:sage [2005/11/28(月) 03:09:04 ] つまり、>>13 は高速に文字列の中から '='の左と右を分けたいわけね。
17 名前:デフォルトの名無しさん mailto:sage [2005/11/28(月) 03:31:56 ] 自演乙
18 名前:デフォルトの名無しさん mailto:sage [2005/11/28(月) 16:40:00 ] >>13 program Project1; {$APPTYPE CONSOLE} uses SysUtils, Types, MMSystem; const str='Delphi=399,000YEN'; var i: Integer; len: Integer; StartTime: DWORD; EndTime: DWORD; begin StartTime:=timeGetTime; i:=1; while str[i]<>'=' do begin Write(str[i]); Inc(i); end; Write('は'); Inc(i);
19 名前:デフォルトの名無しさん [2005/11/28(月) 16:40:36 ] len:=Length(str); while i<=Len do begin Write(str[i]); Inc(i); end; Writeln('です'); EndTime:=timeGetTime; Writeln(Format('タイムは%d_秒です', [EndTime-StartTime])); Readln; end. //ここまで。よろしくお願いします。
20 名前:デフォルトの名無しさん mailto:sage [2005/11/28(月) 23:16:12 ] >>18-19 題を出したのとは別人だけども。 ・題意は、入力文字列は固定ではなくReadLnで実行時に入力させることを意図していたと思われる。のでReadLnを使う。 ・また、'='が見つからなかった場合の処理。 ・ふたつめのwhileループは、ループ回数がループ開始前にわかっている。こういう場合は定石としてはforを使う。 ・DelphiっぽくNowとTDateTimeを使ってみよう。 ていうかこのスレでいきなりtimeGetTime見て驚いた。
21 名前:デフォルトの名無しさん mailto:sage [2005/11/28(月) 23:20:21 ] ついでに>>10 は、 PascalとしてはDoubleじゃなくRealのほうがいいね。 Delphiだとどっちでも同じ(64ビット倍精度浮動小数点)だけど。 …ちなみに精度が欲しければExtended(80ビット拡張精度)を使う、つーか Delphiは浮動小数点の内部計算全部Extendedでやってるので、 実はExtendedで統一した方が変換ロスとか無くていい。
22 名前:デフォルトの名無しさん mailto:sage [2005/11/29(火) 09:01:26 ] >>20 program Project1; {$APPTYPE CONSOLE} uses SysUtils; var i, j: Integer; len: Integer; StartTime: TDateTime ; EndTime: TDateTime ; Hour, Min, Sec, MSec: Word; str: String; begin Readln(str); StartTime:=Now; len:=Length(str); i:=1; while str[i]<>'=' do begin Write(str[i]); Inc(i);
23 名前:デフォルトの名無しさん [2005/11/29(火) 09:02:09 ] if i>len then begin Writeln; Writeln('=が見つかりませんでした'); Readln; Exit; end; end; Write('は'); Inc(i); for j:=i to len do begin Write(str[j]); end; Writeln('です'); EndTime:=Now; DecodeTime(EndTime-StartTime, Hour, Min, Sec, MSec); Writeln(Hour,'時間',Min,'分',Sec,'秒',MSec); Readln; end. //ここまで。よろしくお願いします。
24 名前:デフォルトの名無しさん mailto:sage [2005/11/29(火) 09:32:44 ] >>22 ◎ ただ、次の点をアップデートしていただけるとうれしい。 ・文字列処理の習得を中心に考えているので結果(XはYです)の出力はまとめて 行うようにしてほしい。 ・Delphi初心者がいきなりコンソールアプリから入るとは考えにくいので できればGUIでお願いしたい。 ・こちらではコンパイルして確認するわけではないのでコードすべてをアップする 必要はない(そのため細かいバグは見落としますがそれはゴメン)
25 名前:デフォルトの名無しさん mailto:sage [2005/11/29(火) 10:19:21 ] DelphiでINIファイルの読み書きをしたいのですが・・ 良いサンプルとかありませんでしょうか?
26 名前:デフォルトの名無しさん mailto:sage [2005/11/29(火) 11:00:56 ] >>25 ヘルプでTIniFileを検索して、あとは色々たどっていけばサンプルがあるけど、それじゃダメか?
27 名前:デフォルトの名無しさん mailto:sage [2005/11/29(火) 12:13:12 ] >>26 TIniFile検索してみたけどちょっとわかりずらいっす。 でもTIniFileを使うってのがわかったので助かります。 さんくす
28 名前:デフォルトの名無しさん mailto:sage [2005/11/29(火) 18:30:10 ] >>22-23 & >>24 空文字列が入力されたら存在しないstr[1]をアクセスしにいかないか?
29 名前:デフォルトの名無しさん [2005/11/29(火) 18:48:21 ] >>28 if len=0 then begin exit; end; 修正しました
30 名前:デフォルトの名無しさん mailto:sage [2005/11/29(火) 20:52:30 ] >>27 D7だとヘルプのテキスト検索で「TIniFile とTMemIniFile の使い方」 ここにサンプル載ってるけどダメか? ちょっとコード書いてみて、具体的にわからない所があったら質問してみ。
31 名前:デフォルトの名無しさん [2005/11/30(水) 13:05:59 ] メディアンフィルタとかガンマが付いてるTImageの派生クラスはありまつか?
32 名前:デフォルトの名無しさん mailto:sage [2005/11/30(水) 17:12:15 ] >>24 結果をまとめて表示、GUIをやりました よろしくお願いします procedure TForm1.Button1Click(Sender: TObject); var i, j: Integer; len: Integer; StartTime: TDateTime ; EndTime: TDateTime ; Hour, Min, Sec, MSec: Word; str_src: String; str_dest: String; begin str_src:=Edit1.Text; StartTime:=Now; len:=Length(str_src); if len=0 then begin ShowMessage('なにか文字を入力してください'); exit; end; i:=1; while str_src[i]<>'=' do begin str_dest:=str_dest+str_src[i]; Inc(i);
33 名前:デフォルトの名無しさん [2005/11/30(水) 17:12:50 ] if i>len then begin ShowMessage('=が見つかりませんでした'); Exit; end; end; str_dest:=str_dest+'は'; Inc(i); for j:=i to len do begin str_dest:=str_dest+str_src[j]; end; str_dest:=str_dest+'です'; EndTime:=Now; DecodeTime(EndTime-StartTime, Hour, Min, Sec, MSec); Memo1.Lines.BeginUpdate; Memo1.Lines.Add(str_dest); Memo1.Lines.Add(Format('%u時間 %u分 %u秒 %u', [Hour,Min,Sec,MSec])); Memo1.Lines.EndUpdate; end; //ここまで
34 名前:デフォルトの名無しさん mailto:sage [2005/11/30(水) 20:35:52 ] >>32 ◎ 文字列処理は大丈夫っぽいのでまとめてお題を出しちゃおう。 1 Pos(AnsiPos)関数を使ってみる 2 その他使えそうな標準関数がないか探して使ってみる 3 PCharを使ってみる
35 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 02:33:50 ] >>34 あんたホントに理解してんの?
36 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 09:24:06 ] >>35 日本語処理のことかな。 そこは出題意図ではないので別の機会で勉強してくれ。
37 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 10:18:01 ] 日本語処理を無視した文字列処理はナンセンス
38 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 10:23:44 ] >>37 ごめんな。 俺だけがお題を出すのも限界があるから是非もっとよいお題を頼む。
39 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 10:42:02 ] お題 「このスレの1−38までを Memo1 にコピーして、「Delphi」という文字列が何度 現れたか数えなさい。
40 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 14:08:14 ] >>34 の1 begin str_src:=Edit1.Text; StartTime:=Now; len:=Length(str_src); eq_pos:=pos('=', str_src); if len=0 then begin ShowMessage('なにか文字を入力してください'); exit; end; if eq_pos=0 then begin ShowMessage('=が見つかりませんでした'); Exit; end; str_dest:=copy(str_src, 1, eq_pos-1); str_dest:=str_dest+'は'; str_dest:=str_dest+copy(str_src, eq_pos+1, High(Integer)); str_dest:=str_dest+'です'; EndTime:=Now; DecodeTime(EndTime-StartTime, Hour, Min, Sec, MSec); Memo1.Lines.BeginUpdate; Memo1.Lines.Add(str_dest); Memo1.Lines.Add(Format('%u時間 %u分 %u秒 %u', [Hour,Min,Sec,MSec])); Memo1.Lines.EndUpdate; end;
41 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 14:26:49 ] >>34 の2 回答1.DeleteとInsertを使う Delete(str_src, eq_pos, 1); Insert('は', str_src, eq_pos); str_dest:=Concat(str_src, 'です'); 回答2.出来合いの関数を使う Borland - Delphi Q&A 文字列を一括置換するには www.borland.co.jp/qanda/delphi/d0005103.html 回答3.正規表現を使う TRegExpr - PukiWiki onigiri.s3.xrea.com:8080/delphi/index.php?TRegExpr ※2と3は標準関数ではないですが見つけたので添えておきます
42 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 17:43:03 ] D5 以降だと StringReplace があるけど
43 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 18:24:52 ] >>42 天才あらわる
44 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 22:23:51 ] >>34 の3 PSrc:=AllocMem(len+1); PSrcCopy:=PSrc; ZeroMemory(PSrc, len+1); for i:=1 to len do begin PSrc[i-1]:=str_src[i]; end; while PSrc^ <> #0 do begin if PSrc^ = '=' then begin str_dest:=str_dest+'は'; end else begin str_dest:=str_dest+PSrc^; end; Inc(PSrc); end; str_dest:=str_dest+'です'; FreeMem(PSrcCopy, len+1);
45 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 22:41:39 ] メモリ割り当ててコピーは無駄。ポインタ使う意義が半減。 PSrc := PChar(str_src); でいいんでない?
46 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 23:10:52 ] >>45 了解です。修正しました。 PCharとStringの変換が意外と楽で感激 PSrc:=PChar(str_src); while PSrc^ <> #0 do begin if PSrc^ = '=' then begin str_dest:=str_dest+'は'; end else begin str_dest:=str_dest+PSrc^; end; Inc(PSrc); end; str_dest:=str_dest+'です';
47 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 23:13:41 ] >>39 p:=0; cnt:=0; str:=Memo1.Text; len:=length(sword); repeat ap:=Pos(sword, copy(str, p, High(Integer))); if ap>0 then begin p:=p+ap; Inc(cnt); Inc(p, len); end; until ap=0; ShowMessage(IntToStr(cnt));
48 名前:デフォルトの名無しさん [2005/12/01(木) 23:32:47 ] >>39 をPCharを使って解きました 文字列の添え字に間違って0を使ってしまってハマってしまいました PCharのときは0から、それ以外(constやstring)は1からでいいんですよね? p:=1; cnt:=0; str:=Memo1.Text; PStr:=PChar(str); len:=length(sword); while PStr^ <> #0 do begin if PStr^ = sword[p] then begin Inc(p); if (p=len) then begin Inc(cnt); p:=1; end; end else begin p:=1; end; Inc(PStr); end; ShowMessage(IntToStr(cnt));
49 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 23:32:52 ] >>47 パチパチパチ、すばらしい ◎-3 減点は、この場合は問題ないだろうけど、日本語処理では Pos じゃなく AnsiPos を使うこと。 いろいろ改良点があるけど ap:=Pos(sword, copy(str, p, High(Integer))); これがこの処理のキモ。でも、文字列コピーは最も効率悪い方法。 1MByte のテキストで検索文字列が1000回現れたら、1000回コピーする ことになる。PChar をつかってなるべくコピーをしないで処理する方法を 考えるのが次のお題。
50 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 23:34:57 ] > PCharのときは0から、それ以外(constやstring)は1からでいいんですよね? そう。string 型は、パルカルのときの実装を引きずっていますので例外的に1から、と覚える
51 名前:デフォルトの名無しさん mailto:sage [2005/12/02(金) 00:00:42 ] ×パルカル ○パスカル
52 名前:デフォルトの名無しさん mailto:sage [2005/12/02(金) 00:06:33 ] 49 のヒント AnsiStrPos
53 名前:デフォルトの名無しさん [2005/12/02(金) 09:07:30 ] TEditに英文字のみ入るようにする方法教えて下さい。
54 名前:53 [2005/12/02(金) 09:19:30 ] イベントハンドラでキー入力をカット出来ないかなぁ?
55 名前:デフォルトの名無しさん mailto:sage [2005/12/02(金) 09:35:55 ] >39にも誰か答えてやれよ
56 名前:デフォルトの名無しさん mailto:sage [2005/12/02(金) 09:38:03 ] ×39 ○31
57 名前:デフォルトの名無しさん mailto:sage [2005/12/02(金) 09:58:38 ] > Delphi初心者が問題をコツコツと解きながらレベルアップするためのスレです。 単発質問はくだすれへ
58 名前:デフォルトの名無しさん mailto:sage [2005/12/02(金) 16:42:41 ] >>48 Inc(p); if (p=len) then これじゃ、比較が一バイト少ないよ。それから、2バイト文字を考慮してないので ダメです。「Delphi」ならまず問題ないけど「D」だったら、2バイト文字の2バイト目も 数えてしまう可能性がある。
59 名前:デフォルトの名無しさん [2005/12/05(月) 21:38:25 ] >>49 日本語処理にも気をつけました よろしくお願いします。 const sword='Delphi'; var str: AnsiString; cnt: Integer; PStr: PChar; begin cnt:=0; str:=Memo1.Text; PStr:=PChar(str); repeat PStr:=AnsiStrPos(PStr, sword); if (PStr<>nil) then begin if (StrByteType(PStr, 0)=mbSingleByte) then begin Inc(cnt); end; Inc(PStr); end; until PStr=nil; ShowMessage(IntToStr(cnt)); end;
60 名前:デフォルトの名無しさん mailto:sage [2005/12/06(火) 00:37:50 ] >>59 AnsiStrPosを使ってる時点で2バイト文字として意味のある位置で 結果が返ってる筈なんでStrByteTypeいらない。 というか前からスキャン方式でStrByteTypeは使っちゃだめ。 途中の位置をいきなり指定してそれがどこにあたるか調べるのは 前後の文字を辿るしかなく、 逆にそういった機能を持つ関数を使うことは その次点に到達するまで前からスキャンしてきたこと自体を 無駄にしてる。 前から辿るならAnsi〜系を使わずに自力でマルチバイト処理をするとしても LeadBytesで充分。
61 名前:デフォルトの名無しさん mailto:sage [2005/12/06(火) 00:46:30 ] >>59 惜しい。あと一歩。78点くらい。 たぶん結果は正しい。冗長なのが減点の原因。 AnsiStrPos は二バイト文字をサポートしていますので、検索の先頭を間違わなければStrByteType による確認は不要です。 それから、見つかったら、PStr は検索文字列の長さ分だけ Inc() してから再度検索します。 repeat PStr:=AnsiStrPos(PStr, sword); if (PStr<>nil) then begin Inc(cnt); Inc(PStr, Length(sword)); end; until PStr=nil; このようにすると検索文字列が 「Delphi」であっても「デルファイ」であっても問題なく検索できます。 >>59 の回答は検索文字列の最初が一バイト文字であることを仮定しているので正しくないです。 しかし、かなりな進歩で驚いています。 次のお題は、何回現れるかの他に、その位置も返すような関数をつくってください。具体的には、RichEdit に 同様にテキストを読み込んで、ボタンを押すと Delphi の部分が赤い文字列になるようにします。 赤文字にする方法、位置情報を返すための配列の定義の仕方など、分からないことがあったら個別に質問してください。
62 名前:デフォルトの名無しさん [2005/12/07(水) 01:04:33 ] >>61 begin cnt:=0; spos:=0; str:=RichEdit1.Text; PStr:=PChar(str); len:=Length(sword); repeat p:=AnsiPos(sword, PStr+spos); if (p>0) then begin Inc(cnt); Inc(spos, p); with RichEdit1 do begin SelStart:=spos-1; SelLength:=len; SelAttributes.Color:=clRed; end; Inc(spos, len); end; until p=0; ShowMessage(IntToStr(cnt)); end; //ここまで よろしくお願いします。
63 名前:デフォルトの名無しさん mailto:sage [2005/12/07(水) 02:35:14 ] >>62 AnsiPosに暗黙のPChar→String変換で引数渡してるよね…。 これは暗黙に実行されるわりにコストがメチャ高いので、 ループの中では避けたほうがいい。 上と同じでAnsiStrPosじゃダメだったの?
64 名前:デフォルトの名無しさん mailto:sage [2005/12/07(水) 03:05:54 ] >>62 すばらしい! つぎに、汎用的に使えるように関数にしてみてください。 type TPosArray = array of integer; function SearchAndPos(const SubStr, Str: string; PosArray: TPosArray): integer; で戻り値が出現回数であるような。>>63 さんのおっしゃるとおり、AnsiStrPos をつかって 実装してみてください。
65 名前:デフォルトの名無しさん mailto:sage [2005/12/07(水) 03:10:21 ] すみません、関数は function SearchAndPos(const SubStr, Str: string; var PosArray: TPosArray): integer; の形です。var をわすれました。
66 名前:デフォルトの名無しさん [2005/12/09(金) 04:07:45 ] >>64-65 AnsiStrPosを使うように変更しました よろしくお願いします function SearchAndPos(const SubStr, Str: string; var PosArray: TPosArray): integer; var PStr: PChar; PBgmStr: PChar; PSubStr: PChar; Cnt: Integer; Len: Integer; begin Cnt:=0; Len:=Length(SubStr); PBgmStr:=PChar(Str); PStr:=PBgmStr; PSubStr:=PChar(SubStr); repeat PStr:=AnsiStrPos(PStr, PSubStr); if (PStr<>nil) then begin Inc(Cnt); SetLength(PosArray, Cnt); PosArray[Cnt-1]:=PStr-PBgmStr; Inc(PStr, Len); end; until PStr=nil; result:=Cnt; end;
67 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 09:57:48 ] >>66 すばらしい! 実際のの動作はすみませんが、時間が出来たらあとで検証してみます。 見た限りでは問題無さそうです。 >>47 から比べると格段の進歩です。検索には一度も文字列コピーをしてないのですよね。 今回の教訓は、ひとかたまりの論理が完結したら、関数や手続き、クラス内のメソッド などで表現すべき、ということです。コードの断片より、関数などで完結した論理を 表現しておくと、たとえ他の言語や環境になったとしても論理そのものは生きるので 自分の財産にすることが出来ます。
68 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 09:58:14 ] 次の課題。 1)Delphi には Pos や AnsiPos にように文字列の先頭から、最初の位置までを 検索する関数がありますが、途中から検索する関数がありません。それを function AnsiPosEx(const Substr, S: string; initPos: integer): Integer; の形で AnsiStrPos をつかって、つくってください。そして、それをつかって >>66 を 書き直してみてください。 2)>>66 では見つかるたびに SetLength() を使って配列を一つずつ増やしています。 これは非効率的なので、たとえば10個づつ増やすようにしてみてください。
69 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 20:18:26 ] >>68 function AnsiPosEx(const SubStr, S: string; initPos: integer): Integer; var PSubStr: PChar; PS: PChar; PBgn: PChar; PPos: PChar; begin PSubStr:=PChar(SubStr); PS:=PChar(S); PBgn:=PS+initPos; PPos:=AnsiStrPos(PBgn, PSubStr); result:=PPos-PS+1; if result<0 then begin result:=0; end; end;
70 名前:デフォルトの名無しさん [2005/12/09(金) 20:19:15 ] function SearchAndPos(const SubStr, Str: string; var PosArray: TPosArray): integer; var PStr: PChar; Cnt: Integer; NowPos: Integer; Len: Integer; begin Cnt:=0; NowPos:=0; Len:=Length(SubStr); PStr:=PChar(Str); repeat NowPos:=AnsiPosEx(SubStr, PStr, NowPos); if NowPos<>0 then begin if Length(PosArray)=Cnt then begin SetLength(PosArray, Cnt+10); end; PosArray[Cnt]:=NowPos-1; Inc(Cnt); Inc(NowPos, Len); end; until NowPos=0; SetLength(PosArray, Cnt); result:=Cnt; end; //ここまで よろしくお願いします
71 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 22:22:06 ] >>69 完璧!! -2 点 =98点 減点は、AnsiPosEx の第二引数に PChar を使ったこと。const の string 型は 呼び出しても、関数内で変更できないのでコピーされることはないです。ですから string 型のまま使ってください。AnsiPosEx をつくったことにより、SearchAndPos から、ポインタをあらわにつかうコードが完全になくすることができたことに注目してください。 次の課題は少し難易度が上がります。 このスレの1−38までのテキストのうち、半角の数字がでてきた数を数える関数をつくってください。 いままで、テキスト内の走査は、AnsiPos や AnsiStrPos をつかったのであらわに コードを書かなかった。この課題では、一バイト文字、二バイト文字を判別しながら 数字かどうかを判定する必要があります。自分のコードでテキストを走査してください。 出来れば、前回のように、文字列の途中から検索して、最初の数字を見つける関数を つくり、それを使って出現数を数えてください。
72 名前:デフォルトの名無しさん mailto:sage [2005/12/09(金) 22:25:23 ] ヒント >>60 さんのコメントが参考になります。
73 名前:デフォルトの名無しさん mailto:sage [2005/12/10(土) 00:15:52 ] 数字は全角文字の二バイト目に出てこないよ。
74 名前:デフォルトの名無しさん mailto:sage [2005/12/10(土) 02:07:03 ] >>73 ありがとう。 ほんとうですね。いま shift-jis のコード表を見ましたら、二バイト文字の二バイト目は $40 からなんですね。一方 0-9 は $30-$39 ですから、重複しませんね。 うーむ、それでは課題が破綻するので変えることにします。 このスレの1−38までのテキストのうち、半角のアルファベット( a-z と A-Z )文字がでてきた数を数える関数をつくってください。 とします。すみませんでした。
75 名前:デフォルトの名無しさん [2005/12/11(日) 22:32:44 ] 嘘か真かわからんが、QualityCentralにQC#21940で、「Delphi2006 ハング」との事です。時々、ハングアップするとの事です。んー。今まで、Qualityを無視しつづけたツケだな。 -- 2005-12-07 05:54:52 (水) New 2005なんか 最初 吹っ飛んで消滅していたじゃん。 消滅からハングに 大差ないしおどろくことではないかと 先行バグ取り隊の情報引き続きよろしく -- 2005-12-07 09:14:09 (水) New >「消滅からハングに 大差ないしおどろくことではない」 どっちにしろ、真面目につかうものではなさそうですね。 「どっちにしろ、真面目につかうものではなさそうですね」 しらずに2005のときせっかく数時間かけて書いたコードが消滅して悲しい思いしたよ -- 2005-12-07 15:22:52 (水) New
76 名前:デフォルトの名無しさん [2005/12/15(木) 07:29:16 ] >>74 function CountAlpha(var str: AnsiString): Integer; var i: Integer; cnt: Integer; begin cnt:=0; i:=0; while (i <= Length(str)) do begin if ( (str[i] in LeadBytes)) then begin Inc(i,2); end else begin if (str[i] in ['a'..'z']) or (str[i] in ['A'..'Z']) then begin Inc(cnt); end; Inc(i); end; end; result:=cnt; end; //ここまで よろしくお願いします
77 名前:デフォルトの名無しさん mailto:sage [2005/12/15(木) 10:26:25 ] >>76 すばらしい! 94点 減点は CountAlpha(var str: AnsiString): → CountAlpha(const str: AnsiString): const にして、関数内で変更しない(コピーされない)ことを保証し、 IntToStr(CountAlpha(Memo1.Text)) などと、変数を確保しなくても使えるように することは重要です。var だと str := Memo1.Text; IntToStr(CountAlpha(str)) などとしなければ使えませんね。 減点ではないけど if (str[i] in ['a'..'z']) or (str[i] in ['A'..'Z']) then の部分は if (str[i] in ['A'..'Z','a'..'z']) then とすることもできます。 文字列のインデックスは1から始まります。ですから i:=0; ではなく、 i:=1; で初期化してください。次の課題は少し事前に検証してから出します。
78 名前:デフォルトの名無しさん mailto:sage [2005/12/15(木) 10:42:34 ] >>76 つぎの課題は、もうちょっと難易度が上がります。 前回同様、アルファベットの文字を見つけるのは同じですが、塊として数えてください。 例えば This is a pen. の場合は4を返すような関数をつくってください。アルファベット以外の文字(空白も含む)で 区切られたアルファベットだけで出来ている語句の数を数えます。 「...ことを保証し、IntToStr(CountAlpha(Memo1.Text)) などと、変数を確保しなくても使えるように」 の場合は、「IntToStr」「CountAlpha」「Memo」「Text」の4つです。
79 名前:デフォルトの名無しさん mailto:sage [2005/12/15(木) 11:52:06 ] ヒント 新幹線で東京から名古屋まで行くときのトンネルの数を数えるのと同等です。 トンネルの入り口を数えるといいですね。でも入り口を認識するためには 出口を認識する必要があります。出口を認識するためには、「いまトンネルの なかにいる」という<状態>を変数に保存しておかなければなりません。また、 トンネルの中にも駅があることを考慮しなければなりません。ですから、名古屋 は違いますが終点がトンネルの中の場合もありえます。
80 名前:デフォルトの名無しさん mailto:sage [2005/12/15(木) 12:22:11 ] すみません(こればっかり)、ヒントの最後の2行は、見つかった語句の長さを 記録するときのものです。今回は無視してください。入り口の数だけで十分です。
81 名前:デフォルトの名無しさん [2005/12/16(金) 13:56:59 ] ●問題2 エディットボックス(Edit1)に入力した数字までの合計値を、ボタン(Button1)を押したら、表示(Label1に表示)させよ。 なお変数は、エディットボックスの入力値(a)、合計値(Sum)、ループのカウンタ(i)とする。 procedure TForm1.Button1Click(Sender: TObject); var i,Sum:□□□□□□□; a:integer; begin a:=StrToInt(Edit1.text); Sum:=0; for i:= □ to □ do begin Sum:= □□□+□ end; Label1.Caption:=IntToStr(Sum); end; 教えて!↑
82 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 15:44:01 ] Integer 0 a Sum i
83 名前:デフォルトの名無しさん mailto:sage [2005/12/18(日) 04:51:49 ] すんません、教えてください。 TPopupMenuに動的にメニューを追加する方法なんですが、サブメニューも追加したくて・・・ 例えば A -SubA -SubB B -SubA -SubB -SubC こんな感じでサブメニュー含めて動的に追加するにはどうしたらいいですかね?
84 名前:デフォルトの名無しさん mailto:sage [2005/12/18(日) 09:33:06 ] >>83 >>57
85 名前:デフォルトの名無しさん mailto:sage [2005/12/20(火) 06:50:34 ] >>78-80 function CountAlphaWord(const str: AnsiString): Integer; var i: Integer; cnt: Integer; isAlphaNow: Boolean; isAlphaPrev: Boolean; begin isAlphaPrev:=False; cnt:=0; i:=1; while (i <= Length(str)) do begin isAlphaNow:=False; if ( (str[i] in LeadBytes)) then begin Inc(i,2); end else begin if (str[i] in ['a'..'z', 'A'..'Z']) then begin isAlphaNow:=True; end; Inc(i); end;
86 名前:デフォルトの名無しさん mailto:sage [2005/12/20(火) 06:54:35 ] if (not isAlphaPrev) and isAlphaNow then begin Inc(cnt); end; isAlphaPrev:=isAlphaNow; end; result:=cnt; end; //ここまで よろしくお願いします
87 名前:デフォルトの名無しさん mailto:sage [2005/12/20(火) 14:36:57 ] >>85-86 100点。 キモは、 if (not isAlphaPrev) and isAlphaNow then ですね。これでトンネルの入り口を認識しているのだね。Boolean の変数を二つ つかって、論理が分かりやすくなっています。わたしの実装だと、IsTunnel という Boolean の変数をひとつだけ使っているので、今回の実装より簡単ですが、コードは 読みにくいです。他人の実装をみると、自分との違いが分かって勉強になります。 さて、次の課題は、多分予想できていると思いますが、トンネルの出口も認識して 数だけでなく、位置と長さも返すような関数を作ってください。 type TPosLength = record Position: integer; Length : integer; end; TPosLenArr = array of TPosLength; function SearchAlphaWord(const str: string; var pl: TPosLenArr): integer; >>79 の全文をヒントとしてください。
88 名前:デフォルトの名無しさん mailto:sage [2005/12/23(金) 05:34:45 ] >>87 function SearchAlphaWord(const str: string; var pl: TPosLenArr): integer; var i: Integer; cnt: Integer; isAlphaPrev: Boolean; isAlphaNow : Boolean; iPrev: Integer; begin isAlphaPrev:=False; cnt:=0; i:=1; while (i <= Length(str)) do begin isAlphaNow:=False; iPrev:=i; if ( (str[i] in LeadBytes)) then begin Inc(i,2); end else begin if (str[i] in ['a'..'z', 'A'..'Z']) then begin isAlphaNow:=True; end; Inc(i); end;
89 名前:デフォルトの名無しさん [2005/12/23(金) 05:35:25 ] if (not isAlphaPrev) and isAlphaNow then begin Inc(cnt); if cnt>Length(pl) then begin SetLength(pl, cnt+10); end; pl[cnt-1].Position:=iPrev; end else if isAlphaPrev and (not isAlphaNow) then begin pl[cnt-1].Length:=iPrev-pl[cnt-1].Position; end; isAlphaPrev:=isAlphaNow; end; SetLength(pl, cnt); result:=cnt; end; //ここまで よろしくお願いします
90 名前:デフォルトの名無しさん mailto:sage [2005/12/23(金) 11:51:19 ] >>88-89 90点。 ヒントの > トンネルの中にも駅があることを考慮しなければなりません。ですから、名古屋 > は違いますが終点がトンネルの中の場合もありえます。 を忘れています。アルファベットでテキストが終わる場合を考慮してください。 ... isAlphaPrev:=isAlphaNow; end; if isAlphaNow then pl[cnt-1].Length:=iPrev+1-pl[cnt-1].Position; // これを追加 SetLength(pl, cnt); result:=cnt; end; あと、一つも見つからない場合もありますので、while の前に isAlphaNow := false; iPrev := 1; で初期化しておくとコンパイラの警告が出ませんね。 文字列操作は列挙や置換、抽出、パースなどいろいろありますが、少々当方も飽きてきた ので次はリストクラスから出題します。すこし時間をください。
91 名前:デフォルトの名無しさん mailto:sage [2005/12/23(金) 12:10:18 ] >>88-89 リストクラスはもっとも簡単そうな文字列のリスト TStringList から始めます。 最初はソートの練習です。 procedure TForm1.Button1Click(Sender: TObject); var sl: TStringList; i: integer; begin Randomize; sl := TStringList.Create; try for i := 1 to 20 do sl.Add(IntToStr(Random(1000))); Memo1.Lines.Assign(sl); finally sl.Free; end; end; にすると、0-999 のランダムな数値に対応する文字列が sl に20個保持され、その内容が Memo1 に 表示されます。コードを継ぎ足して、数値の小さい方から(昇順)並べ直して見てください。 TStringList.CustomSort を使います。
92 名前:ささ ◆6KVcpBNXy. [2006/01/26(木) 15:45:51 ] みなさん。こんにちゎ。経済学部のささと申します。 パスカル(Delphi)の授業での課題がわかりません。。教えてください! 3科目、10人分のデータを入力して各人の合計点と科目毎の平均点を作れ! という課題が出ました。。。 先生に下記を改変するとやりやすいといわれました。repeatとwhileとforまでしか習っていません。 Score :array[0..1000] of integer; begin writeln('入力得点の平均と偏差値を計算します'); writeln('入力後、負の数を入力すると…終了します。'); kazu :=0; repeat write('点数は?'); readln(data); if data >= 0 then begin kazu := kazu + 1; score[kazu] := data end until data < 0; goukei := 0; for i := 1 to kazu do goukei := goukei + score[i]; heikin :=goukei / kazu; goukei :=0; for i := 1 to kazu do goukei := goukei + Sqr(score[i]); hensa := sqrt(goukei /kazu - sqr(heikin)); writeln('点数 偏差値'); for i := 1 to kazu do writeln(score[i]:4, 50 +10 * (score[i]-heikin)/ hensa:10:1); writeln(' 平 均 =',heikin:5:1); writeln('標準偏差=',hensa:5:1); readln; end.
93 名前:棄民党党首 ◆8slekwWKD6 [2006/01/26(木) 17:00:39 ] やひゃひゃひゃ。おまいら。 AssignFile(f, s); Reset(f); で s にアクセント記号と漢字交じりのファイル名をWideStringでぶちこんでみたら 開かんぞ。 TntのUnicode Componentsをいぢってみたが、AssignFileのUnicode版がみつからん。 でしかたないから WideRenameFileで名前を'safe.bin'とかに変更しちゃって。 フツ〜にAssignFileで開いて処理してからまた WideRenameFileで名前をUnicodeの名前へもどしますた。 わたしってなんて天才♪
94 名前:デフォルトの名無しさん mailto:sage [2006/02/10(金) 02:28:56 ] Delphiってなくなるの? Turbo Pascal時代からずっと使って来ただけに、 手に馴染んだ開発環境がなくなると困る。
95 名前:デフォルトの名無しさん mailto:sage [2006/02/10(金) 04:04:10 ] >>94 ボーランドが手放すだけでDelphiがなくなるわけじゃないから安心しる。
96 名前:デフォルトの名無しさん mailto:sage [2006/02/10(金) 08:15:16 ] 買い手が無ければなくなるんじゃね?
97 名前:デフォルトの名無しさん [2006/02/10(金) 14:45:48 ] で、MDIでWM_COPYDATAを子フォームで受け取るにはどーすんの?
98 名前:デフォルトの名無しさん mailto:sage [2006/02/10(金) 16:58:38 ] 受け取るのは簡単だろ
99 名前:デフォルトの名無しさん [2006/02/10(金) 17:29:53 ] >>98 え?マジすか?kwsk! とあるスレッドからMDI子フォームにSendMessageしたいんです。 そのスレッドでは、MDI子フォームのウィンドウハンドルを取得する事は 出来るのですが、SendMessageしてもMDI子フォームにメッセージが来ないです。 もう泣きそうです。 もちろん、MDI子フォームではメッセージを受け取れるようにしているのですけども・・・。
100 名前:デフォルトの名無しさん mailto:sage [2006/02/10(金) 17:49:34 ] どうやってハンドルをみつけたの?
101 名前:デフォルトの名無しさん [2006/02/10(金) 18:13:45 ] 改行が多いと怒られたので、かなりハショってます。 メッセージを送る側では procedure Thread.SendMsg(sClassName: String; nKind: Cardinal; pInfo: Pointer; nInfoSize: Integer); var begin Wnd := FindWindow(PChar(sClassName), nil); if (Wnd <> 0) then begin : SendMessage(Wnd, WM_COPYDATA, WPARAM(Wnd), LPARAM(@Cd)); end; とし、SendMsg('TForm', ....); と、使っています。で、 受け取る側(MDI子フォーム)では procedure WMCopyData( var sMsg: TWMCopyData ); message WM_COPYDATA; を、privateに宣言して procedure TForm.WMCopyData(var sMsg: TWMCopyData); : begin pMessage := nil; if (sMsg.CopyDataStruct.dwData = ID_TEST) then begin : : : end; としています。
102 名前:デフォルトの名無しさん mailto:sage [2006/02/10(金) 19:22:04 ] それでほんとに、目的 MDI 子ウィンドウが見つかってる? 一度 Spy++ か WinInsight で確かめたら?
103 名前:デフォルトの名無しさん [2006/02/10(金) 19:45:00 ] 取れてるようですが・・・ダメなんでしょうか? 通常どうやるのかわからないもので・・・。 とりあえず実行させて、FindWindowの戻り値を見たら0x604A6でした。 Spy++の検索ウィンドウで0x604A6を検索したら、目的のウィンドウが 検索されました。一応ウィンドウハンドルは取れているようでした。 うーん・・・困りました・・・。
104 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 02:57:20 ] 部分範囲型って、実際バリバリ使ってる人います? 便利なようでいまいち、使いどころが…。 動作中チェックありにして、速度とか問題ないですか?
105 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 15:13:33 ] そもそも Delphi を実際バリバリ使ってる人なんか、そんなにいないからね
106 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 21:37:45 ] バリバリじゃない。さり気なく使うんだ。
107 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 10:29:36 ] さりげなく、こっそりと、ひそかに・・・な。
108 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 11:11:39 ] いや、ペタペタと使う。
109 名前:デフォルトの名無しさん mailto:sage [2006/02/21(火) 23:53:44 ] >>101 ヘルプに有るように、FindWindowは子ウィンドウは探してくれないよ。 同じクラス名を持つ別のウィンドウのハンドルを返していると思われ。
110 名前:デフォルトの名無しさん [2006/02/22(水) 23:07:35 ] 質問です。色付きのボタンを作ることはできますか? パネルを色つきにしてOnClickという事もできますが それだとクリックされたときにボタンのように 凹んだりしないのでわかりづらいし・・・ なにかいい方法はありますでしょうか? どなたか、よろしくお願いします。
111 名前:デフォルトの名無しさん mailto:sage [2006/02/22(水) 23:14:06 ] >>110 まさか本当に凹んでるとか思ってないよな?
112 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 00:27:17 ] Paintメソッドをoverrideして自分で描画するとか。
113 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2006/02/23(木) 00:51:33 ] (´⌒;; ;⌒`) ∧,,∧ そういうのだいたい ;; `)./ミ,,゚Д゚彡 誰か作ってるよ。 //\ ̄ ̄旦~ (´(´⌒) // ※.\___\ \\※ ※ ※ ※ ※ヽ \`ー──────ヽ ──────── homepage1.nifty.com/cosmic/delphi/vcl.html#cutebtn homepage2.nifty.com/Mr_XRAY/Delphi/plButton/index.htm
114 名前:デフォルトの名無しさん [2006/03/02(木) 22:41:07 ] 152 : :2006/03/01(水) 06:16:00 HOST:ed251.opt2.point.ne.jp 削除対象アドレス: pc8.2ch.net/test/read.cgi/tech/1138370150/ pc8.2ch.net/test/read.cgi/tech/1132756268/ pc8.2ch.net/test/read.cgi/tech/1132013685/ 削除理由・詳細・その他: 6. 連続投稿・重複
115 名前:デフォルトの名無しさん mailto:sage [2006/03/03(金) 01:13:30 ] Dr.Dのマシン語寺子屋
116 名前:デフォルトの名無しさん [2006/03/31(金) 11:14:10 ] TBitmap→TJpegImage→Jpegファイル、とやってますが、 DDBからDIBにするとメモリ減りますか? コーディングも簡単でつか?
117 名前:デフォルトの名無しさん mailto:sage [2006/03/31(金) 12:06:28 ] やってることと、質問の内容が噛み合ってない
118 名前:116 [2006/03/31(金) 13:30:05 ] いやだから、 TBitmap(DDB)→TJpegImage→Jpegファイル から TBitmap(DIB)→TJpegImage→Jpegファイル に変更。 今は意識してないけど、TBitmapってデフォはDDBだおね?
119 名前:デフォルトの名無しさん mailto:sage [2006/03/31(金) 13:50:09 ] 大差ないよ。
120 名前:デフォルトの名無しさん mailto:age [2006/05/29(月) 00:58:17 ] feeddemonってRSSリーダーがあるんですが v1のときにhtaのような使い方をしている 部分(左のチャンネルリスト)をどう実装してるのか わからないんですが、誰か教えてください詳しい人
121 名前:デフォルトの名無しさん mailto:sage [2006/05/29(月) 13:16:35 ] > Delphi初心者が問題をコツコツと解きながらレベルアップするためのスレです。 すれ違い
122 名前:デフォルトの名無しさん [2006/06/09(金) 17:59:34 ] マウスカーソルをアルファベット文字、もしくは単語にしたいのですが、 簡単にできますか? アルファベット毎にカーソルファイルを作るのでなく、 コーディングでやりたいです。
123 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 18:47:12 ] 簡単にはできないでしょ。すなくとも動的にアルファベットの画像をつくらなきゃならないし。
124 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 19:15:11 ] >>122 forum.nifty.com/fdelphi/samples/00368.html TBitmapを作成して そこに文字を書いて、 それからCreateCursor
125 名前:122 mailto:sage [2006/06/12(月) 08:41:29 ] >>123 >>124 サンクス。 ちょっとひねればコーディングできそうですね。
126 名前:デフォルトの名無しさん mailto:sage [2006/09/03(日) 09:14:12 ] どうぞよろしくお願いします Delphi7.0上で、3層の情報系の業務アプリケーションを構築しています データベースはOracle9iです UIでは、ADOレコードセットを入力データソースするMicrosoftのActiveXコンポーネント を使用しています BDE、DBExpressやBizSnapを利用すれば3層のデータアプリケーションは作成できる ことは分かりました データセットプロバイダ経由でデータを取得しようとすると、クライアント側はClientDataSet として受け取ることになるのですが、どこかでADOレコードセット形式に変換しなければなりません 試しにClientDataSetをまわしながらADOレコードセットにフィールド定義とデータ値をコピーする 方法を試してみましたが、処理時間とCPU負荷が半端ではなく、とても採用できませんでした 他には、BizSoapを利用した形式では、サーバー側でADOレコードセットとしてデータ取得後に Saveメソッドを利用してXML形式で一旦データ出力し、Soap経由でテキスト送信し、クライアント 側では受信内容をファイルとして出力しADOレコードセットのLoadメソッドをCallしてXMLファイル から復元する方法を試したみましたが、これも採用できるものではありませんでした 素直にクライアント側でADOレコードセットとして取得可能な方法としては、リモートデータセット (Microsoft RDS)を利用したDComアプリケーションとして構築する方法もあるので試してみました これは、非常に高速で20万件程度のデータもほぼ一瞬でクライアント処理でき驚いたものですが、 MicrosoftのサポートページではRDS自体が今後は非推奨の技術として明記されており、その点 が引っかかっております どうしてもクライアント側で扱うデータ量が数十万件程度あることでパフォーマンスが重要になって しまいます。 オーバーヘッドがなるべく最小の形でClientDataSetからADOレコードセット形式に変換する方法は ないものでしょうか もしくは、素直にADOレコードセットとしてクライアント側で一発でデータ取得できれば嬉しいです 長文になってしまい申し訳ありません どうぞよろしくお願いいたします
127 名前:126 mailto:sage [2006/09/03(日) 09:22:44 ] 126です 大変失礼しました [ くだすれdELPHI(超初心者用) ] のスレの方に移動します
128 名前:デフォルトの名無しさん mailto:sage [2006/09/11(月) 00:03:00 ] >>1 問題だしておくれ 初心者でも10分ぐらいで解けて、面白味のあるものがいい
129 名前:デフォルトの名無しさん mailto:sage [2006/09/11(月) 08:47:19 ] じゃ、俺から問題 ボタンを二つ用意し、片方を非表示とする。 表示されているボタンを押すと、非表示だったボタンを表示し、押されたボタンを非表示に。 これを交互に繰り返せるものを作れ。
130 名前:デフォルトの名無しさん mailto:sage [2006/09/11(月) 10:14:48 ] くだらね┐(´〜`;)┌
131 名前:デフォルトの名無しさん mailto:sage [2006/09/11(月) 11:34:13 ] >>130 ならおまえがだせ。 と、いいたいところだが、これはどうだ? コントロールのオーナーをTForm1からTForm2に変える。
132 名前:デフォルトの名無しさん mailto:sage [2006/09/11(月) 12:30:13 ] 他のスレでTPrinterの話題が出てたんで。 用紙の左上から右に5cm、下に5cmの位置に 「はろーわーるど」と印字せよ フォントは何でもいい
133 名前:デフォルトの名無しさん mailto:sage [2006/09/11(月) 15:51:09 ] 初心者の基準を考えよ
134 名前:デフォルトの名無しさん mailto:sage [2006/09/12(火) 16:57:18 ] iniファイル作って 初期データ読み込み書き込みはどうだ?
135 名前:デフォルトの名無しさん [2006/09/12(火) 17:10:37 ] 初心者の基準を考えよ
136 名前:デフォルトの名無しさん mailto:sage [2006/09/12(火) 20:17:27 ] procedure TForm2.Button1Click(Sender: TObject); begin Button1.Visible:=not Button1.Visible; Button2.Visible:=not Button2.Visible; end; procedure TForm2.FormCreate(Sender: TObject); begin Button2.OnEnter:=Button1Click; Button2.Visible:=False; end;
137 名前:デフォルトの名無しさん mailto:sage [2006/09/12(火) 20:18:58 ] あ、途中で書き込み押しちゃった >>136 は>>129 への回答です 短くなるように工夫しました 採点お願いします
138 名前:デフォルトの名無しさん [2006/09/12(火) 20:25:08 ] わざわざコードで Button2.OnEnter:=Button1Click; Button2.Visible:=False; をする必要が無い。 0点。
139 名前:デフォルトの名無しさん mailto:sage [2006/09/12(火) 20:30:07 ] そりゃプロパティでも出来るけどあえて明示してるんでしょうが。
140 名前:デフォルトの名無しさん mailto:sage [2006/09/12(火) 20:42:49 ] ほかにもフォームの位置とかサイズとか、明示しろよ。
141 名前:デフォルトの名無しさん mailto:sage [2006/09/12(火) 20:54:32 ] こりゃいかん。
142 名前:デフォルトの名無しさん mailto:sage [2006/09/12(火) 21:10:23 ] てゆうか先生!なんでOnEnterやねん!Clickや!! と突っ込むところではないの?
143 名前:デフォルトの名無しさん mailto:sage [2006/09/12(火) 21:12:52 ] ほんとだwwww
144 名前:デフォルトの名無しさん mailto:sage [2006/09/12(火) 22:23:37 ] TD2006ってコンポにフォーカスさせてF1押してもヘルプでないよね
145 名前:デフォルトの名無しさん mailto:sage [2006/09/12(火) 23:28:50 ] しらねぇよ。Del6per の方がましだし、そんなの使うヤツの気が知れん
146 名前:デフォルトの名無しさん mailto:sage [2006/09/13(水) 03:30:32 ] procedure TForm1.Button1Click(Sender: TObject); const FILE_URL = '203.131.199.131:8060/koreiina '; FILE_PATH = 'test.mp3'; var fs: TFileStream; begin fs := TFileStream.Create(FILE_PATH, fmCreate); try with IdHTTP1 do begin Get(FILE_URL, fs); end; finally fs.Free; end; end;
147 名前:デフォルトの名無しさん mailto:sage [2006/09/13(水) 08:14:13 ] >>145 可哀そうに
148 名前:デフォルトの名無しさん mailto:sage [2006/09/13(水) 11:33:34 ] TDって略すとTurbo Debuggerかと思ってしまう俺。 (さすがにTokyo Disnylandとは思わないが)
149 名前:デフォルトの名無しさん mailto:sage [2006/09/13(水) 19:35:33 ] >>144 可哀そうに
150 名前:デフォルトの名無しさん mailto:sage [2006/09/13(水) 21:21:06 ] >>134 iniファイル読み書きの習作をつくってみました 普通にファイルの読み書きするより簡単かもしれない ちょっと感動!! procedure TForm1.Button1Click(Sender: TObject); var iniFile: TInifile; begin iniFile:=TIniFile.Create('ook.ini'); try count:=iniFile.ReadInteger('CounterApp', 'Count', 0); Inc(count); iniFile.WriteInteger('CounterApp', 'Count', count); finally iniFile.Free; end; ShowMessage(IntToStr(count)); end;
151 名前:デフォルトの名無しさん mailto:sage [2006/09/13(水) 21:30:06 ] フルパスつかっとけ
152 名前:デフォルトの名無しさん [2006/09/13(水) 22:06:31 ] EXEファイルと同じフォルダが前提ならそのままがいいと思うが。
153 名前:デフォルトの名無しさん mailto:sage [2006/09/13(水) 22:39:21 ] >>152 お前はそのままでいいよw
154 名前:デフォルトの名無しさん mailto:sage [2006/09/13(水) 23:24:42 ] >>152 は、今後大変だな・・・
155 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 00:35:54 ] >>150 お主、俺を超えたな!?
156 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 04:04:15 ] カレントディレクトリが変わるたびに、あちこちにいっぱい ini をつくるけどね
157 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 05:19:24 ] TIniFile って相対パス渡すとプロファイルフォルダに作られなかったっけ?
158 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 07:56:03 ] なんにせよそういう不安定要素は削除しないとな
159 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 10:09:08 ] >Delphiで無料でプログラミングしてみるお >ttp://pc8.2ch.net/test/read.cgi/tech/1139675970/239 >ソースと実行ファイル >vipperup.orz.hm/miniup/src/viup0403.zip これって、もう手に入らないの?
160 名前:デフォルトの名無しさん [2006/09/14(木) 16:02:35 ]
161 名前:デフォルトの名無しさん mailto:sage [2006/09/29(金) 18:21:31 ] 授業を受けに来たのに先生がいませんよ。有給ですか?
162 名前:デフォルトの名無しさん mailto:sage [2006/09/29(金) 18:37:24 ] >>132
163 名前:デフォルトの名無しさん mailto:sage [2006/10/06(金) 22:25:29 ] 別のアプリケーションにエンターキーを送りたいのですが、アプリケーション側でなにか 対策をしているらしく、keybd_event ではエンターキーだけが認識されません。 (そのアプリ上でエンターキーを直接押せば認識される) こういった場合、どのようにすればいいのでしょうか?
164 名前:163 mailto:sage [2006/10/06(金) 22:49:19 ] >>163 すみません、、、スレ間違えました。別スレに行ってきます。
165 名前:デフォルトの名無しさん [2006/10/16(月) 03:02:58 ] Delphiで Vbでいうところの Validate イベントを実現したい。 どうすればいい? Procedure TXXXXX.OnValidate(Sender : TObject;Cancel : Boolean); Cancel := True; とすれば、フォーカスが抜けないようにする。 どうやったらできるんだろう? TEdit を継承して、 WndProc を オーバーライドして CM_EXIT をフックしてみた。 TEdit ではうまくいったが TComboBox ではうまくいかなかった(DropDownList では おk で DropDown ではNg だった)。 誰か経験者か、うまいやり方知ってるひと教えてください。
166 名前:デフォルトの名無しさん mailto:sage [2006/10/16(月) 09:10:19 ] やったことないけどOnEnterでValidateすべきかどうか(どこかで)設定しといて WM_KILLFOCUS受け取ったときに上記状態なら指定されたところにチェックしにいくとか
167 名前:デフォルトの名無しさん mailto:sage [2006/10/16(月) 09:25:28 ] OnChangeかOnExitの時に、 Cancel=Falseなら、Combobox.setfocus
168 名前:デフォルトの名無しさん mailto:sage [2006/10/16(月) 10:42:34 ] procedure TForm1.hogeExit(Sender: TObject); begin チェック処理 if エラー then begin Enabled := False; Application.ProcessMessages; Enabled := True; hoge.SetFocus; end; end;
169 名前:デフォルトの名無しさん [2006/10/16(月) 16:57:31 ] TPrinterで印刷の集約指定等の設定変更できますか?
170 名前:デフォルトの名無しさん [2006/10/16(月) 17:36:53 ] 印刷設定ダイアログ結果をWindowsに反映する方法教えて下さいでつ。
171 名前:デフォルトの名無しさん [2006/10/17(火) 01:33:57 ] >>166 ありがとうございます。 WM_KILLFOCUSでも同じでした。 >>167 ,168 ありがとうございます。 TComboBox の派生クラスに OnValidate イベントを実装したいのです。
172 名前:デフォルトの名無しさん [2006/10/19(木) 10:09:05 ] DoExitをオーバーライドするのはどうですか? procedure TMyCombo.DoExit; var Cancel: Boolean; begin if Assigned(FOnValidate) then begin Cancel := False; FOnValidate(Self, Cancel); if Cancel then begin SetFocus; Exit; end; end; inherited; end;
173 名前:デフォルトの名無しさん [2006/10/19(木) 10:47:13 ] Delphi7 SQLServer2000 使用です。 exceptにて、EDatabaseErrorが発生した場合に、 そのエラーNoを取得したいのですが、どのように書けばよいのでしょうか? 現時点では下のように書くところまでやりました。 except on E: EDatabaseError do begin Result := False; end; end;
174 名前:デフォルトの名無しさん mailto:sage [2006/10/19(木) 11:09:58 ] >>173 いろいろ考えられるね。 ・E.MessageにエラーNoが入ってるならそこから抽出する。 ・E.ErrorNoみたいのがあるならそれを使う。 ・SQLServer2000にGetLastDBError見たいな関数があるならそれを利用する。
175 名前:デフォルトの名無しさん mailto:sage [2006/10/19(木) 11:19:34 ] >>173 BDE使ってるならEDBEngineErrorでcatchすれば エラーの詳細が取れるけど。 どうやって接続してるの?
176 名前:173 [2006/10/19(木) 11:24:15 ] >>174 すみません、もっと根本的な問題だったようです。 やりたいことは、レコードロックによるタイムアウトエラーを取得したいのですが、 タイムアウトはEDatabaseErrorではないようです。 タイムアウトはEDatabaseError以外のどのExxxErrorでとれるのでしょうか?
177 名前:173 [2006/10/19(木) 11:25:55 ] >>175 データモジュールにADOConnectionを貼り、ADOQueryで実行しています。
178 名前:デフォルトの名無しさん mailto:sage [2006/10/19(木) 11:35:44 ] >>176 そこまで細かいことは自分で調べちゃった方が早くね?
179 名前:デフォルトの名無しさん mailto:sage [2006/10/19(木) 11:46:42 ] >>176 on E: Exception で捕まえて、E.ClassNameを調べる
180 名前:173 mailto:sage [2006/10/19(木) 15:30:24 ] >>178 、179 ありがとうございました。 調べたところ、EOleExceptionと出ました。
181 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 19:10:27 ] SyncObjsの中にあるTCriticalSectionですが、 EnterとAcquire、LeaveとReleaseの違いは何ですか? いろいろ試した限りでは同じ処理に見えるのですが・・・
182 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 22:59:27 ] >>181 ヘルプ見た? その上で動作が同じだと判断するなら同じなんです 深く考えすぎないほうが良いかと
183 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 22:23:11 ] >>182 TCriticalSectionのページに行こうとしても、 リンクがみつかりません って出るんですよ 無料のDelphi6だからかな? まぁ気にしないことにします
184 名前:デフォルトの名無しさん [2006/11/07(火) 11:13:41 ] QuickReport印刷内容をビットマップ(Jpegでもおk)に落とす方法教えて下さい。
185 名前:デフォルトの名無しさん mailto:sage [2006/11/07(火) 18:24:07 ] そういうプリンタドライバがあるよ
186 名前:デフォルトの名無しさん [2006/11/23(木) 13:53:16 ] リレー動作のプログラムなんですが64個のリレーを チェックボックスに分けて選んでリレーを ON/OFFしたいんですが procedure TForm1.Button1Click(Sender: TObject); begin Relay[Time]:=True; Time:=Time+1; RelayChange; end; これからどう増やせばいいでしょうか? どうかよろしくお願いいたします。
187 名前:デフォルトの名無しさん mailto:sage [2006/11/23(木) 20:25:23 ] >>186 日本語でおk
188 名前:デフォルトの名無しさん [2006/11/25(土) 17:27:49 ] IsDelphiで、このソフトが、Delphi製とでるのですが、 www.highdots.com/css-tab-designer/ オフィスっぽいGUIは、どんなコンポーネントを使っているんでしょうか?
189 名前:188 [2006/11/25(土) 17:28:27 ] すみません。超初心者スレと間違えました(汗
190 名前:デフォルトの名無しさん mailto:sage [2006/12/25(月) 17:35:38 ] コンストラクタ内で例外を発生させるのってまずい? 自作クラスのコンストラクタの引数で作業フォルダのパスを指定して フォルダが存在しなければ作成ってのをやろうと思うんだけど、 try〜finallyの手前でCreateすると例外が発生したときに例外を捕まえられないし try内の先頭でCreateするとコンパイルで「初期化されていない可能性があります」と警告が出る。 コンストラクタは内部変数の初期化だけにしておいて 作業フォルダのパス指定は別メソッドにしておいたほうがいいのだろうか・・・
191 名前:デフォルトの名無しさん mailto:Tage [2006/12/25(月) 19:14:46 ] >>190 try Create try hoge finally hoge end; finally hoge end;
192 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 14:20:58 ] >190 Delphiにおいてはコンストラクタ内で発生して捕捉されない例外は コンストラクタの失敗を意味する。
193 名前:デフォルトの名無しさん [2007/01/06(土) 19:54:05 ] hosyu
194 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 03:40:04 ] 2chブラウザのJaneみたいな動かせるメニューバーってどうやって作ったらよいのでしょうか。
195 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 03:58:26 ] >>194 TCoolBar のバンドの .Control に TToolBar 設定して、 TToolBar.Menu に TMainMenu 設定。
196 名前:デフォルトの名無しさん [2007/01/31(水) 17:58:13 ] Bitmap画像をレイアウト部分はコーディングでなくてポトペタで作成したいのですが、 良い方法はありますか? QuickReportで良いのですがQuickReportは汎用画像出力が出来ないので...
197 名前:196 [2007/01/31(水) 19:05:07 ] そういう機能をレポーティング コンポーネントって言うらしいですね。 でもWin32用が無いお。
198 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 23:11:14 ] >196 日本語でおk
199 名前:デフォルトの名無しさん [2007/01/31(水) 23:15:30 ] グラフィックソフトとか、ワープロでつくるようなをDelphiでやりたいんじゃないの? で、最終的に、印刷じゃなくて、画像にしたいと。
200 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 07:58:21 ] .netを普及させる方法を思いついた! win32に、WCaption: WideString みたいなメンバを追加して さらにくそでかく遅いバイナリしか生成できなくする。 これなら.netでいいや、ってなりwin32死滅。
201 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 16:54:35 ] 日本語でおk
202 名前:入門きぼん mailto:sage [2007/03/18(日) 23:52:34 ] すみません。教えて下さい。 DelphiTurboExplorerを、サイトからDLして使用したいと考えているのですが、 ユーザー登録をすませても、DLページに行けずに困っています。 それと、フリーのデーターベースであるFirebirdと 繋げられるのでしょうか? やはり製品版でないと無理なのでしょうか? 自分は、単純に初心者向けプログラムである。 CDやDVDの在庫管理アプリを作りたいだけなんですが、 自分の労力以外は、極力フリーで作りたいと思っています。 可能でしょうか? 宜しくお願いします。
203 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 00:54:43 ] www.turboexplorer.com/downloads
204 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 01:06:50 ] >>203 The page cannot be found
205 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 06:01:06 ] www.turboexplorer.com/mirror
206 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 11:33:22 ] >>204 ,205 HTTP Error 404 - File or directory not found.
207 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 20:46:50 ] ttp://torrent.borland.com/turbodelphi_jp.exe
208 名前:202 mailto:sage [2007/03/19(月) 21:55:11 ] >>207 すみません。 やはりHTTP Error 404 - File or directory not found.になります。 みなさん、ありがとうございました。 残念で、悲しいですが、すみませんがDelphiあきらめます。
209 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 22:07:23 ] 繋がるけどなぁ www.codegear.com/tabid/144/Default.aspx
210 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 00:22:27 ] >203 >205 >209は普通に繋がるね。
211 名前:デフォルトの名無しさん [2007/03/21(水) 07:19:26 ] 普通につながるけど?
212 名前:デフォルトの名無しさん [2007/03/21(水) 23:56:26 ] 条件文がたくさんあって、それらを同じ処理するときはどうしたらいいですか? ifのあとに条件をズラーッとandでくっつけるしかないのでしょうか? 例えばxが1 3 5 6 7 10・・100と不規則なときに、一定の動作をさせたいです。
213 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 00:14:26 ] case x of 1,3,5,6,7,10,100: 〜〜'; else 〜〜; end;
214 名前:デフォルトの名無しさん mailto:sage [2007/03/22(木) 07:13:44 ] if x in [1,3,5,6,7,10..100] then XX; ってのもあるよ
215 名前:デフォルトの名無しさん [2007/03/22(木) 14:14:54 ] 二次元配列があり地図のようになってるとします。 その時に●から一番近い5(複数ある)への経路を求める問題。 マスは30*30 ●は(16、16) 0は通れる、1は通れない、4はいやな人 で、5の周りに4がいた場合それは目的の5にはなりません。 000000000000000000000000000000 000000000000000000000000000000 000000111100000000050000000000 000000001100000000000000000000 000000000100541110000000000000 000000000000111111000000000000 000000000000000000000000000000 001100000000000000000000000000 00000000000000●000000000000000 000100000000000000000000000000 000100000000000111111110000000 000000000000000000000000000000 000000500000000000050000000000 000000000000000000000000000000 000000000000000000000000000000
216 名前:デフォルトの名無しさん mailto:sage [2007/03/23(金) 12:23:28 ] >>215 2chのレス数じゃ無理w 試しに幅優先探索して書こうとしたら、600行超えたからやめたw
217 名前:デフォルトの名無しさん mailto:sage [2007/03/23(金) 17:39:42 ] >>215 たけしのコマ大かと思った・・・。 斜め移動はあり? 地形は固定? 障害物1等のオブジェクトは、定数? つっこむ所が多々ありそうだなぁ。
218 名前:デフォルトの名無しさん mailto:sage [2007/03/24(土) 19:35:42 ] >>215 普通にA*でいいんじゃないの? >>216 600行はありえん。
219 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 00:12:27 ] >>217 俺は斜め移動無し、固定でMAPはファイルからそのまんま読み込んだ状態としたよ んで、今の箇所から上下左右で自分の関数を呼び出して、再起関数にして探してった。 でもこれじゃ全数検索になってしまう。 こういうアルゴリズム習ったけどやり方有ってるか不明 >>218 A*って何?
220 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 04:42:33 ] 工場勤務でブルーワーカなのだが、明日から夜勤なので睡眠時間調整の 暇つぶしに >>215 をやってみた。5時間かかったお。 再帰呼び出しとかは使えないし分からんので、長めになっちゃった。 キュー(FIFO)をやってみようと思って、ポインタとか使ってみたけど訳分からん。 ttp://strawberry.web-sv.com/cgi/up/iuy/nm4383.zip.html (フォームにボタン1個要) だって、MC工作機械マクロ言語に再帰呼び出しとかポインタなんて無いよ orz あ、でも、なんちゃってポインタは出来るかな? #(#10) な感じで。
221 名前:デフォルトの名無しさん [2007/03/25(日) 07:25:37 ] A Starでやれ
222 名前:デフォルトの名無しさん mailto:sage [2007/03/27(火) 02:25:05 ] 昔Delphi6触ったときにはたしか標準でフォルダ選択ダイアログってなかったような気がするんですが TurboExplorerにもなかったりします?
223 名前:デフォルトの名無しさん mailto:sage [2007/03/27(火) 06:53:37 ] SelectDirectoryなら昔からあったと思うが? 名前がセレクトフォルダじゃないからダメなの?
224 名前:デフォルトの名無しさん mailto:sage [2007/03/28(水) 09:12:04 ] Delphi6のSelectDirectoryはダイアログの表示位置がずれるバグがあるんだよな
225 名前:デフォルトの名無しさん mailto:sage [2007/03/28(水) 09:45:16 ] バグじゃないよ、たんに場所指定してないだけ。ML の過去ログやら、コンポ で解決したのがわんさかあったけど、いまは知らない
226 名前:デフォルトの名無しさん mailto:sage [2007/03/28(水) 09:54:17 ] まあ、フォルダのD&Dに対応しとけば、みんなソレ使うから SelectDirectoryはとりあえずあればいいやみたいなもんだし
227 名前:デフォルトの名無しさん mailto:sage [2007/03/28(水) 21:40:15 ] uses FileCtrl; procedure TForm1.Button1Click(Sender: TObject); var dir: string; begin MoveWindow(Application.Handle , Left ,Top ,0 ,0 ,False); SelectDirectory('表題', '', dir); Label1.Caption := dir; end;
228 名前:215 mailto:sage [2007/03/29(木) 09:06:36 ] >>220 遅くなったがサンクス! ただ、速度おっそいなぁw
229 名前:デフォルトの名無しさん [2007/03/31(土) 10:40:58 ] 保守
230 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 19:52:37 ] 現在BDEで作成されているものをFirebirdに簡単に変更できるものでしょうか Firebirdはまだ触ったこともないし、BDEもそのとき玉々作ってみただけの データベース素人ですが。
231 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 13:26:52 ] >>230 どういう作りになっているのかにも寄るけど 簡単には無理じゃね。
232 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 20:33:05 ] >>231 ありがとうございますm(_ _)m やっぱ作り直しですか。
233 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 20:57:31 ] いや、普通にコンポーネント貼り付けて作ってるなら InterBase Data Access に変えるだけで問題ないだろし そうでないなら、それなりに大変だろうってだけさ
234 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 21:59:34 ] やってみまふ。
235 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 13:29:14 ] ヒント: Firebird ODBCドライバ
236 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 20:04:01 ] 今しばらくは生きていけそうです
237 名前:疑問 mailto:sage [2007/04/16(月) 02:52:02 ] なんでIntegerとかが予約語になっていないのでしょうか var Integer: string; begin Integer := 'Double'; Writeln(Integer); end.
238 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 08:03:01 ] Integerは予約語ではないけど定義済の型名だから 変数として使うと、 使った後整数型の定義とか、型変換とかで困ってしまうよ 他の型名とか自分で定義する型名も同じ事情があるよ。
239 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 16:19:27 ] 回答になってねぇw
240 名前:デフォルトの名無しさん [2007/04/16(月) 23:21:03 ] >>237 なんでだろ。 Windows.hとかのCからコンバートしたときのための兼ね合い? 似たようなので、引数でも例外あったような
241 名前:名無し@沢村 [2007/04/17(火) 00:10:20 ] おみゃーらー♪ Delphiはつまらんぞー! おみゃーたー、『肥えた語』つー言語があるの知ってる? おりは知ってるよ。 おりがつくった言語よ。これからh『肥えた語』の時代よ。 URLはここよ↓ www.geocities.jp/hontamagod/ 感想を頼むなー♪
242 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 22:52:08 ] JEDI がDelphi2005にインストールできません。 以前入れたときは確か、すんなり入ったのですが。 ..\JEDI\jvcl\run\JvJVCLUtils.pas(7359) エラー: E2010 'Char' と 'string' には互換性がありません ..\JEDI\jvcl\run\JvJVCLAboutForm.pas(115) 致命的エラー: F2063 '..\..\run\JvJVCLUtils.pas' ユニットはコンパイルできませんでした ほかにも出てきます。 pas は秀丸では欧文フォントで文字化けなしに読めたんですが「TM」とかの特殊文字が ○株みたいに扱われているんでしょうか、Shift-Jis ではChar扱いしてもらえないようです。 OSは Vista D5 にはインストールされています。 m(_ _)m
243 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 23:02:28 ] せめてバージョンくらい書こうよ・・・
244 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 23:05:38 ] すんません、JVCL320CompleteJCL197-Build2172.zip でした。
245 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 23:07:22 ] なんでそんなに古いのを入れようとしてるの?
246 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 23:17:26 ] そんなに古いのー?
247 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 23:18:12 ] すみまそん。 しばらくD5で使ってたのでそれをそのままフォルダからインストールしようとしてました。
248 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 23:19:48 ] それだとD5でコンパイルされたファイルと混じっておかしくなるんじゃない?
249 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 23:28:30 ] やっぱそうですか。 はき出す場所が違うからOKだと思っていたのですが、 とりあえず2005には最新版を入れてみます。
250 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 20:28:58 ] JVCL331CompleteJCL199-Build2551.zip 入れてみましたが状況は変わりませんでした(x.x)
251 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 21:14:09 ] 前にインストールしたときのゴミが残ってるんじゃないかね。 とりあえずJcl*.bplとJv*.bplを削除してみたら?
252 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 21:28:50 ] ってことは皆さん問題なく入れていたということなんでしょうね。 結局使わない部分っぽかったので修正して無理矢理入れてしまいました。 JvgUtils.pas function Transliterate(const Str: string; RusToLat: Boolean): string; コメントアウトで Result := Str; JvDBGrid.pas FCharList := ['A'..'Z', 'a'..'z', ' ', '-', '+', '0'..'9', '.', ',', Backspace{, 'e', 'e', 'e', 'e', 'o', 'o', 'u', 'u', 'a', 'a', 'a', 'i', 'i', 'c'}]; 下半分をコメントアウト JvJVCLUtils.pas // Text: Char; Text: string[2]; Char を string に変更 JvStrToHtml.pas 特殊文字 27 個コメントアウト ありがとうございましたm(_ _)m
253 名前:デフォルトの名無しさん [2007/04/24(火) 21:35:10 ] Delphi5って、サポートされてたっけ?
254 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 22:06:55 ] されてる。
255 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 22:44:22 ] JCL/JVCLって昔試したときマルチバイト文字に対応してなかったような記憶が あったようななかったような・・・
256 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 23:15:42 ] コンポーネントによってされてたりされてなかったりだね。
257 名前:デフォルトの名無しさん [2007/06/18(月) 23:36:07 ] コンポーネントがDesignideを使っててコンパイルできなくなるとかの 問題でずっと悩まされてます・・・ 古いIDE組み込み型のコンポーネントって 新しくなるとコンパイルが通らなくなる・・(泣 Designideで悩まない方法はありますか?
258 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 05:33:00 ] D6パーではHelpに書いてある。互換性の問題
259 名前:ミ,,゚Д゚ミノ ◆A6VzDeLphI mailto:sage [2007/06/19(火) 14:05:42 ] こんなんでよい? -- DsgnIntfが見つからない場合 -- コンポーネントをインストールするときに DsgnIntfが無いといってエラーになる場合があります。 Delphi5からDsgnIntf.dcuのコンパイル済みユニットが 無くなったからこのような現象が起きるそうです。 Delphi6からはDesignIntfという名前に変更されています。 DsgnIntf Unit はおもに、コンポーネントエディタやプロパティエ ディタを作るときに利用するものです。 「環境オプション/ライブラリパス」に $(DELPHI)\Source\Toolsapi を追加してみましょう。 解決するはずです。 本当は、この方法を用いるとプロパティエディタのコードが 実行ファイルに含まれてしまうので、そういう書き方をしている コンポーネントが悪いので、自分の作る物ではこういう問題が発生しないように 気をつけましょう。 参照──────────────────── [Delphi:42979] Delphi5 変更点 www2.big.or.jp/~osamu/Delphi/browse.cgi?index=42979
260 名前:デフォルトの名無しさん [2007/06/21(木) 20:49:16 ] Delphi7を使ってます。 designide.dcuが見つからないという エラーが出てしまいます・・orz
261 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 22:17:40 ] そうですか
262 名前:デフォルトの名無しさん [2007/06/28(木) 07:12:16 ] TUIWebBrowserで読み込んだFlash上の入力ボックスで BackSpaceキーは効くものの Enterキーがきかないのですが 効くようにすることは可能でしょうか?
263 名前:デフォルトの名無しさん [2007/06/30(土) 08:58:54 ] >>259 ありがとうございます。 いろいろいじっていて 実行時パッケージでない方でビルドできました。
264 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 22:34:43 ] ナッキーのdelphi奮戦記面白い 間違いなくナッキーは淫乱 ペイントソフト楽に作れ杉
265 名前:デフォルトの名無しさん [2007/07/04(水) 09:36:13 ] TShapeじゃなくて、ラインをペタペタ貼るコンポーネントありましたっけ?
266 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 09:44:58 ] 直線だけなら OnPaintに Canvas.MoveTo Canvas.LineToで簡単に引けるから需要無いかと
267 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 09:49:35 ] Delアメ猫だったかの人がフサギコと絡んで、マウスで直線を動かせるようなコンポーネントの原型を作って どっかにアップしてたように思うのだけど、今検索してもみつからないな
268 名前:265 mailto:sage [2007/07/04(水) 09:55:01 ] >>266 やっぱ、そうですか。 >>267 >マウスで直線を動かせるようなコンポーネントの原型を作って 欲しいもの、これですorz
269 名前:ミ,,゚Д゚ミノ ◆A6VzDeLphI mailto:sage [2007/07/04(水) 10:54:14 ] HDDに、原型のやつがあったよ。 検索に1時間ほどかかってしまた。
270 名前:265 mailto:sage [2007/07/04(水) 11:00:48 ] >>269 デルフサギコ様、うpをお願いしますorz コンポーネントのソースは読めるので、 手直しとか派生くらいできますし、 使いこなせると思いまつ。
271 名前:ミ,,゚Д゚ミノ ◆A6VzDeLphI mailto:sage [2007/07/04(水) 11:00:59 ] 実行時にマウスで動かせた矢印コンポもあったような気がするんだけど 手元にあるのはShapeの矢印版っすね。 majunarrowexとか、viArrow.pas って名前だけど、googleではでないみたいだ。 とりあえずうpろうか。午後くらいでよい?
272 名前:265 mailto:sage [2007/07/04(水) 11:03:42 ] >午後くらいでよい? ずっと待ってまつ。 希望では、以下の機能も欲しかったり。。。 ・マウスで動かせる ・マウスで長さが変えられる ・移動や長さが変ったときに、Changeイベント ・矢印をオフにして単なるライン化
273 名前:ミ,,゚Д゚ミノ ◆A6VzDeLphI mailto:sage [2007/07/04(水) 11:09:05 ] delfusa.main.jp/compo/majunarrowex.zip いや、はようpっとくよ。 もっといいものをつくってくれた人もいたきがするんだが... あの時期てきにホットゾヌの作者の中の人だった気がするが 確証無しで。 このコンポ、いったい誰作なんだろう...中国の方かしら。
274 名前:ミ,,゚Д゚ミノ ◆A6VzDeLphI mailto:sage [2007/07/04(水) 11:11:48 ] 設計時なら >・マウスで動かせる >・マウスで長さが変えられる 桶 >・移動や長さが変ったときに、Changeイベント わからない。というか、Resizeイベントはなさそうだから どっちにしても自作だね。 >・矢印をオフにして単なるライン化 なぜか出来ないみたいだ。 改造すれば簡単でしょう。
275 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 11:20:24 ] コレの事? delwiki.info/?c=plugin;plugin=attach_download;p=%A5%B3%A1%BC%A5%C9%C1%D2%B8%CB%2FDraw%A5%B3%A5%F3%A5%DD%A4%CE%B8%B6%B7%BF;file_name=MyDraw.pas
276 名前:265 mailto:sage [2007/07/04(水) 11:27:46 ] >>274 >>275 サンクス! 両方ダウソしました。 どっち使うか決めなきゃ。。。
277 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 11:53:46 ] >>273 ・1個だけ ・設計中のみ変更可能 ・コードはシンプル >>275 ・複数のラインやオブジェクトが1コントロールに入る ・フォームにフックさせて最下面に無理やり描画するのも出来る ・実行中に移動等も可能 ・出来る事が大きいだけに、けっこう複雑
278 名前:265 mailto:sage [2007/07/04(水) 11:56:32 ] >>277 サンクス どっちもクセ多杉orz やりたいことは275なんだけどメッセージフック&インライン汗と、 何かあったとき対処できるかなとドンビキ。 273に275のコード混ぜるかなぁ。。。
279 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 12:06:35 ] >>275 には コンポが2つ入っていて、片方は TGraphicControl でメッセージフックは使ってない。 インラインアセンブラの部分はたぶん変更しなくていいいだろう。 ただ、文字を回転させるのに端ではなくて 真中というのは、チョットとまどった あと、DesignProcでマウス応答全部やってるので 右ボタンメニューに対応させるとか、ココでやらんとあかんのかも
280 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 12:50:49 ] アセンブラの部分は 浮動小数点に置き換えたらいいんじゃないの? iHypot -> math.Hypot で代用 MulSubDiv はコメント通りに浮動小数点で計算させる
281 名前:265 mailto:sage [2007/07/04(水) 13:02:06 ] 汗は汗のままでも良いです。 >あと、DesignProcでマウス応答全部やってるので この作り、拡張性大丈夫かなぁ。
282 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 13:11:00 ] WndProc で inherited してるから大丈夫じゃないの? 気になるなら、それぞれ分けたらいいだけで ひとつはデザイン中だけ処理させる判定を1箇所にまとめたかったのと、 TMyFormDraw と TMyDraw の両方で使いたくてコピペが楽だからそうしたんだろな
283 名前:265 mailto:sage [2007/07/04(水) 13:19:59 ] >WndProc で inherited してるから大丈夫じゃないの? 了解でつ。 このコンポってStringsの中身をLines1つにすれば1本の線になるんですね。 動きも面白いし、機能は完璧。 最期の悩みは、このまま使うか、Linesプロパティを削除して、1本の線のコントロールとサブセットコントロール化するか。。。
284 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2007/07/04(水) 13:21:48 ] ∩ ∩ ミ ゙''゙〜 ________ ミ∧,,∧ / ミ,,゚Д゚彡 < おお。あったですかぁ。 U U \あっててよかったDelWiki新  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ こういうのって、コンポインストールしないとサンプルプログラムが コンパイルできない形になってて、非常に面倒よね〜 コンパイルしたsample.exeを是非に付けて欲しいもので。 まあ、漏れも付けてないんだけど。 それにしても、MyDraw....すごすぎだな。 (って何年も前にも言った感じがとてもデジャブー) >>283 さん 贅沢な悩みだな。(w みつかってよかったね。
285 名前:265 mailto:sage [2007/07/04(水) 13:25:23 ] >>284 有難う。 デルフサさんて、一時期見かけなかったような。。。
286 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 13:27:30 ] MyDraw1.Lines.Add('LINE'); で実行中に、線を増やせるね。
287 名前:|Д゚彡 ◆A6VzDeLphI mailto:sage [2007/07/04(水) 13:30:56 ] いつもひっそりと 草葉の陰から見つめているんですよ。
288 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 15:13:17 ] >>コンパイルしたsample.exeを是非に付けて欲しいもので。 そんな物、ダウソして実行する馬鹿がいたら是非お目にかかりたい物でwwww
289 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 18:28:34 ] たくさんいますよ
290 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 19:37:14 ] 何か呼ばれた気がしたので来ました。
291 名前:デフォルトの名無しさん [2007/07/04(水) 20:00:09 ] デモには、実行ファイルをつけようよ・・・
292 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 21:15:30 ] delwiki.info/?%A5%B3%A1%BC%A5%C9%C1%D2%B8%CB%2FDraw%A5%B3%A5%F3%A5%DD%A4%CE%B8%B6%B7%BF ココに、サンプル書いてみた。 右ボタンで削除出来るようにコンポ側に少し追加もした でも、コレ、誰がItemのオブジェクト削除してくれてるんだろ? テキストを変更してもメモリリークしないんだろか?
293 名前:初心者++ [2007/07/05(木) 00:11:28 ] いきなり割り込んで書き込みます、すいません。 初心者です。データベースの接続で困ってます。 TTableのDataBaseNameで サンプルのDBDEMOSでは無事接続できるんですが、 ほかのアリエス名(MSAccess,Excel...)では ログインダイアログでユーザー名 パスワードをきかれ、 先へ進めません。どなたか教えてください。 Turbo Delphi for wind32 OS : wind2000です。
294 名前:初心者++ [2007/07/05(木) 00:15:55 ] いきなり割り込んで書き込みます、すいません。 初心者です。データベースの接続で困ってます。 TTableのDataBaseNameで サンプルのDBDEMOSでは無事接続できるんですが、 ほかのアリエス名(MSAccess,Excel...)では ログインダイアログでユーザー名 パスワードをきかれ、 先へ進めません。どなたか教えてください。 Turbo Delphi for wind32 OS : wind2000です。
295 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 16:25:33 ] >>294 ttp://www.lares.dti.ne.jp/~hida/tips/bde_MSACCESS.htm
296 名前:デフォルトの名無しさん [2007/07/05(木) 16:38:53 ] こんにちは。Delphi製ブラウザコンポーネント (TUIWebBrowser)のFlash上の テキスト入力コントロールでEnter入力が できない問題について質問した者です。 RADながらWin32APIとの親和性, カスタマイズ性が高くアセンブラも使え、 デフォルトコントロールの綺麗さなど、 色々優れた点がある中で、生産コストを下げる目的で Delphiを選ぶときについて意見をお伺いしたいです。 ブラウザを作る際に、 まずTWebBrowserを使ってみて、入力に関する 致命的なバグがあったために、そのバグを修正した TUIWebBrowserを使ったのですが、 そこでまた入力バグに出会ってしまい、 これらの問題が、VC++での開発でははじめから起きない 問題であったために、VC++で作り直すべきか考えています。 流通しているDelphi製のブラウザ系ソフトにも同じバグが見れました。 しかし、作りやすいので本当はDelphiを使いたいです。 Delphiで、資料やバグフィクス情報が無く、 節約できるはずの時間が、逆に冗長になるケースを考慮したとき、 そういった面を考えても、Delphiの生産性を活用するためには どういったことが必要になりますでしょうか。 Delphi開発の先輩である皆さんに お考えをお聞かせ願いたいです。
297 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 17:19:12 ] >そういった面を考えても、Delphiの生産性を活用するためには >どういったことが必要になりますでしょうか。 VCLコードを読んで理解する事。
298 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 17:46:02 ] VC++で解決出来るんなら、 それを見て自分で修正すればいいんじゃないの? でも、たぶん VC++でも色々拡張しようとすると、いろんな問題が出ると思うよ。 他人の作ったコードをソース無しに使おうってんだから当然だ。 TWebBrowser ならともかく TUIWebBrowser は使ってる人が少ないだろうし さらに Flash となると、問題に答えてくれる人は少ないと思うよ。 >>262 の問題は メッセージポンプの所で流れてるメッセージ を(Application.OnMessage とかで)見て、なんとか出来ないか考えてみたら?
299 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 17:47:05 ] ActiveX や OLEControl の制御は VCL のソースを読んでも、個人レベルでは 解決は難しい。TWebBrowser やその派生コントロールは、Delphi で簡単に 使えるように見えるが、Delphi での細かい制御が一番面倒なもののひとつ。 VC++ でできるなら、そっちでやればいいでしょう。
300 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 17:49:23 ] いまさらだがMLに投げてみりゃよかったのに。
301 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 17:54:18 ] まぁなんでもMLに投げてみりゃいいんだよな。
302 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 18:45:41 ] Delphi TWebbrowser Enter ぐぐれかす
303 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 19:02:10 ] >>302 TWebBrowserのバグを回避した TUIWebBrowserでFlashActiveX上のコントロールを経由した ときだけ起こるって言ってるし TWebBrowserの有名な入力バグは普通もう回避してるだろう。
304 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 22:25:45 ] コード量が短いので>>273 を参考にして勉強中のものです。 そこで質問です。>>273 の .dfm に記述されたコードを .pas側で実行時に自動生成する 形に書き直すと、どういう風になりますか?じぶんはテキスト エディタ派なのでコードの編集はできればテキストエディタで やりたいとです。。。 プロジェクトを立ち上げると、 フォーム作成中にエラーが発生しました。(中略) クラス TviArrowが見つかりません とか出て上手くゆかなかったとです。 viArrow.pas をプロジェクトに追加して プロジェクトを再構築。でコンパイルしたら実行 ファイルのほうは簡単にできてちょっと感動したとです。ひろしですひろしですひろしです
305 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 22:39:05 ] >>304 なあ、こっちも実行してみてくれ。 delwiki.info/?c=plugin;plugin=attach_download;p=%A5%B3%A1%BC%A5%C9%C1%D2%B8%CB%2FDraw%A5%B3%A5%F3%A5%DD%A4%CE%B8%B6%B7%BF;file_name=MyDrawSample.lzh
306 名前:304 mailto:sage [2007/07/05(木) 23:07:33 ] >>305 1000行越えのコードの解読は厳しかったとです orz
307 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 07:39:12 ] >>304 .dfm にはコンポーネントのプロパティが入っている。 実行中に位置やサイズを変更したいなら、 Left, Top, Right, Bottom をコードで弄る必要がある >>305 のは、コンポーネントを登録しなくてもいいように作られている 位置やサイズは文字列で与えてるようだ
308 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2007/07/06(金) 09:35:55 ] ∧,,∧ オハヨ ミ,,゚Д゚彡 ミ つ旦)~~ 〜と,,,~),,~) 旦~~ ]]]]]]]]]]]]]]]]]]]]]]]]]]]] 自動生成する形になってて、いいっすね >>305 さん どうせなら、バイナリも含んじゃえばいいのに。(w IDE起動するのメンド(い人もいるかもね。) >>307 さん MyDrawコンポーネントは単体で たくさんの矢印や 矩形を処理するようになっていて その位置を元々TStrings系でもっているのですよ。
309 名前:デフォルトの名無しさん [2007/07/09(月) 18:36:58 ] TFormとかTImageってCanvasプロパティがありますよね。 TScrollBoxみたいにCanvasプロパティの無いコンポーネントにお絵かきするには、 どうすれば良いですか?
310 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 22:34:16 ] 1.Canvasがある他のコンポーネント(TImageとか)を貼る。 2.TWinControlから派生したものであれば、さらに派生させてCanvasプロパティをpublicにする。 ん〜これしか思いつかなかった。もう少し具体的にやりたいことを書けば、もう少しまともな 回答がつくと思うよ。
311 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 22:42:34 ] var Canvas: TCanvas; begin Canvas := TCanvas.Create; try Canvas.Handle := GetDC(hoge.Handle); try Canvas.TextOut(0, 0, 'HOGE'); finally ReleaseDC(hoge.Handle, Canvas.Handle); end; finally Canvas.Free; end; end;
312 名前:309 mailto:sage [2007/07/10(火) 08:56:46 ] サンクス>>310 >>311 具体的には、 TScrollBoxの上にTImage、その上にMyDrawを乗せています。 それで、MyDrawの図形をマウスでいじると、 TImageが物凄くチラツクんですよね。 それで、TScrollBoxにもTImageの図形描いておいてやろうかな、と。
313 名前:309 mailto:sage [2007/07/10(火) 09:35:54 ] TScrollBoxをやめて、TPanelにしてDoubleBufferdをtrueにしたらチラツキなくなりました。
314 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 22:26:17 ] 現在おされているキーをセンスする関数みたいなのはないのでしょうか?
315 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 22:41:54 ] windows.getkeystate
316 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:14:11 ] >314 つ GetAsyncKeyState ttp://msdn.microsoft.com/library/ja/jpwinui/html/_win32_getasynckeystate.asp >315 現在押されている、ということであればGetKeyStateは不適切。
317 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 22:17:05 ] ありがとうございます。 windowsの世界だと int 21h(AH=8) みたいなのはないんでしょうか。 シーラカンスですんません。
318 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 00:08:04 ] 意味不明。何をしたいのかを具体的に。 たとえばOnKeyPressとかTForm.KeyPreviewあたりは幸せになれるかも?
319 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 06:53:33 ] ごめんどうおかけします。 やりたいのは、コンソールアプリケションで、 enter (1-9 or q): みたいなプロンプトをだして、一文字キーボードから入力してもらい、 入力された文字で処理を分岐させようというだけです。 つまりread(c); でreturn を入れなくても一文字読み込みたいというだけです。
320 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 08:00:06 ] コンソール入力はwindows側でバッファされてるから、イベント入力を使う必要がある GUIアプリの例だと、ボタンとメモと、タイマーを貼り付けて procedure TForm1.Button1Click(Sender: TObject); begin AllocConsole; end; procedure TForm1.Timer1Timer(Sender: TObject); var pirBuffer: INPUT_RECORD; hdl: THandle; lpcRead: DWORD; begin hdl := GetStdHandle(STD_INPUT_HANDLE); if integer(hdl) < 0 then exit; while ReadConsoleInput(hdl, pirBuffer, 1, lpcRead) do with pirBuffer do case EventType of KEY_EVENT: //Event.KeyEvent if Event.KeyEvent.bKeyDown then Memo1.Lines.Add('KEY=' + Event.KeyEvent.AsciiChar); _MOUSE_EVENT: //Event.MOUSE_EVENT with Event.MouseEvent do Memo1.Lines.Add(format('%5d %5d ', [dwMousePosition.x, dwMousePosition.y])); WINDOW_BUFFER_SIZE_EVENT, //Event. WindowBufferSizeEvent MENU_EVENT, // Event. MenuEvent FOCUS_EVENT: //Event.FocusEvent end; end; コンソールアプリだと、このタイマーの部分でキー入力があるまで無限ループする関数を書く事になるだろな
321 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 07:16:47 ] ありがとうございます。 これを参考にコンソール用に書き直してみます。
322 名前:296 [2007/07/13(金) 17:53:11 ] お世話になります。 ブラウザコンポーネント上の FlashActiveX上の入力問題で質問した>>296 です。 みなさんありがとうございました。 時間がかかりましたが、 なんとか解析して自己解決できました。 これでDelphiのままいけそうです。
323 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 03:42:15 ] >>322 解析結果を書いてくれるとみんなが幸せになれるかもよ
324 名前:デフォルトの名無しさん [2007/07/28(土) 20:12:22 ] >>323 スクリプトによって書かれて配置される FlashActiveXが、1ページに2つ以上あるときに、 従来の方法で 2つ目のものにメッセージを送れていない場合があるようです。 ウィンドウを細かく検索することで回避しました。
325 名前:デフォルトの名無しさん [2007/09/17(月) 21:48:04 ] 前スレうp頼む
326 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 21:56:24 ] っ 前スレうp
327 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 22:06:24 ] 神キタ━━━━━━(゚∀゚)━━━━━━ !! 楽しみに待ってます。本当にありがとう!! 前スレの字句解析から意味解析のログ本当に勉強になったので
328 名前:デフォルトの名無しさん [2007/09/19(水) 19:02:18 ] EditのPopupMenuに自作PopupMenu1をセットしたら、 元々EditにあったPopupMenuが無くなりますよね。 そうじゃなくて、EditのデフォのPopupMenuに自作PopupMenu1を足すには、 どうしたら良いでしょうか?
329 名前:デフォルトの名無しさん [2007/09/19(水) 19:27:16 ] DPAPI(データ保護 API) を 使って パスワードを OSに記憶してもらう方法とか有ったら知りたいのですがなかなか見つかりません。 マイクロソフトのページには DPAPI は、以下の項目を保護するのに役立ちます。 • Web ページの資格情報 (たとえば、パスワード) • ファイル共有の資格情報 • EFS (暗号化ファイル システム)、S/MIME、および他の証明書に関連付けられた秘密キー • CryptProtectData() 関数を使用して保護されているプログラム データ とあるのですが このDPAPIは単純に任意のパスワード等保護してもらえる機能として 捕らえていいのでしょうか 。 delphi7を利用しています。 どなたか情報いただけませんか。
330 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 08:37:27 ] >>328 もヨロ!
331 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 12:07:54 ] >>328 たぶん出来ない。 右ボタンメニュを出すには TrackPopupMenu を呼び出すわけで エディットコントロールにはデフォルトのWM_RBUTTONUP内部でコレを呼び出してる部分があるのだろう TrackPopupMenuを呼び出すにはhMenuが必要だけど、EDITでコレを入手する方法が見つからない。 親窓なら、GetMenuでhMenuを呼び出せるけど、小窓ではそれが出来ないから。
332 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 12:38:35 ] そうですか(´・ω・`)ショボーン >親窓なら、GetMenuでhMenuを呼び出せるけど、小窓ではそれが出来ないから。 親窓を取得したりできないですかね。 差し替えたPopupMenu1のイベントハンドラを実行すると、 EditのデフォルトのPopupMenuを開きなおしたり、 とかでも良いのですが。
333 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 12:53:09 ] >>332 後半なら var SaveMenu:TPopupMenu; begin SaveMenu:=Edit1.PopupMenu; Edit1.PopupMenu:=nil; SendMessage(Edit1.Handle,WM_RBUTTONDOWN,Edit1.Left,Edit1.Height); SendMessage(Edit1.Handle,WM_RBUTTONUP,Edit1.Left,Edit1.Height); Edit1.PopupMenu:=SaveMenu; end; と、いったんメニューを外して、右ボタンを押して離してを送りつければ出るよ
334 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 12:57:32 ] 有難うございます。それでやってみます。(*`∀´*)
335 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 13:28:00 ] メニューを外さなくても、直接小窓にメッセージを送ると出るみたい var pt:TPoint; begin pt:=ClientToScreen(Point(Edit1.Left,Edit1.Height)); PostMessage(Edit1.Handle,WM_CONTEXTMENU,Edit1.Handle,pt.x+(pt.y shl 16)); end;
336 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 13:49:46 ] thx! >>333 >>335 両方おk、でした。 TPointを指定するのメンドウだから、333でやるかも。 PopupMenu1のメニューの一つに編集っていうメニューを用意して、それだとデフォメニューをオープン、 という動作でカコヨクできました。
337 名前:デフォルトの名無しさん [2007/09/21(金) 20:03:36 ] >>326 ひょっとしてあたしを騙したの?
338 名前:デフォルトの名無しさん mailto:sage [2007/09/21(金) 20:47:23 ] 勝手な思いこみ
339 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 02:55:26 ] 今からでるふぁい
340 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 18:11:26 ] もう死んデルファイ
341 名前:デフォルトの名無しさん [2007/09/24(月) 00:52:44 ] みなさん 多言語化(日本語/英語) をするときはどうしてますか?おしえてください
342 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 00:58:53 ] >>341 TNT+dxgettext
343 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 03:36:29 ] 素直にリソースDLLウィザード。日本語/英語以外の言語サポートが必要ならTNTも併用。
344 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 04:17:57 ] 標準VCLって役立たずだな
345 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 12:17:20 ] >>341 Delphiに国際化対応のツールが付属してるでしょ、
346 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 07:52:39 ] 61 名前:34[] 投稿日:2007/09/24(月) 19:13:21 お久しぶりです。TThreadでボヤいてた者です。 TThreadをプールして使い回してみたところ問題なさそうなのでこれで行くことにしました。 あとスレッドで処理中にフォームを操作するとCPU100%のまま帰ってこなくなる現象が出ましたが、 TThreadの方にpublicで作ったAnsiStringに渡した文字列が原因だったようで、 スレッドの変数をAnsiString.Unique()して参照を切り離してやったら問題無くなりました。 これから先に嵌る人が居るかもしれないので書いておきます。 改めてありがとうございましたorz
347 名前:デフォルトの名無しさん [2007/09/27(木) 14:25:29 ] みなさんありがとうございます。 >国際化、リソースDLL こちらに書いてあることでしょうか? www.wwlnk.com/boheme/delphi/tips/tec1550.htm 最後に書いてある、一度設定したらもう変更できないみたいな ことが気になるのですが、 修正が入ったり、言語が変わると文字列の幅が変わるので 画面の調整も必要に思うんですが みなさんどうしているのでしょうか? 何度も修正する場合 TNT+dxgettextが使われるのでしょうか。
348 名前:デフォルトの名無しさん [2007/10/04(木) 12:21:13 ] アプリ全体のフォントサイズを大きくするって簡単ですか?
349 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 15:10:25 ] Formのフォントサイズをでかくすれば その上に貼り付けたコントロールも一緒にでかくなる。 ParentFont参照。 ウィンドウキャプションとかはWindowsが描いてるものだから無理。
350 名前:348 mailto:sage [2007/10/04(木) 15:20:04 ] サンクス>>349
351 名前:デフォルトの名無しさん [2007/10/04(木) 16:38:18 ] JPEG2000を表示する方法を教えて頂けないでしょうか?
352 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 22:53:42 ] >>351 Susie Plug-in + SPIS
353 名前:デフォルトの名無しさん [2007/10/10(水) 11:38:53 ] 実行中のexeのリストを取得するコンポはありまつか?
354 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 14:59:41 ] すれ違い >Delphi初心者が問題をコツコツと解きながらレベルアップするためのスレです。
355 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 16:31:39 ] >>353 マジレスするとDelphiでは無理
356 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 18:38:07 ] >>353 コンポは知らないけど NtQuerySystemInformation を googleさんに begin とか pas と and で聞いたら 教えてくれるんじゃないかな
357 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 19:06:35 ] >>353 コンボはないけど、 多分、TookHelp関数を使えば割と簡単にできると思う。 具体的にはTHelp32.pasに宣言されている、 Process32FirstとProcess32Nextを使えばいいんじゃない。
358 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 23:55:39 ] >>355 お前の持ってるでるふゃいではな。
359 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 00:26:35 ] API使える言語ならどれでも出来る 逆にこれをライブラリ化してる製品ってないんじゃないかな
360 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2007/10/11(木) 01:04:52 ] ∧,,∧ これつかってちょ。 ミ,,゚Д゚彡 U つ @ミ ミ ∪''∪ DelFusa Library - Delphi OpenSource - DelFusa Floor delfusa.main.jp/delfusafloor/opensource/delfusa_library_f.html GetProcExeNameList
361 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 05:28:29 ] おまいら、すれ違い >Delphi初心者が問題をコツコツと解きながらレベルアップするためのスレです。
362 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 06:37:28 ] 問題 インチをセンチメートルに変換するプログラムを作って 細かい仕様は自由 ヒント:1in = 2.540cm 、StrToFloat
363 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 07:36:26 ] program Project1; {$APPTYPE CONSOLE} function InchToMetre(Value:Double):Double; const INCH_UNIT=0.0254; begin Result := Value * INCH_UNIT; end; begin writeln(InchToMetre(0.050)); //12.7 writeln(InchToMetre(0.045)); //7.62 writeln(InchToMetre(0.030)); //5.56 end.
364 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 07:36:56 ] 嘘が書いてあるorz
365 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 09:15:41 ] DelphiでJpeg2000を表示する方法を教えて下さいでつ。
366 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 09:48:48 ] しつこい
367 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 09:53:58 ] codecentral.borland.com/Item/22123
368 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 11:44:07 ] DelphiでJpeg2000を表示する方法を教えて下さいでつ。
369 名前:365 mailto:sage [2007/10/11(木) 11:51:18 ] 368はニセモノでつ。 でも、実は未だに解決してなくて知りたかったりして。
370 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 13:22:13 ] 普通に>>367 ので表示できたけど?
371 名前:365 mailto:sage [2007/10/11(木) 14:23:02 ] サンクス>>370 実は自分もDel7出来ました。 が、実際の環境である、 C++ Builder 6だと上手くコンパイルできないんでつ><
372 名前:デフォルトの名無しさん [2007/10/11(木) 16:41:56 ] Delphiアプリのメインフォームのウィンドウクラスって、TApplication固定でしたっけ?
373 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 19:19:37 ] でつでつ言うなよ
374 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 22:14:07 ] でつな
375 名前:デフォルトの名無しさん [2007/10/12(金) 15:44:09 ] (a+3)^ ってある^はどういう意味?
376 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 16:43:45 ] ObjectPascalの場合 後ろの^は ポインタの参照 C言語の *(a+3) と同じ
377 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 17:52:24 ] なるほどサンクス
378 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 18:39:09 ] よく見かける、 エディットボックスにファイルをD&Dしてそのパスを取得 はどのようにやればよいですか?
379 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 19:29:56 ] 質問はこちらにどうぞ くだすれDelphi(超初心者用)その44 pc11.2ch.net/test/read.cgi/tech/1191657968/l50
380 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 05:15:36 ] 答えられんからって誘導とは酷いな!
381 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 17:21:40 ] vb.netでそこそこは作れるレベルだけど、delphi始めようと思ったら最初に買うべき 本は何がいい? それかどぼんみたく、そこだけ見ればそこそこのものは作れるようになるサイトか
382 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 23:12:41 ] 何を作りたいかだろ ファイラ作りたいとか、MMO作りたいとか(スレがあっったりするが)
383 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 08:44:22 ] ドトネトみたく環境設定も要らないし、コンポーネントも要るものはあるし。 いきなり始めて、躓いてから質問してみたら?
384 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 15:17:32 ] VB2005はヘルプがすごく使いやすい
385 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 15:30:47 ] ヘルプだけかよw ネイティブアプリが作れるようになったら試しに触ってやるよ。
386 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 23:24:20 ] ま、C#からやったらいいよ。DelphiもIDEは.NETが必要だし。 C#は良い本もヘルプもMSDNもWEBサイトも腐るほどあるし。
387 名前:デフォルトの名無しさん [2007/11/09(金) 01:23:20 ] Del5。XPで、 Ctrl+Alt+Delを無効にする方法。 右クリックを無効にする方法。 教えて。
388 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 01:40:40 ] >Ctrl+Alt+Delを無効にする方法。 マルウェアでも作るつもりですか?
389 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 05:38:41 ] そーゆーことしたいなら自分で調べろww
390 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 06:47:53 ] >>387 いちばん簡単なのは、DirectXのフルスクリーンモードで、そういうモードがある。 やり方は自分で調べろ
391 名前:387 [2007/11/09(金) 06:48:48 ] いや、調べてもわからないから聞いてるんで。 ちなみに、会社のIT担当委員ってのをやってて、社員にサイバーテロの対処について教育するんだが、 本物のウィルスを使うわけにはいかないんで、ジョークウェアを作ろうと思っている。
392 名前:387 [2007/11/09(金) 06:49:39 ] 書き忘れた。 一定の時間が経過したら自動的に終了させるつもりだ。
393 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 23:31:11 ] Ctrl-Alt-Deleteのキーストロークは最優先でシステムが捕捉するので、これを 無効にすることはできない。無理。不可能。Deleteキーの軸を折っちゃえ。 右クリックはマウスの右クリックのスイッチを(ry
394 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 06:56:12 ] 無理ではない。教えたいところだけど、>>391 が本当か分からないし 教える立場だったら自分で調べて欲しいところ。 ヒント:海外
395 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 07:35:04 ] ソフトウェア板の各所でも、キーロガーとか、スパウウェア用途に使われるものは紹介しないというルールだしな おしえる側も、最低限のことは守らないと
396 名前:デフォルトの名無しさん [2007/11/10(土) 08:46:07 ] 391だけど、不正ソフトばらまくのは犯罪だってことくらい知ってるよ。 けどまぁ、信用してもらえないのも仕方がないからなんとかするわ。
397 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 07:10:16 ] 2chで信用しろといわれても・・・
398 名前:delphi初心者 [2007/11/12(月) 13:48:03 ] ご質問いたします。 1.コンマ区切りの文字列をばらして配列にセットしてくれる関数はありませんか? 2.functionで配列は返せないのですか? 追伸: 「そんなこと自分で調べろ!」 と云う罵倒はおことわり。
399 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 13:50:46 ] TStringList.CommaText
400 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 13:51:22 ] それかTStringList.Textに入れれば、バラしてくれたかも
401 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 22:10:08 ] >398 配列の型を宣言してそれを戻り値の型にすればおk
402 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 14:33:42 ] >>401 それ、何てTStringList?
403 名前:デフォルトの名無しさん [2007/11/13(火) 18:48:49 ] 【Borland Delphi 6 Personal日本語版 入手先】 www.vector.co.jp/soft/dl/win95/prog/se205882.html 【Delphi 6 導入手順 】 www.wikihouse.com/DelphiVIP/index.php?%C6%B3%C6%FE%BC%EA%BD%E7 【インターネットダイレクト(Indy)コンポーネント導入手順 】 homepage3.nifty.com/KENCH/open/indy/delphi_indy.htm 動作確認は、メモとIdHttpコンポーネントを貼り付けて以下のコードを書いて実行してみる。 うまくいくとこのスレがメモにダウンロードされる。 Memo1.Lines.Text := IdHttp1.Get('live19.2ch.net/test/read.cgi/stock/1144395454/l50 '); 【デルファイの質問所】 hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi leed.t.u-tokyo.ac.jp/~takeuchi/delphi/search.cgi groups.google.com/groups/search?hl=ja&q=delphi+
404 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 20:01:32 ] 上げ荒らしうぜえ
405 名前:初心者++ [2007/11/18(日) 11:09:49 ] UpdateSQLがうまくいきません。以下のようなコードで実行すると、例外エラー'アップデート失敗'がでます。 propertyの設定は cachedupdate true /requestlive true /updateobject updatesql updatesqlのsql設定文もできてると思うんですが、、、 begin database1.open; database1.StartTransaction; query1.Open; end; procedure TSDIAppForm.Button1Click(Sender: TObject); begin if query1.UpdatesPending then begin query1.ApplyUpdates; end; database1.Commit; query1.CommitUpdates; query1.Close; database1.Close; end; どこが間違ってるのでしょうか?教えてください Turbo Delphi for wind32 OS : wind2000です。
406 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 15:36:44 ] 残念、スレちがいです。 >Delphi初心者が問題をコツコツと解きながらレベルアップするためのスレです。
407 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 17:54:22 ] 糞なテンプレでスレ立てて必死に粘着交通整理してる奴ってなんなの?
408 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 18:45:04 ] 自分の居場所なんだから、そりゃ必死だろう。 自分の居場所をキチンとメインテナンスするのは、それは当然ではあるまいか?
409 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 17:32:32 ] 自分の居場所ならグダグダ「スレ違い」とか言ってないで、問題を出題すべきだと思うんだな。 問題と解答、それに議論が無いから、過疎ってスレ違いと基地外の巣窟と化してるんだな。 問題:おみくじ randomを使って大吉、吉、凶のいずれかを表示するプログラムを作れ
410 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 17:36:13 ] >>409 あまりにも簡単すぎるプログラム出題でワロタw せめて、n回凶が出る確率を計算するプログラムとかにすればいいのに。
411 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 17:47:39 ] >>405 Queryの更新エラーは、 query1.RequestLiveのtrue/falseが 結構関係している。
412 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 22:53:35 ] Gandomを使って大吉、吉、凶のいずれかを表示するプログラムを作れ
413 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 23:05:26 ] >>412 CGは専門外なんで無理ですw
414 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 23:21:52 ] Gandom はすれ違い。
415 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 01:02:34 ] 問題:呼び出すたびに1と0を交互に返す関数を書け。グローバル変数を使っても良い。
416 名前:初心者++ [2007/11/21(水) 02:06:06 ] UpdateSQLのエラーが解決しました。レスを下さった方ありがとうございました。 SQL文のキー違反でした。 SQLの勉強をもっとしないと阿寒と思いました。 Accessのビューで作ったSQL文を貼り付けたりしておったのですが、、、。 エラー続出でした。
417 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 23:30:12 ] 問題:マウスクリックすると、クリックしたマス目とその上下左右のマスが反転する。 マス目を全て塗りつぶしたらクリアとなるゲームを作る □□□□□ □□□□□ ■■□□□ □□□□□ □□■□□ ■□■□□ □□□□□ □■■■□ □■■■□ □□□□□ □□■□□ □□■□□ □□□□□の真ん中を押すと □□□□□左上クリックで .□□□□□ ■■□□□ ■□□□□ ■○■□□ □■□□□ □■■■□ □□■■□ □□■□□ □□■□□ □□□□□ ○を押したら □□□□□ 全部塗りつぶしたらゲームクリア ■■■■■ ■■■■■ ■■■■■ ■■■■■ ■■■■■
418 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 23:43:16 ] >>417 ライツアウト懐かしいな
419 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 00:58:06 ] 俺には作れねぇ
420 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 01:03:28 ] 頑張れば作れなくもなさそうだけど、とてつもなく無駄が多くなりそう・・。
421 名前:1/2 mailto:sage [2007/11/22(木) 01:33:44 ] TForm1 = class(TForm) procedure FormPaint(Sender: TObject); procedure FormClick(Sender: TObject); private FTable: array[0..4, 0..4] of Boolean; end; procedure TForm1.FormPaint(Sender: TObject); const B2S: array[Boolean] of String = ('□', '■'); var x, y: Integer; begin for x := 0 to 4 do for y := 0 to 4 do Canvas.TextOut(x*12, y*12, B2S[FTable[x, y]]); end;
422 名前:2/2 mailto:sage [2007/11/22(木) 01:34:15 ] procedure TForm1.FormClick(Sender: TObject); var pt: TPoint; begin pt := Self.ScreenToClient(Mouse.CursorPos); pt.X := pt.X div 12; pt.Y := pt.Y div 12; if (0 <= pt.X) and (pt.X <= 4) and (0 <= pt.Y) and (pt.Y <= 4) then begin FTable[pt.X, pt.Y] := not FTable[pt.X, pt.Y]; if 1 <= pt.X then FTable[pt.X-1, pt.Y] := not FTable[pt.X-1, pt.Y]; if pt.X <= 3 then FTable[pt.X+1, pt.Y] := not FTable[pt.X+1, pt.Y]; if 1 <= pt.Y then FTable[pt.X, pt.Y-1] := not FTable[pt.X, pt.Y-1]; if pt.Y <= 3 then FTable[pt.X, pt.Y+1] := not FTable[pt.X, pt.Y+1]; end; Invalidate; end;
423 名前:2/2 ver.2 mailto:sage [2007/11/22(木) 01:40:47 ] クリア判定忘れてた。 procedure TForm1.FormClick(Sender: TObject); var pt: TPoint; x, y: Integer; Clear: Boolean; begin pt := Self.ScreenToClient(Mouse.CursorPos); x := pt.X div 12; y := pt.Y div 12; if (0 <= x) and (x <= 4) and (0 <= y) and (y <= 4) then begin FTable[x, y] := not FTable[x, y]; if 1 <= x then FTable[x-1, y] := not FTable[x-1, y]; if x <= 3 then FTable[x+1, y] := not FTable[x+1, y]; if 1 <= y then FTable[x, y-1] := not FTable[x, y-1]; if y <= 3 then FTable[x, y+1] := not FTable[x, y+1]; end;
424 名前:3/2 mailto:sage [2007/11/22(木) 01:41:18 ] Clear := True; for x := 0 to 4 do begin for y := 0 to 4 do if not FTable[x, y] then begin Clear := False; Break; end; if not Clear then Break; end; if Clear then ShowMessage('おめ'); Invalidate; end;
425 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 02:02:47 ] すげー!参考にさせて頂きますm(_ _)m
426 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 11:33:40 ] implementation {$R *.dfm} //スペースの都合上ここに記述本当ならTForm1のprivateが望ましい var BTable:array of array of Boolean; procedure CheckComplete(); var X,Y:Integer; begin for X:=1 to High(BTable)-1 do for Y:= 1 to High(BTable[X])-1 do if Not BTable[X,Y] then Exit; ShowMessage('Mission Complete!'); end; procedure TForm1.FormCreate(Sender: TObject); begin SetLength(BTable,DrawGrid1.ColCount+1,DrawGrid1.RowCount+1); end;
427 名前:修正1/2 (426は放置推奨 ) mailto:sage [2007/11/23(金) 11:43:25 ] //●最初にDrawGridを貼り付け、プロパティを以下のようにセット Align = alClient DefaultDrawing = False ColCount = 6 RowCount = 6 //●FormのPrivateに以下のフィールドとメソッドを追加 BTable:array of array of Boolean; //動的二次元配列 procedure CheckComplete(); //●CheckComplete関数を書く procedure TForm1.CheckComplete(); var X,Y:Integer; begin for X:=1 to High(BTable)-1 do for Y:= 1 to High(BTable[X])-1 do if Not BTable[X,Y] then Exit; ShowMessage('Mission Complete!'); end; //●FormCreateを書く procedure TForm1.FormCreate(Sender: TObject); begin SetLength(BTable,DrawGrid1.ColCount+1,DrawGrid1.RowCount+1); end;
428 名前:修正(2/2) mailto:sage [2007/11/23(金) 11:43:59 ] //●DrawGrid1DrawCellを書く procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); const COLORPALS:array[Boolean] of array[Boolean] of TColor = ((clWhite,clBlack),(clSilver,clSilver)); begin DrawGrid1.Canvas.Brush.Color := COLORPALS[(gdFixed in State) , BTable[ACol,ARow] ]; DrawGrid1.Canvas.FillRect(Rect); end; //●DrawGrid1SelectCellを書く procedure TForm1.DrawGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;var CanSelect: Boolean); begin BTable[ACol-1,ARow] := Not BTable[ACol-1,ARow]; BTable[ACol ,ARow] := Not BTable[ACol ,ARow]; BTable[ACol+1,ARow] := Not BTable[ACol+1,ARow]; BTable[ACol,ARow-1] := Not BTable[ACol,ARow-1]; BTable[ACol,ARow+1] := Not BTable[ACol,ARow+1]; DrawGrid1.Invalidate; CheckComplete(); end;
429 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 18:34:16 ] >>417 7行スレで盛り上がりそうな内容だなw
430 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 17:46:32 ] 25ボタンの処理を全部書くことで初心者でも作れてしまうが、まじめにやれば7行に・・・・なるな多分
431 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 23:00:38 ] >>157 D6からそうなったのか? パスなしだとWINDOWSフォルダにつくられるんじゃなかった?
432 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 23:01:27 ] 未読位置を間違えてロングパスを放ってしまったorz
433 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 01:31:13 ] >>417 作れたは良いんだがクリアできない なんかコツとかある?勿論クリアするね
434 名前:デフォルトの名無しさん [2007/12/13(木) 23:00:31 ] TMEMOの任意の行を削除するにはどうしたらいいの?
435 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 23:09:52 ] >>434 TMemo.Lines.Delete
436 名前:434 [2007/12/14(金) 06:52:10 ] >>435 ありがとう。 ごめん、質問間違えた。 あるデータと一致する行を削除 だった。 listboxだったらitems.indexとかで簡単にできるけど
437 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 22:58:42 ] >>436 TMemo.Lines.IndexOf
438 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 19:30:52 ] BDS2007を使っているんですが、コード補完機能って、すごーく 時間がかかるものなのでしょうか? HDアクセスしまくりで、VS2005のそれとは比較にならない程遅いのですが。 それとも何か設定等が悪いのでしょうか? OSはWinXP, メモリは2Gです。よろしくお願い致します。
439 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 18:36:32 ] コンポを大量インスコしてるとか
440 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 09:47:31 ] 普段使わないコンポはチェック外しておくとロード時間が劇的に短くなる。
441 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 21:13:59 ] 普段使うコンポはチェック外さないでおくとロード時間がものすごく長い。
442 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 22:06:02 ] 最新式マシンに変えるとロード時間が劇的に短くなる。
443 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 01:49:05 ] ちょっと前のマシンだとロード時間がはげしく長い。
444 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 02:11:10 ] BDS2006で、PenD(3.0GHz) メモリ2G WinXPマシンでつこーてるが、 コード補完は、特に遅くないな。 ちなみに、起動時は、起動オプションで、Delphiのプロファイルのみ読み込み、 あと余計なDB周りのコンポなどもはずしてる。 しかしメモリ2Gで、ハードディスクカリカリは感がられんな BDS2007が遅いということあるのかね
445 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 23:14:45 ] D7En Pen3(966) MEM384MB コード補完滅茶苦茶遅い。 数年前は大丈夫だったから多分原因はHDDだろうと勝手に思ってる。
446 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 03:44:18 ] >>445 そのくらいのスペックで、Del6Pro つかってだけど、問題なかったぞ? BDSの世代になって、死ぬほど重くて、マシン買い換えたが
447 名前:デフォルトの名無しさん [2007/12/31(月) 07:28:11 ] 職場のD7ENTでこちょこちょ書いてますがひたすらコピペしまくりでクラスも作った事がありません。 どこかのサイトにオプジェクト志向学ぶならC#やJavaで書かれた出来の良いコードをDelphiに移植するのが面倒だけど理解が早くなる、と言う意味の事が書かれてました。 とは言え、自分にオプジェクト志向の良いコードなのかどうか判別が出来るくらいならわざわざ移植には及ばない訳でして、適当なサンプル選びで途方に暮れています。 簡単なもの、ちょい重たいかなレベルで適当そうなコードを紹介して頂けませんか?
448 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 07:30:10 ] スミマセン ageてしまいました。
449 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 11:10:07 ] どこまでもコピペするつもりですか。 *頭をたたくと「いてぇ」、わきの下をくすぐると「わははは」と笑うクラスをつくて まじめな課題です。
450 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 11:59:29 ] 自分用のコンポーネントを自作するのが近道だよ。
451 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 12:06:15 ] >>447 何度も同じコード書いてるならそこを共通化するクラスなりライブラリなりを作ってみたら。 重複部分で呼び出しているAPIなり関数なりをJediVCLでGrepかけてどうラップしてあるかを見てみればいいと思う。 あのライブラリ郡の設計が美しいかどうかは微妙なところだけど。 一番手っ取り早いのはC#をやること。 C#、Delphi両面の利点と欠点が見えてくると思う。 もちろんよりリッチなクラスライブラリの使い方も習得できるしね。
452 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 19:50:50 ] JCLのコンテナ使いにくすぎる。おすすめせん。 俺も、C#のライブラリを参考にするのがお勧め。 標準のでいい。 インターフェスだけならMSDNで見たい放題、クラス設計の参考になる。 中のぞきたかったら、Reflectorででも、使えばソース見られる。 Reflectorなら、Delphiでも見られるしなw あとは、OOPなら、動的型言語のRubyもお勧め。 ほとんどが、オブジェクトなので、それを前提として、 どういった便利な使い方ができるか?というのがよくわかる。 ただ、ガーベジコレクション前提でオブジェクトを使い捨てまくるので、 そのままは使えないのだが、 勉強にはなる。
453 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 23:14:08 ] 2005を今更再インスコしようとして、鬱になる。 #さぽきれかあ
454 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 15:25:42 ] あー、今頃出来やがんのorz
455 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 16:05:07 ] ASMならジャンプテーブルを用意すれば簡単化と思いますがDelphiなら 以下の条件ならどんなコーディングをすればいいのでしょうか? type TSomeInts = 0..9; IntSet1, IntSet2 = set of TSomeInts の条件下で if (0 in IntSet1) and (0 in IntSet2) then ... if (0 in IntSet1) and (1 in IntSet2) then ... ... if (9 in IntSet1) and (9 in IntSet2) then ... のように、IntSet1且つIntSet2の組み合わせでcase文を使用したい場合です
456 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 16:08:54 ] すみません 問題を単純化するのにミスしました type Int1, Int2 = 0..9; の条件下で if (Int1 = 0) and (Int2 = 0) then ... if (Int1 = 0) and (Int2 = 1) then ... ... if (Int1 = 9) and (Int2 = 9) then ... でお願いします
457 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 16:15:33 ] case を2重にして全部を列挙するか 0〜9と決まってるんなら単純に case Int1*10+Int2 of 00: 01 ... とやったら?
458 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 16:29:47 ] >>457 ども 実際ご指摘のとおり type Suit = (Club, Diamond, Heart, Spade); var card1, card2: Suit; cardbits: BYTE とあれば cardbits := ($01 shl Integer(card1) + ($10 shl Integer(card2)); case cardbits of $00, $01, $02: ... $10, $11, $03: ... end みたいなことで実現しているのですが、実際は条件がもっと複雑で 単純にcase文でネストする場合三重になります この場合可視性が悪いですし Suit = (Null, Club, Diamond, Heart, Spade, Joker); みたいに列挙型を変更する場合も困難を極めます
459 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 17:04:39 ] var jumptable: array[0..9, 0..9, club..spade] of tjumpproc; なジャンプテーブル用意したら。
460 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 17:16:45 ] >>459 どもw ジャンプテーブルが使えたんですね・・・ 何やってんだ俺orz
461 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 17:54:22 ] ×可視性 ○可読性
462 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 14:54:47 ] Delphi6のFileSeekは多重定義されてますが function FileSeek(Handle, Offset, Origin: Integer): Integer; overload; function FileSeek(Handle: Integer; const Offset: Int64; Origin: Integer): Int64; overload; OffsetにInt64をあたえても上が呼ばれてるみたいなんですが どうなんでしょう
463 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 18:45:19 ] 気のせいです
464 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 22:18:42 ] Threadを使用してバックグラウンドで処理を行い、進行状況をForm1で表示する処理を行っています Form1のLabelに表示するたびにSynchronize関数を呼び出すとそのオーバーヘッド が凄まじく処理時間が数倍に跳ね上がってしまいます VCLを使用する場合にはSync関数を使用して呼び出すべきとの話ですが 全てが全てSyncを使用しなければならないのでしょうか? 例えばInvalidate関数等はどのタイミングで呼び出すべきなのでしょうか
465 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 22:31:43 ] スレッドセーフで無いコードはSynchronizeを使いVCLにスレッドセーフであることを保証してもらう必要がある。 初めからスレッドセーフなコードならばわざわざそんな事はしなくても良い。
466 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 22:33:02 ] いろいろやり方はあるけどLabelの更新頻度を下げるのが手っ取り早い。 データがどれだけ変更されようが画面の更新は1秒に一回未満にするならこんな感じ lastupdateview := GetTickCount; while true do begin 処理 if GetTickCount - lastupdateview > 1000 then begin lastupdateview := GetTickCount; Synchronize; end; end;
467 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 23:05:17 ] >>466 ども。 Invalidateの呼び出しはそれでやってます。 その方法では、例えば処理中のファイル名を表示しようとした場合 重い処理を行っている時は表示されているファイル名と処理している ファイルが異なるような場面が発生しませんか? かと言って”処理が長くなるようだったら強制的に表示する”って方法 を実現しようとするとタイマーを使用するなり手間がかかる気がするのですが・・・
468 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 23:30:48 ] ファイルを処理する最初にlabel更新をしようとしたが、 全部のファイルを処理すると処理に時間がかかったということですよね? > 重い処理を行っている時は表示されているファイル名と処理している > ファイルが異なるような場面が発生しませんか? それは仕方がないかと。 >>466 では、1秒になってるけど、100m秒くらいにすればわからなくないかな? ところで、VCLのスレッドセーフ周りはよく知らないのだが、 Labelの書き換え(Caption?Text?)は、メインスレッドから弄ってない場合でも、 他のスレッドどから書き替えたらダメなのものかね。
469 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 23:48:28 ] >>468 ども。 >>466 の例で言うならば、”処理”が重たい場合はLabelが書き換えられませんし ”処理”の前にLabelを書き換えようとした場合はLabelの書き換えがスキップ された直後に重い処理が着ちゃうと対応できません メインフォームにメッセージを投げて知らん振りしたほうが健全かな?とは 思いますが、Delphiっぽくなくなっちゃうんですよね
470 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 00:37:08 ] >>469 処理するスレッドが重くてメインスレッドに反映されにくい場合なら、 スレッドの優先度変えればいけないかな・・・(未確認だが) > メインフォームにメッセージを投げて知らん振りしたほうが健全かな?とは いや、それもありかと思います。Delphiスレでもよく聞く話です。 VCL Formだとメッセージとりやすいですしね。 ただ、スレッドが重くてうんぬんの場合、この方法でも一緒かな?という気が
471 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 07:37:18 ] Invalidate なら、ラベルの親ハンドルと、Rectをメインスレッドから用意しておいて IntersectRectをスレッド側で発行すればいいでしょ。
472 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 07:39:04 ] ×IntersectRect ○InvalidateRect
473 名前:デフォルトの名無しさん mailto:age [2008/02/02(土) 22:21:03 ] にゃあ
474 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 04:23:31 ] if i < 0 then i := 0; といったコードがあるとします i := Max(0, i); と書いたほうがスマートな気がしますし i := Max(0, Min(i, count-1)); と書くと簡単に範囲を限定できます しかし、冗長に思えるif分の繰り返しのほうがいいコードが生成されます この場合どちらを使用すべきなんでしょうか・・・
475 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 05:20:29 ] > しかし、冗長に思えるif分の繰り返しのほうがいいコードが生成されます マシンスペックが高い今、そんなことはいまどき考える必要はない わかりやすい方にしる
476 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 12:29:24 ] Abs()なら組み込み関数で、マクロ的に展開されるんだけど Maxはmathユニットの実関数だから仕方ない。 どうしてもというならアセンブラ使え procedure TForm1.Button2Click(Sender: TObject); function LimitZero(d:Integer):Integer; asm CDQ ;//eaxが負数ならedx=-1 not edx; and eax,edx ;// end; var i:Integer; begin AllocConsole; for i:=-10 to 10 do begin WriteLn( LimitZero(i)); end; end;
477 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:13:05 ] くだらん。 どうしても転化したければ、inline使え
478 名前:デフォルトの名無しさん [2008/02/24(日) 05:53:01 ] TImage に 上から半透明のセロファンがかかってるような フィルタをかけたかったらどうすりゃいいですかね? 俺が思いつくのは同じ大きさのBitmapを用意して それを一色で塗りつぶした上で半透明化とかなんですけど これってすんげえ無駄にメモリ食いますよね? もっといい方法ってあります?
479 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 06:02:23 ] >>478 DIBにして、ScanLineでBITMAPのデータを直でいじくる
480 名前:デフォルトの名無しさん [2008/02/24(日) 06:18:28 ] >>479 うわ、検索してみたけど難しそうだこれは 1時間ほど挑戦してムリポだったら>>478 の方法使うことにします
481 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 06:37:09 ] そんなに難しく考えるなよ srcが元の色 colorがセロファンの色 destが書きこむ色 αが半透明のアルファの度合いだとしたら、 dest = color * α + src * (1 - α) これをrgb各それぞれで計算してやるだけだぞ こういうのは「αブレンド 計算式」ででてくればすぐにでてくるよ
482 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 14:47:50 ] 符号無し64bit、いわゆるulonglongを使用したいのですが何か良い方法 は無いのでしょうか?
483 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 16:55:55 ] 符号無し64bitで何がやりたいの? 加減算の結果は同じだよ 掛け算の場合も (Amsb + A63)*(Bmsb + B63) = Amsb*Bmsb + Amsb*B63 + Bmsb*A63 + A63*B63 で、Amsb が符号付きだろうが符号無しだろうが、下位64bitの結果には影響しない。
484 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 17:52:05 ] >>483 ulonglongを使用している構造体があったんでどう実装しようかと・・・ 現状では下位32bitしか使用していないのでDWORDでも問題無いとは 思うのですが、手を抜いて将来トラブルと嫌だなぁ・・・と思った次第です
485 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 19:37:38 ] 単にInt64にしたらいいんじゃないの? 除算や右シフトをやらない限り問題ない
486 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:47:31 ] ゴメン 算術右シフトってのがソモソモ無かった。 だから SHR 演算は 符号無し右シフトと等価だった
487 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:01:28 ] UInt64使えばいいだろ。
488 名前:デフォルトの名無しさん [2008/02/27(水) 20:44:10 ] >>481 ありがとうございます 何をすればアルファブレンドできるかは理解できたんだけども 見つかったページがそれをシフト演算で行ってて それの意味がわかんなくて困ってます ページを貼らせてもらうと www.sm.rim.or.jp/~shishido/delmono.html > r:=cl and $ff; // RGB成分に分解 > g:=cl and $ff00 shr 8; > b:=cl and $ff0000 shr 16; 必要な色成分以外を $ff なんちゃらでマスクして消しちゃってるんでしょうが $の記号が何をするのかわからないのがひとつめ > cl:=Round(r*0.3+g*0.59+b*0.11); // 明るさを計算 cl って RGB値じゃなかったでしたっけ? なんで明るさだけを入力できるかさっぱりなのが2つめ > pp^:=cl+cl shl 8+cl shl 16; // (j,i)に明るさを書き戻す さっきRGB値を明るさに変えたのになんでこんな処理ができるのか意味不明なのが3つめ とわからないことだらけです。助けて
489 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:55:42 ] >488 $は16進数のプレフィクス。C/C++の0xに相当。 明るさは人間の目のRGBに対する感度の違いを考慮して計算している。昔の白黒テレビで カラー画像を見ているのと同じ。 その明るさを持つグレーの値を計算している。
490 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 04:03:23 ] >>488 下の二つは輝度を計算するときの公式みたいなものでアルファブレンドとは全然関係ないよ
491 名前:478 mailto:sage [2008/03/01(土) 05:18:35 ] ヤターできたよー! もっともほんとにやりたい事は フィルタの範囲指定したり戻したりなんで これからもうひと頑張りいるけど、あとはなんとかなるでしょ。 ところでRGB値ってbgrの順で保存されてるんだね。変なの >>489-490 dです
492 名前:749 mailto:sage [2008/03/01(土) 20:27:17 ] >>491 BGRの順番で格納されているのはTColor 実際には速度の面からPixelでは無くScanLineでBMPに直接アクセスする ことになるが、その場合の格納方法はまた違う
493 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:25:24 ] バイト単位でアクセスしたら32bit色の場合、bgrだわな
494 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 13:12:38 ] >>493 32bit DWORDだとrgbだな >>478 はメモリの格納順では無くて上位ビット->下位ビットで話してるからな
495 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 03:36:32 ] >>494 何をわけの分からないこと言ってるんだ 同じことだろ
496 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 04:23:57 ] サーセンw
497 名前:デフォルトの名無しさん [2008/03/04(火) 15:49:44 ] こんにちは。 WriteProcessMemoryのAPIを使って値を書き込んだのですが、 おもう値が書き込まれません。以下がコードです。 GetMem(buf, 1); buf^ := Chr($3D); WriteProcessMemory(WindowHandle, ptr(Address), buf, NumberOfBytes, Write); これを行うと、値が35901というのが書き込まれてしまいます。61という値を書き込みたいのですが、どのようにすればよろしいのでしょうか?
498 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 16:18:08 ] >>497 35901 = $8C3D 正常に動いてるじゃないか
499 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 16:40:25 ] >>498 いえ、普通に$3D(61)という値を書き込みたかったんですが、その場合はどうすればよろしいでしょうか?
500 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 17:35:44 ] >>499 そりゃ1Byteしか書き込んでいないから。
501 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 18:29:49 ] >>500 NumberOfBytes を2という値に設定はしたのですが、これでは設定不足でしょうか?
502 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 20:08:37 ] 何で1バイトしか書き込んでいないのに読み込むときは2バイトになってるんだよ
503 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 21:04:31 ] >>502 すいません、私のレベルが低くていまいちよくわかりません・・・。 WriteProcessMemory(WindowHandle, ptr(Address), buf, Sizeof(buf), Write); 上のようにすればいいという事でしょうか? 読み込む時というのがわかりません・・・。
504 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 21:47:00 ] >>503 >値が35901というのが書き込まれてしまいます。 これが確認できたってことはその書き込んだアドレスから読み込んだんだろ? その時35901だったってことは、少なくとも2bytes読み込んでいるということ。
505 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 21:55:22 ] >>504 いえ書き込んだアドレスから読んだんではなくて、 表示されている値が変化したので確認できたという事です。 えとつまりは61という値にはできないという事でしょうか?
506 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 22:55:41 ] >表示されている値が変化したので確認できたという事です。 意味不明なんだよ、質問が。なにをどうしたらなんの表示が変化したの? WriteProcessMemory() の第一引数が WindowHandle って時点でどうかしてる。
507 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 23:48:37 ] >>505 理解できてないから予期しない結果になるんだよ。 msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdebug/html/_win32_writeprocessmemory.asp
508 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 07:13:00 ] >>506 >>507 すいません、書き忘れていました。 OpenProcessでもってきたハンドルを第一引数に入れています。 HandleWindow := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId); 質問をまとめると、 var buf: PChar; WindowHandle: Integer; Write: Cardinal; WindowHandle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId); GetMem(buf, 1); buf^ := Chr($3D); WriteProcessMemory(WindowHandle, ptr(Address), buf, Sizeof(buf), Write); で対象のプロセスの31という値を61に書き換えようとしたところ、35901という値に誤って(?)表示されてしまった。 というわけです。わかりにくくてすいません・・・。 たぶんbufの値に問題があると思いますが・・・。
509 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 08:04:08 ] ヒント:bufのサイズをコンパイラが知れるわけがない
510 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 08:06:03 ] 初心者向けだからもう少しいえば 動的に確保されたバッファーのサイズをコンパイラが知ってるはずない
511 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 08:58:03 ] >>509 >>510 bufのサイズを指定すればよろしいのでしょうか? Sizeof(buf) で行っている作業でサイズは取得できてると思うのですが、これとはまた別の話でしょうか?
512 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 09:29:57 ] var buf:PChar つまりポインタなのだから、 Sizeof(buf) は、ポインタのサイズを取得してるので、作業領域のサイズを得ているわけじゃない
513 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 09:39:40 ] 1、WindowHandleは適切な名前ではない。 hProces 等にする事 2、Writeも適切な名前でない。WriteSize とか cbWriteとか 3、Sizeof(buf)はポインタサイズで現在は4を返してる筈。 よって、 var buf: string; hProces : THandle; WriteSize:DWORD; WindowHandle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId); SetLength(buf,1); buf[1] := Chr($3D); WriteProcessMemory(WindowHandle, ptr(Address), PChar(buf), length(buf), Write); ただし、35901が表示されたという事は、ホントは書きたい値は1バイトではなく2バイトか4バイト の可能性が大。
514 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 11:00:22 ] >>495 TColorと32bitRGBじゃRGBの順序が逆だよ? そのまんまキャストは不可 ごっちゃにしてない?
515 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 11:36:40 ] ? メモリ上の並びとしては R,G,B で、それを32bitの変数に読むと エンディアンの関係で [xx ,RR , GG , BB] となるだけで、同じだろ?
516 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 13:53:56 ] >>512 >>513 こんにちは。 ご教授感謝致します。以下が修正コードです。 var buf: string; hProces : THandle; WriteSize:DWORD; hProces := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId); SetLength(buf,1); buf[1] := Chr($29A); WriteProcessMemory(hProces, ptr(Address), PChar(buf), length(buf), WriteSize); CloseHandle(hProces); これで望む結果を出すことができました。ありがとうございます。 SetLength はメモリを再確保してくれる関数らしいですね、てっきりSizeOfで領域まで確保してくれているとばかり思っていました。 このような初心者に手を差し伸べてくださり本当にありがとうございます。 またこれでひとつ勉強になりました。それではm(_ _)m
517 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 19:02:16 ] Delphiヘルプより > TColor を Graphics ユニットに定義された定数で指定せずに,4 バイトの 16 進数で指定した場合, > 下位の 3 バイトはそれぞれ青,緑,赤の RGB カラーの輝度を表します。 > $00FF0000 という値は最高の輝度,つまり純粋の青を示し,$0000FF00 は純粋の緑を示し, > $000000FF は純粋の赤を示します。$00000000 は黒,$00FFFFFF は白です。 >>514 これ以上に何か意見があるなら聞こうか?(笑)
518 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 20:01:01 ] >>517 痛いヤツだな >>493 =>>495 =>>517 なのか? DIB32はメモリ上はBB GG RR 00って順番で並んでいる コレをDWORDでアクセスすると$00RRGGBBになるだろ? TColorの$00BBGGRRとは逆になるんだよ 初心者スレで無知を晒すのは恥じゃ無いが、学ぶ能力が無いのは恥るべき
519 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 00:55:23 ] BSWAPして8だけRORして…
520 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 02:29:10 ] >>518 なんか必死だけどちゃんと仕様見てきて言えよ
521 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 05:12:31 ] >TColorの$00BBGGRRとは逆になるんだよ ????
522 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 09:27:41 ] >>513 昨日メモリについて質問した者です。 気になる事がありましたので、お聞き致します。 仮に SetLength(buf,1); buf[1] := Chr($29A); WriteProcessMemory(hProces, ptr(Address), PChar(buf), length(buf), WriteSize); CloseHandle(hProces); をbuf[1] := Chr($29A);としたい場合は、 function StrToByte(const s: string): byte; var i, n : integer; begin result := 0; n := 1; i := Length(s); while (i > 0) and (n <= 128) do begin if s[i] = '1' then Inc(result, n); n := n *2; Dec(i); end; end; を使ってbuf[1] := Chr(StrToByte('$29A'));を使って同様の結果がでないのはなぜでしょうか?
523 名前:522 mailto:sage [2008/03/06(木) 10:13:29 ] 質問間違えました、FF(250)以上の値を書くときは、 SetLength(buf,1); buf[1] := Chr($29A); WriteProcessMemory(hProces, ptr(Address), PChar(buf), 3, WriteSize); CloseHandle(hProces); こう書いたのですが、うまくいきませんでした。上の質問意味不明ですねOrz
524 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 10:40:08 ] ええと、255=$FF 以上は1バイトで表現出来ません。 2バイトを書きたいなら $29A なら $02 と $9Aに分けて SetLength(buf,2); buf[1] := Chr($9A); buf[2] := Chr($02); WriteProcessMemory(hProces, ptr(Address), PChar(buf), length(buf), WriteSize); または、 var SendInt:WORD; として SendInt := $029A WriteProcessMemory(hProces, ptr(Address), @SendInt , SizeOf(SendInt), WriteSize);
525 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 12:17:08 ] 色んな理解が足りない。 どうして PCharではなくて string を使ってるかというと、 PCharだとメモリ確保した後、開放しなければいけないけど stringなら自動開放されるからtry〜finally を使わなくてもいいから便利だから。 PCharやstringを使うのは、可変サイズに対応する為。 3バイトでも4バイトでも同じコードで対応出来るからね。 でも固定サイズなら、ポインタで処理する必要はない。 渡す時にポインタを渡せばいい。 byte,WORD,DWORDのそれぞれの引数用の関数3つを作る方がスマートだよ
526 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 15:50:39 ] >>524 >>525 ご回答ありがとうございます。 必要な事はできたのですが、純粋に疑問になったので思い切って質問してみた所存です。 二つに分けてやるのは知りませんでした。 Stringは自動開放されるのを知っていましたが、Pcharも自動で開放されるかと思ってました(汗 私はbyte,WORD,DWORDとかの三つの関数作るなんて思わないでがつがつ書いていましたOrz あとこれは余談ですが、GetMEMとSetLengthとは同じなんですかね? 私がGETMEMで確保してましたが、回答してくださった方はSetLengthでやっていました。 これはアセンブラのCMPとTESTみたいな感じで好みによってでしょうか? 別にこれには答えてくださらなくても構いません。 回答者のお二人ありがとうございました、目からウロコです><
527 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 17:38:22 ] >>526 ヘルプを読めばGetMemとSetLengthの違いがわかります
528 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 21:07:30 ] >>527 ほんとだ・・・いつもメモリ扱う時はPchar使ってたから、意識しないで使ってたけど、 違いあったんですね・・・。 どうもでした。
529 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 11:01:59 ] Fizz-Buzz 問題: ttp://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm 1から100までの数をプリントするプログラムを書け。 ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、 3と5両方の倍数の場合には「FizzBuzz」とプリントすること。 ヒント GUIアプリでも AllocConsole; を入れておけばコンソールを出して write/wrilteln を使う事が出来ます TMemoを貼ってLines.Add をプリント代わりとしてもいいです。
530 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:51:19 ] >>517-521 結局どっちなんだよw
531 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 14:04:56 ] bitmap.PixelFormat := pf32bit; bitmap.Canvas.Pixels[0,0] := TColor($0000FF); PDWORD(bitmap.ScanLine[1])^ := DWORD(TColor($0000FF)); PDWORD(bitmap.ScanLine[2])^ := DWORD($0000FF); で試してみた 結果 赤 青 青 嘘つきばっかだなw
532 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 22:39:54 ] もう放置したら?
533 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 17:40:34 ] >DWORD(TColor($0000FF)); >DWORD($0000FF); 意味ねぇーー
534 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 12:35:55 ] >>533 「意味が無い」ことを説明してるんでは? TColorが上位、下位逆なのを説明されても理解できていない&認めようと しないのが多数居たのが驚き。 いや、それだけ初心者向けの言語ってことなんだろうな。
535 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 18:38:44 ] 多数じゃなくて、一人だけだろw
536 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 15:15:36 ] DLLを1つだけ LoadLibrary で読んでGetProcAddressして動かしてるプログラムがあります このDLLをリソースには入れれたのですが実行時にDLLをHDDに書き込まずに動かす方法があれば教えてください 環境は、WinXP,Delphi6です。。。ファイルをEXE1つだけにしたいだけなのですがお願いします
537 名前:536 mailto:sage [2008/03/15(土) 16:18:06 ] わざわざファイルに書き込まなくてもそのままでいけました。。。
538 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 20:09:45 ] GPL逃れですか?
539 名前:デフォルトの名無しさん [2008/03/27(木) 17:33:47 ] ほしゅ
540 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 06:48:24 ] >>534 間違っています。 以上。 ↓次どうぞ
541 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 15:44:57 ] ビルドした日付を埋め込むにはどうしたらいいですか? BCBの__DATE__みたいな奴です。
542 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 22:47:59 ] できないので手動で埋め込んでください。
543 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 10:01:18 ] $Iで埋め込んだらどうかな。 実験コード procedure TForm1.FormCreate(Sender: TObject); begin with TStringList.Create do try Add(''''+formatDateTime('yyyy/mm/dd',now)+''''); SaveToFile('Test.dat'); finally free end; Caption:={$I test.dat}; end; 名前付きパイプで、日付データを返すようなのを作って走らせて {$I \\.\pipe\DatePipe } とか
544 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 11:30:32 ] 名前付きパイプは上手くゆかなかった。 APIで読めば読めるけど、LoadFromFileでは読めない。 たぶんLoadFromFileではサイズを先に読んでから処理するからなんだろう。 だから $Iでも読めないかも
545 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 18:58:18 ] フォームに並べた10個のラベル (名前が label1,label2..label10 とかだとして) それぞれのラベルのCaptionにループを使ってアクセスするにはどうしたらいいんでしょう。
546 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 21:02:21 ] (FindComponent('Label'+IntToStr(LabelNum))as TLabel).Caption
547 名前:545 mailto:sage [2008/04/17(木) 21:33:34 ] 助かりました、ありがとうございました!
548 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 20:51:42 ] >>543 それを埋め込んだデルファイを起動するアプリを作っていいかんじになりました、どうも。
549 名前:デフォルトの名無しさん [2008/05/14(水) 16:04:58 ] TDrawGridのColやRowプロパティが変更する場合の、 イベントハンドラを教えてくださいorz
550 名前:549 mailto:sage [2008/05/14(水) 16:16:32 ] OnClickでできますた。
551 名前:デフォルトの名無しさん [2008/05/17(土) 13:45:07 ] Delphianが行方不明なのでこちらに質問させてください;; Stringでなく数値で操作できるGridコンポ探しています。 どなたかご存じないですか?
552 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 02:03:35 ] >数値で操作できる いみふめ 数値と文字列は相互可変なんだから TStringGrid でなにが不足なんだ?
553 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 10:57:12 ] セルの値を直接数値で入れたり出したりしたいんだろう。素人がしたがりたそうなことだ。
554 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 11:09:12 ] '0'..'9'のみ入れさせたいなら StringGridKeyPressイベントで if not (Key in ['0'..'9']) then Key := #0; とかやって入力を潰してしまえばいい。 ペーストも含めて対策したいならSetEditTextでゴミを取り除いてCells[]にセットしてやればいい。 他にもなんか対策すべきだったと思うが忘れた。 まあそこらへんのノウハウ込みのコンポを探してるんだろうが。
555 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 12:02:23 ] はい、日曜ど素人でございます(T_T) StringGridKeyPressとSetEditTextで新しいコンポを作れそうです。 ありがとうございました。
556 名前:デフォルトの名無しさん [2008/05/28(水) 18:57:24 ] TFileStreamでファイルをオープンして、 別のストリーム、たとえば、TContentStreamにファイルの中身を設定しようとすると、 どういった記述となりますか?
557 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 19:55:36 ] Assignを使う。どちらもTStream派生だから。
558 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 19:59:25 ] LoadFromStream はないの?
559 名前:デフォルトの名無しさん [2008/05/31(土) 02:17:47 ] グーグルマップに自分のブックマーク(っての?)残せるやん? ローカルの地図画像であんな感じのアプリを、db連動で作ってみたいんだけど、何を参考にすればいい? グラフィック関係かと思って、ゲーム関係見たけど、あまり参考になりそうにない。
560 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 11:48:36 ] 超初心者ですまん。 juni := member_suu + 1; for t := 0 to member_suu - 1 do begin for k := 0 to member_suu - 1 do begin if StrToInt(ListBox1.Items[t]) >= StrToInt(ListBox1.Items[k]) then juni := juni - 1; end; ListBox2.Items[t] := IntToStr(juni); juni := member_suu + 1; end; 上の関数で整数の特典に対して順位をつけたのだが、同点がおおくて1位等が重複してしまうので、 重複しないようにしたい。1位と2位の差はあまりこだわっていなく、名前順でいいしランダム(条件なし)でもいい。 アドバイスください。
561 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 14:38:25 ] ・名前順なら得点と名前をソートのキーとする ・ランダムなら、得点とランダム値をソートのキーとする
562 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 03:10:21 ] Jane Doe Styleのスレッド本文の表示には何のコンポーネントを使っているのでしょうか?
563 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 03:11:13 ] すみません、他で聞きます。
564 名前:デフォルトの名無しさん [2008/07/23(水) 17:05:00 ] Form に Formを貼り付けると、MainMenuが表示されませんねorz 表示させる方法はあるのでしょうか? 無ければ、Menuライクなコンポーネント?
565 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 19:25:23 ] 何がやりたいの?
566 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 13:42:48 ] HKEY_LOCAL_MACHINE\SYSTEM\ControlSet***\Enum以下の レジストリを操作(キー・値の変更・削除)したいんですが SYSTEMユーザーしか操作権限がない状態です これらを操作する方法などありますか?
567 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 22:03:58 ] いやそれ操作したら駄目だろ。
568 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 11:06:01 ] やっぱりタブーなのね(´・ω・`)サーセンでした
569 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 14:37:09 ] なにしたいのよ?
570 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 14:57:37 ] テスト環境で設定したソフトの登録情報を 本番環境とごっそり置き換える作業をプログラム化したいんです。 今、それをするのに手作業(設定時なのでAdministrato)で レジストリのアクセス権つけて不必要な登録を消したりとかしてます。
571 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 15:14:04 ] それにしてもHKLM\System以下を書き換えるなんてのはありえないと思うが?
572 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 16:17:13 ] Enum\LEGACY*のいくつかにマシン名やコンピュータの設定が 刻まれているので消しているということらしいんですが (この辺がテスト環境と本番環境で変わってくるので変更したい) 実際には、その環境の情報を見てはいないんですが 消す必要がないのかな・・・
573 名前:デフォルトの名無しさん [2008/08/29(金) 00:44:34 ] 画像ファイル(bmp、jpg)をテキストデータとして扱うことはできませんか。 MIMEとか、ishのような感じで、当然、可逆変換で。
574 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 08:19:15 ] そのMIMEとかいshで変換すりゃあいいやん。意味不明。
575 名前:573 [2008/08/29(金) 19:31:44 ] ん〜と、簡易データベースみたいなのをつくろうとしてて、テキストフィールドに画像を「テキストデータとして格納」したいってことなんだけど、意味不明?
576 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 21:25:36 ] やっぱり意味不明かも。 まともなRDBMSならBLOB使うべきだし、 BLOB使えないなら別の名前を与えてファイルのまま保存、使うときは逆参照汁。
577 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 21:29:26 ] まあどうしてもやりたいなら止めない。 ttp://www.google.com/codesearch?q=BASE64+lang%3Apas この辺りでも参考にしてくれ。
578 名前:デフォルトの名無しさん [2008/08/31(日) 01:49:12 ] あ、俺は逆のパターンを知りたい。 文字列フィールドに入りきれない文字列を画像に変換してBLOBに保存する、って無理?
579 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 11:22:22 ] >>578 使用してるDBが分からないけど、Delphiからということを考慮するとFirebirdか? もしそうなら、難しいこと考えず、サブタイプが1(テキスト)のBLOG作ればいいんじゃないのかな? ほかのDBだと、 PostgreSQLはTEXT型があるから、意識する必要なし SQL Serverも、2005からVARCHAR(MAX)があるから、意識する必要なし MYSQLもTEXT型があるみたいだ ORCLE, DB2はシラネ
580 名前:デフォルトの名無しさん [2008/08/31(日) 11:37:40 ] >>579 ローカルで火鳥かMSQLか何かの組み込みエンジン(まぁ、これは何でもよい。)、相手先はOracle。 Oracleにはあらかじめ定義された文字・数値項目と画像の入力ができる。 しかし、設計が追いついていないため、利用者で必要な情報を入力する文字項目が足りない。 画像なら何十枚でも追加可能。 そこで、ローカル情報を画像に変換してオラクル側に画像として保存すれば、当面は事足りるってこと。 もちろん取り出したら、ローカル側では文字情報に戻す。 その時の変換作業用っていうか、状態確認用みたいなので、ローカルでも同じものを保存しておきたい。 と言うことなんだけど。
581 名前:デフォルトの名無しさん [2008/09/01(月) 07:15:35 ] EditでIMEがOn/Offで背景色を変えたいんだけど そういったサンプルコードないですか?
582 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 19:27:39 ] 無いな。だがヒントだけ教えてやろう。 IMEの状態が変わるときのメッセージ(WM_IME_NOTIFY)を受けたら IMEの状態を取得して、ONの時はColorプロパティを適当な色に変えれば良いんだ。
583 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 01:05:42 ] 処理が大まかに2つあってタイマーを使って繰り返したい(Intervalはどちらも同じで問題ない)場合 タイマーを一つだけ使うのと、処理それぞれでタイマーを作るのでどっちが一般的なんでしょうか? また、どっちが軽くなるんでしょうか? よろしくお願いします。
584 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 03:24:52 ] Intervalが同じならとりあえず一つで十分だろう。 タイマー二つまわすよりも一つの方が理屈としては軽い。 ただタイマーごときで重くなるようなPCは今時存在しない。
585 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 03:31:58 ] >>584 ありがとうございます! 助かりました
586 名前:デフォルトの名無しさん [2008/09/08(月) 08:07:01 ] あの・・単純な質問なのですが、TChartコンポーネントを使って 凡例を表示させると、凡例がグラフの裏側へと隠れてしまいます。 (枠の端っこのちょっとだけ見えている状態です) これをグラフよりも手前に表示させる方法を教えてください・・
587 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 20:01:27 ] ソフト公開所 namidame.2ch.net/test/read.cgi/mitemite/1220869722/ こういうスレつくってみた。
588 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 06:27:01 ] アップローダもなしに何をどう公開しろと・・・
589 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 14:49:55 ] 板違いで失礼します。 Linux環境にてDelphi互換のLazarusをインストールして使いたいと思い freePascal本体、Freepascalのソース、Lazarus本体をインストール致しました。 Lazarusは立ち上がり、ソース入力後 いざ実行というときに、コンパイラに弾かれてしまいます。 以下エラーメッセージです。 /usr/bin/ld: cannot find -lX11 project1.lpr(17,1) Error: Error while linking project1.lpr(17,1) Fatal: There were 1 errors compiling module, stopping リンク関係の設定を何かはじめに行なわないといけないのでしょうか? もし、ご存じの方いらっしゃいましたらご教授ください。 よろしくおねがいします。
590 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 18:39:03 ] >>589 とりあえずこういうスレがあるからそちらで聞くとよいと思われ。 【Delphi互換!?】FreePascal【GPL】 pc11.2ch.net/test/read.cgi/tech/1137051510/l50
591 名前:589 mailto:sage [2008/09/11(木) 09:58:00 ] >>590 ありがとうございました。 教えていただいた、スレを拝見致しまして 無事解決することができました!
592 名前:デフォルトの名無しさん [2008/09/12(金) 13:51:14 ] ウィンドウっとか、オブジェクトってフォームデザイナで作っておかないとだめなんでしょうか? ユーザーの処理にあわせて、新しいフォームを作り、そこに画像を表示させたいんです。 元々用意しとくんじゃなくて、いくらでも増やせていけるように。 たとえばフォトショップでいくらでも画像ひらいて、どんどんウィンドウ増えるじゃないですか。 あーいう感じです。
593 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 13:59:37 ] インスタンスをどんどん作ればいいじゃね? TForm1=class(TForm) end; forms: array of TForm1 SetLenght( forms, 10 ); for i := 0 to 9 do forms[i] := TForm1.Create( Self ); って感じで。 これだったら、デザイナで1つ作って、実行時は10個フォームが出きるが。
594 名前:デフォルトの名無しさん [2008/09/12(金) 15:03:51 ] ありがとうございます。 このフォームの上につくるオブジェクトもこれでOKですかね。 いわゆる動的生成をやるってことですよね?
595 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 15:13:38 ] そうです。 フォーム上のObjectが同じなら最初にデザイナで作っておく。 フォームごとに変わるなら、それぞれ、動的作成するんだけど、 動的作成しなければいけないObjectが多数ある場合は、 デザイナで作った方が簡単だと思う。
596 名前:デフォルトの名無しさん [2008/09/12(金) 15:49:30 ] ありがとうございました!
597 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 18:27:00 ] >>588 アップローダー作ったら公開してくれるの?
598 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 00:30:44 ] >>597 半年ROMれ
599 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 00:35:40 ] ---------半年後----------
600 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 00:47:11 ] 最終回か…。
601 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 21:18:10 ] あ
602 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 15:50:00 ] >>529 3の倍数はアホになれ
603 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 23:02:01 ] 十年ほど初心者やってるんですが、先ほどFastCodeを知り試してみました D5にFastCode.Libraries-0.6.4入れたらStrUtils.pasなど新しいものが入っていないので断念して 某所さんの古い記事にあった「詰め合わせセット RTL Replacement Pkg v0.3」を入れました >Delphi 4 以降に対応しています。私はまだ試していないのですが、Delphi 7 以前では特にお勧めだと思います。 とあったのですがやはりエラーの嵐でサンプルすらコンパイル出来ませんでした どなたかD5で使っておられる方は居ませんでしょうか? D2007も持ってはいるんですが起動時間や手軽さからD5は手放せないのです
604 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 23:27:22 ] すなおにD2007
605 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 23:29:02 ] >>603 D5持ってたらなんなの?
606 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 23:35:15 ] >>604 D2007ではFastCodeの効果ありますでしょうか?
607 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 23:35:47 ] >>605 いえ、FastCodeの話です
608 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 00:44:33 ] D2007はFastCodeもFastMoveもFastMMも採用済みじゃなかったっけ?
609 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 02:09:08 ] FastCodeのAnsiStringReplaceは「Ansi」って付いてるけど マルチバイト非対応なんで気を付けてね
610 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 09:14:53 ] FastMMは使ってるから何か分かるが、 FastCodeとかFastMoveって何?
611 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 10:24:37 ] グーグレ
612 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 14:31:52 ] >>610 標準のシステムの関数を速いのにおきかえたものただし>>609 の問題があったはず
613 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 11:32:01 ] バグ恐いからFastMMしか使ってないな
614 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 18:23:00 ] ちょうどCompareMemがネックになってたんでちょっと使ってみるかな。
615 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 13:17:57 ] >CompareMem kwsk
616 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 15:08:18 ] TMemoryStreamの先頭3バイト削除したりできますか?
617 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 00:23:17 ] だめです 先頭3バイト以降を別のStreamにコピーするとか MemoryをPCharにキャストして[3]とか
618 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 07:53:17 ] そもそもメモリを削除ってなによ
619 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 10:04:30 ] cのscanf相当の関数教えて
620 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 10:27:00 ] >>619 その前にそのscanfとやらが、Delphiでどの関数にあたるのかを説明してくれ。
621 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 15:21:45 ] >>619 ないはず
622 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 16:36:03 ] >>619 stdioはいまさらイランと仮定して、いっかい文字列に入れてから strtoint strtofloat strtocurr他で一個づつ変換
623 名前:デフォルトの名無しさん [2009/03/24(火) 14:32:45 ] TMemoryStreamでSizeを大きくしたら、大きくなった部分NULL埋めされるんでしたっけ?
624 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 15:18:41 ] >>623 試すのに1分もかからないと思うが、どうよ?