3 :
デフォルトの名無しさん :2007/03/03(土) 00:02:32
YouTubeのHTMLをidHTTPで取得しましたが、日本語のタイトルの取得がうまくいきません。 化けてしまっているようで、正しい日本語にならないのです。 サイトのエンコードはUTF8で、このソースをSJISにしたいのですが、どういう処理をすると変換できるのでしょうか。
4 :
デフォルトの名無しさん :2007/03/03(土) 19:53:02
だれかdelphiの仕事くれ。
5 :
デフォルトの名無しさん :2007/03/04(日) 12:42:08
あるよ、たくさん。やる?
ちょいブランクあるので何か適正試験みたなことしてくれないか? 〜を作ってソースうpしろみたいな。 DBはFirebirdを指定してくれるとありがたい。
くだスレって超低レベルな仕事の斡旋もしてるのか?
Delphiめんどい
10 :
デフォルトの名無しさん :2007/03/05(月) 01:21:26
うちはDBはSQLServerが多いけど、TADOConnectionとかなら使えるだろ?
11 :
デフォルトの名無しさん :2007/03/05(月) 07:57:20
>>11 の削除依頼出してきました。
せっかく好意で無償公開してくれているのに
会社の利益を損なうような非常識なレスは慎んでください。
ライセンスに触れないって言ってるのに、一私企業の利益のために削除依頼とか 言ってるのは、どうかしてる。ユーザの反感を煽るためのアンチ活動としか思えんな。
>>12 >>11 のリンク先に書かれている内容を最低でも256回読んでこい。
どこに「会社の利益を損なう」ことがある?
少なくともリンク先ではライセンスに関して真摯に討論されているし、
>>11 を書いた人だって会社の利益を損なうことを意図してレスしたわけではないだろう。
一つめのリンクは呼び水で、二つめのリンクは事の是非を問うためのやりとりでしょう。
リンク先を読まずにレスの表面だけなぞればそのようにとる人が現れても仕方がないかもしれないが。
アンチのテクニック。相手するだけ損。
16 :
デフォルトの名無しさん :2007/03/05(月) 23:16:49
Delphi2007の案内来たけど、Vistaにすんなりインストールできる事と、 VistaっぽいVCLが追加になった以外、BDS2006と大した違いがなさそうね。 まあ、GUIだけ変えて毎年3万取る弥生会計よりは遙かに良心的だけど。
まぁ、人殺しより強盗の方がましだけど、って聞こえるな。
18 :
sage :2007/03/06(火) 03:19:42
誰か助けてくれ。 delphiはじめてまだ数週間の漏れは今壁にぶつかってる。 TListBoxでアイテムが選択されたときに起きるイベントハンドラを書くには どーしたらいいんだ。いや、いいんでしょうか・・。 説明難しいから例をだすと、 TListBOXのアイテムが選択された→Button1をEnableに。 こんな感じでやりたいんだ。
19 :
デフォルトの名無しさん :2007/03/06(火) 04:13:06
onChangeじゃだめなのか?
OnClickとかOnMouseUpとかで、SelCountとかItemIndex見る
ShellExecute(Handle,'open',PChar('C:\nantoka.exe'), '',Pchar('C:\'),SW_SHOWDEFAULT); 上記のように書いてnantoka.exeを実行させています。 ただ、実行させるexeによっては、 「ファイル○○がありません」「○○が見つかりません」とか出ます。 (ただ、エクスプローラからダブルクリックで起動させる際には エラーは出ず、正常に動作します) 多分、引数を与えればいいと考えてるんですけど 教えていただきたいです。
ShellExecute(Handle, nil, PChar('C:\nantoka.exe'), nil, nil, SW_SHOW);
さっきまでちゃんと動いてた俺のソフトが突然エラー吐くようになった件。 助けてください。。 起動時にアドレスの読み込み違反がどーのこーのってでるんだが…。 FormCreateの部分が問題なのかね? 自動作成フォームの順番とか、なにを参考に変えたらいいんだろうか…。 まじで泥沼なんです。どなたかご教授を。。
>>23 たいてい作成されていないフォームのオブジェクトを参照したときの問題。
以上
26 :
デフォルトの名無しさん :2007/03/07(水) 07:50:57
.netを普及させる方法を思いついた! win32に、WCaption: WideString みたいなメンバを追加して さらにくそでかく遅いバイナリしか生成できなくする。 これなら.netでいいや、ってなりwin32死滅。
delphi のユーザなんて1%位なんだから、どうなっても大勢に無関係
29 :
1 :2007/03/07(水) 13:39:44
なんでって、39はもう落ちてね?
落ちてません。
この前の鯖落ちでログ消えた人が多いから混乱してるのよね
Delphi初心者が質問するのはいいけど、2ch初心者がスレ立てするのは勘弁してほしい。
33 :
1 :2007/03/09(金) 01:52:14
勘弁ならん。
>>23 最近はまった例。
TEditのonchangeで別のコンポーネントのプロパティを書き換えるコードを書いたら
起動時に書き換え対象コンポーネントが生成される前にonchangeイベントが発生した。
値を変更していないのに起動時にTEditのonchangeが発生するのはなぜだろう。
裸のコントロールが生成される ↓ 設計時のテキスト(デフォルトかもしれないが)が設定される ↓ OnChange イベントが起こる なんの不思議もないと思うが
>>34 最初ははまるよな
生成時に onchange イベントが発生する
生成時だけイベントをスルーさせる事
37 :
デフォルトの名無しさん :2007/03/10(土) 22:15:50
はまると言えば、TListViewのOwnerDataをtrueにして、 OnDataイベントで、 Item.SubStr.Text:='AAA'#13#10'BBB'; 一体何が気に入らなくてこういう現象に。
Vista入れた。初めての上書きインストール。 BDEを使ってる自作ソフトが一つも起動できない。 データベース自体よくわからずにサンプルと上手作ったやつ。 どすればいいですか?
もとに戻す
ぺけぴーに?
>>38 > データベース自体よくわからずにサンプルと上手作ったやつ。
ってなにを書いてる?>おいら
サンプルとか見てつくったやつ
VistaじゃBDEはつかえんのか
BDEなんか捨ててdbExpress使えよ
dbExpress って無料?おいらDelphi5なんだけど。 BDE+パラドックスなんだけどソースとかそのままでいけるの?
Vistaじゃダメみたい
46 :
デフォルトの名無しさん :2007/03/12(月) 22:30:21
タスクトレイにアイコン入れたいんだが、 APIって必須?ややこ杉
もしやと思って、いま、UAC無効にしたら起動はした。(前はそれ以前だった)が、 Access violation at address 004E2773 in module 'xx.exe'. Read of address 00000000. やっぱだめ
>>46 フリーのコンポがいっぱいある。
ターボでインストールできないなら、コンポのソースコピペするといい。
コピペも勉強。
>46 TrayIconとかそんな名前で探してみれば?
ぼめん、動いた。UAC無効で。 あくせすばいおれーしょんはタダのバグだった。 これで寝れます。 お騒がせしますた。
こんなんばっか・・・
53 :
デフォルトの名無しさん :2007/03/13(火) 00:48:24
TrayIconのコンポーネントって、BDS2006あたりから標準で付いてるけどな・・。
そんなドマイナーバージョンではなんの情報にもならん
過去スレでこんなのを見つけた // ----- ここから ------ 487 :デフォルトの名無しさん :2006/07/22(土) 23:46:26 Tlistのデータをファイルに出力したり、 そのファイルを読み込んでTlistを構築したりって ことがしたいんですけど、どうやったらいいですか? いろいろ調べたけど、わからなかった。 スレタイとおりの超初心者なんです。 教えてください。(あま〜いとか言わないでw) MyList : TList; New(ARecord); ARecord^.name := FileRec.Name ; ARecord^.Time := FileRec.Time; MyList.Add(ARecord); みたいににして作ったMyListをファイル出力。 また、そのファイルから後日再度MyListを構築したいんです。 ---- つづく -----
---- つづき ----
516 :ななしへたぐらま ◆XcB18Bks.Y :2006/07/24(月) 23:27:37
>>487 たとえばこんな感じで書き出せます.
procedure TForm1.SaveList;
var
fs: TFileStream;
i: integer;
begin
fs := TFileStream.Create(ListFileName, fmCreate);
try
for i := 0 to pred(FList.Count) do
fs.Write(PFileRec(FList[i])^, sizeof(TFileRec));
finally
fs.Free;
end;
end;
ただし,文字列は短い文字列かヌルで終わる文字列に格納しなければなりません.
TNantoka = packed record // ファイルに保存する場合は必ずpacked recoed
Name: shortstring; // 短い文字列.この場合256バイト使う.最大255バイト格納可能.
Time: TDateTime;
end;
// ----- ここまで ------
これって、書き出しはこれでいいとして、ファイルから読み込んでリストに展開するにはどうやればいいです?
書き込む時に最初に個数を書いておいて、その個数分処理するか 大きなリスト作っておいて、読みながらサイズが足りなければサイズを増やしてゆくか
読み出しは書き込みのように簡単にはいかないんだ?
この487はどう解決したのか
みなさん、もはよう。 (Rangeに値を入れても無視される件について) 986 :デフォルトの名無しさん :2007/03/12(月) 19:17:42 アセンブラ版 function MyRand(Range:DWORD):DWORD; asm IMUL EDX,Seed,08088405H Add EDX,1 MOV Seed,EDX MUL EDX MOV EAX,EDX end;
>>58 最初にサイズを書いておけば比較的簡単だよ
書き込み
var
fs: TFileStream;
i,siz: integer;
begin
fs := TFileStream.Create(ListFileName, fmCreate);
siz := FList.Count;
fs.Write(siz,sizeof(siz));
//あと同じ
これを逆に読めばいいけど、実体を入れる場所が必要だから、動的配列
var databuf:array of TNantoka; を関数の外に用意して
fs.Read(siz,sizeof(siz)); して
SetLength(databuf,siz);とサイズを指定
fs.Read(databuf[0],sizeof(databuf[0])*siz); で全部読んでおいて
後はひとつづつTListにポインタを割り当ててゆけばいいから
FList.Count:=siz;
for i := 0 to siz-1 do FList[i]=@databuf[i];
>>60 フォーム新規作成後、メモとボタンを貼り付けて
ボタンをダブルクリック、 で、出た3行を以下と置き換えたら、普通に動いたよ
procedure TForm1.Button1Click(Sender: TObject);
var Seed:DWORD;
function MyRand(Range:DWORD):DWORD;
asm
IMUL EDX,Seed,08088405H
Add EDX,1
MOV Seed,EDX
MUL EDX
MOV EAX,EDX
end;
var
I: Integer;
begin
Seed:=Round(Now);
for I := 0 to 100 - 1 do
Memo1.Lines.Add(Format('%5d',[MyRand(100)] ));
end;
>実体を入れる場所が必要だから、 あー、そうか。 どうもありがとう!
function MyRand(Range:DWORD):DWORD; Rangeは レジスタEAXで渡される asm IMUL EDX,Seed,08088405H EDXにSeed*Seed,08088405H の下位32bitが入る Add EDX,1 EDX:=EDX+1 MOV Seed,EDX Seed:=EDX MUL EDX EAXに EDX*EAXの下位32bitの結果が EDXにEAX*EDXの上位32bitが MOV EAX,EDX EAX:=EDX; 同時に Result:=EAX end; もしかして、アセンブラ関数じゃなく、インラインアセンブラにしてない? つまり begin 〜 end 中に書いてない? そうすると、変な事になっちゃうよ
>>62 のとおりにコピペしたら動いた。
なにかが抜けてたらしい。
あんがと♥
つか今時そんな粗悪なルーチンつかうなと
というか、ソレ、random関数そのままじゃないか
質問です。以下長くなりますがご容赦ください TCanvasの上に今回・前回・前々回分のデータを レーダーチャート(星型のようなもの)で出力する物を作っているのですが 1つのチャートの上に出力した時に今回前回で値が同じになってしまっているような場合 線が重なってしまって最後に描写した線しか表示できません。 これでは他の値が出力されているのかどうかが判別できないため 何か判別ができるようになる良い方法はないものでしょうか。 私が考えたのが前回・前々回分の枠の内側に それぞれ右斜線・左斜線の模様のようなものを描写し 重なっている部分は交差して表示するようにすれば 判別できるのではないかと思ったのですが、 どう実装すれば良いかが思いつきません 拙い質問ではありますが、諸兄の知恵を拝借できればと思います 以上、宜しくお願いします。
線の太さを奥程太くして、後から描画するほど細くするとか 座標が重なっていたら別の色で表示するとか
71 :
デフォルトの名無しさん :2007/03/14(水) 00:07:37
アプリケーションの起動時にテキストファイルを読み込んで その内容をTButtonやTMemoに反映するには、どうすればいいですか? 内容をすべて読み込むまでは自力でできました。 そこからオブジェクトに反映するには、どうすればいいのやら・・・ 未定義うんぬん出てきてよくわからない。 implementで定義するのでしょうか?
TMemo.Lines.LoadFromFile で読み込み。 TButton.Caption に代入。
73 :
デフォルトの名無しさん :2007/03/14(水) 10:20:53
言い方が悪かったかな・・・ 起動時に以下のTextloadを実行させてるんですけど ここからButton1(TButton)やMemo1(Tmemo)に 値を渡す方法がわかりません。 ボタンとかは押さずに(何もアクションなしに)値を反映させたいんです。 implementation var Text: String; procedure Textload; var FileName,s: String; LoadLine: TStringlist; ltf: TextFile; begin FileName := 'text1.txt'; AssignFile( ltf, FileName ); Reset( ltf ); while not Eof( ltf ) do begin Readln( ltf, LoadLine ); Text := Text + LoadLine + #13#10; end; CloseFile( ltf ); end; end;
それは関数で、メソッドじゃないから フォームをダブルクリックして そこに Memo1.Lines.Text:=Text; と書けばいいと思うよ
アプリケーションの起動時にならFormCreateに処理を書き込んじゃえばいいんじゃない Memoに追加したいならMemo1.Lines.Add(文字列) ボタンに表示したいならButton1.Caption:=文字列 とか
というか procedure TForm1.FormCreate(Sender: TObject); begin Memo1.Lines.LoadFromFile('text1.txt'); Button1.Caption:='文字列'; end; でいいような気もするが
77 :
デフォルトの名無しさん :2007/03/14(水) 10:50:38
FormCreateがメンバに含まれていない、 Memo1Button1が未定義と出ます。 超初心者なものでスミマセン。
だから、フォームの何もない所をダブルクリックしてみてよ
できました。ありがとうございます。
フォームにFormCreateが定義されてないんじゃない?
>>78 のいう通りフォームの何もない所をダブルクリックしてFormCreateを作りな
81 :
69 :2007/03/14(水) 12:36:14
>>70 レスいただいていたのに、返事が遅れてしまい申し訳ないです。
線の太さを変えたり色を変えたりすることは検討してみたのですが
モノクロで出力(ペーパーアウト)したときに、判別出来なくなってしまうので
できれば他の方法を検討してみたいと思います。ありがとうございました。
モノクロプリンタに出力する場合は 一番下を 特太黒で描画 2番目を 太い白で曲線描画 少しだけ細くした黒で描画 と白と黒で太さを換えるか、少しだけズラして重ね描画すれば それらしくなるよ
あと、元々の質問通りに答えると 輪郭データをarray of TPoint で作って それを Polygon で描画 その時のBrushのStyleで模様を付ける サンプルコード Canvas .Brush.Color:=clBlack; Canvas.Brush.Style:=bsBDiagonal ; Canvas.Pen.Width:=6; Canvas.Pen.Color:=clBlack; Canvas.Polygon([Point(10,10),Point(50,150),Point(10,100)]); Canvas.Brush.Style:=bsFDiagonal ; Canvas.Pen.Color:=clWhite; Canvas.Pen.Width:=4; Canvas.Polygon([Point(10,10),Point(150,150),Point(10,150)]); Canvas.Pen.Width:=2; Canvas.Pen.Color:=clBlack; Canvas.Polygon([Point(10,10),Point(150,150),Point(10,150)]);
今更Vista対策という恥ずかしい次第なのですが CD-ROM版ソフトの自動起動メニューからインストーラーを実行するというソフトがあります. Vistaだと実行ファイルに対する警告ダイアログが自動起動メニューのウィンドウの背後に出てきてしまいます. これを回避するうまい方法はないものでしょうか. やはり子プロセスを呼び出したら自分は隠れてしまうのが一番でしょうか.
>>84 素直に隠れて待機にしました.これで困る理由もないみたいですので.
IEコンポのブラウザ画面から画像をD&DでTTreeViewに受け入れたいのだけれど、どうすればいいでしょうか。 画像をツリーにD&Dして保存させるプログラムを書いている途中です。
OLEDragDropで健作
88 :
デフォルトの名無しさん :2007/03/14(水) 20:46:47
89 :
デフォルトの名無しさん :2007/03/14(水) 20:49:06
ちょっと聞きたいのですが、 record型で、クラスメソッドを定義したいのですが、どうしたらいいでしょうか? Delphi 2006です。 static 使うのか?と思ったのですが、駄目な感じでした。 外部に関数を出すしかないですかね・・・
90 :
デフォルトの名無しさん :2007/03/14(水) 20:54:29
あ、class メソッドに、後ろにstaticつけたらコンパイル 通りました。 おさわがせしますた。
91 :
デフォルトの名無しさん :2007/03/14(水) 22:25:18
exeのアイコンが書き換えられない。
92 :
デフォルトの名無しさん :2007/03/14(水) 22:28:50
うまくいった。 sまn
ホンダ超身軽wwwwwwwwwwwwwwww
95 :
デフォルトの名無しさん :2007/03/14(水) 22:39:26
インストールキーが取得できないんだけど、なにこれ
レコード型でデフォルトの初期値を設定することはできるのでしょうか? 例えば、 TMyPoint = record X, Y :integer; end; で、それぞれ初期値を-1にするようにしたいのです
コンストラクタ
「型」に初期値を設定しようというのがおかしい気がする。 初期値はコードや宣言で設定するものだ。
コンストラクタ
100 :
デフォルトの名無しさん :2007/03/15(木) 01:22:54
TEditorで、指定の行番号にキャレットを移動させるにはどうすれば
良いでしょうか?
なお、こちら(
ttp://www2.biglobe.ne.jp/~sakai/gensfaq2.htm#a012 )に
Memoコンポーネントでのやり方が書いてありましたが、このままでは駄目でした。
Editor1.SelStart := SendMessage(Editor1.Handle,EM_LineIndex,intresult,0);
intresultは移動させたい行の番号が入っています。
わかる方お願いします。
TEditor は Windows の標準コンポーネントじゃないから作者に訊くしか ないんじゃないかな
102 :
100 :2007/03/15(木) 01:28:47
>>101 ありがとう。でも有名なので知ってる方いると思いまして・・・
もうちょっと探してみます。
Cでいう "これは\"あれ\"です" みたいな書き方はDelphiでどう書くのでしょうか ''内に'を含む書き方です
>>103 質問とは違うのかもしれんが…
ShowMessage('hoge"hoge"hoge')
DelphiはStringを「’」〜「’」で表わし
その中で文字列として’を表示したければ「”」を使う
105 :
100 :2007/03/15(木) 23:11:06
やっぱり分かりません・・ 単に Editor1.SelStart := intresult; とすると指定の列にキャレットが移動しました・・・ Editor1.Row := intresult; としてもキャレットが動いてくれませんし・・・ 誰かおながいします
>>100 procedure TForm1.SpeedButton1Click(Sender: TObject);
var
NewString:string;
begin
with Editor1 do
begin
if not InputQuery('指定行へ移動','数値で',NewString) then exit;
Row:=StrToIntDef(NewString,1)-1;
end;
end;
>>107 100 だが、Row:= でキャレットは移動した。
TEditor にフォーカスが無くてそう見えないだけでは……なさそうだな?
↑107 だが、
111 :
デフォルトの名無しさん :2007/03/15(木) 23:37:39
>>96 できないので、
・constで定義して代入する
const DefaultMyPoint: TMyPoint = (X: -1; Y: -1);
var p: TMyPoint;
begin
p := DefaultMyPoint;
:
・TMyPointに初期化メソッドを定義して、呼び出す
TMyPoint = record
X, Y: Integer;
procedure Initialize;
end;
procedure TMyPoint.Initialize;
begin
X := -1;
Y := -1;
end;
var p: TMyPoint;
begin
p.Initialize;
:
>>106 ,
>>107 ,
>>109 ありがとうございます
>>109 フォーカス当たってないだけでした・・・
Editor1.Row := intresult;
Editor1.TopRow :=intresult;
でそれっぽい感じになりました。
ありがとうございました。
113 :
96 :2007/03/16(金) 00:56:05
>>98 いわれてみるとそうですね
ただ、クラスだとコンストラクターで初期値を設定できるので、
レコードでも同様にできそうな気がしてしまったもので…
>>111 一回ごとにそれぞれ代入するのが面倒だったので、
どちらかの方法を試してみます
ありがとうございました
114 :
96 :2007/03/16(金) 01:29:04
>>111 追記:
後者の方法は
endが必要なところにprocedureがあるというエラーがでました
115 :
デフォルトの名無しさん :2007/03/16(金) 03:58:51
>>114 Delphi2005辺りからの機能なので、バージョンによってはできない。
どうしてもメソッドでやりたければ、recordをobjectにする。
116 :
デフォルトの名無しさん :2007/03/16(金) 11:07:42
i : string; N: Dword; begin ReadProcessMemory(hProc,Ptr($004B9DB58),@i,2,N); button2.Caption:=i; end; として文字列を読み込めないのです。 どうしたらよかですか
117 :
116 :2007/03/16(金) 11:22:38
ちなみにそのメモリーにあるのはSJISコードです
まずはStringではなく、0で始まるchar型配列を使ったらどうですかね? Stringでなければならない理由があるの?そうなら少しString型のデータ構造を理解した方がよい。
3万超えてる… ゴメン、食うもんだけは。 ヤセの大食いって言われる。
iを文字列に使うのは止めた方がいい var s:string ;として setlength(s,2); //文字列に2バイト分メモリを確保して( s:='xx';でもいいよ) N :=0 ;//次のAPIがエラーでも0になるように ReadProcessMemory(hProc,Ptr($004B9DB58),PChar(s),2,N);
一般的に、慣例に従ってワーク変数に i や s を使うことが多いけど、 個人的に、そういうのは使わない方がいいと思う。 別の人がソースみて修正とか置換する時に大変なことになるから。 面倒でも intLoop とか strWork とか プリフィックス+用途 で命名するクセを付けた方がいいと思う。
短いスコープ(10行程度、長くても1画面)なら i, s でいいと思うけどな。 だから今回のようなケースなら俺は i, s を支持。
Fortran/C/pascalでは ループ変数は i,j,k をまず使うのが一般的なので ループ変数には i,j,kを使いましょう また個数を表現する変数にはM,Nを使いましょう 外に見えない、作業的に使うような短命な 変数に 1英字を使うのは悪い事ではありません。 そうする事で、それほど重要でなく短命である事を表現出来るからです。
テスト用のコード書いてて、変数にうっかりa,b,c,d,eとか使っちゃって エラーを出した漏れがきますたよ(´・ω・`)
Q 3重以上のループでは 変数名はどうしたらいいですか? A 3重以上のループにならないようにしましょう Q コーデング規則で短い変数名は使ってはいけないと書いてあるのですが? A あなたが指定された規則に従って下さい。 Q 短命な変数かどうかの目安は? A もっとも内側の関数のローカル変数は短命です。 でもあなたが1関数を1画面からはみだすくらい長く書く習慣を持っているならその限りではありません
iとかs使ってたのは 昔の処理系では変数の文字数が長い=処理が重い という時期があっただけ これがいまでも習慣化してる 今は処理速度的にはそれほど気にする必要はないので 後でメンテするときのことも考えてなんのループかわかるような変数名にした方がbetter 特にループ内で配列のデータを変化させる場合などは hoge[i]とかってすると他人が読む時にわかりにくい場合もある 何が言いたいかというと ぶっちゃけどっちでも良い あなたの環境で推奨されてる方法に従うのが吉
リストボックスについて質問があります。 リストボックスの要素を選択したとき、その要素(表示名)に 関連付けられた要素のID(string型)を取得したいと思って います。 どんな方法がいいのでしょうか?
>>127 自分は いっとき、実行時型情報を使って 列挙型を定義して
列挙型のpulishedプロパティを定義(そうすれば実行時型情報が登録されるから)
で、例えばMenuに追加するなら
procedure SetMenuEnumPropInit(TypeInfo: PTypeInfo;MenuItem:TMenuItem;Click:TNotifyEvent;ordNo:Cardinal);
var i:integer;
var T: PTypeData;
var s:string;
var nw:TMenuItem;
begin
T := GetTypeData(GetTypeData(TypeInfo)^.BaseType^);
for i:=T^.MinValue to T^.MaxValue do
begin
s:= GetEnumName(TypeInfo , i);
if i>=MenuItem.Count then begin
nw:=TMenuItem.Create(MenuItem);
MenuItem.Add(nw);
end else nw:=MenuItem.Items[i];
nw.Caption := s ;
nw.Visible := True;
nw.RadioItem:= True;
nw.OnClick := Click;
nw.Tag:=i;
nw.Checked:= ordNo=i;
end;
end;
みたいな手続き作って、コレでやってた。
リストボックスとかなら TStrings型だから汎用的に procedure GetEnumNameList(TypeInfo: PTypeInfo;str:TStrings); var i:integer; var T: PTypeData; var s:string; begin T := GetTypeData(GetTypeData(TypeInfo)^.BaseType^); for i:=T^.MinValue to T^.MaxValue do begin s:= GetEnumName(TypeInfo , i); if s<>'' then str.Add(s) else break; end; end; とやって、逆は文字列から GetEnumValue を使えばいい THoge(GetEnumValue( TypeInfo(THoge) ,text)) なお、uses TypInfo;が必要
130 :
デフォルトの名無しさん :2007/03/16(金) 20:27:04
インストールキーのメールが来ないのだけど、なんででしょうか? 今は発行停止中?
マルチカラムコンボボックス使え
133 :
デフォルトの名無しさん :2007/03/16(金) 20:48:46
d メールしてみる
134 :
デフォルトの名無しさん :2007/03/16(金) 20:56:55
Delphi 6/Personal Turbo Delphi/Explorer 今からいじるならどっちがおすすめ?
135 :
デフォルトの名無しさん :2007/03/16(金) 21:27:56
>>135 何でか知らないけど、Beckyで送信しようとしたらダメで、
Thunderbirdだったら問題なく送れたよ。
137 :
デフォルトの名無しさん :2007/03/17(土) 00:53:28
postmesseageでマウスクリックを送信するのに postMessage(TargetWnd,BM_CLICK,WM_LBUTTONDOWN ,0); だとダメでしょうか? 第二引数がちがうようなきがします。
for-in-do って、C#由来ですか?
Set8087CW(0x133f);がどう使うのか知りたいですかね?
は?
早く教えなさいったら。
143 :
デフォルトの名無しさん :2007/03/17(土) 08:26:25
>>139 すみません、引数を見つけることが出来ず、CのページのでできるのかなとかんがえてできませんですたTT
BM_CLICKはコモンコントロールのボタンを外から押す時に使う。 1回送れば後はやってくれる postMessage(TargetWnd,BM_CLICK,0 ,0); とwParam lParam は0にする WM_LBUTTONDOWN はWM_LBUTTONUP とセットにしないといけないし マウスの座標も用意してやらないといけない また2番目の引数に書かないといけない
helpより >OpenGL を使って 3D グラフィックスを描画するときは,すべての浮動小数点例外を無効にすることをお勧めします。 >これを行うには,メインフォームの OnCreate イベントで Set8087CW(0x133f) を呼び出してから OpenGL 関数を呼び出します。
>>144 さんくすできたああ
こういうのってどうやって調べてるんですか??
Delphi6に最初から入っているOpenGLを使いたいのですが 解説してるサイトはないでしょうか?
>>147 「OpenGL Delphi」でググるといくらでも出てくるんだけど
vista持ってないのでサンプルコード出せないけど一般的に、 まず関数ポインタ型を定義 HRESULT SHGetStockIconInfo( SHSTOCKICONID siid, UINT uFlags, SHSTOCKICONINFO *psii ); だから、 type TSHGetStockIconInfoProc = function (siid :TSHSTOCKICONID siid; uFlags:DWORD; var psii:TSHSTOCKICONINFO ); で、TSHSTOCKICONID とTSHSTOCKICONINFO をその前に定義しないといけない type TSHSTOCKICONID=integer; でもとりあえずいいと思う 構造体の方は typedef struct { DWORD cbSize; HICON hIcon; int iSysImageIndex; int iIcon; WCHAR szPath[MAX_PATH]; } SHSTOCKICONINFO; type TSHSTOCKICONINFO=packed record cbSize:DWORD ; hIcon:THandle; iSysImageIndex:Integer; iIcon:Integer; szPath:array [0..MAX_PATH-1]: WideChar; end; みたいな感じ
×szPath:array [0..MAX_PATH-1]: WideChar; szPath:array [0..MAX_PATH-1] of WideChar; ね で、後はそのコード通り、 hDLL := LoadLibrary( 'shell32.dll'); して var SHGetStockIconInfo:TSHGetStockIconInfoProc; SHGetStockIconInfo:=TSHGetStockIconInfoProc(GetProcAddress(hDLL,'SHGetStockIconInfo') ); と関数ポインタに割り当ててやれば SHGetStockIconInfoが使える筈
ありがとう やってみまする
>>148 gamdev.orgぐらいしか出てこないけど……
154 :
デフォルトの名無しさん :2007/03/17(土) 16:58:26
いつもお世話になっています。 コマンドプロンプトで、↓のプログラムを実行したいです。 Command = 'COMMAND.COM /c perl C:\hogehoge C:\index.html'; C:\hogehogeはperlのプログラムがおいてある場所です。 C:\index.htmlはファイルのパスです。 上記のように、ファイルのパスにスペースがない場合はうまくいくのですが、 Command = 'COMMAND.COM /c perl C:\hogehoge C:\Documents and Settings\hoge\デスクトップ\index.html'; のようにスペースがあるファイルを指定するとエラーで落ちてしまいます。 どうすればいいでしょうか。 また、ファイルパスを変数にしたい場合はどうすればいいでしょうか。 おねがいします。
こうかな? 'COMMAND.COM /c perl "C:\hogehoge C:\Documents and Settings\hoge\デスクトップ\index.html"' 質問2は、どういうふうなコード書いてるのかその手前5〜10行くらいをコピペしてみて
WinExec を使ってるかどうか知らんが、PChar でキャストするということか。 var FilePath:string; const BaseCommand='COMMAND.COM /c perl C:\hogehoge ' begin if not InputQuery('Input','FilePath',FilePath) then exit; WinExec(PChar(BaseCommand+FilePath),CmdShow); end;
相対URLを絶対URLに変換したいんですが、ググっても「JAVA」とか「正規表現」「.NET」 ばかりでDelphiのサンプルがありません。 正規表現とかは頭が沸騰しそうで、出来ればゴリゴリと書いたものが知りたいんですが。
158 :
154 :2007/03/17(土) 19:11:23
>>155 ,
>>156 ありがとう。
>>155 単純に
Command = 'COMMAND.COM /c perl C:\hogehoge "C:\Documents and Settings\hoge\デスクトップ\index.html"';
で出来ました(汗)
コードは長いので分割して投下します。
>>156 WinExecなのか良く分かりません・・・
159 :
154 :2007/03/17(土) 19:12:09
その1 procedure check(Command, Dest: String); var SI :TStartupInfo; PI :TProcessInformation; begin FillChar(SI,SizeOf(SI),0); SI.cb := SizeOf(SI); SI.dwFlags:= STARTF_USESHOWWINDOW; // DOS プロンプトが表示 SI.wShowWindow := SW_HIDE; // されるのを抑止する If Not CreateProcess(nil, PChar(Format('%s > %s',[Command,Dest])), nil,nil,False, 0, nil, nil, SI, PI) Then Raise Exception.Create('Error!'); While WaitForSingleObject(PI.hProcess, 0) = WAIT_TIMEOUT Do Application.ProcessMessages; // プロセス終了まで待機する CloseHandle(PI.hProcess); end;
160 :
154 :2007/03/17(土) 19:14:17
その2 procedure TForm1.ToolButton12Click(Sender: TObject); const Command = 'COMMAND.COM /c perl C:\hogehoge "C:\Documents and Settings\hoge\デスクトップ\index.html"'; // 実行するDOSプログラム var TempFileBuff: array[0..MAX_PATH] of Char; TempFileString: String; begin GetTempFileName('.','tmp',0,TempFileBuff); // テンポラリファイル TempFileString := String(TempFileBuff); // の作成 try check(Command,TempFileString); // 実行 finally DeleteFile(TempFileString); // テンポラリファイル削除 end; end;
161 :
154 :2007/03/17(土) 19:16:09
以上です。 よく分からず使っていますが・・・ おねがいします。
procedure TForm1.ToolButton12Click(Sender: TObject); //プログラム部分を「実行ファイル名」+「半角スペース」に削る const Command = 'COMMAND.COM /c perl C:\hogehoge '; // 実行するDOSプログラム var TempFileBuff: array[0..MAX_PATH] of Char; TempFileString: String; FilePath:string; begin //ファイルパス部分を入力 if not InputQuery('Input','FilePath',FilePath) then exit; //とにかくダブルクォートで挟んでしまう if FilePath[1]<>'"' then FilePath:='"'+FilePath; if LastDelimiter('"',FilePath)<>Length(FilePath) then FilePath:=FilePath+'"'; GetTempFileName('.','tmp',0,TempFileBuff); // テンポラリファイル くコ:彡同じ
163 :
154 :2007/03/17(土) 20:39:29
>>162 おおお〜。できました。ありがとう。
それはそうと、InputQueryというのを今知りました。
便利ですね。
ありがとうございました。
InputQuery はこんなテストには簡便でよく使うが、 この場合は普通オープンファイルダイアログを使う
TPageControlでタブを右クリックしてポップアップメニューを出したいのですが 右クリックをどうやって拾うのかよくわかりません。誰か教えて下さい。
難しいことはとりあえず考えなくて良い。 PageControlとPopupメニューを用意、 PageControlのPopupMenuプロパティに先ほどのメニューを割り当てればOK
167 :
165 :2007/03/18(日) 11:23:52
>>166 ありがとうございます。
今やってみたら、タブシート上で右クリックしてもポップアップメニューが出てしまったのですが、これはこういう物なんでしょうか?
私は、タブのいわゆる耳(ページを切り替える際にクリックする場所)を右クリックした時に出るイメージだったのですが。
キー取れない。 メール英語で送ってみたが うろ覚えの英語で通じるだろうか
製品版買えよ。 もうこのスレ金払ってないユーザーは質問禁止な。
こういうのは完全にNGだね。
delphi6に金払うのかよ
172 :
デフォルトの名無しさん :2007/03/18(日) 14:05:51
あんまりにもキー取れないって質問おおいよね。 本当に始めるなら買ったほうがいいよ。
delphi6なんてまだ売ってるの?
>あんまりにもキー取れないって質問おおいよね。 某のユーザ対応の良さがしのばれるよね。
しっかしdelの仕事へったな。 おまえらは何作ってんだ?
電卓とストップウォッチだよな、当然。
フリー版のキー取れないから、金出して買えって、変だよなー、押し売りのセリフみたい
気軽に買える金額じゃないしな
>>176 Oracle(1000クライアント程度)クライアントの顧客、売上管理システムとデータウェアハウスの仕組み、
リアルタイム(とは言えない)株価チャート、社内電子承認システムのワークフローのパッケージなど。
もっとでかいのはないの?
>>180 そのへんのこなれたもんは一人でくんでるよね?
チームならもっと効率いいのあるわけだし。
>>181 一人で組めるからdelphiなのさ。
単価も半年で1000万〜とかだしね。
チームでなんてやってられんよ。
一つで10億20億稼ぎたいならdelphiやめろ
>>182 販売やら給与やら株価やらは一人でも1ヶ月もかかんなくね?
UI変えて昔作った共通ライブラリ又はその客専用のライブラリを呼び出して終わりかと。
1ヶ月かからない仕事を1ヶ月かけることに意味があるんだよ。
くだスレらしい書き込みだなwww
>165 じゃあこの方法で。 procedure TForm1.PageControl1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var I:Integer; iInTab:Integer; Pt:TPoint; begin iInTab := -1; Pt := Point(X,Y); with (Sender as TPageControl) do begin for I:=0 to PageCount-1 do begin if PtInRect(TabRect(I),Pt)then begin iInTab := I; break; end; end; if iInTab>-1 then begin Pt := ClientToScreen(Pt); PopupMenu1.Popup(Pt.X,Pt.Y); end; end; end;
右クリックはどこで判断?
if Button = mbRight then
190 :
165 :2007/03/18(日) 16:25:01
>>187 ,189
できました。
勉強になりました。ありがとうございました。
functionで戻り値を二つ指定したい場合どうしたらいい??
>>191 戻り値にrecord型を使う
引数にvarを指定する
もっとスマートな方法がありそうな気がする
>>192 おーありがとう〜
レコード型というのもありますね〜
varを指定するというのはグローバル変数にして外からも使えるようにする、と言うことですか??
>193 何も付けない場合は値がコピーされて渡される。関数内部で変更できるけど呼び出し元に影響なし。 constを付けた場合は定数渡し。関数内部で変更しようとするとコンパイルエラーになる。 varを付けた場合は参照渡し。関数内部で変更すると呼び出し元に影響。 レコード型をやりとりするならvar渡しが一番スマート。Cのようにポインタを渡しても同じですが。 オブジェクト型はそれ自体がポインタ型の一種なので注意。
関数を function testSQR(var ret:Integer;x:integer):boolean; begin result:=x<=46340; //sqr(2^31-1) 以上だと平方すると桁溢れする ret:=x*x;//平方をret 変数で返す end; として 呼び出す方は var sqr:integer; testSQR(sqr, 100); のように呼び出す
>>195 の関数がなぜ戻り値にBoolean型を指定してるのかわからない…
そしてresultに渡されてるのは…
まあ良いや
次いってみよう
>>196 戻り値は桁あふれしたかどうか。
resultに渡されているのは論理値(Boolean)だが?
198 :
デフォルトの名無しさん :2007/03/19(月) 01:08:43
うーむ、なんと言うか・・・レベル低下もここまで来たか・・・
参照パラメータとか値パラメータとか、普通の言語なら常識だよな なんでヘルプ読まんかな・・・
203 :
デフォルトの名無しさん :2007/03/19(月) 04:22:14
クラスの質問なんですが、 どうしてprivateにある変数をpublicに置いて直接取得変更しないで わざわざpublicにpropertyというのを用意してその値を取得したりするんですか?
turbo delphiから使いはじめ、バージョンアップは初めての体験になるのですが 各種設定を簡単に引き継げますか? できるならやり方をお教えくださいませ。 by 22才 ♀ 保育士
何の設定?
>>203 1、後でインターフェースを変更しても良いようにする為
たとえば propertyだと var 引数に渡せませんから
2、そのクラスを継承してそのプロパティを publishedにすればRTTIを使って
実行中に型情報にアクセス出来るメリットが生まれます。
>>204 どうか、
顔が誰に似ているか
体格の特徴
できれば、スリーさいずをお願いいたします。
Form1.Left := 100; とかやると座標を代入するだけじゃなくその後の描画までやってくれるだろ。 そういう副作用を設定できる。
209 :
デフォルトの名無しさん :2007/03/19(月) 09:41:47
ありがとうございます。
>>206 なんか知らない単語が出てきて難しいですが、
拡張されることを考えるんだったら、そうしとけってことなんですね。
>>208 Form1が裏でやってた訳ですか〜。
目からうろこです。
今回は本当にありがとうございました。
>>204 このネカマめ!!
俺はこういうのを見分ける嗅覚がすごいんだぜ。
TQueryでキャッシュアップデートを使用してDBGridで入力して更新する処理を書いています。 連続して入力中にプライマリーキーが同じ場合に入力できないようにしたいのですが、どうしたらいいでしょうか。
もしかしたらおかしいのかもしれませんが、 ボタンを押したらループで100回くらい回すのをしてるんですが、その時にリストボックスにADDしてるんですが ループ中はフリーズのようになって100回終わったときに一気に描写されます。 これはこういう物なのでしょうか?
>>212 カラム移動のイベントで一度ポストすりゃいいじゃん。
あとはプライマリつーことで同値は入力不可。
>>212 やった事はないのだけど、DataSource.OnUpdateDataで対処出来ない?
>>213 そういうものです。
描画メッセージが発行されて、そのイベントが終わってから実行されますから、
途中描画させたいなら、
1、リストボックス.Updateとかで【さっさと描画しろ】と催促する
2、Application.ProcessMessages をループ中で呼び出して、溜まってるメッセージを処理させる
(ただしボタン操作なんかも受け付けるんで、再帰的に処理される事に耐えられるコードが要求される)
のどっちか
>>215 >>216 ありがとうございます。
listbox1.Updateで出来ました〜。
このループに色々な判定を入れて、ずっと回そうと思うのですが、メイン関数からの場合もこうやるのですか?
>>200 Delphi における
参照パラメータと値パラメータは実際には値渡しだったり参照渡しだったりするので
必ずヘルプに目を通す必要がありますね.
>>203 ・不用意に値を参照されたり書き換えられないようにするため
というのもあります.
たとえば時間のかかる計算処理をしていて結果を変数に書き込むとします.
これがただの変数だといつでも読み出せるので
計算前や計算途中に変数が変な値になっていても読み出せてしまうのです.
読み出す側はそれが正しい値なのかどうかはわかないのでそれが正しい値だと思いこんで処理をしてしまうかもしれません.
(処理中は読み出してはいけないという仕様を仕様書としてちゃんと用意すれば良いのですがそれでも使う側はかなり面倒です)
また自由に書き込めるということは計算中の値や計算結果を外部からいくらでも書き換えできてしまうのです.
このように公開された(だれでも読み書きできる)変数を用意するのはバグの元なので基本的にはやってはいけません.
>Delphi における >参照パラメータと値パラメータは実際には値渡しだったり参照渡しだったりするので ????
あるWebページのIWebBrowser2のポインタがわかっている状況でそのページのテキストの選択部分を取得したいのですがどうすればよいでしょうか。
DBEditでinterbaseのDate型のフィールドの時刻をhh:mm形式で編集するのってどうすればいいんでしょう。 Displayformatにhh:mm Editmaskに!99:99;1を設定したのですが日付または時刻ではありません というエラーになってしまいます。 環境はD3+interbase4.2です。
>>217 無限ループで回すの?
それなら、タイマーコンポを貼り付けて、そのイベントで1件づつ処理するか
Application.OnIdleのイベントで1件づつ処理するか
>>221 !99:99;1 の最後の1が何をしてるのか判らんから言うのだが
EditMaskを空白にして 同じかどうか試してみたら?
受験勉強の間に何もかも忘れてしまった。 どっかいいサイトないか?
>>219 書き方が不正確でした,すいません.
ヘルプの『パラメータと受け渡し』の項より.
> 変数パラメータ(var)は常に参照渡しです。つまり,実際の格納位置をポイントする 32 ビットポインタによって渡されます。
> 値パラメータと定数パラメータ(const)は,そのパラメータの型とサイズに応じて値渡しまたは参照渡しになります。
DBGridで特定の列を飛ばして移動するようにするにはどうしたらいいですか? A B Cと列があってAを入力したら次はBはコードで変更して表示だけ行い Cに移動するようにしたいです。
DataSet のOnValidate イベントかな。
>>226 const はともかく、値パラメータがサイズや型によってころころと参照渡しに
変わる場合ってどんな場合? そんないい加減なことでいいのか?
いいんです。
そういう設計なんだから問題ない。
質問させてください。 Panel1の上に、Image1とImage2があるときに、 Image1とImage2が重なったときにはImage2が常に前面に 表示されるようにするにはどうすればいいんでしょうか? ヘルプ眺め回したんですがどうしても分かりません…orz どうか御教授おねがいします><
前面に出すみたいなのなかったっけ? 動的に作った場合はBringToFrontだっけ?
>>229 データサイズの大きな値を渡すときはコピーを取ってそのアドレスを渡すのだと思います.
constで値渡しされる場合もコンパイラが関数内での値の変更を許さなければ問題ないのでしょう.
>>232 設計時ならImage2を右クリック→[前面に移動(F)]
実行時なら
>>233 の通り, Image2.BringToFront でいけると思います.
235 :
232 :2007/03/21(水) 00:00:30
>>233-234 出来ました!
どうもありがとうございました。
初歩的な質問ですみません。
>>329 >データサイズの大きな値を渡すときはコピーを取ってそのアドレスを渡すのだと思います.
それでは、参照渡しであることをユーザは知る必要はないだろう。なんで、場合によっては
参照渡しであることを明記する必要があるの?
整数配列の要素に特定の値があるかどうかを判定して 存在すればその要素が最初に見つかった位置を返す関数(Posの整数配列版)って何なのでしょう? 探しても探しても見つかりません。。
if (A=x) and (B=y) then C:=z; と言う処理があって。 1 x1 y1 z1 2 x2 y2 z2 3 x3 y3 z3 4 ・・・ と、xyzの値の組み合わせが200ぐらいあるのですが、こういう場合はどういう風に処理したらいいのでしょうか? 全部を処理するのではなく、2以外を全部処理とか操作できるようにしたいです。 そうした場合はこれらの値を別ファイルにして、csv?とかいうのにするのですか?
>>237 そんな関数は自分でつくっても1分もかからないだろ。
>>238 csv は数値を文字列に置き換えてファイルにする一形式。
数値そのものをファイルにするほうが何倍も読み書きが効率的。
>>239 どういう風にやったらいいのでしょう??
ファイル操作とか難しくてよくわからないんです。。
>>240 ADOつかって操作するかコンバートして他のDBに落としたら?
何件あるかわからんけど、1万超えてるなら他のDBに落としたほうがいいよ。
あのねー、 GofのデザインパターンってJAVAやC++での説明ばっかりでそ? Pascalで説明してくれているサイトとかないんでしょうか?(ないだろうなぁ) 最近興味がわいてきたんだけど、JAVAでは読みこなせないのです…
>>242 あのねー、
ありますけどねー
なんかねー
他の人に聞いてくださいって感じです。
>>241 200件です
番号 住所で
番号入力されたら、住所とかを出力したいです。
>>244 削除しないならADOで十分かと。
SQL使えるしかなり楽。
StringList使ってやってもいい件数だけどね。
TSaveadialogを表示させたとき、デフォルトのファイル名を指定しておきたいのだけれど、どのプロパティを変えればいいのだろうか
248 :
242 :2007/03/21(水) 13:43:48
みつけました♪ 自己解決です(^^
SaveDialog1.FileName := 'hoge.txt';
251 :
デフォルトの名無しさん :2007/03/21(水) 14:05:27
最近Delphi7からBDS2006に移行したのですが、 Win32用のプログラムでヘルプファイルが起動できなくなってしまいました。 Application.HelpFile := 'help.hlp'; Application.HelpCommand(HELP_FINDER, 0); という風に書いてもヘルプが起動しません。 Del7でコンパイルしたものは正常に動作します。 BDS2006でコンパイルしたEXEを他のPCで起動しても駄目でした。 (ソースファイルは同一のものです) ヘルプファイルの扱い方に変更でもあったのでしょうか。 ご存じのかたは教えてください。よろしくお願いします。
252 :
251 :2007/03/21(水) 14:20:58
自己解決しました。 WinHelpViewerユニットのUSESが必要になったのですね。
>>238 そういう時は、まず構造体を定義する
type TMyRecode=record
x:Integer;
y:Integer;
z:string; //<---型は適切なものに
end;
この構造体の初期化付配列変数を定義する
var MyDatas : array[0..N-1] of TMyRecode=
((x: 0 ; y: 123; z:'abc')
,(x: 1 ; y: 456; z:'def')
......
);
このデータをfor 文でループして処理する
for i:=Low(MyDatas) to High(MyDatas) do
with MyDatas[i] do begin
if (A=x) and (B=y) then C:=z;
end;
>>253 それやるならTListを隠蔽したクラスをつくったほうがよくね?
>>254 じゃあ、ソレで説明してみてあげてヨ
コード書いてあげるの、案外大変だよ
type PRecHoge = ^TRecHoge; TRecHoge = record Index: Integer; PostNo: string; Addr: string; end; THogeList = class(TObject) private FList: TList; public constructor Create; destructor Destroy; override; function Add(const Hoge: TRecHoge): Integer; procedure Assign(const Source: THogeList); procedure Clear; procedure Delete(const Index: Integer); function IndexOf(const PostNo: string): Integer; procedure LoadFromFile(const FileName: string); procedure SaveToFile(const FileName: string); property Count: Integer read GetCount; property Indexes[Index: Integer]: Integer read GetIndexes write SetIndexes; property PostNos[Index: Integer]: string read GetPostNos write SetPostNos; property Addrs[Index: Integer]: string read GetAddrs write SetAddrs; end; クラスはこんな感じで全部に何かの更新をしたい時はそのメソッドを追加したりする。 実装部は自分で補完しておくれ。 TStringListのソースみたりすればわかると思うから。
そのやり方なら TListを内蔵するより array of TRecHoge を入れ物にした方が楽かもね
>>257 ふと思ったんだけど動的配列を入れ物にするときって、サイズはどうすんの?
0..9999とかにするとか?
では勝手に添削すると、TObject ではなく TComponent継承にした方がいい そうすれば、コンポーネントとして初期化が楽に出来る。そうでないなら、わざわざ作るメリットは殆どない。専用のメンバーを色々作るより THogeList = class(TComponent) private MyItems:array of TRecHoge; FItems:TStrings; public function Add(const Hoge: TRecHoge): Integer; property items:TStrings; end; と、定義はシンプルにしておいて、 実装部で type TRecHogeStrings=class(TStrings) parent:THogeList ; function Get(Index: Integer): string; override; function GetCount: Integer; override; procedure Clear; override; procedure Delete(Index: Integer); override; procedure Insert(Index: Integer; const S: string); override; end; とローカルに定義して、例えば function TRecHogeStrings.Get(Index: Integer): string; begin with parent.MyItems[Index] do begin result:= IntToStr(Index)+':'+PostNo+':'+Addr; end; end; のように、TRecHogeを変換するようにすれば、あとはTStringsと同じように扱える
>>259 動的配列は、SetLengthでサイズを可変出来る。
また、インスタンス解放時に自動的にメモリ解放コードを書いてくれるので
TListのように自前でメモリの確保・解放のコードが不要になるので楽
>>260 いや、あれはコンポーネントにする予定なんてないから・・・。
あぁいう簡単なリストでもコンポにするのがここでは普通なの?
あとさ、何でTListを隠蔽したのかわかっていないような・・・。
補完で不必要なものをかくすためだよ。
その辺の作法はオープンソースをみて、当たり前のものと思ってたけど
>>260 みたいな手法がここではいいの?
>>261 可変すると中身きえるから意味なくね?
その度にセーブ、リロードするの?
>>263 可変すると全部が消えるわけじゃないから
>>260 の
procedure Delete(Index: Integer);
を実装する時は、データを削除点以後、1個上にコピーしてから、サイズを1減らす
procedure Insert(Index: Integer; const S: string);
は逆にサイズを1増やしてから、データを挿入
のように出来るから問題ないよ
>>264 あ、勘違い。
今やってみたら消えないのね。
>>262 そのあたりは難しい問題だね。
でも、実装の手間は
>>256 も
>>260 も同じ程度でしょ?
そして手間が同じなら、コンポーネントにし易い方がいいじゃない
TStringsなプロパティをpublished にするだけで初期化が簡単に出来るんだからさ
>>262 コンポーネント化は個人の自由として、リスト使用時に不必要なメソッドを隠すのは同意
>>267 実装の手間は同じだね。
んー俺は簡単なものをコンポ化するのはなるべく避けるようにしてるからなぁ。
まぁその辺はケースバイケースでってことで。
>>268 それもそうだね。
あと
>>260 のようにするメリットとしては itemsが TStrngsだから、
LoadFromFileとかDeleteとかの有る無しが特に明記しなくていい事かもな
動的配列は途中の要素を削除したりすると自分で並べなおすコードを書かなくちゃ ならん。リストと配列は異なるデータ構造だよ。
>>270 その段階なら、まだ
>>253 のような書き方(pascalレベル)で書いた方がいいとおもうよ
クラスとかのObjectPascalなレベルは、
コードをどんどん書いていけばいつの間にか必要に応じて身に付く人は身に付く。
そうでないひとは、しょうがない。
>>272 リストと配列は異なるデータ構造だけど TListは名前と違ってVectorだよ
だから?
ごめん最近クラスを覚えてきたんだけどちょっと質問させて
これ
>>260 ってAddrの部分にセパレータが入ってたりする場合はどうすればいいの?
あと取り出して分割する処理は使用者側で書くの?
そりゃそうだ。
>>276 そういう時はエンコード・デコードで Addrからセパレータを取り除かなければいけない
たとえば保存時
function EncodeSafe(const s:string):string;
var i:integer;
begin
Result:='';
i:=1;
while i<=length(s) do
begin
case s[i]of
#0..#31,'"','''',',',':','%':
Result:=Result+'%'+IntToHex(ord(s[i]),2);
else begin
Result:=Result+s[i];
end;
end;
inc(i);
end;
end;
復元時 function DecodeSafe(const s:string):string; var i:integer; begin Result:=''; i:=1; while i<=length(s) do begin if s[i]='%' then begin try Result:=Result+ char(StrToInt('$'+s[i+1]+s[i+2])) ; except end; inc(i,3); end else begin if not(s[i] in[#$0d,#$0a]) then Result:=Result+s[i]; inc(i); end; end; end; あと取り出して分割する処理はTRecHogeStringsで procedure Add(const Value: string); function AddObject(const S: string; AObject: TObject): Integer; procedure SetTextStr(const Value: string); を継承して実装しないといけないね
>>275 独立の文言なら
>>272 は何も間違っていないけど
このタイミングで
>>272 を書くと
まるでTListがリストのように初心者が勘違いするだろうから、書いたまで。
TListはリストではなく、動的配列と同じ種類のデータ構造で管理している。つまり
array of pointer をクラス化したものという感じ
>>279 の後半修正
実際のコードを見ると、それらは全部、Insertを呼び出してるみたい。
だから、取り出して分割する処理は Insert で実装すればいいみたい。
そういうのに慣れてないならpos関数で分割すればいいと思う
>>281 コード付きのレスありがとう
これまたふと思ったんだけど、こういうデータ構造を隠蔽してこそのクラスじゃないのかななんて思ったりして…
それともこのデコード部分もクラスに書くの?
指定Indexの要素を一つ取り出すのはこんなかんじでやるのかな?
TRecHogeStrings.DocodeSafe(TRecHogeStrings.Items[Index]);
なんか勘違いしてる予感
>>282 違う。 要素はあくまでも MyItems[] に保存されているから、これを読み書きするインターフェースは
>>256 のように
property Indexes[Index: Integer]: Integer read GetIndexes write SetIndexes;
property PostNos[Index: Integer]: string read GetPostNos write SetPostNos;
property Addrs[Index: Integer]: string read GetAddrs write SetAddrs;
と用意してやる。
Itemsはあくまでも、文字列用のインターフェースで
SaveToFileとか、コンポを貼り付けた時の初期値データの保持用
で、文字列から読み書きするItemsのメソッドでEncode/Decodeを
function TRecHogeStrings.Get(Index: Integer): string;
begin
with parent.MyItems[Index] do result:= IntToStr(Index)+':'+EncodeSafe(PostNo)+':'+EncodeSafe(Addr);
end;
procedure TRecHogeStrings.Insert(Index: Integer; const S: string);
begin
if Index= length(parent.MyItems) then InsertLast
else if Index< length(parent.MyItems) then InsertMove(Index)
else Error('%d行は行き過ぎでしょ',Index)
with parent.MyItems[Index] do begin
Index:= StrToInt( sprit(s,':') );
PostNo:=DecodeSafe( sprit(s,':') );
Addr:=DecodeSafe( s );
end;
end;
>>283 おーなるほど
やっと理解出来ました
ほんとありがと
ついて行けない・・ これって超初心者スレ?? でもがんばるお(^w^)
InsertLast/InsertMove は
>>264 のように SetLengthでサイズ1増やすのと その位置からデータを下に移動する処理
splitはsepまでの文字列を返して、渡した文字列をそこまで消す、こんな感じの処理
function TRecHogeStrings.split(var s:string ; sep:char);
var i:Integer;
begin
result:='';
for i:=1 to length(s) do
if s[i]=sep then begin
Result:=copy(s,1,i-1);
delete(s,1,i);
exit;
end;
//全部読んだがセパレータが無かった・・・Errorを呼ぶ方がいいかも
Result:=s;
s:='';
end;
287 :
デフォルトの名無しさん :2007/03/21(水) 21:08:45
無料環境でやってる皆さん Delphi 6/Personal と Turbo Delphi/Explorer どっち使ってますか?
288 :
デフォルトの名無しさん :2007/03/21(水) 21:13:15
if 1 then begin < 〜 end < else begin < 〜 end; <の箇所が納得できない
Del6Perにきまってるだろ。.NET と J# が好きならTurboもいいかも。 コンポインストールできないけど。
インデントがおかしい
>>288 きみはプログラミングのセンスがないねぇ。
ほかになにかみつけたほうがいいよ。
>TListはリストではなく、動的配列と同じ種類のデータ構造で管理している。 それは実装がそうなってるだけで、ユーザが TList をリスト構造だと 思っても間違いじゃないさ。むしろその方が正しい。
294 :
デフォルトの名無しさん :2007/03/21(水) 21:27:46
for i:=1 to 10 do begin < ・・・ end; <この部分がしつこい
>>287 Del6
OSがあれなもので…
>>288 if( is〜 ) then
proc_hoge;
else
func_hoge;
みたいなのでエラーが出るのに納得がいかない
仕方がないので常に
if( is〜 ) then
begin
proc_hoge;
end else
begin
func_hoge;
end;
みたいな感じにしてます
お前の方がよほどしつこいよw
Explorer
if〜else文は全部で一塊なんだ if 〜 then … else if 〜 then … else …; で、…の部分が複数行になるときbegin,endで囲む begin,endで囲まれた中は各命令に;をつける
センスがない上にヘルプも読めないのか
こういうことは入門サイトとかヘルプとかに書いてあるから そういったものを読んだ方がいいよ 自己流で変な解釈のまま納得いかずに続けるのはやめたほうがいい
301 :
デフォルトの名無しさん :2007/03/21(水) 21:54:26
なにか勘違いさせたみたいで悪かった。
言い直す、「気持ち悪い。」だ
正しく
>>295 のいってる内容まんま
他言語の仕様に慣れてるから、beginがしつこくて気持ち悪いだけ
>>295 は文法間違えてるんだぞ
>>295 の場合beginを書く必要はない
>>295 に同意するってことは文法を理解してないってこと
まぁ、Delphiと相性悪いってことで
慣れてるほかの言語を使ったほうがいいんじゃない?
303 :
295 :2007/03/21(水) 22:22:09
前半部分は最初の印象
文法は
>>298 さんのように言ってるようなものと理解してますが、
それでも;があったりなかったりするのが「気持ち悪い」ので、
たとえ一文でもbegin end;で囲っちゃってると言うだけですよ
そりゃエラー吐かれたら間違ってることに気付きますよ
常識的に考えて...orz
そうでもないよ
ちょっと前に出たデザインパターンとやらの話を教えてほしい。
スレ (´∀`( ´∀`) チガイ
307 :
デフォルトの名無しさん :2007/03/21(水) 23:19:51
Delphiでクエリーやテーブルをもとにしたクエリーを作ることはできるのでしょうか? 具体的にはServerのMySQLのテーブルAにTADOTable1が接続、ローカル上のAccessの テーブルBにTADOTable2が接続 TADOQuery1でTADOTable1とTADOTable2からフィールドを選択して表示ということを考えています。 何冊か本をみましたが、異なる種類のデータベースに同時に接続する方法については見つけることができませんでした。。。 Accessでいうとリンクテーブルとクエリを使うのと同じようなことができないかと考えています。 AccessのリンクテーブルでMySQLのテーブルに接続したのですが、MySQLのバージョンが古いのか 文字化けしてしまい、Delphiでなんとかならないかと思った次第です。 もっているのはDelphi6ProとDelphi2005Proです。 よろしくお願いします。
>>295 気持ちはわからんでもないけど
delphiでは[;]は文の終端を表わすコード
例えば1行で書ける
Z:=X+Y;
を
Z
:=
X +
Y;
とか書いてもコンパイラーは上記のように認識してくれる(もちろんこんな書き方は論外だが…
同様に
if 式 then Z:=X+Y;
else Z:=X/Y;
とかってやると
if 式 then Z:=X+Y; と else Z:=X/Y;は2つの別々の文になってしまう
まあ別に短文の場合でも
begin
endで囲っても問題ないといえば無いけどね
(delphiの基本的な規則には反するけど)
>>285 歴史的理由で「くだすれDelphi」が事実上Delphi総合スレになっているのです.
>>292 プログラミングの世界ではよく使われる「リスト」というモノと一般的な言葉としての「リスト」との違いですね.
>>294 ,295
元々Pascalがプログラミング教育のために作られた言語なのでわかりやすさを重視しているのです.
一方Cはキーをタイプする数を減らすことを重視しています(その代わりカッコ地獄ですけど).
Cを作った人たちは「begin〜endウゼー」って感じだったみたいです.
>>308 > delphiでは[;]は文の終端を表わすコード
厳密に言うと違います.
『文と文を区切るコード』というのが正解.
(だからたとえばメソッドの最後の文の後ろにセミコロンをつけなくてもエラーになりません)
一方CやC++,Javaでは文の終端を表すコードです.
310 :
デフォルトの名無しさん :2007/03/22(木) 01:34:55
そこでDelphi2007を注文してみました。
>>236 ちょっと質問の意図が理解できませんでしたスイマセン.
とりあえずヘルプを読んで頂けると助かります.
ヘルプがダメダメなDelphiですがこの項目については明快に書かれていますので.
個人的にはこのパラメータ渡しの仕様で困ったことは一度もありません.
>>237 ありません.
同じ形のデータがいくつも並んでいてその中から目的のものを探す場合はfor文かwhile文を使います.
ここではサンプルとして適当に作ったのをおいておきます(テストしていませんが).
{ 整数配列から指定された整数を検索してそのインデックスを返します.
見つからない場合は-1を返します.
※配列のインデックスが0以外から始まる場合,返す値はインデックスから最初のインデックスを引いた値になります.
たとえばインデックスが1から始まる場合,インデックス5の値が一致すると4を返します.}
function IndexOf(Number: integer; const Numbers: array of integer): integer;
begin
for Result := 0 to High(Numbers) do
if Numbers[Result] = Number then
exit;
Result := -1;
end;
for文やwhile文などを使った繰り返し処理のことを『ループ』と言います.
>>292 TListをリスト構造と呼ぶのは混乱の元
C++STLまでは リストと言えば ポインタでリンクしてゆく構造の事。
DelphiのコンポーネントでOwner/Parentでやってる事をリスト構造と呼ぶ
ただ、言葉は時代と共に変わるのも確か。
JAVAでは 重複を許すデータのインターフェースをListと呼ぶ
その中に ArrayList LinkedList とあって、 LinkedListが リスト構造
で、TListは ArrayList/Vectorなデータ構造 つまり可変長配列なのさ
TDateTime型の変数Tを時間単位で浮動小数点数で表したいとき、 たとえば08:30だったら8.5時間というように変換するには単純に24を掛けてやればいいのでしょうか。 var T:TDatetime; H:Real; としておいて H := T * 24; でOKですか?
314 :
デフォルトの名無しさん :2007/03/22(木) 10:22:42
日付が入っていなければそれでOK。 入っているなら、24で割ったあまりを出さないとだめかな。
Frac でいいじゃない
begin〜end; は {〜} みたいなもん
くだらない質問ですみません。 文字列を表示するときに、TABでスペースをあけて整えたいのですけど、そう言う特殊文字みたいなのはありますか?
#09
>>318 できないっす;;
ListBox1.Items.Add(OB+#09+inttostr(x)+#09+inttostr(w)+#09+inttostr(height));
じゃ間違ってますか??
あと、この個々の変数をIEとかエクセルみたいにテーブル代入する事って出来るのでしょうか?
321 :
デフォルトの名無しさん :2007/03/22(木) 20:21:43
delphi6パーソナルで不便(?)な部分てどんなとこですか?
>>319 間違ってないけど、相手がListBoxだと 希望した表示にならないだろう
OnDrawItem イベントで自前で描画するか
いっそGridを利用したら?
>>321 仕様許諾コードがとり難いところ
あとは
Web系のコンポが最初の時点では貧弱(用ダウソ)
データベース系のソフトの開発は無理
こんなところかな
324 :
デフォルトの名無しさん :2007/03/22(木) 23:00:08
>>323 d Web系のコンポのダウソは何でぐぐればいいですか?
わかりやすいとこ教えてもらえるとうれしいです
三次元配列で、一つめ二つめに数字、三つ目に文字列と数字の構造体を と言う事は出来ますか?
まあちょっと落ち着け。 一つめ二つめって何を指しているんだ? 添字か?内容か?
>>326 そめ字です。
xyの座標にして、その配列に文字列と数字の構造体を入れたいと思ってます。
もしくは構造体じゃなくて2か3の三次元配列で文字列を入れたいです
いまいち意味がわからんが、配列ってのは *同じ型* の変数列だぞ?
なんか配列とレコード方がごっちゃになってるな・・・
だったら「文字列と数値のフィールドを持つレコード」の二次元配列ではダメなのか?
>xyの座標にして、その配列に文字列と数字の構造体を入れたいと思ってます。 ここから読み取るに 文字列と数字の構造体の2次元配列を作ればいいんじゃないかな?
332 :
331 :2007/03/22(木) 23:50:16
>>325 配列は
>>328 が言ってるように同じ型の変数列
var
hairetu1: array[0..1,0..1] of Integer;
これは
hairetu1[0][0]:=0;
hairetu1[0][1]:=1;
とかって数字しか格納できない
もし
hairetu1[0][0]:=名前; ←文字列
hairetu1[0][1]:=1000; ←売上(数値)
みたいに違う型のものを格納したいなら
type
MyRec = record
namae: string;
uriage: Integer;
end
とレコード型を宣言しておいて
var
hairetu1: array[0..1] of MyRec; ←レコード型を格納する配列を宣言
hairetu1[0].namae := 'hoge';
hairetu1[0].uriage := 1000;
とやると幸せになれる
>xyの座標にして、その配列に文字列と数字の構造体を入れたいと思ってます。 多次元配列は a[0][0] [1] a[1][0] [1] とかってデータ構造になってる 座標全てにデータがあるなら a[X][Y]でもかまわないと思うけど 特定の座標にしかデータがない場合 メモリの無駄使い&参照の時困る可能性があるんジャマイカ?
調べてもわからなかったので、教えてください。 treeviewでノード間の間隔を変えるにはどうすればよいのでしょうか?
無理
337 :
デフォルトの名無しさん :2007/03/23(金) 06:09:56
他アプリのウインドウを存在する方法でIsWindow(hwnd)というのがありますが 同じようにプロセスIDかスレッドを確認する方法はありますでしょうか?
339 :
デフォルトの名無しさん :2007/03/23(金) 10:29:11
>>338 ありがとうございます。
お手上げなのでそちらで質問させていただこうと思います。
メッセージをDOS窓みたいにコンソール?のように出したいのですけどどのコンポーネントなのでしょうか?
TListBoxの背景色を黒に、文字を白にして メッセージをAddしていきゃそれらしく見えないかな
Delphi for win32の場合は、 AllocConsole; してから wirte 文で出力すればコンソールに出せるよ あと 1、TMemoを貼り付けただけのフォームを用意しておいて、そこにデバッグ用のメッセージを出す人は多いね 2、OutputDebugString( msg ) で出力して、 Ctrl+Alt+V で出す人もいる(重いけどね)
↓これだけでDOS窓開いてメッセージ表示されるんだな
>>340 じゃないけど為になった
procedure TForm1.Button1Click(Sender: TObject);
begin
AllocConsole;
Writeln('Hello Delphi!');
end;
>(重いけどね) これまだ改善されてないのかよ・・・ 某はデバッグに使ってないのか
コンソールに吐いた方が早くねえ?
ちょと気になったんだけど
>>343 でコンソールにメッセージ吐いた後
コンソールを終了して
メインに復帰するにはどうしたらよいの?
アフォですまんが教えてくらさいorz
FreeConsole; でコンソールは終了するよ コンソールが開いてる時にコンソール右上の×で閉じるとアプリが終わるので注意ね
function CtrlHandler(fdwCtrlType:DWORD):boolean; begin Result:=True; if CTRL_CLOSE_EVENT =fdwCtrlType then begin fConsoleCloseReq:=true; end; end; procedure TForm1.DebugConsole1Click(Sender: TObject); begin DebugConsole1.Checked:=not DebugConsole1.Checked; if DebugConsole1.Checked then begin AllocConsole; SetConsoleCtrlHandler( @CtrlHandler ,True); end else begin FreeConsole; end; end; とやれば、問い合わせてくれるようにはなるけど、問い合わせも出ないようにするのは無理なのかな 例外を投げてみたけど、なんかバグった
仮にもプログラマーならバグという言葉は正しく使おうぜ
試してみれば判るけど、 CtrlHandler の中から例外を投げると、 なんかバグったというしかないよ。 IDEもその後落ちたので追跡も難しい
351 :
350 :2007/03/23(金) 20:27:24
ああ、どうやらCtrlHandlerが実行されるスレッドがメインスレッドじゃない為のようだ ブレークポイントを仕掛けて止めた時のスレッドIDが違う。 これじゃ例外投げたらバグって当然だな
D3でDBGridにフォーカスが移ったときにselectedindexで最初に編集する列を指定してやると フォーカスはそこに移るのですが、セルが選択状態にならず一見どこにフォーカスが有るのかわからなくなります。 selectedindexを指定しないと最初の列のセルが選択状態になります。 どうにかしたいのですが何か良い方法はないでしょうか。
>>341 やってみたけど、スクロールが手動Orz
どこに設定あるんだろう
yes
no
Delphi .NETはGC有り。 Dephi Win32は無し。
Win32でもStringとかインターフェースとかはGC有りじゃないの?
言葉は使ってる人のものだから、そういう定義で使うならソレでいいと思うよ 昔のbasicでコンパクションの事をガーベージコレクションと呼んでたようにも思うしさ、気にしない
そこのWikipediaの記述はそういう定義みたいだけどね。
とりあえずWikipediaで議論すんなと。 HDDVDの項に無理やりBDの宣伝ねじ込んであったりもうめちゃくちゃ。
ボタンコンポーネントが押されたときに、他のprocedureにある値を変えるにはどうしたらいいのでしょうか? 今はボタンが押されたらspineditの値を変えて、他のprocedure内でその値を判定して変えています。
publicに定義しとけ
>>363 どういう事???
やっぱり変数を介さないとだめ??
>>364 他のprocedure内の値ってのはなんだよだぜ?
>>362 pascalは構造化がしっかりした言語だから
手続きの中で定義した変数は手続きの中だけで有効
ユニットのimplementationで定義した変数はユニットの中だけで有効
classのメンバは公開しなければクラスだけで有効
というのをふまえて聞いて欲しい。
procedure は手続きなので、別スレッドでループしてるのでなければ
ボタンイベントとは同時に実行はされない。
そして別スレッドからコンポーネントには基本的にアクセスしてはいけない。
という事で、
【peocedure にある値】 というのが皆んな判らないんだよ。
エスパーはいないんか?
俺が受信した電波は 「他のprocedure内で定義した変数の値」 だ
鍵となるのは2行目の >今はボタンが押されたらspineditの値を変えて、他のprocedure内でその値を判定して変えています。 これだな この意味を解読すれば真相に近づく
>>370 そこは今現在やっている処理で、本当はspineditを使わず直接他のprocedureの何かを変えたいんじゃないのかな。
VCL.NETアプリケーションで、Midas.dllを静的リンクすることは可能でつか? Win32の場合は、uses句にMidasLibを書けばOKでした。
エスパーより本人だろ
TDateTimeから日付値のみを取り出すときは Trunc() を使っているのですが 時刻値のみを取り出したいときはどうすればいいのでしょう? いちいち DecodeTime と EncodeTime のコンボをかまさないと駄目なんでしょうか? とか、書いてるうちに dt - Trunc(dt) でいけることに気がつきました。 チラシの裏でスマソ。
315 名前:デフォルトの名無しさん 投稿日:2007/03/22(木) 10:50:03 Frac でいいじゃない
376 :
374 :2007/03/25(日) 09:20:23
>>375 それだ!
俺はこんなつまらないことでDateUtilsとか日付関数とかインターネットとか散々探し回ったのか・・。
377 :
374 :2007/03/25(日) 09:27:44
あまりに悔しいので愚痴を言わせてください。 Trunc は四捨五入の処理を書いたときに見かけたので知っていました。 実数のみ取り出す関数があるのだから 小数部のみ取り出す関数もあるだろうと予想はしていたし探しもしてみたんですよ。 今思うと探し方がぜんぜん甘かったわけですが。 ヘルプの Trunc ルーチン の関連情報とか参照とかの項目に Frac が載ってればこんな無駄な労力は・・
Frac は 浮動小数点演算命令に相当する機能がなくて、
>>374 の dt - Trunc(dt) を中でやってるだけなので、特に無くても困らないからでしょ。
Odd() とか「特に無くても困らない」関数がいっぱいあるわけだが
いま、新しいマシンに Delphi2005(すまん)を移行したんだが、起動するたびにユーザー登録の
確認がでて確認に行くんだけど、「サーバと繋がらないから今回はやめとくわ」で終わる。
https://community.borland.com/ にはちゃんとログインできるからパスとかは間違ってないと思うんだが
古いマシンのレジストリから登録情報を レジストリエディタでHKEY_CURRENT_USER\Software\Borland以下から 見つけて、エクスポートで保存して持ってくるのが一案楽だよ
レジストリ情報はBorland以下臀部読み込んだんだけど、ダメなんだ。 あれってマシン固有のものも入ってなかったっけ?
2005 あたりから ユーザーのフォルダに認証ファイルをダウンロードしていたような気も。
え、どこどこ。ユーザーのフォルダってどこですか?
C:\Documents and Settings\Administrator\.borland\borland.lic これですか?
registry.dat ってのもあったけど、確かに個人情報書いたiniファイルなんだけど インストーラには違うって言われた。 フィルタが「*.slip;*.txt;*.eml」になってるね
BDS\3.0\License\delphi2005.slip があったが、「読み込めん」だった(x.x)
添付ファイル (reg92.txt) で Borland 製品が起動できます。 っていうメールを見つけたので、それを指定してみたら(添付ファイルでもやってみた) 「この製品のものではありません」 と言われた。 俺ってDQN?泣けてくる。
2007を購入すれば解決するよ。
買ってくれ
金と住所プリーズ
まずは嫁はんに相談だ
変数の大文字小文字は区別されますか? あと、TStringList型の変数はポインタとして扱えますか?
Q1変数の大文字小文字は区別されますか? Ans いいえ Q2 TStringList型の変数はポインタとして扱えますか Ans レコード型と違って クラス型の変数は常に実体を参照しています。 ですから、変数への代入は 参照=アドレスの複製が行われます。 この意味で、ポインタと概念は似ています。 しかし、ポインタという呼び方はしません
じゃあアドレスの複製じゃなくて実体の複製はできるの?
例えば、変数の定義を以下のようにして var str1,str2,str3:TStrings; ptr1:Pointer absolute str1; ptr2:Pointer; 以下のように複製した時 str1:=TStringList.Create; str2:=TStrings(ptr1); ptr2:=str1; str3:=TStrings(ptr2); str1,str2,str3の3つは同じ実体(インスタンス)を示します。 Q3 アドレスの複製じゃなくて実体の複製はできるの? Ans 出来るのではなく、出来るようにするかどうかはプログラマが決めます。 出来るようにプログラマが決めた場合、多くは、別のインスタンスを作ってからAssignで複製出来ます。
C++だと特別何もしなくてもできるよ。実体コピー。
で?
C++も代入演算子を弄って出来ないようにする事も出来ます 考え方として、 1、 コントロールしなければ出来るようにして、出来ないようにする事も出来る 2、 コントロールしなければ出来ないようにして、出来るようにする事も出来る という違いです。 メモリ内容を単純コピーして実体が2つになっては困る場合も多いので (たとえばファイルアクセスハンドルを含んでるような場合) 2が最近の主流です。
D3+interbase4.2でBDEを使用しています。 TQueryで検索した結果からClientDataSetのワークテーブルに書き込み帳票印刷をしようと としたのですが、ワークテーブル作成中に「ロックファイルが大きくなりすぎています」というエラーが発生しました。 データが少ないときはエラーは出ません。 ClientDataSetには何かデータサイズの上限があるのでしょうか。
401 :
400 :2007/03/26(月) 16:57:21
どうやらTClientDatqaSetではなくループの中でTQueryのオープン/クローズを繰り返しているとロックファイルが肥大するようです。 クローズした後何か完全に開放するような処理が必要なのでしょうか。
eaccessの全面規制がやっと解除された〜
>>362 『他のプロシージャにある値』を別なところに置くことを検討してみてください.
恐らくその『他のプロシージャ』の中で宣言し,保管しなければならない理由はないはずです.
具体的な例としてはそのボタンを載せているフォームのフィールド変数にすることです.
フォームの外部からアクセスする必要はないはずなので変数はprivate節に宣言します.
例のプロシージャがもし単独の手続きだとこの変数にアクセスできませんが,
このプロシージャはフォームに関連した処理をやっているようですので
フォームのメソッドにすればOKです.
(もし特定のフォームに依存しない処理をやっているなら変数をpublic節に宣言してください)
>>397 Delphiがなぜこういう仕様なのかはわかりませんが,
恐らくウィンドウの部品を扱う場合に便利なようにあえてこういう仕様にしたように思います.
領域もハンドルも同じボタンを複製することはありませんからね.
TStringListの場合、文字列そのものはさらにヒープに確保されてるから インスタンスのメモリがそのままコピーされても、文字列の保存場所はコピーされず そのポインタだけがコピーされる。 両方で同じ領域にアクセスするから、たぶんマズイ事になるだろう。
ついでだからTPersistentのAssignとAssignToの使い分けを教えて欲しい ヘルプ見ても使い道の差がよくわからない。
中身はこうなってる procedure TPersistent.Assign(Source: TPersistent); begin if Source <> nil then Source.AssignTo(Self) else AssignError(nil); end; A.AssignTo(B) は B.Assign(A) と等価が期待されてるみたい でもAssignToは実装されてないものもあったりするみたい
それ実装するほうの問題。ユーザは Assign() だけ知ってればよい。
407 :
デフォルトの名無しさん :2007/03/27(火) 12:21:41
プロジェクトファイルの変数をユニットから参照することはできないんでしょうか?
.dpr は program から始まっていて、インターフェース部を持たないので出来ませんね 変数だけのユニットを定義したらどうでしょ?
409 :
デフォルトの名無しさん :2007/03/27(火) 13:13:43
>>408 なるほど、そういう方法でやれるのですか。
ありがとうございました。
410 :
デフォルトの名無しさん :2007/03/27(火) 14:47:38
Timerイベント内で時間が掛かる処理を行う場合かつ Intervalが短い場合はイベントの最初でEnableを Falseにするべきなのでしょうか?
そうしなくてもタイマーはメッセージでやってくるから単に重くなるだけ
そうなんですか 今まではイベントが二重に呼ばれると思ってたので タイマーイベント内で下のようなことをやっていました try Timer1.Enable := False; //何らかの時間が掛かりそうな処理 finally Timer1.Enable := True; end; こんなことはしなくていいってことですね ありがとうございました
インターバルが10秒で 時間のかかりそうな処理が5秒だとしたら そのコードだと約15秒間隔でイベントが発生するようになる。 > Timer1.Enable := True; でインターバルがリセットされるから。 逆にそのコード取っ払うと10秒間隔でイベントが発生して空き(余裕というべきか)時間は5秒になるという違いがあるよ。 なので処理が詰まってきそうならコード残したほうがいい場合もあるね。
以前に何かのコードで、グローバルなBusyってboolean型の変数用意して Timerイベントの最初にif Busy then Exitと書き、 直後にBusy := TrueとしてTimerイベントの終わりにBusy := Falseという感じなのを見た記憶がある。 が、これって意味ないのかな?
タイマーの中で、他のコントロールを変更してたりすると そのコントロールのイベントが呼ばれてしまうんで、それを禁止する目的でやる場合はあるね あるいは、もっと単純に、 AとBがあって、Aを変更したらB、Bを操作したらAを変更するような場合に常にを それを使うから、ついクセでやってしまったのかもしれない。
412と同じ疑問を抱いてなんとなく実装してしまったとかw
417 :
412 :2007/03/27(火) 15:57:00
>>413 >インターバルが10秒で
>時間のかかりそうな処理が5秒だとしたら
>そのコードだと約15秒間隔でイベントが発生するようになる。
>> Timer1.Enable := True;
>でインターバルがリセットされるから。
この概念は気付きませんでした
道理でイベント周期が一定しなかったわけだ・・・
>>414 最初はそれを試してみたのですが制御がまちまちで意味無かったです
それでEnable変更にしたわけで・・・
while (X<Z) or (X>Z+20) do begin IF X<Z THEN INC(Z) IF X>Z+20 THEN DEC(Z) end; z < x < Z+20 にするために、zの方を動かすというプログラムを書こうと思うのですが、 ↑だと同じ判定を二回しています。 これをもっとスマートにする事って出来ないでしょうか? なんか、無駄な処理なきがしています。
無駄なのはループの方で IF X<Z THEN Z=X; IF X>Z+20 THEN Z:=X+20; とすりゃいいんじゃないの?
あ、間違った。 × IF X>Z+20 THEN Z:=X+20; ○ IF X>Z+20 THEN Z:=X-20; こういうのは min/max関数を使って Z:=min(Z,X); Z:=max(Z,X-20);
z := ensurerange(z, x-20, x);
BDS2006にはDatabase Desktopは付属してないのか? Paradoxのデータをデバッグするのに毎回ACCESS起動するのも・・・ なんかいいツール知りませんか?
424 :
デフォルトの名無しさん :2007/03/27(火) 17:55:19
付いてたはずだが・・。
>>419 すみません、
IF X<Z THEN
begin
INC(Z)
・・・・
end;
と、複数命令が入るのです
幅がずれてる分だけ処理を入れたかったです。
>>418 では、最初の比較でどちらか判っているのだから
while (X<Z) or (X>Z+20) do
begin
IF X<Z THEN
INC(Z)
ELSE DEC(Z) ;
//その他の処理
end;
としたら?
その他の処理が共通でないなら
その2つの条件は同時には成立しないのだから
while X<Z do begin INC(Z) ; end;
while X>Z+20 do begin DEC(Z) ; end;
427 :
デフォルトの名無しさん :2007/03/27(火) 19:07:09
EditのTextを右寄せにするにはどうすればいいですか?
>>427 そういうコンポーネント探した方が早いです。
>>427 TEditから独自のコンポーネントを派生させて
そのコンストラクタ内でParams.Style := Params.Style or ES_RIGHT;
意味不明ならそういうコンポ探してきて
>>426 うお!
下のがまさに願ったりかなったりです。
上のもelseで一つ減らせますね〜。ありがとうっす。
>>429 コンストラクタじゃなくてCreateParamsをオーバライドしてでしょ。
オーバーライドまでしなくても Get/SetWindowLong でおk。
SetWindowLongできるのはXP以降だけ。
Delphi 6とTurbo Delphi どっちがいいと思う?
function itemsearch(var itemname:TStringList;sea:dword):boolean; と言うのを作って、itemnameというのを他の関数でも使えるようにしたいのでVARで宣言してるのですが、 createはどこでやればいいのでしょうか?
呼び出し側でやる こんな感じ var sList: TStringList; begin sList := TStringList.Create; try //sListにAddしたりLoadFromFileしたりでデータセット if itemsearch(sList, 1) then ShowMessage('あるよ!') else ShowMessage('ないよ・・'); finally sList.Free; end; end;
呼び出し側でインスタンス生成するならvar付ける必要ないよ。
クラスのインスタンスは参照で渡されるからな
itemnameをグローバルでvar宣言したいが、 アプリケーションのどこでCreateしたらいいかわからないって質問じゃないのか?
先ほど質問させていただいた者ですが、 空のテキストファイルの作成は仕様上不可、との理解でよろしいでしょうか?
>>440 そうです。
すべてのところで使いたいので、procedureとかで宣言しないで、一番最初にしたいと思ったのですけど、
何処が一番最初なのかなぁっておもいますて
initialization節かOnCreateイベントハンドラでいいんじゃね
FormCreateでCreateして、FormDestoryでFreeかな
Delphi6のListViewでCheckboxes :=Trueにして CheckBoxを表示させているのですが、 OwnerData:=Trueにした場合、CheckBoxが表示されません。 OwnerData:=Trueの状態でCheckBoxを表示するにはどうしたらいいのでしょうか。
>>446 Microsoftのコモンコントロールの制限で出来ない。
どうしてもやりたいならOwnerDrawにしてチェックボックスを描画したり、
マウスクリックでチェック状態を変えたりする処理を自前で実装する
しかないだろうね。
>> 446 外部コンポーネントを使用してもいいのならVirtualTreeViewでそれ相当が出来ると思う。
>>447 >>448 >>449 制限で出来ないのですか…
DrawFrameControlを使い自前で描画する事にします。
(VirtualTreeViewも後で使ってみようと思います)
回答ありがとうございました。
>>423 どーもです。
InternetCanonicalizeUrl ですか。
msdn ではコンテンツが見つからないといわれたんですが、
AtlCombineUrl
も同じでしょうか。
いずれにしても未定義っぽいです
最初の質問者(157)ですが、実はあの後べたべたのぐちょぐちょ的にで書いてみたのでした。 function ExpandURL(const BaseURL,SrcURL: string): string; //一つ↑のディレクトリ function ExtractURLDir(URL: string): string; var i:integer; begin //WSrash の最後の位置 i:=LastDelimiter('/',URL); if (i>1) and (i=Length(URL)) then begin URL:=Copy(URL,1,i-1); i:=LastDelimiter('/',URL); end; if (i>1) and (URL[i]='/') then Dec(i); Result:=Copy(URL,1,i); end;
var WDotsCount, Idx, i:integer; CurrentPath:string; const WDots='..'; Dot='.'; WSlash='//'; Slash='/'; begin Result:=SrcURL; //BaseURL が絶対アドレスではない Idx:=Pos(WSlash,BaseURL); if Idx<1 then exit; //最後が / で終わるまで(カレントディレクトリ) CurrentPath:=BaseURL; while LastDelimiter(Slash,CurrentPath)<>Length(CurrentPath) do Delete(CurrentPath,Length(CurrentPath),1);
// ./ で始まるとき if (Pos(Dot,SrcURL)=1)and(Pos(WDots,SrcURL)<1) then begin Result:=SrcURL; Delete(Result,1,1); Result:=CurrentPath+Result; exit; end; Result:=SrcURL; WDotsCount:=0; while Pos(WDots,Result)>0 do begin Inc(WDotsCount); Result[Pos(WDots,Result)]:='*'; end; Result:=SrcURL; if WDotsCount<1 then exit; for i:=0 to WDotsCount-1 do begin CurrentPath:=ExtractURLDir(CurrentPath); end; Result:=Copy(SrcURL,Length(WDots+Slash)*WDotsCount,Length(SrcURL)); Result:=CurrentPath+Result; end;
正規表現クラスがあれば3行で済んじゃうのにね
Timerの様に一定間隔で呼び出される物を コンソールアプリケーションで使うにはどうすればいいでしょうか?
どういう状況かもう少し詳しく。 コンソールアプリではメッセージポンプを回してない事の方が多いと思うから状況が判らない。 一定時間休憩したいならSleepを使う。 一定時間毎に処理したいならSleepを繰り返してGetTickCountとか時計を見たりとか
459 :
457 :2007/03/28(水) 07:07:54
失礼しました。コンソールアプリというか DLL等、フォームを使わないプログラムという事でした
だから、まずメッセージポンプが回っているかどうか教えてって メッセージポンプが回っているなら、TTimerは使える。 隠れフォームを作るのが嫌なら、SetTimerで関数を呼び出して貰えばいい そうじゃなく、メインスレッド負荷が100%なら、スレッド作るしかない
質問に一番近い答えはマルチメディアタイマーかサブスレッドだろうけど少し癖がある。 もう少し簡単にできるかもしれないから 具体的にどういう処理を書きたいのかを説明したほうがいいかも。
マウスメッセージを送ってマウスをクリックといった動作をループで回してるときに、 自分でもマウスを操作したいのですが、その時に同時に出来るのでしょうか? 例えば マウスボタン押す→動かす→マウスボタン放す と言ったD&D作業の時の「動かす」部分で、一時中断して自分の操作を優先させ、終わったらその途中からと言った具合です。 今は、そう言った対策をしていないのでD&D先が予期しない場所になったり、勝手にD&Dになったりと自分の操作と混ざってしまいます。 やはりこの一連の「押す放す」が終わるまで、自分のマウスメッセージを送らないようにする関数を作った方がいいのでしょうか?
>やはりこの一連の「押す放す」が終わるまで、自分のマウスメッセージを送らないようにする関数を作った方がいいのでしょうか? そりゃそうだ。受け取るほうは、ほんもののマウスメッセージかどうか分かるはずもないからな
何をやってるのか俺には想像つかん。 自分のアプリなら、なんでマウスカーソル動かすのか? 何かイライラ系のゲーム? 他人のアプリなの?
すみません、教えてください。 EXEのソースを複数のパッケージに分割したいのですが、 そのパッケージを利用するときに「実行時パッケージを使って構築」という チェックを入れるとおもうのですが、分割数が結構多いので プロジェクトソースに記述しておきたいのですが どのように書けばいいのでしょうか。
パッケージという用語を正しく使ってるかどうか ヘルプで確認して下さい たぶんユニットと混交していませんか?
ユニットファイル Object Pascal 言語では,「ユニット」と呼ばれる個別にコンパイルされた コードモジュールをサポートしています。 ユニットを使うことによって,構造化された,プロジェクト間で再利用可能なコードを利用できます。 Delphi プロジェクトで最も一般的なユニットは,Delphi プロジェクトで使用される フォームのイベントハンドラやその他のコードを含むフォームユニットです。 しかしユニットは,それに関連付けられたフォームを持つ必要はありません。 すべてのプロジェクトが使用できる単独のファイルを作成して, それをユニットとして保存することができます。 たとえば,自分で手続き,関数,DLL,およびコンポーネントを書き, そのソースコードをフォームに関連付けられていない別のユニットファイルに入れることができます。
動的にパッケージを読み込みたいならLoadPackage関数を使う
469 :
465 :2007/03/28(水) 10:46:24
「実行時パッケージを使って構築」のパッケージリストに 分割したパッケージを追加しておく、という手順は正しいでしょうか。 このパッケージリストに追記する数が結構多いので コンパイルオプションのような記述方法があったら知りたいのですが。
470 :
465 :2007/03/28(水) 10:47:47
ちなみに今のEXEは100以上のユニットで構成されています。
.DOFファイルを直接編集したら?
472 :
デフォルトの名無しさん :2007/03/28(水) 11:08:00
Delphiで構築されたアプリをLinuxで動作させる、 もしくはLinuxでのDelphiプログラミングをしたいのですが何かありませんか。 Kylix以外で。
475 :
デフォルトの名無しさん :2007/03/28(水) 11:37:45
Fuck order son (クソ寝ぼけたことをぬかしやがって!!) ↓ ファックオーダー、サン ↓ ファッコォーダァーサン ↓ ファッコウダ、サン ↓ 八甲田山 外人から恐れられている山だということが、これで、証明された。
>>475 それを言うなら Fuck Orderson だろ。
ネイティブに発音したら、八甲田山(はっこうださん)には聞こえない。
478 :
465 :2007/03/28(水) 12:24:03
requires節みたいなのを期待していたんですが 無いようですね。失礼しました。
でもスーフリの「和ッ田ッさん」は What the sonに聞こえるって隣のジョージが言ってた
発酵乳にしても「へ Fuck on you デースカー?嫌な言葉デースネー オーイヤーカモッ・・・」 だと
シロツメクサの花が咲いたら さあ行こうPascal Pascalをどこに連れて行こうとしているのか。
>>481 ナツカシスwww
去年、リニューアルした「ぽかぽか森のPascal」というものもあった。
つーかPascalじゃねーよw
隔離スレに戻りなさい
マウスポインタがボタン上にある時とボタンから出た時に処理を行いたいのですがどうすればいいんですか?
継承を使うと簡単 type TMyButton = class(TButton) procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER; procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; end; 実装例: procedure TMyButton.CMMouseEnter(var Message: TMessage); begin Caption := 'in'; end; procedure TMyButton.CMMouseLeave(var Message: TMessage); begin Caption := 'out'; end;
コンポーネントをインストールするのが嫌なら 起動時に入替えてしまう。 function ChangeComponent( dst:TControl;NewClass:TControlClass):TControl; var src:TControl; Stream: TStream; begin Stream := TMemoryStream.Create; try Stream.WriteComponent(dst); src:=NewClass.Create(dst.Owner); src.Parent:=dst.Parent; Stream.Position:=0; dst.Free; Stream.ReadComponent(src); Result:=src; finally Stream.free end; end; という関数を作って、 procedure TForm1.FormCreate(Sender: TObject); begin Button1:=ChangeComponent(Button1,TMyButton) as TButton; end;
ええと、てっきり質問を投稿したつもりで大ポカをやってしまいました。
>>442 様、混乱させてしまい申し訳ありません。
当初、質問させていただこうと思った趣旨は以下のとおりです。
1 プログラムの目的
cドライブのルートに"New"フォルダを作成し、かつ、そのフォルダに空のテキストファイルを作成すること。
2 経過
NewDirectory := SetCurrentDir('C:\New');
if NewDirectory = False Then MkDir('C:\New');
まで記述し、正常動作しました。
3 質問のポイント
(1)"MkDir"のように、空のテキストファイルを作成するコマンドは無いものでしょうか?
(2)無いとしたら、どのような方法がありますでしょうか?
以上、お手数をおかけいたしますが、ご教示のほどよろしくお願い申し上げます。
空のテキストファイルを作るだけなら with TStringList.Create do try SaveToFile('空のファイル.txt'); finally free end; で作れる筈だけど、シェル関係(新規作成)を使ってって事?
>>485 ,486
面倒でやった事のなかったコンポーネントの作り方を勉強しながらぼちぼちとやってみます。
メッセージの捕まえ方がさっぱりだったので大変参考になりました。
ありがとうございました。
490 :
487 :2007/03/28(水) 21:42:04
>488様 ありがとうございます。 さっそく試してみます。 >シェル関係(新規作成)を使ってって事? いえいえ、Tips集や入門書、オフィシャルコースウェアをめくってみたのですが、 フォルダの作り方やファイルの検索方法は書かれていても、新規ファイルの作り方は 何故か記載されていなかったものでお伺いした次第です。
function hoge:boolean; という関数がある場合、@hogeで関数ポインタが得られますが、 function hoge(hoge: Integer):boolean;overload; function hoge(hoge: String):boolean;overload; といったようにオーバロード時に、それぞれの関数ポインタを得る方法はあるのでしょうか?
どうしても必要なら、その関数をパックする関数を作って、その関数ポインタを使う
質問です Turbo Delphiを使ってます ListBoxで選択されたアイテムは色が反転されますが その反転した色を変更する事は出来ないでしょうか?
OwnerDraw
496 :
デフォルトの名無しさん :2007/03/29(木) 07:29:01
上の質問見ての質問なんですが、 関数ポインタって主にどういうときに使うのでしょうか?
・コールバック/イベント ・言語レベルでのOOCに頼らないOOCプログラミングでの多態性実現
OwnerDraw の例、 Style を lbOwnerDrawVariable procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;Rect: TRect; State: TOwnerDrawState); begin with Control as TListBox do begin if odSelected in State then begin Canvas.Brush.Color := clGreen; Canvas.Font.Color := clYellow end; Canvas.FillRect(Rect); Canvas.TextOut(Rect.Left + 2, Rect.Top, Items[Index]); end; end;
>>496 メソッドポインタと違って関数ポインタは API回りやDLL類のインタフェースで良く利用される
>>497 さんの言うコールバックはAPI呼び出しでは必須だし
DLLを動的に呼び出すとかでも必須
500 :
デフォルトの名無しさん :2007/03/29(木) 07:56:56
>>497 >>497 ありがとうございます。
コピペで使ってたEnumなんとかってのも関数ポインタだったんですか。
メッソッドポインタというまた違うのがあるんですか??
早速ぐぐってみようと思います。
メソッドポインタはイベントで普通に使ってる筈だぞ メソッドポインタを言語仕様で実装したのを見たのはDelphiだったな
502 :
デフォルトの名無しさん :2007/03/29(木) 08:26:20
503 :
492 :2007/03/29(木) 08:26:54
>>493 うーん、やっぱり無理ですか。
VCLの既存関数なのでラッピングも名前変更もできないんですよね。。。
>>503 それは@を付けるからじゃないのか?
function func(const S: string): string; overload;
begin
result:=s+s;
end;
function func(const S: WideString): WideString; overload;
begin
result:=s+s;
end;
type TPfuncA=function(const S: string): string;
type TPfuncW=function(const S: WideString): WideString;
var pfuncA:TPfuncA;
var pfuncW:TPfuncW;
begin
pfuncA:=func;
pfuncW:=func;
caption:=pfuncA('ABC');
caption:=pfuncW('ABC');
区別できるぞ
上のコードで pfuncA:=@func; pfuncW:=@func; とやると pfuncWにもansiの方が呼ばれる @を付けないとちゃんと区別出来る
506 :
494 :2007/03/29(木) 08:59:35
>>495 >>498 ありがとうございます、できました。
498様コードまで書いていただいて非常に助かりました。
もっと精進します。
507 :
デフォルトの名無しさん :2007/03/29(木) 17:50:44
過疎ってるな。 気圧で言うと3ヒークトパスコー(英語は発音大事)ってところか。 元になった言語がパスコー(英語は発音大事)なだけに。
>>507 【審議中】
∧,,∧ ∧,,∧
∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U ( ´・) (・` ) と ノ
u-u (l ) ( ノu-u
`u-u'. `u-u'
509 :
デフォルトの名無しさん :2007/03/29(木) 18:36:56
TDBCtrlGridの使い方 どうやって貼り付けるの?どう使うの? 分かりません。だれか教えて下さい。
510 :
492 :2007/03/29(木) 18:44:41
>>505 関数ポインタ変数を定義するところまではよかったのですが、
おっしゃる通り@を付けてシグネチャを捨てていました。
どうもありがとうございました。
>>464 そうです。IEとかで自動でクリックさせながら、自分もその画面で操作したいなぁと
>>463 マウスのメッセージを送るときに
押し
↓
実際のマウス押される→「押し」をスタックして一時停止
実際のマウス処理終わったら続き
↓
放す
とかできかとおもっちゃったのですよ。。でも、D&Dだと「押し」からやり直ししないと意味ないしと。
それで、逆に実際のマウス押されたらその処理をキューに入れていって、
「放す」が終わったら順次処理できるかな〜と思ったり。。
でもそれも、時間とか長かったらアウトアウトかなぁって。
なので、押し〜放すまでは実際のマウス操作があっても処理しない。のがいいのかなと。
>>512 そういう場合は、マウスメッセージではなく、
ボタンならボタンを押せとか
相当する制御方法がある筈で、ソッチを選ぶんじゃないのかな?
>>511 「リンクをホイールクリックすると、新しいウィンドウで開く」
を分解しよう
1、ホイールクリックを検出
2、リンクの上である事を知る
3、リンクを新しいウィンドウで開く
どれが判らない?
>>509 もういっそ、
VNC をインストールして、VNCサーバ起動してから
自分のIPアドレスをこのスレに書いたら?
親切な人が、操作してくれるかもしれないよ
>>514 2番でつまずいてます。
「リンク上であることを知り、そのリンク先のURLを取得」まで教えていただきたいです。
>>517 JavaScriptを使うことで着想を得、無事にホイールクリック対応しました!
ありがとうございました。
メーラーの開き方は ShellExecute(0, nil, 'mailto:アドレス?subject=件名', nil, nil, SW_NORMAL); ってわかったんですが、これで件名までいれることができますけど、本文にテンプレ文をいれたりはできないんですか?
520 :
492 :2007/03/30(金) 00:38:14
&body=本文を後ろに付ける。
>>496 for文の中でifによる分岐をすると速度が如実に下がる場合、
for文の前で関数ポインタに関数を状況によって適したものを入れることで、
分岐の回数を減らすことで速度を上げたり出来るってのが中級者以上の使い方。
あとは、DLLを使うときに関数ポインタの知識は必須かも。
イベントはメソッドポインタで、関数ポインタの親戚。
>>512 もdocument.elementFromPoint(x, y) .click() とかでマウスを動かさずにクリックさせたら
TrichEditのBevelKindをbkflatにして、スクロールバーが出てる状態でそのリッチエディット上でパネルを出したり消したりすると スクロールバーが消えるんですがこれはバグですか? どうすれば直るんでしょうか
delphi6personalをwin98seで動かしています
コンソールアプリとのやりとりをGUI上で行いたいと思っています
(具体的にはGNUGoなんですが…)
例えばこんな感じのアプリです
program stdio;
{$APPTYPE CONSOLE}
uses SysUtils;
var str :string;
begin
repeat
Write('Enter a line of text: ');
Readln(str);
Writeln('You typed: ',str);
until( str = 'quit' );
end.
いろいろ調べると、どうやらGUIからコンソールアプリを起動する場合には
パイプ作ってコピーしてCreateProcessで起動して云々ということらしいとのことで、
ttp://www.autch.net/tips/delphi_anonymous_pipe.php ttp://forum.nifty.com/fdelphi/samples/01507.html あたりを参考にしました
command.com /c dir とかだと動くので、
単純に標準入力(stdin)にガンガン流せばいいだろうと考えてやってみたのですが
出力自体も取れていないようです
コンソールアプリが入力待ちの場合にはどうすればいいのでしょうか?
そこらへんは茨の道だったような・・・ Del側がGUIならたしかコンポーネントがあったはず。名前失念
質問です。 マインスイーパのような物を作っていまして ■ボタンを配置するときの処理 var i : Integer; btn : TButton; begin list := TComponentlist.Create; //上部で宣言済み For i := 0 to 399 do begin btn := TButton.Create(nil); list.Add(btn); //ボタンの配置設定 〜 btn.Parent := Self; end; end; ■ボタンを消すときの処理 var i : integer; begin for i := 0 to list.Count - 1 do begin list.delete(0); end; end; としているのですがボタンを消すときに 左上のボタンからじわじわじわー・・・と消えていきます。 ボタン数を設定で変更したりするので、フォームごと破棄はできません。 ボタンだけを一気に消す方法はないものでしょうか?
パネルの上にボタンを配置して ボタンを消すときはパネルを見えなくしてから消すとか?
ありがとうございます。 初めからパネルの上にボタンを設置し、 ボタン数を変更するときにパネルごと破棄した後 コンポーネントリストをクリアしたら高速に全て消せました。
400個もボタン置くのかよ・・・・Win9X系なら迷惑アプリの分類だぞ ボタンの絵を400個描いておいて、 マウスイベントで処理するとかさ
マインスイーパのような物作るのにTButtonって・・・アフォすぎだろ。
Bevelをnoneにしたパネルを上から被せてvisible:=true;してその裏で消す
536 :
465 :2007/03/30(金) 18:41:16
SpeedButtonでいいじゃないか。
あ、解決してたか 読み飛ばしてた
CanvasにButtonとか任意のWinControlのイメージだけを描画するAPIってあったりする?
Tbuttonじゃ視覚的にマインスイーパーにし難いだろ そこは TBitBtnを使え! うわなにくぁwせdrftgyふじこ
SpeedとBitってどう使い分けるもんなの? フォーカスを置くかどうかの違い?
indyで、HTTPポストするサンプルプログラムはありますか?
SpeedButton は、ボタンもどき、たんなる絵、BitBtn はれっきとしたハンドルを もつウィンドウのコントロールで TButton と似たようなもん。だから、リソース を消費する。マインスイーパのようなアプリでは、ボタンはたんなる絵にして軽く するんだな。何百個もウィンドウコントロールを使うと厨房であることがばれるし、 Win9X系では、ハンドルをめちゃくちゃ消費してほとんど犯罪アプリになる。
544 :
492 :2007/03/31(土) 01:02:40
4行くらいの簡単な処理なんですけど、頻繁に使います。 こういうのは関数にして外に出した方がいいのでしょうか?
命名出来るものは名前を付けて構造化しようよ
Delphiは識別子に日本語(等)が使えるようですが、日本語で書いてる人はいるんですか?
for win の場合、変数名等で日本語は使えないから
550 :
545 :2007/03/31(土) 11:55:44
サンプルについてる TShellListView にフォルダ間のファイルのドラッグ&ドロップやコピペ などをしようと思うと大変なんでしょうか?Wクリックして開いたりとか。 LsFilelistView28 が希望に近いのですが、ポップアップメニューがバタくさいのと 情報が少なそうなので、OSのエクスプローラに最も近い方法はどうすればいいのでしょうか? よろしくお願いいたします
誤解を招かないために
>>552 はブラウザを起動したと同時に表示されるページです
これを設定したいのです
起動時 FormCreate に WebBrowser1.Navigate('スタートページ'); すればどうなる?
>>554 本当にすみません、よくわかません
具体的にどこを変えればいいでしょうか
type
TForm1 = class(TForm)
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ImageList1: TImageList;
WebBrowser1: TWebBrowser;
procedure ToolButton1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ToolButton1Click(Sender: TObject);
begin
WebBrowser1.Navigate('
http://localhost:8080/ ');
end;
end.
procedure ToolButton1Click(Sender: TObject); の下に procedure FormCreate(Sender: TObject); end.の下に procedure TForm1.FormCreate(Sender: TObject); begin〜〜〜〜〜 でいける
フォームをWクリックして、localhost:8080/ に行きたいのなら
procedure TForm1.FormCreate(Sender: TObject);
begin
WebBrowser1.Navigate('
http://localhost:8080/ ');
end;
>>556 試したのですがスタートページ(ブラウザ起動と同時に表示されるページ)にはなりませんでした
うまく行きました!! 回答をしてくださったみなさん本当にありがとうございました
これからも精進しなよ
デバッグの仕方がわからないので、 エラーありそうな所に memo1.text.add(inttostr(abc)); 見たいにしてるのだけど、皆さんもこうしてますか?
>>562 ?????????????????????????????????????????????????????????????????????????????????????
>>562 俺はshowmessage
ちょっと複雑なときはデバッグ専用のファイル出力関数つくってる
>>562 showmessageのが便利
×かOK押すまで処理も止まるし
プログラム全体が大きくなったり
複数のユニットを統合する場合は
ステップ実行を活用すると便利
エラー個所を特定したいなら
怪しいところを{}や//を使うと楽
こんなところかな
未だにCPU窓の見方がわからない初心者より
そだね、 F4 F5 F8 F7 の使い分けだね
俺はMemoにログ吐くようにするな ShowMessageでいちいち止まるのは鬱陶しいし ファイルに出力するよりリアルタイムに見やすい デバッガで止めるのもリアルタイムな処理だとデバッグしにくい まあ、状況によってやりかた使い分ければいいべ
漏れファイルに出力してしまう tail -fで
ドマイナーだがこんなんあるな log4delphi.log
OutputDebugStringならIDEに出力されるべ。
572 :
デフォルトの名無しさん :2007/04/01(日) 04:01:46
DateTimePicker.DateをAccessのテーブルの日付型のフィールドに追加すると、「2007/04/01」とならずに 「2007/04/01 2:27:17」というように勝手に「2:27:17」が追加されるのですが、何故なのでしょうか? また対処法等あれば教えていただけますでしょうか。
TImageのMouseMove関数にTMouseButton引数がついたものをオーバーロードしたいんですが、宣言の仕方くらいしかわかりません。 誰かやり方教えてください…
>573 できません。他の方法を考えてください。
できないんだ。 残念・・
はいはい、残念、残念、残念至極。
>>573 type
TButtonOnIamge = record
biButton: TMouseButton;
biDown:Boolean;
end;
private
{ Private 宣言 }
ButtonOnIamge:TButtonOnIamge;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
with ButtonOnIamge do
begin
biButton:=Button;
biDown:=True;
end;
end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ButtonOnIamge.biDown:=False;
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if not ButtonOnIamge.biDown then exit;
end;
複数のボタンの同時押下が全く考慮されていなくてワロス
579 :
562 :2007/04/01(日) 14:06:51
沢山レスありがとうございます。 サンデープログラマーなので(家で趣味程度に) 専門知識無く質問してしまいますた。 showmesseage便利ですね〜 特にリアルタイム制が必要なく、memo出力だと早すぎて終えてないことがあったので良かったです。 ただ、ステップ実行とかはよくわからなかったです。 一行ずつなのかなと思ったら、ボタン押したあとはそのまま実行されたりします。 ときたま、ソースファイルが見つかりませんとエラー出てCPU画面というのがでてさらにわけわかめに・・・
>>579 トレース実行とステップ実行の違いについて考察してみましょう
わからなかったら、またここで聞いてみw
581 :
562 :2007/04/01(日) 14:35:42
>>580 ありがとうございます。
2日くらい考えてダメだったらよろしくお願いします。
>>581 実行のタブの中身ちょこちょこ触ってみればいいと思うおw
583 :
デフォルトの名無しさん :2007/04/01(日) 17:52:03
カンマで区切られた文字列をファイルから読み込んでリストビュ〜に追加するにはどうしたらいいですか
sl := tstringlist.create; sl2 := tstringlist.create; sl.loadfromfile('data.csv'); for i := 0 to sl.count-1 do begin sl2.commatext := sl[i]; with listview1.add(sl2[0]) do for j := 1 to sl2.count-1 do subitems.add(sl2[j]); end;
star:array[0..30]of array[0..30] of char= (p,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,c,c,c,c,c,c,c,c,c,c,c,c,d, o,p,a,a,a,a,a,a,a,a,a,a,a,a,a,a,b,c,c,c,c,c,c,c,c,c,c,c,d,e, o,o,p,a,a,a,a,a,a,a,a,a,a,a,a,a,b,c,c,c,c,c,c,c,c,c,c,d,e,e, o,o,o,p,a,a,a,a,a,a,a,a,a,a,a,a,b,c,c,c,c,c,c,c,c,c,d,e,e,e, o,o,o,o,p,a,a,a,a,a,a,a,a,a,a,a,b,c,c,c,c,c,c,c,c,d,e,e,e,e, o,o,o,o,o,p,a,a,a,a,a,a,a,a,a,a,b,c,c,c,c,c,c,c,d,e,e,e,e,e, o,o,o,o,o,o,p,a,a,a,a,a,a,a,a,a,b,c,c,c,c,c,c,d,d,e,e,e,e,e, o,o,o,o,o,o,o,p,a,a,a,a,a,a,a,a,b,c,c,c,c,c,c,d,d,e,e,e,e,e, o,o,o,o,o,o,o,o,p,a,a,a,a,a,a,a,b,c,c,c,c,c,d,d,d,e,e,e,e,e, o,o,o,o,o,o,o,o,o,p,a,a,a,a,a,a,b,c,c,c,c,c,c,d,e,e,e,e,e,e, o,o,o,o,o,o,o,o,o,o,p,a,a,a,a,a,b,c,c,c,c,c,d,e,e,e,e,e,e,e, o,o,o,o,o,o,o,o,o,o,o,p,a,a,a,a,b,c,c,c,c,d,e,e,e,e,e,e,e,e, o,o,o,o,o,o,o,o,o,o,o,o,p,a,a,a,b,c,c,c,d,e,e,e,e,e,e,e,e,e, o,o,o,o,o,o,o,o,o,o,o,o,o,p,a,a,b,c,c,d,e,e,e,e,e,e,e,e,e,e, o,o,o,o,o,o,o,o,o,o,o,o,o,o,p,a,b,c,d,e,e,e,e,e,e,e,e,e,e,e, o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,p,b,d,e,e,e,e,e,e,e,e,e,e,e,e, n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,z,f,f,f,f,f,f,f,f,f,f,f,f,f, m,m,m,m,m,m,m,m,m,m,m,m,m,m,m,l,j,h,g,g,g,g,g,g,g,g,g,g,g,g, m,m,m,m,m,m,m,m,m,m,m,m,m,m,l,k,j,i,h,g,g,g,g,g,g,g,g,g,g,g, m,m,m,m,m,m,m,m,m,m,m,m,m,l,k,k,j,i,i,h,g,g,g,g,g,g,g,g,g,g, m,m,m,m,m,m,m,m,m,m,m,m,l,k,k,k,j,i,i,i,h,g,g,g,g,g,g,g,g,g, m,m,m,m,m,m,m,m,m,m,m,l,k,k,k,k,j,i,i,i,i,h,g,g,g,g,g,g,g,g, m,m,m,m,m,m,m,m,m,m,l,k,k,k,k,k,j,i,i,i,i,i,h,g,g,g,g,g,g,g, m,m,m,m,m,m,m,m,m,l,k,k,k,k,k,k,j,i,i,i,i,i,i,h,g,g,g,g,g,g, m,m,m,m,m,m,m,m,l,k,k,k,k,k,k,k,j,i,i,i,i,i,i,i,h,g,g,g,g,g, m,m,m,m,m,m,m,l,k,k,k,k,k,k,k,k,j,i,i,i,i,i,i,i,i,h,g,g,g,g, m,m,m,m,m,m,l,k,k,k,k,k,k,k,k,k,j,i,i,i,i,i,i,i,i,i,h,g,g,g, m,m,m,m,m,l,k,k,k,k,k,k,k,k,k,k,j,i,i,i,i,i,i,i,i,i,i,h,g,g, m,m,m,m,l,k,k,k,k,k,k,k,k,k,k,k,j,i,i,i,i,i,i,i,i,i,i,i,h,g, m,m,m,l,k,k,k,k,k,k,k,k,k,k,k,k,j,i,i,i,i,i,i,i,i,i,i,i,i,h) ;
↑が[エラー] Unit1.pas(47): 未定義の識別子 : 'b' としてエラーが出てしまいます。なぜでしょう??
tstringlist.loadfromfile tstringlist.commatext tlistitem
うぜーよてめぇで考えろボケ
589 :
デフォルトの名無しさん :2007/04/01(日) 18:17:54
おっぱいおっぱい
>>585 それは p,a,b,c等が定義されてないからでは?
const a='a'; のように定義しておくことと、
あと、2次元配列の場合 ( ) で区切らないといけないよ
TStringlistの内容を' 'で区切った文字列にして得たいのですがこれでOKでしょうか? function GetMojimoji(T:Tstringlist) : string; var P,Q: Pchar; i:integer; begin Result := ''; if T.Count < 1 then exit; GetMem(P, Length(T.Text) + T.Count +1 ); Q := P; try for i:=0 to t.count -1 do begin Strcopy(Q, Pchar(T[i])); Inc(Q, Length(T[i])); Q^ := #$20; Inc(Q); end; Dec(Q); Q^:=#0; Result := P; finally Freemem(P); end; end;
なんでそんな面倒なこと・・・
StringReplace(t.Text, sLineBreak, ' ', [rfReplaceAll]);でいけるんじゃね
t.Delimiter := ' '; ShowMessage(t.DelimitedText);
>>592-594 のみなさん ありがとうございます。
>StringReplace(t.Text, sLineBreak, ' ', [rfReplaceAll]);
なるほど、改行をスペースで置換するんですね。
これは、気がつきませんでした。
>>594 t.DelimitedTextでやると" "で囲まれて出てきて駄目ですた。
ありがとうございました。また明日お願いします。
596 :
583 :2007/04/01(日) 22:20:49
>>584 〜
ありがとう。でも
[エラー] Unit1.pas(278): 未定義の識別子 : 'add'
[エラー] Unit1.pas(280): 未定義の識別子 : 'subitems'
と出ます。もうちょっと教えてください。
with listview1.add(sl2[0]) do ↓ with listview1.items.add(sl2[0]) do のような
質問です。 実行時型の変数はいつ初期化されているのでしょうか? DBGridにデータソースを通じてTQueryを紐付けて いるんですが、どのタイミングでデータソースが DBGridに突っ込まれているかがわかりません。 Application.CreateFormが一番怪しいと思っているのですが。
600 :
583 :2007/04/02(月) 02:22:38
>>597 それだとパラメータが多すぎますと言われます
with listview1.items.add(sl2[0]) do ↓ with listview1.items.add do caption := sl2[0]; のような
>>600 いくらくだスレだからってコピペで済ませようって言うのは感心できませんなぁ
質問です 皆さんは実数型⇔整数型の変換はどうやってますか? 初心者の私には StrToInt(FloatToStr(ExtendedHoge)); これぐらいしか思いつかないのですが 数値を文字列に置き換えるのは何か気持ち悪いので なんか良い方法があったら教えて下さい 具体的には divやInt()で求めた実数の整数部分(Extended型)と Memo.Lines.Countなどの関数のInteger型の戻り値を ifなどで比べる場合のスマートなやり方が知りたいのです orz
>>598 フォームに貼り付けたコンポーネントのインスタンスの事だよね?
Application.CreateForm で正解。
デバッグ版 DCUを使うにチェックを入れて、ブレークポイントしかけてトレース実行すれば判る
詳しい事は
Delphiコンポーネント設計&開発 完全解説
著: 中村拓男 発行: インプレス
を買って読むといいよ。
>>585 Star: array[0..29, 0..29] of Char = (
('p','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','b','c','c','c','c','c','c','c','c','c','c','c','c','d'),
('o','p','a','a','a','a','a','a','a','a','a','a','a','a','a','a','b','c','c','c','c','c','c','c','c','c','c','c','d','e'),
('o','o','p','a','a','a','a','a','a','a','a','a','a','a','a','a','b','c','c','c','c','c','c','c','c','c','c','d','e','e'),
('o','o','o','p','a','a','a','a','a','a','a','a','a','a','a','a','b','c','c','c','c','c','c','c','c','c','d','e','e','e'),
('o','o','o','o','p','a','a','a','a','a','a','a','a','a','a','a','b','c','c','c','c','c','c','c','c','d','e','e','e','e'),
('o','o','o','o','o','p','a','a','a','a','a','a','a','a','a','a','b','c','c','c','c','c','c','c','d','e','e','e','e','e'),
('o','o','o','o','o','o','p','a','a','a','a','a','a','a','a','a','b','c','c','c','c','c','c','d','d','e','e','e','e','e'),
('o','o','o','o','o','o','o','p','a','a','a','a','a','a','a','a','b','c','c','c','c','c','c','d','d','e','e','e','e','e'),
('o','o','o','o','o','o','o','o','p','a','a','a','a','a','a','a','b','c','c','c','c','c','d','d','d','e','e','e','e','e'),
('o','o','o','o','o','o','o','o','o','p','a','a','a','a','a','a','b','c','c','c','c','c','c','d','e','e','e','e','e','e'),
('o','o','o','o','o','o','o','o','o','o','p','a','a','a','a','a','b','c','c','c','c','c','d','e','e','e','e','e','e','e'),
('o','o','o','o','o','o','o','o','o','o','o','p','a','a','a','a','b','c','c','c','c','d','e','e','e','e','e','e','e','e'),
('o','o','o','o','o','o','o','o','o','o','o','o','p','a','a','a','b','c','c','c','d','e','e','e','e','e','e','e','e','e'),
('o','o','o','o','o','o','o','o','o','o','o','o','o','p','a','a','b','c','c','d','e','e','e','e','e','e','e','e','e','e'),
('o','o','o','o','o','o','o','o','o','o','o','o','o','o','p','a','b','c','d','e','e','e','e','e','e','e','e','e','e','e'),
>>606 の続き:
('o','o','o','o','o','o','o','o','o','o','o','o','o','o','o','p','b','d','e','e','e','e','e','e','e','e','e','e','e','e'),
('n','n','n','n','n','n','n','n','n','n','n','n','n','n','n','n','z','f','f','f','f','f','f','f','f','f','f','f','f','f'),
('m','m','m','m','m','m','m','m','m','m','m','m','m','m','m','l','j','h','g','g','g','g','g','g','g','g','g','g','g','g'),
('m','m','m','m','m','m','m','m','m','m','m','m','m','m','l','k','j','i','h','g','g','g','g','g','g','g','g','g','g','g'),
('m','m','m','m','m','m','m','m','m','m','m','m','m','l','k','k','j','i','i','h','g','g','g','g','g','g','g','g','g','g'),
('m','m','m','m','m','m','m','m','m','m','m','m','l','k','k','k','j','i','i','i','h','g','g','g','g','g','g','g','g','g'),
('m','m','m','m','m','m','m','m','m','m','m','l','k','k','k','k','j','i','i','i','i','h','g','g','g','g','g','g','g','g'),
('m','m','m','m','m','m','m','m','m','m','l','k','k','k','k','k','j','i','i','i','i','i','h','g','g','g','g','g','g','g'),
('m','m','m','m','m','m','m','m','m','l','k','k','k','k','k','k','j','i','i','i','i','i','i','h','g','g','g','g','g','g'),
('m','m','m','m','m','m','m','m','l','k','k','k','k','k','k','k','j','i','i','i','i','i','i','i','h','g','g','g','g','g'),
('m','m','m','m','m','m','m','l','k','k','k','k','k','k','k','k','j','i','i','i','i','i','i','i','i','h','g','g','g','g'),
('m','m','m','m','m','m','l','k','k','k','k','k','k','k','k','k','j','i','i','i','i','i','i','i','i','i','h','g','g','g'),
('m','m','m','m','m','l','k','k','k','k','k','k','k','k','k','k','j','i','i','i','i','i','i','i','i','i','i','h','g','g'),
('m','m','m','m','l','k','k','k','k','k','k','k','k','k','k','k','j','i','i','i','i','i','i','i','i','i','i','i','h','g'),
('m','m','m','l','k','k','k','k','k','k','k','k','k','k','k','k','j','i','i','i','i','i','i','i','i','i','i','i','i','h'));
608 :
606 :2007/04/02(月) 07:37:12
コードだけ書くと荒らしみたいなのでコメントも。
基本的には
>>590 の言っているとおり。
・a,b,c…が定義されていない('a','b','c',…と間違えてる?)
・2次元配列で定義されているのに
>>585 は1次元配列
・要素数が違う(
>>585 の定義だと、31x31 のChar型配列)
ので、コンパイルが通らないと思われ。
Delphi-DBWebプログラミングという本でDBの勉強をしています。 TTableの接続、追加、削除くらいの軽いものを作ってみたのですが、IDEの終了時に 「モジュールntdll.dllのアドレス77FCB8FF6でアドレス0000000000004に対する書き込み違反がおきました」 と、ダイアログが出るようになってしまいました。 コンパイルしたものはそのまま動きます。 このようなエラーが出るときは、なにが原因なのでしょうか? OS:Win2000 SP3 Pentium 1.6 516MEM Delphi 5.0 + update よろしくお願いします。
>>609 そういうのは良く起きる事なので
自分はプロジェクトファイルから、不要ファイルを削除する癖が付いた。
こうすると、なぜかその手のエラーが出難くなる。
具体的には DelDel.bat というファイルを作って 中身を
del /S *.dsk
del /S *.dsm
del /S *.dcu
del /S *.~*
del /S *.tds
みたいにして、IDEのツールに登録しておくと
>そういうのは良く起きる事なので >自分はプロジェクトファイルから、不要ファイルを削除する癖が付いた。 あ、そうなんですか。 そういえばムダなファイルがあるな… 先輩の方があまり問題にしてないようなので、安心することとします。どうもです。
613 :
デフォルトの名無しさん :2007/04/02(月) 11:40:26
まあ終了時にうるさいだけで、大した問題ではないね。 Delphi7くらいから、Delphi2006に至るまで、ずっと発生している問題かな。 Del2007注文してみたけど、多分改善されてないかな。
すいません、質問です。 昨日コードギアのページでユーザー登録をして、 本当はver6の無償版のpersonalを押さなければいけないところをver7のほうを押してしまって、 次からver6のアンケートに答えてもアクティベーションキー付のメールが来ないのですが、(迷惑メールにもありませんでした) どうすればいいでしょうか。
>>614 > ver7のほうを押してしまって、
これは関係ない。
> メールが来ないのですが
現在申請ページがトラブル中で、メールは来ない。
CodeGear に電話して聞いてみるしかない。
>>615 即レスありがとうございます。
ver7のメールはすぐに来たんで関係あるのかと思いました・・・。
まあ、トラブルが収まってからもう一度やります。ありがとうございます。
もうDel2007使ってる人いるのか?
>>594 すいません。commatextと間違っていたのか、
t.Delimiter := ' '; t.DelimitedTextで見事にうまくいきました。
ありがとうございました。
pieって二つ点をしていするだけじゃ 中心の角が大きいほうか小さいほうかどっちできるかわからん 対処法内ですか。
620 :
デフォルトの名無しさん :2007/04/02(月) 16:03:36
x1,y1から時計回りにx2,y2に線を引くんじゃないっけ?
621 :
デフォルトの名無しさん :2007/04/02(月) 17:51:31
VistaにTurbo Delphiのインストールって出来る?
出来る。インストール時はUACオフ推奨。
コードでウィンドウを最大化するにはどうすればいいのか誰か教えて下さい
>>623 Form1.WindowState := wsMaximized;
こういうの自分で調べるのも楽しいと思うんだけどな
625 :
623 :2007/04/02(月) 23:27:37
form1.windowstate:=wsmaximized; でできました。お騒がせしました。
626 :
デフォルトの名無しさん :2007/04/02(月) 23:32:14
Delphi2006→2007でどの程度変わっているか楽しみではある。 ただ、違いに気付かない可能性も高い。
>>619 MSDNでPie()引くと、最初の径から2番目の方へ反時計回りに
描かれるとある(要するに角度の増える方向)。
TCanvas.Pieもたぶん同じだべ。
628 :
デフォルトの名無しさん :2007/04/03(火) 14:14:38
アカデミックで3万かよ
D7でDBのBLOBフィールドに保存してある画像をMS WORDに貼り付けたいんですがどうやったらいいでしょうか。
>>629 少なくとも多少は自分で試したんだろ?
添削用のソースを出すように。
ListBoxの水平方向にスクロールバーをつけたいのですが どうしたらいいでしょうか?
D6です 簡単な円グラフみたいのを書きたいんですが、CLXのpieみたいな 角度で扇形を書く方法はないでしょうか? 将来的に手書き風円グラフを作ってみたいので、 チャートとか使わずに書いてみたいのです。
>>631 LB_SETHORIZONTALEXTENTでぐぐる。
634 :
598 :2007/04/03(火) 21:55:34
>>605 ありがとうございます。
メモリリークの心配を減らすために通常の作り方をやめて、
インスタンスをきっちり管理するフレームワークを作ってまして。
実行時型変数の実体化のタイミングだけよくわからないように
なってました。解決できてよかったです。
635 :
デフォルトの名無しさん :2007/04/04(水) 00:33:06
Turbo Delphi 無料版でTntを使いたいのですが プロジェクトにunitを追加し、ボタンとかを動的に作成すれば使えるのでしょうか?
637 :
デフォルトの名無しさん :2007/04/04(水) 01:16:16
TEditの右寄せ自作コンポはよく例を見かけるのですが、TComboBoxの右寄せ版がちょっとみつかりません、、 優しい方、教えてください。
public { Public 宣言 } procedure MyProc(var a:integer;const b:integer); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var a,b:integer; begin a:=1; MyProc(a,b); Label1.Caption:=IntToStr(b); end; Procedure MyProc(var a:integer;const b:integer); b:=a+1; end; end. MyProcっていう手続きで、bにa+1を代入したいのですが MyProc(a,2)だとa:=a+2と同じようなことをしたい これだとコンパイルできません Myproc関数のどこを直せばいいんですかね?
Procedure TForm1.MyProc(var a:integer;const b:integer);
できますた。 Tform1.をつけなきゃだめなんですか。。。 なれないと難しいですね^^;
ここでも構造化の尻尾の弊害が・・・。 メソッドとたんなる手続きの違いがよくわかってないんだな。
>>639 type
TForm1 = class(TForm)
private
{ Private 宣言 }
public
{ Public 宣言 }
procedure MyProc(var a:integer;const b:integer);
end;
ここで宣言したってことはTFormクラスのメンバー手続きとしてMyProcを宣言したことになる
ということは実装部は
procedure TForm1(クラス名).MyProc(var a:integer;const b:integer);
としないとダメなのは他のクラス作成の手順と同じ
Tform1.をつけたくないなら
{$R *.dfm}の下だけに
Procedure MyProc(var a:integer;const b:integer);
begin
b:=a+1;
end;
と先ず手続きを定義して
procedure TForm1.Button1Click(Sender: TObject);
var a,b:integer;
begin
a:=1;
MyProc(a,b);
Label1.Caption:=IntToStr(b);
end;
とすればOKだよ
なんでコンパイルが通るんだろ。定数パラメータに代入してるのに・・
自分で作った関数の中から、クラスのプロパティが使えないんですが何故なんでしょうか? 例えば function MySplit(const target: Integer) から Edit1.Textなどが見れないんです。 implementationより下に直接関数を書いてるだけなんですが、これがいけないんでしょうか?
>MyProcっていう手続きで、bにa+1を代入したいのですが Procedure MyProc(var a:integer;const b:integer); >>b:=a+1; a:=b+1にしないと constを書き換えようとしてるというエラーを吐くかと
>>645 Edit1はForm1の所有物だから。
TForm1.MyfuncのようなForm1のfunctionからなら自由にアクセスできるが
TForm1とかつかない関数からアクセスする場合には、Form1.Edit1といったようにしてアクセスする必要がある。
>自分で作った関数の中から、クラスのプロパティが使えないんですが何故なんでしょうか? コンパイラーが吐いてるエラー通り未定儀だからです^^; Edit.TextなどはTFromクラスのプロパティだから 関数内で使う場合は クラス名.プロパティでつかわないといけないのは当たり前 自作関数内でEdit1.Textなどを参照したいなら function MySplit(const target: Integer) begin Form1.Edit1.Text <<どのクラスのプロパティか明示する end とするか function MySplit(const target: Integer; Edit: TEdit) 引数にクラス型を指定すれば begin edit.txt などと中で使えます end 使う時に MySplit(target.Edit1,)などとすればOK
Pascalで、8進表示をするにはどうすればいいですかね 16進表示なら$数値で$FF=255ってやればいいんだけど
数値を指定した8進数に変換する関数 function IntToOct(Value: Integer; Digits: Integer):string; var i:Integer; begin Result:=''; for i:=0 to Digits -1 do begin Result:=Char(Ord('0')+(Value and 7))+Result; Value:= Value shr 3; end; end;
発声時の唇の動きを再現するコンポーネントを大分昔に見た気がするのですが、 どなたか心当たりはありませんか?
>>651 そりゃ無理矢理やればそうできるけどさあw
stringだし
654 :
645 :2007/04/04(水) 15:03:45
C言語だと printf("%d\n",65+'A') みたいに int型数値+char型みたいなことができるけど デルファイじゃできないの?
658 :
デフォルトの名無しさん :2007/04/04(水) 21:17:14
Ord('A')?
>>610 リテラル定数と識別子の違いを理解するのはプログラミングの初歩ですから
きちんと教えたほうが良いでしょう.
昔のBASICなどだとPRINT Aと PRINT "A"の違いをいつの間にか認識することになりますが
VB世代の人たちには意識的に説明しないと駄目なんだと思います.
>>627 VCLのソース(例によってDelphi 5)を見たらそのままAPIのPieを呼び出していました.
>>631 垂直スクロールバーを表示させずに水平スクロールバーだけを表示させるということでしたら
Columnsに1以上を代入してください.
リストボックスコンポではColumnsの値が0だと縦スクロール,1以上だと横スクロールで
1だと横1段,2だと横2段,…という風になります.
>>654 別のやり方としてMySplitをTForm1のメソッドにする方法があります.
というか関数や手続きではなくメソッドもするのが基本です.
ほかのプログラムでも使い回せそうなものだけ関数や手続きにするとよいでしょう.
660 :
629 :2007/04/04(水) 22:03:50
>>630 procedure TForm1.Button2Click(Sender: TObject);
var
FileName : String;
wapp,wdoc: Variant;
w,h:real;
begin
FileName := 'C:\template.doc';
Wapp := CreateOleObject('Word.Application');
try
wapp.Documents.Open(FileName);
wdoc := Wapp.ActiveDocument;
wdoc.saveas('C:\test.doc');
dbImage1.Picture.SaveToFile('c:\test.bmp');
w := DBImage1.Picture.Width;
h := DBImage1.Picture.Height;
Wdoc.shapes.AddPicture('C:\test.bmp',top:=200,Left:=200,Width:=50,height :=h/w*50);
Wapp.Visible := true;
except
wapp.quit;
end;
end;
いろいろ試行錯誤していったんファイルに落としてからこんな感じで画像の挿入まではできたんですが、
top,leftに何を指定しても表の最初のセルに入ってしまいます。
表の指定セルか表の上から任意の位置に挿入する方法がありましたら教えてください。
あと、ファイルに落とさず直接画像を挿入する方法があればそれも教えてください。
>>657 明示的に型変換する必要があります.
文字から数値への変換はord関数,数値から文字への変換はchr関数を使います.
Delphiの先祖であるPascalではケアレスミスを防ぐという考えから数値型と文字型は厳格に区別されます.
なお関数といってもDelphiコンパイラはサブルーチンを呼び出すのではなく型キャストするだけなので速度上の問題はありません.
662 :
487 :2007/04/04(水) 23:29:34
任意の名前の変数を生成する方法で悩んでおります。 例えば文字列型の変数を生成する場合、 任意でない名前の変数であれば Var S:String; で済みますが、任意の名前の変数の場合は一体どうすればよいのやら 見当がつきません。 なにとぞご教授のほどをm(_ _)m
すみません 名前欄を間違えました。 本スレの487氏ではありません。
>>662 VCLってお手本があるんだからユニット名、クラス名、メソッド名、プロパティ名を参考にすればよし。
何のための機能なのかが明確ならあとは英語の辞書引くだけだし。
>>662 『任意の名前の変数を生成する』って実行中にということですか?
実行時に生成できるのはコンポーネントであって変数ではありません.
設計時にコンポのNameプロパティを書き換えると対応する変数の名前も同じように変わりますが,
これは統合環境が自動的に対応する変数の名前を書き換えているだけです.
的はずれなエスパーレスだったらごめんなさい.
667 :
662 :2007/04/05(木) 00:20:22
>666 そうでしたか、ありがとうございました。 お察しのとおり(と解釈したのですが)、プログラムの実行中に、 (例えばEdit)コンポーネントに'ABC'が入力されたされたならば、 var ABC : String; という効果を顕す方法は? という意味での質問でした。 拙い日本語で申し訳ございません。
668 :
610 :2007/04/05(木) 00:23:04
>>659 >リテラル定数と識別子の違いを理解するのはプログラミングの初歩ですから
>きちんと教えたほうが良いでしょう.
おまえさんにとって「きちんと教える」って事は
>>590 に答えがあるのにベタベタ貼り付ける事なのか?
流し読みするならレスするな
668よ とりあえず死んでくれ
まぁ賛否両論だろうな
俺は個人的には
>>668 に賛成
口調は悪いけどな
671 :
583 :2007/04/05(木) 01:21:32
>>601 遅レスだけどありがとう。
>>602 すみません。精進します。
↓で出来ました。
宣言
Listitem:TListitem;
(略)
中身(?
Listitem:= Listview1.Items.Add;
with ListItem do
(略)
>>667 具体的には何をしたいのでしょう?
Delphiの変数を動的に生成したいというのなら無理ですが
自分でインタプリタを作りたいのであれば努力しだいです。
クラスのインスタンスの Name プロパティーとインスタンス変数を混同してるだけだよ。 よくある間違いだが説明が難しい。
virtualとdynamicの違いが分かりません。C++で例えて、説明できますか?
>>667 動的に変数を生成して何をするつもりなの?
変数はそもそも1つの名前で様々な「値」を格納するためのもの
「値」ごとに変数を作成するなら「値」そのものを使えば良くね?
>>667 よしっ、わかった。俺エスパー。
連想配列を使うんだ。
Memo1.Lines.Values[Edit1.Text] := '文字';
s := Memo1.Lines.Values[Edit1.Text];
のように使える。
>>662 回答とは違いますが、
「任意でない名前の変数」→「静的に定義した変数」
「任意の名前の変数」→「動的に変数名を変更する」
という表現をしたほうが、回答者が意図を理解しやすいです。
また、Delphiに限らず、動的に変数名を変更するのは
あまり一般的な方法ではありません。
何のために動的に変数名を変更したいのでしょうか?
そこを言っていただいたほうが、恐らく別の楽な方法を提示できると思います。
dynamicは仮想関数とは少し違う dynamic相当構文はC++には無い windowsのメッセージの仕掛けを巧く処理出来るように考えられたものだろう virtualによる継承やinterfaceの実装は、そのメソッド名がキーになるが dynamicではメッセージIDがキーになる だからdynamicの場合別名にする事が可能だ 逆にdynamicの場合、そのメソッドを直接呼び出した場合、virtualとは動作が異なる dynamicを仮想関数と呼ぶのはその点で誤解を招く dynamic(動的メソッド)はPerform(Dispatch)による間接呼び出しに対して多態性を提供するもの virtual (仮想メソッド)は、その名前を使ったメソッドの呼出しに対して多態性を提供するもの こんなところでどうだろうか?
まあ、よっぽどのことが無い限りVirtualを使え、ってどの本にも書いてあるな
682 :
680 :2007/04/05(木) 19:33:57
ゴメン、勘違いでした。 なぜ誰も突っ込んでないんだ?
5時間
>>680 それは単に特性に合わせて使い分けた結果だろ(^^;
virtual はメソッドのポインタのエントリを継承するたびにコピーする.
その結果メモリ消費量が多いけどテーブルを一つだけ見ればいいので速い.
virtual のメソッドテーブルは VMT(Virtual Method Table)と呼ばれる.
dynamic は親クラスのメソッドテーブルへのポインタを保持する.
その結果メモリ消費量は少ないけど、自分のクラスで定義されていないメソッドは親のテーブルにさかのぼって参照しないといけないので遅い.
dynamic のメソッドテーブルは DMT(Dynamic Method Table)と呼ばれる.
もっとわかりやすく書くと dynamic = 遅い代わりに消費メモリが少ない virtual まあ、空きメモリが1桁だった頃の遺物だ
いろいろレスをいただいてありがとうございます。 そもそもの目的というものは実はありませんでして、 大昔のふべ(CZ-8FB02)では(マシン語でルーチンを書かなければ)できなかったことが、 今時のプログラミング言語ならば出来るのかも、 と思い質問してしまいました。 「任意でない名前の変数の生成」というのは、かなり特殊なものである、 ということは理解できました。 レスを下さった皆さまに御礼申し上げます。 ※668さんの指摘された事柄ではありますが、変数名の「変更」ではなく、 飽くまでも「生成」についての質問でしたので、 ここでは敢えて「任意でない名前の変数」との表記を 継続いたしました。
前レスの 「668さん」 → 「678さん」 です。
>>686 変数に対して何か誤解がありません?
コンパイル後のオブジェクトコードに変数は残りませんよ.
大半はスタックポインタからの相対アドレス、一部はレジスタでメモリには割り付けられません.
変数名が存在するのはソースコードまでですよ.
インタプリタ言語とかは変数テーブルを持っていますけどね.
689 :
672 :2007/04/06(金) 01:45:26
>>686 ひょっとしたら動的なメモリ割り当てのことかなとか?思ってたんですが、、、
>大昔のふべ(CZ-8FB02)では(マシン語でルーチンを書かなければ)できなかったことが、
ますます意味がわかりませんね
かつてHuBASICでもZ80でもばりばりプログラム書いてた身としては、
なんのことなのかものすごく気になりますw
調べ方がわからないのでお願いします 例えばフォームにボタンとラベルがあって、 vbのようにそのまま procedre aaa(); //←自分で作った begin label.Caption := 'aaa'; end; procedure TForm1.buttonClick(ry); begin aaa(); end; とやろうとしたらaaaのほうでラベルを読み込んでくれませんでしたorz なにか付け足すものがあるのでしょうか?
procedure TForm1.aaa;
TForm1のなかにaaaを定義して procedre tform1.aaa(); begin label.Caption := 'aaa'; end;
>>686 目的ではなく手段だけ尋ねられているから、分かりにくいんですね。
処理中の変数の生成であれば、やはり「任意・・・」よりも「動的な変数の生成」
という表現のほうが、一般的には意図を把握しやすいと思います。
元も子もないのですが、仮に動的に変数名が生成されても、それを処理する部分で
結局つまづくのではないかと思いますが・・・("If" などでその変数名を指定出来ない)。
そもそも一般的な方法ではないので、あまりいい方法とは言えないと思います。
動的に変数名を指定し生成することは不可能ですが、ご存知のとおりSetLengthで
配列変数を動的に増やすことは可能です。
または、2次元配列で管理すれば、任意の値と動的な文字列を並列に保てます。
>>691 できた!
SUGEEEEEEまじでありがd!!
DelphiやっててC言語やってみようとおもったら、型に関することがちょっといい加減で曖昧でやりづらい><
>>686 昔のBASICはインタープリタで実行時にランタイムルーチンがソースコードを解釈しながら実行していましたので
実行時に変数名を参照したり変更したりできたわけですね.
しかしDelphiを含め,近年の開発ツールはコンパイラです.
つまりソースコードを完全なマシン語ルーチンに変換してから実行します.
(JavaとC#やVB.netの.net Frameworkのように架空のCPUのマシン語に変換しているものもあります)
そのためソースコードにある「変数」はメモリ領域になるかCPUのレジスタに化けます.
ソースコードにあった変数名は消滅して$0000D038みたいなメモリの番地か
EDXとかR7みたいなレジスタの名前が残っているだけで変更することもできません.
ある情報に名前を付けて管理する場合は
取り扱いたい情報に合わせてレコード型やクラス型を定義して使うか,
Delphiにはありませんが言語によっては配列の各要素に名前を付けたもの(連想配列)を使うこともできます.
(Delphiでも似たような処理はできると思います)
Rubyつかっておけと
>>697 インタプリタとコンパイラの違いで動的変数定義が出来ないのではない。
コンパイラがそういう仕様だからだよ。
なんかCodeGearってとこからメールが来たんだが。 英語で書いてあるので意味不明。
>>700 それスパムメールだぞ
無視すんのが一番
変数名の変更なんか昔はじゃんじゃんやってたよ PL/I のプリプロだけど こういう意味じゃないとは思うが
IBMの被害者乙
704 :
527 :2007/04/07(土) 00:31:04
705 :
デフォルトの名無しさん :2007/04/07(土) 00:48:09
ほげ
Turbo Delphiを使っているのですが PCharをプシャーと読んでいるのは俺だけですか?
ぷっちゃー
ぴーちゃー
>想定外の操作をすると何が起こるかわからないという危険な状態ですが、 >一応自分で意図していた程度のことはできるようになりました。 そういうあぶない物を平気でうpするとは… これがゆとry
710 :
527 :2007/04/07(土) 08:33:29
>>709 ヒント:免責
つーか、基本的に分かってる人しか使わない(はずな)ので、
大丈夫でしょ?
ヒント:春厨に混じれ巣禁止
712 :
527 :2007/04/07(土) 10:49:01
「ヒント:」とか書いてる人は頭悪そう。 自分の言いたいことを説明するだけの文章力がないから誤魔化しているんだろうけど。
ヒント : 「「ヒント:」とか書いてる人は頭悪そう」 とか書いてる人は頭悪い
これが再帰です。
715 :
610 :2007/04/07(土) 12:13:27
春ですか、そうですか そ う だ さ く ら を 見 に 行 こ う
スマン名前が残ってた
>>715 お前そうやって年中ここの住人やコテを煽ってるんだな
712は自分じゃないです。 念のためにトリつけておきますね。
720 :
デフォルトの名無しさん :2007/04/08(日) 00:12:55
postMessage(TargetWnd,WM_KEYDOWN,VK_ESCAPE,0); postMessage(TargetWnd,WM_KEYUP,VK_ESCAPE,0); これが、sendmessageでもESCが何ででしょう?
721 :
デフォルトの名無しさん :2007/04/08(日) 00:22:35
すみません↑意味不明になってました。 上のだとESCが押されたことにならないのです。 他のF12とかならなるのですけれども。
722 :
デフォルトの名無しさん :2007/04/08(日) 00:54:38
TreeViewの「ノードが選択された」というイベントってありますか?
ある
724 :
デフォルトの名無しさん :2007/04/08(日) 01:52:02
すみません、何というイベントか教えて下さい。
OnChange
726 :
デフォルトの名無しさん :2007/04/08(日) 02:05:31
ありがとうございます。
オリジナルのプログラムをお持ちの方いらっしゃいませんか? この度クレジット決済でスムーズにダウンロード売買が できるサイトを立ち上げました。 つhttp//web-cart.jp/ ※会員登録&商品のうp全て無料です! クオリティの高い商品のうpをお待ちしてますw
>>727 これはいいですね、ぜひうpしたいとおもいます。
>>661 >文字から数値への変換はord関数,数値から文字への変換はchr関数を使います.
>Delphiの先祖であるPascalではケアレスミスを防ぐという考えから数値型と文字型は
>厳格に区別されます.なお関数といってもDelphiコンパイラはサブルーチンを呼び出す
>のではなく『型キャスト』するだけなので速度上の問題はありません.
型キャストだったんですね。知らなかった…
それで、VCLのどの辺で実装されてるのか知りたく思ったのですけれども
C:\Program Files\Borland\Delphi6\Source\Rtl\Win
C:\Program Files\Borland\Delphi6\Source\Vcl
の辺りを探せば良いでしょうか? Delphi6のperspnalだと無理ですか?
kylixの実装でも構いません。windows上で読めるsourceを探しています。
どうぞよろしくお願いします m(_ _)m
delphi買え
Delphi6 PersonalにはVCLソースはついていない。 Turbo Delphi ExplorerにはVCLソースついてるから 入れるだけ入れとけ。
Delphiの関数は 1、ソースがpascalで書かれていて普通に読めるもの 2、ソースがasmで書かれている普通の関数 例 SysUtils.pasの多くの関数 3、System.pasに特殊な形で記載されてる関数 3-1 先頭 _が付いているが型情報などを付けてないだけの特殊な関数 3-2 _WriteXXXX のように補助関数があり、コンパイラが自動的に引数に応じて分解する関数 4、ソースは無く、コンパイラがその場で変換する 例 Ord Abs のように別けられますが、4の場合はコンパイラそのものが処理しているので どこにもそのソースはありません。 コンパイル結果として出て来るだけです
733 :
デフォルトの名無しさん :2007/04/08(日) 16:29:52
質問です。 TSplitterでサイズの変更をしているのですが、サイズ変更の設定を保持しないようにするにはどうしたらよいでしょうか? 常にデフォルト状態で起動したいんです。 よろしくお願いいたします。
ええと、サイズ変更の設定を保持するのを自前でやってるのでしょ? それは自分じゃないの?
SplitterではなくターゲットコントロールのWidthまたはHeightを保存する
736 :
デフォルトの名無しさん :2007/04/08(日) 18:22:39
Editに文字を入力した後エンターを押すことでButtom1をクリックしたときのイベントを起こしたいのですが、 EditのOnEnteにButton1Clickを設定しても上手く動きません。実際に動かすと、フォーカスを得たときにイベントが発生しているようです。 どこが間違っているのでしょうか?Turbo Delphi 2006です。
onEnterをヘルプで調べろ procedure TForm1.Button1Click(Sender: TObject); begin showmessage(edit1.Text); end; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if key=chr(vk_return) then button1.OnClick(self); end;
738 :
729 :2007/04/08(日) 18:41:09
>>736 OnEnter ってエンターキーのことではないぞ。
こんな時普通は、Default プロパティを True にする。
型付きファイルってどんなとき役に立つの? pythonのpickleに似てるような気がするけど。
型つきのファイルってのは初耳です。
>>740 つまりさ、CなんかだとINIファイルを作るのが大変だったりするわけで、
そういう場合、設定をファイル化するのに簡単な方法が型付きファイル
設定用のレコード型を作ってさ、それを読み書きするのよ。
INIファイルにくらべると、設定ファイルはバイナリエディタでしか見れないというのがやっかいだな
それだけ?
型付きファイルは互換性の為に残ってるようなもので ストリームに対して構造体をそのサイズだけ writeするのと等価だから そっちで書いた方がいいよ
>>740 バイナリデータを読み書きする時たまに使うぐらい
レコード型の配列なんかを扱う場合にはまあ使える
TFileStreamとかTMemoryStreamを使ったほうが楽だけど
それらはファイル全体をメモリに読み込むのでメモリを多く使っちゃう
もっとも湯水のごとくメモリが使える今となっては大した問題じゃない
もはや過去の産物
>TFileStream(略) >それらはファイル全体をメモリに読み込むので そんな事有りません。
748 :
デフォルトの名無しさん :2007/04/09(月) 01:00:31
ガイシュツだったらすみません。 デル6パーソナルで、EXCEL関連を操作しようとしたらどういう方法がよいでしょうか?
CreateOleObjectでExcel.Applicationを呼び出すのが一番お気楽。
750 :
デフォルトの名無しさん :2007/04/09(月) 01:50:59
>>749 どうもです。
その線であたってみます!
751 :
お願いします :2007/04/09(月) 07:42:54
はじめまして、おまえら。 最近Delphiを始めた初心者です。 RichEditに入力された文字列に検索をかけたくて、FindTextメソッドを試しているのですが、どうもうまくいきません。 RichEdit1に"This is a test."という文字列が入力されているとお考えください。 procedure TForm1.Button2Click(Sender: TObject); var i: Integer; begin i := RichEdit1.FindText('test',0,Length(RichEdit1.Lines.Text),[]); RichEdit1.SelStart := i; RichEdit1.SelLength := 4; end; こんな具合にテストしているのですが、必ず文末の空白部分が選択されてしまいます。 This is a test.■ こんな具合です。 デバッグしてみると、FindTextを使っている行で、-1の値しか戻ってきていません。 つまり、検索された文字は存在しないものと認識されてしまいます。なぜ? どなたかご教示ください。 もうちょっとで泣きそうでびびてばびでぶ。
コンポーネントにある、TTable+Paradoxでは理論値でいくつのデータを追加できるんでしょうか? また、実際運用するとなると、何件くらいにとどめておくのが現実的なんでしょうか?
>いくつのデータを すげー抽象的
コレで動いたけどなあ? procedure TForm1.Btn1Click(Sender: TObject); var i,len: Integer; begin RichEdit1.Lines.Text:='"This is a test."'; len:=Length(RichEdit1.Lines.Text); i := RichEdit1.FindText('test',0,len,[]); RichEdit1.SetFocus; RichEdit1.SelStart := i; RichEdit1.SelLength := 4; end;
>すげー抽象的 フィールド数によって変わるんですか?
>>755 EXCEL思い浮かべてみればいいと思うよ
PARADOXは昔のデータベースエンジンだから32bitの制限 =2Gの壁があった筈 ファイルサイズ2Gが制限になるという事。 レコードサイズで除算すれば求まるだろう。 その他の細かい制限は DBIMAXで始まる変数にあったように思う
>ファイルサイズ2Gが制限になるという事。
なるほど…
やっぱオラクルとかの勉強に切り替えたほうがいいみたいですね。
お勧めのDBを教えてもらっていいですか?
>>757 ありがとうございます。
FireBird
↑にもう一票
つまずいた、本もないし調べてもでてこないのでお願いしますorz j:Integer; Line : String; j=0; Line := 'a,b,c,d,e,f'; だとして、 gridstring1[0,j]に,で区切られた語を入れる 0 1 j |a ̄ ̄ ̄| ̄ ̄ ̄| j+1|b ̄ ̄ ̄| ̄ ̄ ̄| j+2|c ̄ ̄ ̄| ̄ ̄ ̄| |  ̄ ̄ ̄| ̄ ̄ ̄| という風に表示させたいのですがどうすればいいのでしょうか、 聞きすぎるのもよくないとは思いますが説明してあるサイトだけでもいいのでご存知でしたらよろしくお願いします。
gridstring1.Cols[0].CommaText := 'a,b,c,d,e,f';
gridstring1.Cells[0,j] := 'a';
>>762 できました、ありがとう!
これで山を一つ越えた気がした・・・
>>763 それはまんまですねw
初心者はTStrings/TStringListのリファレンス熟読して全メソッド・プロパティを丸暗記しろ。 あらゆるところに使われまくってるから理解していないと効率が悪すぎる。
766 :
お願いします :2007/04/09(月) 17:29:44
>>754 レスありがとうございます。
>>754 のprodedureの中身をそのままコピーしても同じ結果です。
文字コードか何かの関係でしょうか。
>>751 FindText('text',・・・
だったりしてw
>>766 同じ結果っていうのは
>必ず文末の空白部分が選択されてしまいます。
この症状のままってこと?
>>754 は
procedure TForm1.Btn1Click(Sender: TObject);
になってるから
そのままコピペだけだとエラーなっちゃうはずだけど
まさかそこからじゃないよな?
>prodedure
を見て少し不安になったw
769 :
デフォルトの名無しさん :2007/04/09(月) 18:38:04
すみません
どなたか
>>720 721をおながいします
770 :
お願いします :2007/04/09(月) 19:18:23
>>768 >この症状のままってこと?
はい。そうです。
>procedure TForm1.Btn1Click(Sender: TObject);
>になってるから
>そのままコピペだけだとエラーなっちゃうはずだけど
>まさかそこからじゃないよな?
中身をコピペしただけです。
コンパイルエラーはありません。
testとtextの間違いでもありません。
あと、半角と全角の間違いとかでもありません。
コーディングミスではなさそうなのですが。。。
ただ、英語バージョンなので、RichEditのフォントをPゴシックにしたり、
プロパティを多少いじりました。
そこら辺が問題なのでしょうか。
>>770 > ただ、英語バージョンなので、RichEditのフォントをPゴシックにしたり、
> プロパティを多少いじりました。
> そこら辺が問題なのでしょうか。
デフォルトに戻して試してみればいいんじゃない?
すみまそん。Sleipnir で開いたらいけました。 Opera □\(.. )
775 :
お願いします :2007/04/10(火) 05:02:48
>>771 ありがとうございます。
デフォルトに戻しても同じ結果でした。
そこで、Delphi for .Net から Delphi for Windows に切り替えて試したみたところ、何とうまくいきました。
これは.Netコンポーネントのバグなのでしょうか。
この点について情報をお持ちの方がいらっしゃいましたら、ご提供お願いします。
抜本的な解決には至りませんでしたが、アドバイスしてくれた皆さん、ありがとうございました。
また何かありましたら、よろしくお願いします。
>>769 こんなコードで試してみたけど、ちゃんとESCも送れるようだよ。
相手が反応しないのだとしたら、相手の問題じゃないの?
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
memo1.Lines.Add(format(' %2.2X ',[ord(Key)]));
end;
procedure TForm1.Button1Click(Sender: TObject);
var TargetWnd:hwnd;
begin
TargetWnd:=Memo1.Handle;
postMessage(TargetWnd,WM_KEYDOWN,VK_ESCAPE,0);
postMessage(TargetWnd,WM_KEYUP,VK_ESCAPE,0);
end;
たぶん送るコントロール間違えてるな
778 :
デフォルトの名無しさん :2007/04/10(火) 20:43:44
>>776 ありがとうございます。もうちょっと色々試してみます。
TurboDelphiでPageControlの上にGroupBox置いて その上にラベル置いても下に隠れちゃうんだけどバグ? ボタンとかは正常に手前に表示されるのに。 GBを背面に移動しても表示は変わらず。
ボタンはウィンドウだからね。ラベルはたんあんる絵だから下になることもある。 貼りなおしてみては? 貼る順番はだいじだよ。
ラベルのように TGraphicControl 継承のコントロールは貼り付けた窓の付属物 だから、Zオーダーは貼り付けた先と同じ その上に別の窓を貼り付けたら当然隠れちゃうよ。 ラベルではなく StaticText ならTWinControl 継承だから 上に来る事も出来るよ
782 :
154 :2007/04/11(水) 15:33:44
いつもお世話になっております。
>>162 のプログラムで、コマンドプロンプトに渡したファイルが
クローズできていない?のか、プログラムからファイルを上書きしようとしたときに
EFCreateErrorが出ます。
回避するにはどうすればいいでしょうか?
>>159 の部分は変わっていません。
ようするに perlのソースを作成してるのだけど、実行させると後で書き換えられないという事?
Delphi2007Proを買ってしまいました。 むか〜し(Delphi7だったか?)作ったデータベースプログラムの プロジェクトファイルを開こうとしたら、 ネットワークの初期化に失敗しました。 「ファイルまたはディレクトリが存在しません。 ファイル:C:\PDOXUSR.NET アクセスは拒否されました。」 などというメッセージが出てきました。 これって、Paradoxのファイル共有時に使う設定ファイルか何かだったような 記憶があるのですが、たしかにCドライブにそんなファイルはありません。 Delphi7のときは、インストールすると勝手にできていたような…。 いまどきParadoxファイルなんか使うなよ!ということなんでしょうか? そういえば、SQLエクスプローラも付いてないみたいだし…。 参ってます。よろしくお願いします。
>>785 そういう仕様上のことはBorlandに直接聞いた方が…
>785 プロジェクト内にActive=TrueなTTableコンポーネントがあったりして、それをローディングすると ParadoxのDBを開こうとして、んでエラーになる、という流れなのでは?無視してプロジェクトを 開いてTTableコンポーネントを含むフォーム/データモジュールを保存して閉じる、というのは駄目?
TCanvasに位置指定してpdfを描画するにはどうすればよいですか?
pdf って PDFファイルの事? だとすると、まずPDFファイルを描画モジュールに分解するかビットマップ又はwmfに変換しないといけないけど、 その目処はついてるの?
デスクトップをクリックしてその場所の色を抽出するフリーウェアで Delphiのソース公開されてるものってないですかね。 拡大鏡つきだとなおいいです。
いいですね。
拡大鏡無しバージョン procedure TForm1.Timer1Timer(Sender: TObject); var pt: TPoint; h: HDC; c: TColor; begin GetCursorPos(pt); h := GetDC(0); with TCanvas.Create do try Handle := h; c := Pixels[pt.x, pt.y]; finally free; ReleaseDC(0, h) end; Color := c; Edit1.Text := format('%6.6X', [c]); end;
拡大鏡のみ procedure TForm1.Timer1Timer(Sender: TObject); var pt: TPoint; h: HDC; c: TColor; x, y: Integer; begin GetCursorPos(pt); h := GetDC(0); with TCanvas.Create do try Handle := h; for x := -16 to 16 do for y := -16 to 16 do begin c := Pixels[pt.x+x, pt.y+y]; PaintBox1.Canvas.Brush.Color := c; PaintBox1.Canvas.Rectangle(x * 5, y * 5, x * 5 + 5, y * 5 + 5); end; finally free; ReleaseDC(0, h) end; end;
794 :
qwerty :2007/04/12(木) 17:21:25
√n=a√bの形に変換するプログラムをつくりたいのですが、 分かりません。 教えてください。
宿題は自分でやれよ。
796 :
qwerty :2007/04/12(木) 17:48:26
宿題じゃありません... 2次方程式の解を求めるプログラムで使いたいんですよ........
>>796 なんで2次方程式の解を求めたいんだ?
それも数値で求めるんじゃなく数式処理系の解を
宿題じゃなけりゃ仕事か?
sqrt
2次方程式の解を求めるプログラムが宿題なわけだろ?
ウゼェ
総当りでも知れてるでしょ procedure TForm1.Button1Click(Sender: TObject); var n, a, b, k, i: Integer; var s: string; label loop; begin n := StrToInt(Trim(Edit1.Text)); a := 1; b := n; s := ''; loop: for i := 2 to Trunc(sqrt(b)) do begin k := b div (i * i); if k * i * i = b then begin a := a * i; b := k; s := s + IntToStr(i) + ' * '; goto loop; end; end; s := s + '√' + IntToStr(b); Edit2.text := s; end;
802 :
801 :2007/04/12(木) 19:09:25
まてよ。 2次方程式の解って事は nが整数限定じゃなくてnは複素数って事か?
803 :
qwerty :2007/04/12(木) 19:51:05
他に誰かいませんか?
var n:Integer=2; fStop, fGate: boolean; procedure TForm1.Button1Click(Sender: TObject); var a, b, k, i: Integer; s: string; label loop; begin if fGate then begin fStop := True; fGate := false; exit; end; fGate := True; while n>0 do begin s := '√' + IntToStr(n) + ' = '; a := 1; b := n; loop: for i := 2 to Trunc(sqrt(b)) do begin k := b div (i * i); if k * i * i = b then begin a := a * i; b := k; s := s + IntToStr(i) + ' * '; goto loop; end; end; if a <> 1 then if b = 1 then Memo1.Lines.Add(copy(s, 1, length(s) - 3)) else Memo1.Lines.Add(s + '√' + IntToStr(b)); inc(n); if (n and $FF) = 0 then Application.ProcessMessages; if fStop then break; end; fGate := false; fStop := false; end;
高速化するとしたら素数列で割ることだろうけど、32bitの最大値くらいなら、そんな必要もないしな
ここはとても親切なインターネッツですね
あと, for i:=2 と なってるのを、2度目(goto loop後)からは 前回の値から始めた方がいい だって例えば5までいってたら5以下では割れないから
素数を数えていくプログラムとか来そうな予感がするw
loop: for i := 2 to Trunc(sqrt(b)) do begin k := b div (i * i); if k * i * i = b then begin a := a * i; b := k; s := s + IntToStr(i) + ' * '; goto loop; end; この部分 repeat Flag:=True; for i := 2 to Trunc(sqrt(b)) do begin k := b div (i * i); if k * i * i = b then begin a := a * i; b := k; s := s + IntToStr(i) + ' * '; Flag:=False; end; until Flag = True; じゃダメなん?
>>812 break が抜けているね
goto だと for ループをブレークして、なおかつリピート出来るからね
>>812 のがbetterだね(Break抜けてるけど
Goto文は最後の手段
できるだけ使わない方が良い
> Goto文は最後の手段 何で嫌われてるのかね? おいらは使いまくってるよ
2重ループにするなら goto の方がマシだろう
goto が嫌いなら while にすれば
>>809 も簡単だ
procedure TForm1.Button1Click(Sender: TObject);
var
n, a, b, sqrt_b, k, i: Integer;
s: string;
begin
n := StrToInt(Trim(Edit1.Text));
a := 1;
b := n;
s := '';
sqrt_b := Trunc(sqrt(b));
i := 2;
while i <= sqrt_b do
begin
k := b div (i * i);
if k * i * i = b then
begin
a := a * i;
b := k;
s := s + IntToStr(i) + ' * ';
sqrt_b := Trunc(sqrt(b));
end
else
inc(i);
end;
s := s + '√' + IntToStr(b);
Edit2.text := s;
end;
素数表を使いやすいコードになってるから
var
TBL: array[WORD] of WORD;
とテーブルを作って
>>816 の inc(i) を i := TBL[i];
素数飛ばしのテーブルは
procedure makeTBL;
var
i, j, Last: Integer;
label
skp;
begin
Last := 0;
for i := High(WORD) downto 1 do
begin
for j := 2 to Trunc(Sqrt(i)) do
if (i mod j) = 0 then
goto skp;
TBL[i] := Last;
Last := i;
skp:
end;
end;
質問じゃないですが、delphiの「使用許諾コード」について。
「使用許諾コードお問い合わせ窓口」へのE-Mail/FAXでのご質問書式
ttp://dn.codegear.com/article/33554 ↑のテンプレ通りに書いてメールでコードをもらうことが出来ました。
以上、お知らせとして。
※パソナル6は↑しなくても起動出来るのは知ってるけど、やっぱり
ちゃんとすることはしないとね。
昨日メールして、今届いてました。ちゃんとコードも入力出来ました。
※私の場合はパソナル6なので、「ユーザーID」は書いてません。
>>796 DelphiからExcelさんにお願いすればいいじゃないか
>>789 >pdf って PDFファイルの事?
はい
>だとすると、まずPDFファイルを描画モジュールに分解するかビットマップ又はwmfに変換しないといけないけど、
>その目処はついてるの?
いいえ。
ただこれができれば帳票ツールほぼ不要だなと思いまして。
WebBrowserはりつけて、それにPDF表示すればいいのかな?
質問です。WinHTTPをタイプライブラリとして取り込んで使用してみたのですが、
以下のコードだとSendでエラーが出ます。
procedure TForm1.FormCreate(Sender: TObject);
var
http: TWinHttpRequest;
begin
http := TWinHttpRequest.Create(self);
http.Open('GET','
http://www.2ch.net ',False);
http.Send('');
Memo1.Text := http.ResponseText;
end;
ですが以下のコードですと正常に動作します。
procedure TForm1.FormCreate(Sender: TObject);
var
http: IWinHttpRequest;
begin
http := CoWinHttpRequest.Create;
http.Open('GET','
http://www.2ch.net ',False);
http.Send('');
Memo1.Text := http.ResponseText;
end;
どちらのコードもCoInitializeは呼んでいます。
なぜ上記のコードだとエラーがでるのでしょうか?
823 :
デフォルトの名無しさん :2007/04/13(金) 13:32:13
>>783 >>784 ありがとう
>>782 htmlファイルを編集しています。
perlプログラムでそれを解析し、解析結果を得ています。
しかしそのファイルをプログラム(htmlエディタです)から上書きしようとすると、エラーになります。
>>784 ディレクトリではなくファイルがあります。
824 :
823 :2007/04/13(金) 13:34:58
レス番間違えたorz
825 :
823 :2007/04/13(金) 13:50:06
事故解決しました。 ファイルパスを""でくくっていて、それを作ろうとしたためできなかったようです。 ありがとうございました。
魚[TAB]いわし|さんま|とびうお 植物[TAB]ナメコ|シメジ|エリンギ 色の名前[TAB]ff0000(赤)|00ff00(緑)|0000ff(青) 上記のような形式の辞書ファイル dict.dat を listbox1に、魚、植物、色の名前 listbox2に、"|"で分けられた登録データを展開 listbox1 - listbox2 魚 - いわし さんま とびうお こんな感じで読み込ませたいのですがどうすれば 良いでしょうか?よろしくお願いします。。。
827 :
デフォルトの名無しさん :2007/04/13(金) 13:59:26
つDelimitedText
正規表現クラスを使うか自前でやるならこんな感じ Stripはマイお気に入り関数 // 文字列sに含まれるdelimiterより左側の文字列をsから削除して戻り値にする function Strip(var s: String; delimiter: String): String; var i: Integer; begin i := AnsiPos(delimiter, s); if i = 0 then begin Result := s; s := ''; end else begin Result := Copy(s, 1, i-1); s := Copy(s, i+Length(Delimiter), High(Integer)); end; end; var s, t: String; s := '魚'+#9+'いわし|さんま|とびうお'; t := Strip(s, #9); // t = '魚' t := Strip(s, '|'); // t = 'いわし' t := Strip(s, '|'); // t = 'さんま' t := Strip(s, '|'); // t = 'とびうお'
TStringList.AddObject
830 :
826 :2007/04/13(金) 14:47:22
>>828 procedure TForm1.Button1Click(Sender: TObject);
begin
s := '魚'+#9+'いわし|さんま|とびうお';
t := Strip(s, #9); // t = '魚'
listbox1.Items.Add(t);
listbox2.Items.Add(Strip(s, '|')); // 'いわし'
listbox2.Items.Add(Strip(s, '|')); // 'さんま'
listbox2.Items.Add(Strip(s, '|')); // 'とびうお'
end;
取り敢えずうまくlistboxの方に読み込むことができました
ありがとうございます!
それでもうひとつだけ質問をしたいのですけれども
for e in Strip(s, '|'): # pythonとかジェネレータで
listbox2.Items.Add(e);
while(Strip(s, '|') <> '' ) // delphiだと
…orz
要素が無くなるまで読み込むにはどう書いたら
いいでしょうか?基本的なことを何度も聞いて
しまってすみません。よろしくお願いします。
while true do begin t := strip(s, '|'); if t = '' then break ...
データベースに接続する時に 「接続中」を表示させる事はできますか? 接続を試みる間に表示させたいのですが、 例えば purocedure 接続ボタンclick(〜〜〜); var (ry begin lbl1.Caption := '接続中'; 接続処理 if 接続できていたら then ShowMessage('接続できました'); end; と書くと「接続できました」のメッセージと同時に表示されてしまいます。 いい方法がありましたらよろしくお願いします
>>833 そんなに時間かかってたら誰もDB使わないとは考えられませんか?
>>834 例としては接続成功のほうを書きましたが、実際に使いたいのは
ボタンを押してある程度時間がたって結局「接続失敗」が表示される場合です。
何も表示されないで画面が固まったままだと不安になりますからね。
>>835 なんで逆の例を書くかな・・・
Formかbuttonのどっちだか忘れたけどリフレッシュしてみれ
接続中のフォームを表示させてからDB接続に行って接続したらフォームを閉じ 失敗したらフォームのメッセージ書き換えでいいんじゃ?
838 :
826 :2007/04/13(金) 19:25:13
>>831 ありがとうございます。上手くゆきました。
というかwhile 1: は基本中の基本 orz
>>832 そんなことないですよ?(何故か疑問形)
D7を使ってます。 OSを再インストールしようと思ってるのですが 現在登録してあるコンポーネントを新しい環境に一括で登録するようなツールって無いですか?
>>839 おちついてその処理のアルゴリズムを考えてみるべし
ない
THoge = class private function A function B function C end; function THoge.C var func: function();//こういうの begin if flag then func:=A else func:=B; while〜 end; Class内のfunctionでこういう事する方法あるですか?
検索キーワード= メソッドポインタ 関数ポインタ
あまりに初心者な質問ですみません。 画面遷移を行いたいのですが、どうすればよろしいでしょうか? 例えば、1の画面で、「登録」「編集」というボタンがあり、 「登録」を選ぶと、登録画面になるという感じです。 登録画面の「戻る」ボタンで、元の1の画面に戻るというようなものなのですが、 これは、どのように作ればいいのでしょうか? TNoteBook? TPageControl(←これはタブですよね) こんな基本中の基本がわかりません。 どうかよろしくお願いします。
TPageControlでactivePageを置き換えればいいんじゃね?
そのままだとタブが見えてしまうから FormCreateで TabSheet1.Parent := Self; TabSheet2.Parent := Self; TabSheet3.Parent := Self; PageControl1.Free; // もう用済み TabSheet1.Visible := False; TabSheet2.Visible := False; TabSheet3.Visible := False; とやって 1ページ目を表示する場合 TabSheet1.Visible := True; 2ページ目を表示する場合NextButton1Clickで TabSheet1.Visible := False; TabSheet2.Visible := True; 3ページ目を表示する場合NextButton2Clickで TabSheet2.Visible := False; TabSheet3.Visible := True; とやるとそれっぽく見えるはず。
タブ消せるでしょ・・・
>>845 さん,
>>846 さん,
>>847 さん、
ありがとうございました。
方向性すら見えなかったので、TPageControlを使ってのアドバイス、
とても有難かったです。がんばってやってみます。
ありがとうございました。
849 :
デフォルトの名無しさん :2007/04/14(土) 03:25:40
>>836 遅くなってすみません、ありがとうございます!
明後日までプログラムいじれないのでその時に試してみますね
ごめんあげちゃったorz
たんに複数フォームのことだったりして・・・
俺もそう思う。 Form1.Visible := False; //最初のフォームを見えなくする。 Form2.Visible := True; //次のフォームを表示する。
ウィザード形式のフォームの話以外をしているようには見えんが
銀行のATMの画面みたいに次々に画面遷移していって、1画面戻ったり進んだり 途中の画面に戻ったりってことをやるとき、TFormを複数作って対処していたけど、 ちょっと変更があったりすると修正がやたら面倒なことになったりしてた。 こんなとき普通はTPageControlを使うのかなあ。 元質問者じゃないけどふと思った
プログラムの構成にもよるんジャマイカ。 入力されたデータとかが画面毎に独立してるなら 複数フォーム作ればいいし、 画面は別々でもデータは1つにまとめておきたいなら ページコントロール使えばいいし。
>>854 俺は複数FormよりTPageControl派
どれ?
TabVisible プロパティか・・ Visible プロパティで消せなくてしばらく悩んだ
TPageControlって輪郭の出っ張りみたいなのは消せないのかね フォームにalClientで使いたいとき不恰好になる
TabVisibleってTabSheet全体が消えるやん 意味ねー
VCL にはウィザードに相当するラッパコントロールってなかったよね。残念でした
しかしプロパティページをコンポーネント化した猛者はいる。
プロパティページって何?
実際には表示しない別のフォームにページを作っておいて 裏でタブを切り替えながら、順に表示したらいいじゃない。 簡単なコードで切り替えられるよ。 var SaveCtrls: array of TControl; SaveTab: TTabSheet; procedure TForm2.ShowToForm1(no: Integer); var i: Integer; begin for i := 0 to High(SaveCtrls) do SaveCtrls[i].Parent := SaveTab; SaveTab := PageControl1.Pages[no]; SetLength(SaveCtrls, SaveTab.ControlCount); with SaveTab do for i := 0 to ControlCount - 1 do SaveCtrls[i] := Controls[i]; for i := 0 to High(SaveCtrls) do SaveCtrls[i].Parent := Form1; end; これでForm1に、Form2の指定したページが移動する。
>>862 1.TPageControlのStyleをFlat
2.TabPageのTabVisibleをfalse
コレでも駄目?
PageControlのTopの位置をマイナスにして画面外に隠すとか・・ alClientでは使えないが、ウィザードって大抵サイズ変更不可だし。
>>868 で Form1 に PageControlのVisibleをFalseにして置いて
for i := 0 to High(SaveCtrls) do SaveCtrls[i].Parent := Form1;
↓
for i := 0 to High(SaveCtrls) do SaveCtrls[i].Parent := Self;
として、 タブが消える分、サイズを合わせるために
procedure TForm1.FormCreate(Sender: TObject);
begin
ShowToForm1(0);
Height:= Height-PageControl1.TabHeight;
end;
とやったらソレっぽくなった
872 :
デフォルトの名無しさん :2007/04/14(土) 20:08:29
2chブラウザで印つけわすれてて、今読んだので亀レス失礼
>>147 標準のOpenGLは古くて足りないので、OpenGL12.pas探して使おう
GLSceneにでも入ってたか。
>>153 海外サイトを探そう
あと、OpenGLは、ネットでのDelphiのサンプルが少なく、
C++などの他の言語での使い方がそのまま参考になるので、Delphiをつけずに検索した方がよい。
もちろん、海外サイトな。
とっかかりなら、NeHeとかが参考になる。
>>176 商用ゲーム
>>358 参照カウンタ式をGCと呼ぶならそうだろう
>>464 想像するに、MMORPGのボット(不正な自動制御ロボット)
>>746 むしろ、TFileStreamはメモリにバッファしないために、メチャクチャ遅い
>1.TPageControlのStyleをFlat ごめん、これでいけるっぽい 何で気付かなかったんだろう昔の俺
874 :
デフォルトの名無しさん :2007/04/14(土) 20:27:01
独自形式のpackerというか、アーカイバのコンポーネントを探しております。 ゲームでよくある、複数のファイルをひとまとめにするライブラリをイメージしています。 ・汎用的にT Stream 形式でアクセス可能 ・デバッグ用に、ファイルがある場合は、ファイルの方を優先的に読んでくれる ・zlibサポートなんかがあるとgood ・コマンドラインでバッチ的にアーカイブできる。 (できなくても、圧縮メソッドがあれば、簡単に自分で作れるので可) 検索しようにも、いい単語が思い浮かばない。 Delphi アーカイバだと違うのがで過ぎて困ってます。
zlibって標準で付いてなかったっけ? まぁそっちの方が高速なんだろうけど。
877 :
874 :2007/04/14(土) 21:54:06
>>843 検索はしたけど分からなかったので質問したのですが。。。
Class内では
>>842 のやりかたが出来ないし
Class functionやClass外のfunctionにするとTHogeの
ローカル変数もClass外に置くとかしないといけないし。。。
>>842 のコードは、どうも メソッドポインタだと思える
メソッドポインタ形を定義してやる
funciton だと帰り値が必要なので
>>842 の帰り値が integerだとすると
メソッドポインタ型は
type TMyFunction = function :Integer; of object;
引数があるなら
type TMyFunction = function (x:Integer) :Integer; of object;
のように
var func:TMyFUnction;
としてやれば func:=A; のように出来る
つまり、イベントと同だ。
>>880 試したつもりだったけど、of object;付けたらエラー出なくなりました
ありがとう
折角Delphiはリソースコンパイラでもあるわけだし、
C++なんかよりずっと簡単にリソースを入れられるのに、
そこらへん、もっとアピールしたらいいのに、ヘルプに何も説明が無いのが悔しいね
>>879 の "ファイル名.rc" はプロジェクトに入れるか
{$R 'ファイル名.res' 'ファイル名.rc'}
と、いう行を .DPRでも pasでもいいから入れてしまえばいい。
読み出しは、
var strm:TStream;
begin
strm:=TResourceStream.Create(0,'名称',RT_RCDATA);
try
Memo1.Lines.LoadFromStream(strm);
finally strm.Free; end;
と出来る。 名称は もちろん英字ね。
はじめまして、Java→Delphi組の素人です。 TBitmapを継承してTBitmapExなるクラスをつくりました(白黒とかできるようにした)。 するとコンパイルは通るんですが、なにやら警告が出て [警告]BitmapEx.pas(120)'Create'メソッドが基本型'TBitmap'の仮想メソッドを隠しました 無視しちゃっていいんですかね?(汗 出ないようにするにはどうすればいいんでしょうか?
>>883 overrideしたのか?
ソース見せないのに答えられるかよ
>白黒とかできるようにした むしろこっちが意味不明。関係ないけど。
>>884 DelphiってCreateをoverrideしましたっけ?
>>885 procedure Monocro;ってのを実行すると保持してる画像が白黒になるっつーものです。
>>883 出ないようにするだけなら
自前のクラスのコンストラクタの宣言部にinheritedを付ける
constructor Create(AOwner: TComponent); inherited;
>>883 たぶん今の所、実用上は隠しちゃっても問題ない
警告を出さない方法は、
1、CreateEx とかの別名にする
普通はコレで問題ない
2、 定義で constructor Create; override; とする
どういう効果があるかは、
ヘルプで "メタクラス" や "コンストラクタとクラス参照"の事
>>886 その程度の機能追加ならコンストラクタを上書きする必要なかったのでは?
>>887 ENDが必要なところにINHERITEDがあります
というエラーが出てコンパイルできないです。
>>886 >DelphiってCreateをoverrideしましたっけ?
その Tbitmap.Create が既に TGraphic.Create; virtual ; のoverrideなんだが
>>888 ,889
あ、レス遅れました。
問題ない、とのことなので、まいっかー、と思ってます。
>>889 ま、後学のために・・
>>887 inherited は override の間違いだろ
inherited は親クラスの呼び出し
894 :
887 :2007/04/15(日) 00:08:19
ごめん間違った inheritedじゃなくてreintroduceだった constructor Create(AOwner: TComponent); reintroduce; overrideとreintroduceの違いについては識者解説
>constructor Create; override; これでいけました。 [解決] ってことで、ありがとうございます・・
reintroduce 警告を出さないようにして、実際に隠してしまう = Inherited が出来ない 古いバージョンではサポートされない override クラス参照型による多態を使いたい場合
>>886 > procedure Monocro;ってのを実行すると保持してる画像が白黒になるっつーものです
TBitmap.Monochromeプロパティというのがあるんだけど、それではダメなのかな?
>>897 いや!、勉強のためにとりあえず継承して作ってみただけで、とくに使う予定のないクラスですよ。
もちろん、Monochromeプロパティってものの存在も知りませんでした。
斜陽の言語とかいわれてるようですが、Pascalのファンって意外と多いようですね。
899 :
844 :2007/04/15(日) 02:37:37
競馬関係のソフトを作ってみたくて勉強中なんですが、ビット計算?がまったく分からなくて困ってます(;´Д`) 以下のビットマップが提供されていますが、この場合、馬番の15を以下のビットマップで変換して表すには、 どのようにしたら良いのでしょうか? よろしくお願いしますm(_ _)m 5byte=20bit ビット 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 馬番 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 - - マスク = 0x80000
すいません。↑のビットマップですが、位置がどうしてもずれてしまうんですが、 馬番1→ビット20、馬番2→ビット19、馬番3→ビット18、以下同様・・・ という感じです。
>>901 calc.exe で1ビットの計算ができますよ。
言わんとするところもそのやり方も見当が付くが、 なぜそういうデータの持ち方をしないといけないのかが想像付かなくて 的外れな回答をしそうで答えに詰まる。
>>902 >>903 さっそくありがとうございます。
なんかpatにデータを送信するときに、馬番をこれを使って変換しなければ
ならないらしく、まったく分かっていないので、何でも書いていただけると助かります。
905 :
903 :2007/04/15(日) 10:10:10
type TOrder = 1..20; TOrders = set of TOrder; procedure TForm1.Button1Click(Sender: TObject); var x: TOrders; s: string; o: TOrder; begin X := []; Include(X, 15); s := ''; for o := Low(TOrder) to High(TOrder) do begin if (o in X) then s := s + Format('%d', [Integer(o)])+#13#10; end; ShowMessage(s); ShowMessage( Format('0x%x', [Integer(X)]) ); end; こんなこと考えてたけど、やっぱり的外れな気がする・・。
>>900 5byteで20bit という事は 16進数表示だとするよ
そうすると 普通のビット表示とはズレてる
普通は 2^n つまり2のn乗のビット位置の事を ビットn という
だから ビット20は 21ビット目にあるので、5byte に収まらない
そしてマスク= 0x80000 =2^19 の事だから、これがマスクだとすれば
これはMSBを1として番号を振ったものだろうと予想する
つまり、上の ビット20から始まる値は 2^(20-m) のmの事だと予想
次の 馬番との表は 1->20 2->19 で Xの時 m = 20+1-X だろう?
だから馬番の15は
X:=15;
m := 20+1-X ;
bit:= 1 shl (20-m); // 2^n は 1 shl n と等価
そして、送信する5バイトの文字列とは IntToHex(bit,5)
さあ、どうだ?
907 :
874 :2007/04/15(日) 12:24:39
908 :
デフォルトの名無しさん :2007/04/15(日) 12:25:22
>>900 は、やねうらおの弟子だ。詐欺競馬ソフトを作っているぞ!気をつけろ!w
もはやなつかしいなそのネタ やねう一派はDelphiを使わなそうだけど
Delphi6Personalで JCLのコンテナを使ってみたいと思い、 とりあえずサンプルをコンパイルしてみたのですが、 jcl\examples\common\containers\performance\ContainerPerformance.dpr のTJclVectorの所でコンパイルエラーになってしまいます。 TJclVectorはDelphi6では未対応なのでしょうか? JCLのバージョンはV1.99です。
DelphiでC++同様のテンプレートが使えるようになるのは、いつ頃の予定ですか?
912 :
デフォルトの名無しさん :2007/04/15(日) 13:39:23
Delphi2006 から Delphi2007で変わったことってどこかに書いてありますか? 販促の封筒着たけど、何が変わったのかさっぱり・・・
913 :
デフォルトの名無しさん :2007/04/15(日) 13:41:20
>>911 多分、永久にないと思います。
C#やJavaのtemplateなら、そのうちにつくはず
914 :
デフォルトの名無しさん :2007/04/15(日) 14:32:27
ちょっwww ・致命的な問題 Delphi で作成したアプリケーションをVista上で動作させるにあたり、 致命的な問題があります。Delphi で作成したアプリケーションをお持ちなら、 それを起動し[Alt]キーを押してみましょう。単に[Alt]キーを押すだけです。 この動作を行うだけで標準的なコントロールが消えてしまうのではないかと思います。
>>915 その記事はクラスのオペレータオーバロードができることになってたり、
Delphi7にSnapBufferがないことになってたりといい加減だし、
2006じゃなくて7からの変更点だからなぁ・・・
HDDのパーティションがC、Dと有った場合、 CドライブとDドライブが同一HDD上のパーティションなのか 別のHDD上のパーティションなのかを区別するにはどうしたらよいでしょうか?
>>905 ありがとうございます。
ちょっと意図した結果と違うみたいですね…
>>906 ありがとうございます。
なんか非常に近い感じなんですが、、、
とりあえず変換された結果は
馬番1→18の順に
80000 40000 20000 10000 08000 04000 02000 01000 00800 00400
00200 00100 00080 00040 00020 00010 00008 00004
になるみたいなんですが…
>>918 HKEY_LOCAL_MACHINE\System\MountedDevices\
でバイナリデータを比較したら、何とかなるのかもしれないね
>>919 それなら、そのまま文字列を配列で持っていたらんじゃないの?
計算式は
馬番Xから
bit:= 1 shl (20-X);
IntToHex(bit,5)
>>921 その計算式で単勝・複勝できました!ありがとうございます!
単勝・複勝で馬番が1つの場合は、これでOKだったんですが、馬連のように馬番が2つあるものは
以下のようなビットマップになっています。例えば馬連1-2の場合は、結果が800010000、
1-3の場合は800008000、ちょっととんで15-16のときは000200004となるみたいなんですが、
この場合は、どんな計算式になりますか? マスクについて調べてみたんですがちんぷんかんぷんで…(;´Д`)
9byte=36bit
ビット 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19
馬番1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
マスク = 0x80000
ビット 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01
馬番2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
マスク = 0x20000
>>922 その結果が出ればいいのなら
var x,y:Integer;
var bit:int64;
var s:string;
begin
for x:=1 to 18 do
for y:=1 to 18 do begin
bit:=(int64(1) shl (36-x)) or (int64(1) shl (18-y));
s:=format('x=%2d y=%2d ',[x,y]);
s:=s+IntToHex(bit,9);
Memo1.Lines.Add(s);
end;
>>920 なるほど最初の4バイトが一致する場合は同一デバイスのようですね。
もうちょっと調べてみます。ありがとうございました。
>>923 ばっちり解決しました!大感謝!ここ3日ずっと悩んでたので
すっきりです。みなさんありがとうございました。
>>925 次からこういう質問をする時は情報小出しにしないでね
例を何個か出せばすぐに判るのだから
Delphi for PHP(体験版)をはじめて触ってみたDel厨です。 Pagecontrolをクリックしてtab変えると、下のLabelに表示っていうような事を やってみようと思ったのですが、この場合どこに記述するのがいいのですか?(´;ω;`)ウッ OnClickとかでやってみたが変わらず・・・。 Delphi for PHPのスレがなかったので、こちらでスマソ・・・。
928 :
高島彩 :2007/04/16(月) 16:25:21
たすけて
>>927 Pagecontrolの OnChange みたいだよ
ただし、これはJavaScriptだから Textは簡単だけどLabelに表示はやりかた判らん
931 :
デフォルトの名無しさん :2007/04/16(月) 18:41:35
Edit1に書いた文字列が整数型に変換可能であるか (例:123ならOK , abcならNG , 4.2ならNG) を調べるのって可能ですか?
try strtoint(edit1.text); except end;
例外処理を使いたくないなら var S: string; i, Code: integer; begin s := Edit1.Text; Val(S, i, Code); if Code <> 0 then begin // エラー end; みたいな手もあるが、余計な変数が必要だし 内部的にやってることは同じなので i := StrToIntDef(Edit1.Text, -1); if i < 0 then begin //エラー end; で、済ますかな
>931 Val手続きで(VCLリファレンスからまんまパクリ) var I: Integer; Code: Integer; begin Val(Edit1.Text,I,Code); if Code <> 0 then begin // Error end else begin // Success end;
Delphiにデフォルトで正規表現クラスってありますか? あったような気がするのだけどヘルプで探しても出てこない・・
タイプライブラリからWSHを取り込んで使うのが簡単
>935 ない
938 :
935 :2007/04/16(月) 21:28:40
自分でも調べてみましたがないみたいですね・・。
調べ物中にTReg???ってクラスを見かけて今度利用しよう、って思った記憶があるんだけなぁ・・
>>936 >>937 ありがとうございました。
Cの組み込みマクロ __DATE__ __TIME__ に相当するものってDelphiにありますか?
>>939 もしあったとしてもマクロをソース中で生かす方法がないので
ビルド時の日付を入れたいというような目的なら
バージョン情報を利用してはどうだろうか?
941 :
939 :2007/04/16(月) 22:03:05
>>940 その方向で検討してみます。
ありがとうございました。
942 :
デフォルトの名無しさん :2007/04/16(月) 23:22:35
>>938 VBScript_RegExp_55_TLB
だよ。
もうちょっとよく探そう。
>>943 Delphiのタイプライブラリインポータが貧弱なせいか
vbscript.dllから取り込むことができん。
dll内にTYPELIBは存在してるので
今度暇なときに自分でpasに落としてみるわ
TRegExpr?
947 :
927 :2007/04/17(火) 11:28:44
>>929 レスTHX。
JavaScriptでしか出来ないのか・・・。
「Tabを切り替えるごとに下に表示される文字が変わる」みたいなものを試そう
と思ったのだが・・・ (´・ω・`)ショボーン
OnChangeの後、document.writeとやってみたら、Pagecontrolも消えた・・・。
確かに、 pascalと違ってさっぱり判らんな。 フレーム貼っただけで真っ白になるし
949 :
デフォルトの名無しさん :2007/04/17(火) 17:07:37
Delphi7 ProでTNMHTTPコンポーネントを利用する方法を教えてください!
あるファイルからURLを取得してそのURLのファイルをDLしたいんですが ファイルをDLする方法がわかりません。
質問させてください。 これからDelphiを勉強しようと思っているのですが、 DelphiとC++Builderの違いについてよく分かりませんでした。 上記2つの違いは書き方が違うだけであって 実行速度等は同じなのでしょうか? それとも根本的に異なる言語なのでしょうか? 私はC++も未修得のため DelphiとC++Builderのどちらを勉強しようか迷っています。 どなたかご教授をお願い致します。
言語としてのDelphiとC++は異なるものです。しかしC++Builderは実際には(Delphi)+(C++)のような 形で実装されているため、最初のうちは文法以上の違いはないように見えるかもしれません。 趣味でお勉強するならとりあえず途方にくれることの少ないDelphiのほうがよいような気もしますが、 書籍で勉強しないと気がすまない質ならC++のほうがいいかもしれません。ってかこのスレで聞くなら Delphiでおk。
今からやるならMSにぶらさがってたほうが楽だからそうしとけ
そういえば、前に変数の動的な生成にこだわっていた香具師って どんな用途を想定していたんだろう 目的は無いなんて言っていたが、何となく気になる
>>954 DelphiはObject Pascal言語、C++BuilderはC++言語で記述します
言語は違っていても根幹で使用しているライブラリは同じです
C++ならではの使い方(組み込み系、デバイスドライバ開発)などをしない限りは
どちらを使っても差はさほどありません
実行速度で言えばプラットフォームがC++な分だけC++Builderが勝ります
遊びなら.NET Framework系の言語が良いと思います
仕事ならDelphi、学術的に扱うのならC++Builderが良いかと思います
>>958 >実行速度で言えばプラットフォームがC++な分だけC++Builderが勝ります
そうか?
Borlandの場合、PascalもC++もそう変わらんと思うが。
無論、VC++の方が明らかに速い。
VCL上だと両者の速度は殆ど変わらないからね しかしこのご時世なんだから実行速度なんてもう誤差の範囲かと そんなにシビアに速度を求めるならまずはソースの見直し 次にWindows以外の環境に移行するw
これからやるならドキュメントが豊富なC#にしとけ
C#はやめとけ。linux普及で終了する
linuxはコンシューマ機では普及しないから大丈夫
仕事以外でUnixとは付き合いたくない
966 :
954 :2007/04/18(水) 09:21:29
皆様レスありがとう御座います。 とりあえずDelphiをやってみたいと思います。 たまに自作ツールを作るときはC#で開発をしていたのですが ネットで開発言語について色々調べていたら Delphiの評価が高かったので興味を持ちました。 それにしても本屋にいったらDelphiの書籍の 少なさに泣けた・・・。 よく参考にしているサイト等はありますか?
>>965 // \デコードをする
function DecodeStr(const s:string):string;
var i:integer;
begin
Result:=''; i:=1;
while i<=length(s) do
begin
if s[i]='\' then
begin
inc(i);
case s[i] of
'x': try
Result:=Result+ char(StrToInt('$'+s[i+1]+s[i+2])) ;
inc(i,2);
except end;
'b': Result:=Result+#$08;
'a': Result:=Result+#$07;
'f': Result:=Result+#$0C;
'r': Result:=Result+#$0D;
't': Result:=Result+#$09;
'v': Result:=Result+#$0B;
'n': Result:=Result+#13+#10;
else Result:=Result+s[i];
end;
inc(i);
end else begin
Result:=Result+s[i];
inc(i);
end;
end;
end;
>>966 C#と大きな違いは、
C#はライブラリ検索型プログラミング
巨大な便利ライブラリを調べて組み合わせてコードを作る
Delphiは構築形プログラミング
基本的に不足する部分を自分で作って一人前
教科書はVCLソース
>>967 '十n' とか混ざってるとおかしくならんか?
>>965 s := StringReplace(s, '\n', #13#10, rfReplaceAll);
>>969 確かに
>>867 に追加
if s[i] in LeadBytes then
begin
Result := Result + copy(s, i, 2);
inc(i, 2);
end else
>>965 俺も
>>969 の StringReplace に賛成。
加えて、何らかの事情で「\n」という表示をしたいときの回避を
別途考えておくとベストかと。「\_n」→「\n」とか。
s := StringReplace(s, '\n', #13#10, rfReplaceAll);
s := StringReplace(s, '\_n', '\n', rfReplaceAll);
972 :
デフォルトの名無しさん :2007/04/18(水) 10:31:30
それじゃ\_nという表示をしたいときにはどうするんだ。
>>971 これは基本的にC言語スタイルのエスケープだから
\が入ってる場合は \\ となってる筈。
function EncodeStr(const s: string): string;
var i: integer;
begin
Result := '';
i := 1;
while i <= length(s) do
if s[i] in LeadBytes then
begin Result := Result + copy(s, i, 2); inc(i, 2);
end else begin
case s[i] of
#0..#8, #10..#12, #14..#31:
Result := Result + '\x' + IntToHex(ord(s[i]), 2);
#9: Result := Result + '\t';
#13: begin
if (i + 1 <= length(s)) and (s[i + 1] = #10) then
begin
inc(i);
Result := Result + '\n';
end else Result := Result + '\x' + IntToHex(ord(s[i]), 2);
end;
'\': Result := Result + '\\';
else Result := Result + s[i];
end;
inc(i);
end;
end;
974 :
高島彩 :2007/04/18(水) 11:24:14
知能程度が厨程度のアタシにもTListのSubItemをStringで取り出すことはできますか?
TList の SubItem って何?
976 :
971 :2007/04/18(水) 11:44:30
977 :
高島彩 :2007/04/18(水) 12:00:29
>>977 じゃあ、ドコで見たの? あるいは何をしようとしてるの?
SubItemsなら 持ってるのは TListItem.SubItems だが
2007ってどう? delphi7よりも軽い?
981 :
高島彩 :2007/04/18(水) 12:43:09
>>981 お疲れ様。
さて、残りのスレは、例によってM系列乱数の話でもするか
983 :
高島彩 :2007/04/18(水) 12:57:35
聞き方かえてみる vsReportの仮想ListViewで左から2列目で下から2行目に入ってる値取り出す方法教えて
>仮想ListViewで 無理 どうやってSubItemsに値をセットしているのかと その基となる値を使っとけ
985 :
高島彩 :2007/04/18(水) 13:02:05
無理なんですか!?
986 :
高島彩 :2007/04/18(水) 13:11:30
TList.Items[]とかやって持ってこれないの?
vsReport で何もしてなければ、 一番左は ListView1.Items[no].Caption; 左から2番目 ListView1.Items[no].SubItems[0]; 下から2行目だから with ListView1 do Caption:= Items[Items.Count- 2].SubItems[0];
988 :
高島彩 :2007/04/18(水) 13:59:15
ありがとございます ためしてみる
Indy10でgetとかpostしたときのレスポンスコードが302だと delphi上で動かしてたら例外がどーのこーので止まってしまいますが これを出ないようにすることは可能ですか? 一応Monazillaのとおりに try IdAntiFreeze1.Active := True; IdHTTP1.Post(URL,contents); IdAntiFreeze1.Active := False; except on E:EIdHTTPProtocolException do begin if (E.ErrorCode = 302) then begin //正常終了 end; end end; こんな感じでやってるんですけど…
990 :
高島彩 :2007/04/18(水) 14:22:50
Items[Items.Count- 2]がエラーになります
991 :
高島彩 :2007/04/18(水) 14:24:48
すませんできました
リストビューは通常、専用に用意された値を保持する領域を持ってる それがItemsとかTListItem.SubItems。 で、仮想リストビューってのは自分で値を保持する変数なりリストなりを用意して、 描画時に「この値を表示して」とリストビューに指示する方式。 だから仮想リストビューの値のありかは、自分しか知らないはず。 だから984なんかは「無理。どうやってSubItemsに値をセットしているのかと。その基となる値を使っとけ」といってる。 俺も同感。
993 :
高島彩 :2007/04/18(水) 14:36:19
続けてすみません やっぱりTListから持ってくること出来ないですか やりたいことは最終行のSubItems[0]にある値を数字に直して 次の行に入れるListItemのSubItem[0]と引き算して答えをSubItem[1]に入れたいの 高速じゃないとイヤです
アンドリューフォーク乙
995 :
高島彩 :2007/04/18(水) 14:39:25
わかんね
996 :
高島彩 :2007/04/18(水) 14:41:21
> TList.Itemsプロパティ > Items プロパティを Count プロパティと一緒に使用すると,リスト内のすべてのオブジェクトを処理できます。 どうやるのよちっきしょう
997 :
高島彩 :2007/04/18(水) 14:41:59
Get?
用語をデタラメに使ってるからさっぱり問題が判らんが、 数字に直して ー> StrToFloat( SubItems[0] ) 高速じゃないとイヤです ⇒ TListBoxはwindowsコントロールだから遅い。 TStringGridにしたら?
無からデータを取り出したい。 と、このアフォはごねているわけですよ。
1000 :
高島彩 :2007/04/18(水) 14:55:13
[Pascal エラー] Unit2.pas(77): E2010 'string' と 'procedure, untyped pointer or untyped parameter' には互換性がありません とかいわれた
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。