超馬鹿な質問でスマソ。 BasicでOSは作れる?
すまぬ。スレ違いだった
VB.NETなら作れます
文字列を大文字小文字分けて、昇順・降順にソートするのってどうするのん?
そうかそうか。レスあんがと。
TStringList.Sort
ライブラリ依存なのにブビでOS作れる訳ないだろ。
340 :
デフォルトの名無しさん :04/08/13 21:17
ライブラリ依存なCは?
341 :
デフォルトの名無しさん :04/08/13 21:19
OS作るなら、アセンブラだろ。
342 :
デフォルトの名無しさん :04/08/13 21:20
半透明の文字を表示する簡単な方法ってありません? やはり、アルファ・ブレンドとかを使う必要があります?
>>344 GDI+とかDirectXとか言ってみるテスト
「半透明の文字」だけが目的なら逆に繁雑だよな…
>>345 DirectXはちょっとやりたくないんで、GDI+の資料をみたんですが、
なんかフォントの指定方法とか、かなり変わってますね。
自分のプログラムではLogFont構造体なんかをいろんな個所で
直接処理してるんで、全面的に変更が必要になってくるみたい。
やっぱり、別のキャンバスに一度描画して、目的のキャンバスに
自前でブレンドするしかないのかな。。。
347 :
デフォルトの名無しさん :04/08/14 00:17
となると、VB.NETが最適だな
コンポ使え。
マジに初心者で申し訳ないんですが Tmemoに1行に1000文字ぐらい読み込ませると wordwrapをfalseにしてても勝手に折り返されちゃんだけど 何とかどうにか折り返させない方法を 教えてエロイ人 お願い 泣きそう
>>349 EDIT コントロールの仕様
泣き寝入りか自作しかない
>>349 richeditじゃダメな理由はあるのかな?
>>351 そうなんでつか。。。自作なんてスキルは全然ないっす つД`)・゚・。・゚゚・*:.。..。.:*・゚
ありがとうございました。
>>352 ちょっとやってみます。 ありがとうございました。
ダメだったらそんなに複雑なことやってないんで1000に行かないような設計をちょっと立て直してみまつ。
皆様回答ありがとうございました
ファイルを選ぶようにダイアログを使って 使用者にフォルダを選ばせるにはどうすればよいでしょうか? 今はOpenDialogを使ってファイルを選ばせ ExtractFileDir(OpenDialog.FileName)を使って収得してるんですが これだとフォルダ内にファイルがないと選択できない よろしくお願いします
SelectD(ry
リッチテキストキタ━━━━━━(゚∀゚)━━━━━━ !!!!!
キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
解決しますた つД`)・゚・。・゚゚・*:.。..。.:*・゚
ほんとに泣けたっす
>>352 さんサンクス!!ついに解決しますた!感謝感謝です ほえー これで寝れまつ
358 :
デフォルトの名無しさん :04/08/14 08:07
Delphi6 Personalを使って、ギコナビ・プロジェクトのメンバーになろうと 思ったのですが、パッチ類が落ちてこない・・・。 どうすればいいですか?
諦める。
360 :
デフォルトの名無しさん :04/08/14 08:10
>>359 絶対にあきらめたくないんですが・・・。
>>358 ここで聞くようなことじゃないだろ。サイトの管理者に何とかしてもらえ。
362 :
デフォルトの名無しさん :04/08/14 08:42
>>361 ボーランドにメールしました。 m(_ _)m
入れ子構造で延々と計算している時に中断ボタンで中断するようにしたいのですが 計算中はボタンが反応してくれません。どうすれば裏で計算しながらボタンを反応 させられるのでしょうか?
>>355 >>357 ありがとうございました
でもまた問題発生です
SelectDirectoryでルートフォルダを指定すると
ルートフォルダより上が表示されないのですが
仕様ですか?
もし仕様なら
最初のディレクトリをマイコンピュータ(どのドライブにもアクセスできる)にするには
どうすれば良いでしょうか?
Delphi6 Personal です
>>363 Application.ProcessMessages
>>364 ルートフォルダ、ってのは、一番上のフォルダだから、その上が表示されないのは当然の仕様。
dir := 'D:\Delphi6\';
SelectDirectory('ディレクトリ選択','',dir);
こんなかんじで、予め、3っつめの引数に値を入れておくと、デフォルトの選択になるっぽい。
>>368 スマソ、読み間違えてた。 マイコンピューターの取得方法は、>367 にあるとおり。
別に、普通に全部にアクセス可能(ルートをルート)に設定するだけなら、
空文字を入れとけば、いいらしい。
Indyによくバグが多いと聞きますが具体的にはどういったものが多いのでしょうか。 また、そういった情報にアクセスできる場所はどこでしょうか。
>366 無事に反応するようになりました。おめでとうございます。
言い間違えました。ありがとうございました。
>>371 ありがとうございます。
早速読ませていただきます。
377 :
デフォルトの名無しさん :04/08/14 17:47
質問があります。 大文字小文字を区別せずに指定した文字列の位置を検索したいのですけど、 Posで以下のようにしても、大文字と小文字を区別できず0になるのですが、 pos('CD', 'aあcdef') //0 (4の結果がほしい) 大文字と小文字を区別なく検索できるPos版みたいなことを実現する 何かライブラリでもあるでしょうか?
378 :
デフォルトの名無しさん :04/08/14 17:48
>>377 'aあcdef'の中の小文字を全部大文字にしてから検査すれば?
AnsiIndexText?
それはちがう
AnsiPos('CD', UpperCase('ry
Upper
procedure TForm1.Button1Click(Sender: TObject); var Data, S: string; begin Data := Memo1.Text; //検索データ S := Edit1.Text; //検索文字列 //チェックで区別なし if CheckBox1.Checked then begin Data := UpperCase(Data); S := UpperCase(S); end; if AnsiPos(S, Data) > 0 then ShowMessage('(・∀・)アッタ!!'); else ShowMessage('(・A・)ナカッタ!!'); end;
384 :
デフォルトの名無しさん :04/08/14 18:10
Delphi6 Personalのパッチを入手できるサイト教えてください。 お願いします。
Borland
386 :
デフォルトの名無しさん :04/08/14 18:13
>>385 朝から暇を見つけては、DLやってるんですけど
無理なんですよ(泣)
どこかありませんか?
ギコナビ・プロジェクト・チームに入りたい・・・。
迷惑そうだな
他にパッチを置いてるとこなんてあるの?
>>387 どういう意味ですか?(w
僕が入ったら、ソフトの品質が飛躍的に向上しますよ。
切れやすいんかな。100%落としたように見えて、半分くらいしかファイルできてなかった。 DLソフト使いたまへ
>>392 フレッツADSLの8Mです。
プロバイダはOCNです。
ファイヤーウォールソフトもアンインストールしたのに・・・。
このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが、 お礼はDelphiの布教と初心者の救済をお願いします。
>>396 > Internet Explorer では、ftp.vorland.co.jp - delphi6update2.exe をダウンロードできません。
>
> サーバーが拡張情報を返しました
しばらくしてから、こんなmsgboxを表示します。。。
DLソフト使ってみたら?
イリアさんでも無理っぽいですね。 ショックです。
>>397 > Internet Explorer では、ftp.vorland.co.jp - delphi6update2.exe をダウンロードできません。
漏れは何も問題なくダウンロードできるぞ?
FFFTPでもftp.borland.co.jpへanonymousでログイン、ダウンロードできるよ?
つーか、vorland.co.jpがここだけのtypoであることを祈る。
ルータだろ、ルータ
AirH"で試したらいけました。orz
>>403 ルータの場合、どうすればいいのでしょうか。
>>401 さんのやり方で、PASVモードにしたらいけました。
実は、朝、Borlandに苦情のメールだしたんですよね。 orz
謝りのメールだしときます。。。
苦情って… まずは自分の環境疑えよ
教えていただいた方々、ありがとうございました。 m(_ _)m プロジェクト・チームに入れるように、精進します(笑)
パッチのDLも満足にできないやつが ギコナビ・プロジェクト・チームに入るのか? 改悪だけはするのなよ…
次はインストール・キーが入手できない・・・orz なんか、エラーメッセージが表示されます。 どうしたら、いいんでしょうか。
(;´A`)ギコナビの将来が激しく心配だ…
>>409 藻前はがんばった!よくやったよ!
もう寝ろ。
おめでとうございました。
また、あした、がんばります!
番長のLL、俺のかとオモタ
ちょー誤爆
な ん だ こ の 流 れ !! ↓ 以下何事もなく質問どうぞ ↓
Delphi6 Personalのインストールキーを入手できなくて困っています。 方法を教えてください。
>>417 状況がわからな過ぎるので詳しく書け>DLできない人
424 :
デフォルトの名無しさん :04/08/14 22:18
Delphi Personalを落としてから、スパムがものすごく来るようになったんですが、 某の個人情報の扱いって一体どうなってるんでしょうか?
Personalがでたとき、インストールしたことあるんですけど なにも問題なかったのに・・・。
>>424 俺登録して半年以上たつけどまったく来ないよ
>>427 インターネットエクスプローラ6です。
ルータは使ってるんですけど、関係ないですよね。
あと、ネットスケープ7.1でもやってみたんですが
同じでした。
なんでだ〜(泣)
質問です Editにag+oau a+garh ta+ehah oeu+hapuhのような任意の文字列がある場合で ↑ ↑ のような半角の+のみを全角の+にする方法(他の文字列は半角のまま)がわからなくて困っています 何か良い方法はないものでしょうか?
StringReplace
[rfreplaceall]
AssigenFileなどのファイル関数とTStringListで同じ処理ができるとき どちらの方を用いるべきなのでしょうか? 速さやメモリ使用量などはどうなのでしょうか? 教えてエロイ人 ヽ(`Д´)ノ
前者は一行読み込み込んで処理して読み捨てる 後者は全体を読み込んで全体を処理できる 前者のやり方で済むならその方が高速省メモリ 後者の方が扱いは簡単
434 :
デフォルトの名無しさん :04/08/15 10:11
この中に、今、Delphi6のインストールキーを入手できる人いますか? 何回やってもダメなんです(涙)
あきらめろ
ルータやFWの問題じゃないのか? そこらへん全部取っ払ってやってみたら
437 :
デフォルトの名無しさん :04/08/15 10:43
>>436 ソースの糞パーソナルファイアウォールのせいかとも思ったんですが
ファイアウォール切って、AirH”でやっても無理でした。
きっと、サイトがあぼーんしてるんでしょうね。
そう思って日を改めたいと思います。
はあ、、、、、VBから卒業できない。。。
このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが、 お礼はDelphiの布教と初心者の救済をお願いします。
>>437 それは君の運命だ。素直に受け入れよう。
_/\_ ▲ _/\_ \ / ▼■▼ \ / |/\| ▼▼ |/\| ┃ ヽ ┃ ヽ / │ |\ ┃● ヽ―-―/ ● │ | ) 寝るぞ、ハゲども!おやすみーw ┃ ヽ / │ ● ┃ ヽ/ / ┃ ( ┃ / ̄ ̄ ̄ ̄ | ┃│ ノ ┃ \____ ノ ┃ | ┃ | ┃ (人) | ┃ | | ┃ ヽ__/
AssignFileで関連付けたファイルを Resetで開いた時に I/O エラー(32)が出た場合 特別な処理をしたいのですが この場合はどうすれば良いでしょうか?
>>442 例外処理が有効な時はtry〜exceptを書く、そうじゃなければIOResultをチェック
try Delphi.Abone; except on EDelphiDied do C#.BuyAndInstall; end;
コンパイルエラー: 不正な記号(#)
コンパイルエラー: C#厨はイッテヨシ
447 :
デフォルトの名無しさん :04/08/15 22:44
Delphi9タノシミー!
448 :
デフォルトの名無しさん :04/08/15 22:59
C言語で言うところの__LINE__とか__FILE__みたいなのは、Delphiではどうなってるのでしょうか?
449 :
デフォルトの名無しさん :04/08/15 23:00
450 :
デフォルトの名無しさん :04/08/15 23:02
C#.DownLoadAndInstall; で十分。
>>448 デバッグ目的ならAssertで充分と思うが、何がしたいのですか?
Cの_LINE_とかってプリプロセッサでは?
Assertのダサい使いかただな {$IFDEF DEBUG}try Assert(False) except on e:EAssertionFailed do OutputDebugString(PChar(e.Message) + 18); end;{$ENDIF} プリプロセッサ欲しい
System.AssertErrorProcを乗っ取って、例外を起こさずに引数を記録するだけの関数に置き換えたら var __LINE__ : Integer; Assert(False); //この時点で記録される OutputDebugString( ... __LINE_ ... ); のような書き方もできないでもない。 プリプロセッサがあるとコンパイル速度に影響するだろうからいらない。
コンパイラ式のアプリにコンパイル速度云々って・・・
ん?確かに完成品は変わらないだろうけど、F9押した時に1秒待つのと2秒待つのはだいぶ違う気がするが…
どうでもいい
インストール・キー、ゲットできましたよ! これで、ギコナビ・プロジェクトに参戦できます。 ありがとうございました。 <(_ _)>
インライン関数欲しい
テキストの整形をしたいのですが、TStringListの任意の場所、例えば あああいいいううう の、一番最初のいの前に改行を入れたいのですが、どうすればできるのでしょうか? どなたか教えていただければ・・・
s := YourStrings.Text; Insert(sLineBreak, s, 挿入位置); YourStrings.Text := s;
procedure TForm1.Button1Click(Sender: TObject); var sl:TStringList; s:string; p:integer; begin sl := TstringList.Create; try sl.Add('1234567890'); sl.Add('xxxxあああいいいうううzzzz'); sl.Add('1234567890'); s := sl.Text; p := AnsiPos('あああいいいううう',s); Insert(#13#10,s,p+6); sl.Text := s; finally Memo1.Lines.Assign(sl); sl.Free; end; end;
sl.Clear; sl.Add('あああいいいううう'); sl.Insert(0, Copy(sl[0], 1, 6)); sl[1] := Copy(sl[1], 7, High(Integer));
>>465 お題の意図は任意の行の任意の位置での行の分割ですが何か?
例えばText使って3行目の6文字目を分割したい場合どうやれと?
>>466 >>463 が見えないの?
String に写し取って改行入れて、TStringList に戻す。
>お題の意図は任意の行の任意の位置での行の分割ですが何か?
はぁ?
>>464 だと後ろの行がつぶれるでしょ?
>>468 お前は題意を読み違えてるから話にならん。
470 :
デフォルトの名無しさん :04/08/16 17:38
盛り上がってまいりました
sl.Clear; sl.Add('あああいいいううう'); sl.RegExp('s/あい/あ\nい/g');
>>467 迷惑なんてかけるわけないじゃないですか(w
今、勉強中です。
>>469 >お前は題意を読み違えてるから話にならん。
たしかにそうでした。すみません。
>例えばText使って3行目の6文字目を分割したい場合どうやれと?
s:= sl[2];
Insert(#13#10,s,7);
sl[2] := s;
このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが、 お礼はDelphiの布教と初心者の救済をお願いします。
今現在のマウスポインタの指してる座標を手に入れるにはどうしたらいいですか?
Delphi内部からShellExecute関数でDOSからperlを実行し その実行結果によってAファイルができる このAファイルをDelphiで読み込んでMemoに表示させたいのですが perlがAファイルを処理し終わる前にDelphiが読み込みを始めてしまいエラーがでます (更新前のファイル内容が出たり、新規につくられるファイルではファイルがないとのエラー、読込違反のエラー) ウェイト処理を入れたり、エラー処理をやってみたりしましたが上手くいきません このような場合、なんか上手な対処方法はありますか?
TMSのメモコンポーネントを使ってみたけど、 予約語を太字にすると最後の文字が表示されない。 これってソースを買わないと直せないかな?
>>476 基準位置(原点)をどことするかが問題だ。
アクティブウインドウの位置を基準とするのか、
アクティブウインドウに乗っているコントロールを基準とするのか、
デスクトップの左上を基準とするのか。
>>477 CreateProcess を使ってループでプロセス終了まで待機する
サンプルをどっかで見た。
CreateProcess WaitForSingleObject
↑で検索すれば引っかかるかと。
479 :
デフォルトの名無しさん :04/08/16 21:37
>>476 perlの処理の最中はフィルを消しておいて、
終わったらファイルを作成。
Del側はファイルがなければWhileとかで回して待機させて、
出来たら読み込みで良いんじゃないの?
そういうことではない?
>>476 while(not FileExsist(FileName)) do
でファイルが作成されるまで待ってはどう?
もしもの時には無限ループになるけどw
>>476 スマソ。綴りを間違えた。FileExistsね
>>478 「デスクトップの左上を基準とする」でお願いします
>>479 返信トンクス
>perlの処理の最中はフィルを消しておいて、
>終わったらファイルを作成。
これはどうやるのでしょうか?
私が実行しようとしているperlは
perlを実行すると先ずディレクトリ内に空ファイルが作製され
それからファイル内部に実行結果を書き込むようです
空ファイルが出来てからファイル内部に結果が書き込まれるまでにタイムラグがあるため
Delphiはこの空ファイルに反応して読み込みエラーになります
また条件により実行結果のサイズが毎回違うために
空ファイルと結果を書き込み終わるまでのタイムラグも毎回違うのです
>>475 Mouse.CursorPos
で良いはず。マルチモニタ等の考慮が入っているかは不明。
>>483 おお、うまくいきました。
ありがとうございます。
>>482 ShellExecuteEx使ってperl起動して終了待ちしとけ
おいおい waitforsingleobjectが出てるのに虫するなよ氏ね
氏ぬのはお前。 ShellExecuteじゃ待てないだろ。
だからEx無しじゃ待てないといってるんだが。 このスレで言ってもいないことを相手が理解するのを期待すんな。
exで起動すればいいだろ氏ね
477もお願いします。 板目かっこいいから使いたいです。
昨日も超初心者級による珍回答続出だったな
↑ こんなレスより何倍もマシ
なんのなんの。 即答レスはありがたいよ。 質問に質問で返すようなコンサルティング厨より大分マシ。
板目って何?
見た目のタイポ
498 :
デフォルトの名無しさん :04/08/17 16:05
ちょっと困ったことがあります。 ”コンポーネントの新規作成”ダイアログで、インストール先の”パレットページ名” に自分で付けた名前を指定しているにもかかわらず、なぜかSampleページにコン ポーネントがインストールされてしまいます。 どうすれば自分で指定したページにインストールすることが可能になるでしょうか?
registerプロシージャを見せて
500 :
デフォルトの名無しさん :04/08/17 16:09
>>499 これです。
procedure Register;
begin
RegisterComponents('User', [TDrawButton]);
end;
>>498 そのソースにわざとコンパイルエラーを仕込んで
コンポーネントの登録しようとしたらどうなる?
もしエラーもなく登録できるなら
どこか別の場所の.dcuが使われてしまっている悪寒。
502 :
デフォルトの名無しさん :04/08/17 16:21
>>501 >そのソースにわざとコンパイルエラーを仕込んで
>コンポーネントの登録しようとしたらどうなる?
普通にコンパイルエラーになりましたね。
ちなみに、特定の1個のコンポーネントだけではなく、
全部のコンポーネント(すべてUserページにインストール指定)が
Samplesページに追加されてしまいます。
>>500 それで Sample に載るならたしかに変。'User' が特別なのかなぁー。'Hoge' とかだとどうかな?
そこらへんのソースを一旦忘れて全く新規に中身空っぽの コンポーネント作って'Test'ページに登録した場合は? それでも変ならもう分からん。
505 :
デフォルトの名無しさん :04/08/17 16:42
試しにパッケージに3つのコンポーネント、”TScrollBoxEx”、”TSHFileOp”、”TLabelA”を 追加して(TLabelAだけHogeページ指定)試してみたのですけど、”TlabalA”はUserページに、 その他の、”TScrollBoxEx”、”TSHFileOp”がSamplesページに追加されてしまいます。 以下はRegister;手続きです。 procedure Register; begin RegisterComponents('User', [TScrollBoxEx]); end; procedure Register; begin RegisterComponents('User', [TSHFileOp]); end; procedure Register; begin RegisterComponents('Hoge', [TLabelA]); end;
506 :
デフォルトの名無しさん :04/08/17 16:45
>そこらへんのソースを一旦忘れて全く新規に中身空っぽの >コンポーネント作って'Test'ページに登録した場合は? ダメですた。 とりあえず今はあきらめようと思います。
レジストリエディタを使ってパレットの配置を初期化してみたらどうですか? インストール後に場所を変更したコンポーネントが元の場所に戻ります。 HKEY_CURRENT_USER\Software\Borland\Delphi\バージョン\Palette というキーの中にある値を全部削除してみてください。 Delphi を起動してパレットの設定を行うと再作成されますのでご安心ください。 ただし、削除前に保存しておくことをおすすめします。
>>477 TMS使っているけど、おそらくこの問題はソースコード入手しないと難しいような気がする。
持っているんで確認してみようと思うけど、仕事サボり中のためあまり期待しないで待ってて。
確認できたらNewsGroupかサポートにあげてフィードバック待ってみるから。
たとえばどういう単語?わかっていたら数例挙げてみて。
>>508 おおおお、ありがとうございます。
期待しないふりをしながらも期待して待っています。
例えば、Procedureとかです。
TMSのDel7を使っています。
それについていたデモでもそうなります。
よろしくお願いします。
板目→見た目です。
表示位置はIDEで設定できるでしょ? Registerでの設定がIDEでの設定より優先したら、 パッケージをインストールするたびにIDEの設定が無効になるよ!
511 :
デフォルトの名無しさん :04/08/18 01:28
HTMLの<A>タグみたいなことをしたいんですが・・・お願いしますm(_ _)m
「リンク ラベル」で調べればサンプルがざっくざく
513 :
デフォルトの名無しさん :04/08/18 02:10
コンポーネントを貼り付けた子ウィンドウを持つプログラムをDelphiでつくるにはどうすれば良いですか? 具体的には 処理結果がAならウィンドウAを起動、BならウィンドウBを起動 のようにしたいのです もちろんウィンドウA、Bを外部プログラムとして設計し 内部から呼び出す手もあるのですが それだとカッコ悪いですし、拡張などで不具合が出る可能性があるので よろしくお願いします
>>514 よくわからないけど、フォームをいくつも作って、
if 処理結果 = A then FormA.ShowModal;
if 処理結果 = B then FormB.ShowModal;
ってこと?
それとも、ソフトの起動時に条件によって、フォームを切り替えたいってこと?
その場合は、プロジェクトファイルのほうで、
Application.CreateForm(TForm1, Form1);
の部分を切り替えればいい。
SendMessageやPostMessageでメッセージを送る場合 Application.Handle Application.MainForm.Handle どちらがよいのでしょうか?
517 :
デフォルトの名無しさん :04/08/18 13:54
質問があります。 EM_GETFIRSTVISIBLELINEでは、Memoコンポーネント上で、実際に目 にみえている最初の行の行番号を取得できますけど、これの水平バー ジョンみたいなのはあるでしょうか? スクロールバーなしでWordWarpFalseのメモコンポーネントで、クライアント領域 の左端のテキストの位置(ピクセル)を知りたいです。 スクロールバーが非表示なのでGetScrollPosが使えません。
messagedlgで、ボタンの中の言葉を変えるのには どうすればいいんですか?
Editor で messagedlg と言う文字列を選択した後、 F1キーを押してみろ。
と言う話ではないようだな。
決まったボタンの名前じゃなくて、好きな文字を ボタンの中に表示したいって事なんですけど MessageBoxも表示するボタンが決まってるみたいです。
DQNな方法としては、 CreateMessageDialog でダイアログウインドウを作成して、 表示する前に、ダイアログウインドウ中のコントロールを探索して ボタンのキャプションを書き換えると言う方法を提示してみる。 これでは、最高で五つまでしかボタンは表示できないっぽいけど。 ↑中村さんのとこでも例があったので、これが一番容易らしい。 返り値はShowModalの返り値で良い模様。 もっとスマートでインテレクタルな方法があるかもしれないけど。 任意の文字をキャプションに持つボタンを作成できる ダイアログウインドウをコンポーネント化してしまうのも手の一つ。
そんなの自前でarray of string受け付けるやつ作ればいいじゃん
524 :
デフォルトの名無しさん :04/08/18 22:50
コマンドのXCOPYみたいなことをするにはどうしたらいいですか?
ShellExecute(nil, 'xcopy'
526 :
デフォルトの名無しさん :04/08/18 22:55
527 :
デフォルトの名無しさん :04/08/19 01:01
DelphiとIndyを使って、HTTPのURLにつないで「200 OK」が返ってくるか確認するプログラムを作りたいのですが、
接続したURLのサーバが見つからないときはSocketErrorがでて、そこで終了してしまいます。
サーバにつながらないときは別の処理を実行するようにしたいのですが、どうすればよいですか。
こんな感じでやってます。
IdHTTP1.Head('
http://www.2ch.net/ ');
>>527 どうしてもその組み合わせじゃないとイヤ!
ってんじゃないのなら「Wininet」をお勧めします。
よくよく読んだらちょっと後半部分が「Wininet」だと怪しい気がしてきたので、 読み飛ばしてください。 ↓次どうぞ
exceptしろよ
531 :
デフォルトの名無しさん :04/08/19 14:53
TTest=record Name:String[20]; Age:Integer; end; PTest=^TTest; var A:PTest; begin New(A); ... Dispose(A); Dispose(PTest(A)); Aを開放するときはどっちでもOKですか?
後者はNG。文法的には正しいけどそう書く意味がない。
533 :
デフォルトの名無しさん :04/08/19 15:03
>>532 あっ間違えた。
List:TList;
var
A:PTest;
begin
New(A);
List.Add(A);
...
Dispose(List[0]);
Dispose(PTest(List[0]));
上記の場合はどっちでもOKですか?
DisposeはPointer型の引数をとるからキャストは不要
>>534 は嘘。
バリアント型やinterfaceの終了処理があるから、型付きポインタを渡さないといけない。
A := List[0];
Dispose(A);
が正しい。
delphiで実行する前に自動的に保存というオプションないですか? 6 personalです。
>>536 …環境オプション。
ソフトをインストールしたら一応オプションダイアログを眺めるのは常識では…
538 :
デフォルトの名無しさん :04/08/19 15:47
文字列の各単語の先頭の文字を大文字に変換する関数()ってあるでしょうか? それとも自作する必要がありですか? abc def → Abc Def
>>538 流石に標準で用意するにはピンポイント過ぎるよそれは
forで一文字ずつ見てって、空白の次にUpCaseかますだけだから、書いても三行ぐらいでしょ
>>537 設定タブの自動保存の設定ですか?
エディタファイルとプロジェクト デスクトップとあるのですが
どっちでしょう?
>>540 …それぐらいは、2chに書き込む手間を費やすよりは、ヘルプを見た方が早いと思うぞ
(何を保存したいのかにもよるが、ソースコードならエディタファイル、窓とかブレークポイントとかの状態はデスクトップ)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click TextBox1.Text = StrConv(TextBox1.Text, VbStrConv.ProperCase) End Sub
.NETの勝利
ぴゅう太の日本語ベーシック
>>534 キャストせんとMemCheck先生が怒りますよ
指定したアドレスにバイナリでデータを書き込むにはどうすればいいですか? TMemoryStreamのWriteを使うのだと思うけどヘルプ読んでもワケワカメ(´・ω・`)
Move
Seek
553 :
デフォルトの名無しさん :04/08/19 23:16
>>516 両方で試せば、おのずと明らかになる。
>>531 GetMem, FreeMem を使いなさい。
554 :
デフォルトの名無しさん :04/08/19 23:32
ここで聞いていいのかわからないんですが… LISPってなんでしょうか? 全くの素人でして、ゼロから学ばなきゃいけないんですが 何から始めていいのかわかりません…
テキストファイルの中身が空なら処理する というプログラムにしたいのですがどうすれば良いでしょうか? FileSizeだとテキストファイルに使えない上に 開かないとダメです ご教授下さい
FindFirstでSearchRecのサイズを調べる
>>554 どうして学ばなければいけないのですか?
丸投げでいいのでは?
>>554 プログラム言語のひとつだよ。Delphiとはまったく無関係。
専用スレあるからそっち行って処理系なり入門サイトなり探してきな。
このスレもすっかり寂れてしまったな。 みんなVS.NETへの移行で忙しいらしい。
>>533 の質問って、ほぼ3ヶ月おきにされる FAQ だよね。なんで、自信満々で
間違ったことレスするかなぁー。
>>534 型なしポインタでは Dispose で Finalize ができないので一般にはリークする
だろうことぐらい気付けよ
>みんなVS.NETへの移行で忙しいらしい。 うむ、けっこうおもしろいね。実用性がまだまだだけど。
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, type TForm1 = class(TForm) private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} end. 自作の関数や手続きはどこに書けば良いのでしょうか? またC言語でいうところのヘッダファイルのような物を作るにはどうすれば良いですか?
使うところより前なら実装部のどこにでも 別ユニットにして自作関数をため込むのが一番いいかも
> またC言語でいうところのヘッダファイルのような物を作るにはどうすれば良いですか? ヘッダファイルの相当するモノはない。ユニットの interface 部がそれにあたる。 uses すると見えるのはその部分だけ。
ま、ユニットファイルの構造くらいはヘルプで読んでおくこと。基本中の基本だから
あのわかりにくいヘルプを超初心者に読めと?
ヘルプの「Delphi プログラマーズガイド」の部分くらい読めよ。 読まなきゃ分かるかどうかさえ分からないだろ。超初心者でも分かるヤツは分かる。
>>同じユニットの例 implementation {$R *.DFM} function Tasizan(v1,v2:integer):integer; begin result := v1 + v2; end; procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage('2+3 = '+IntToStr(Tasizan(2,3))); end;
独立ユニットの例 uses Unit2; procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage('2+3 = '+IntToStr(Tasizan(2,3))); end; ------------------ unit Unit2; interface uses SysUtils; function Tasizan(v1,v2:integer):integer; implementation function Tasizan(v1,v2:integer):integer; begin result := v1 + v2; end; end.
表示されるimageの大きさが実行中に変わるソフトを作っているのですが image1.Width := 100; image1.Height := 100; としてから表示させ、続いて image1.Width := 200; image1.Height := 200; と変更させて表示させても、最初に表示された大きさのimage以上に表示されません。 これはどこが悪いのでしょうか?
>>570 Image1.Stretch:=True;
おおおおおおおお 素早い対応ありがとうございます
すいません、うまくいきませんでした。 画像imageの比率というか、内部で持っている大きさと表示される大きさが サイズを変えるたびに変わってしまいます。
とりあえずFORMに直接描くようにして回避しました。すいませんでした。 それにしても procedure TForm1.Button1Click(Sender: TObject); begin image1.Width := 100; image1.Height := 100; Image1.Canvas.Brush.Style := bsSolid; Image1.Canvas.Brush.Color := clWhite; Image1.Canvas.FillRect(Rect(0,0,Image1.Width,Image1.Height)); end; procedure TForm1.Button2Click(Sender: TObject); begin image1.Width := 200; image1.Height := 200; Image1.Canvas.Brush.Style := bsSolid; Image1.Canvas.Brush.Color := clWhite; Image1.Canvas.FillRect(Rect(0,0,Image1.Width,Image1.Height)); end; これでボタンを1から押すのか2から押すのかでなぜ表示範囲が変わるのか結局不明。 Stretchだと表示倍率が変わってしまうし。
>>574 Stretch と Proportional を両方 True にしてみてください。
AutoSize は False、Align は alNone になってますか?
>576 やってみましたが同じくダメでした。白で塗りつぶしてから Image1.Canvas.TextOut(10,10,'test100'); を入れてみたのですが、ボタン1から押すとボタン2の時に文字が縦横倍に ボタン2から押すとボタン1の時に文字が半分になってしまいます。
>>570 Image の Width Height を変えるとき、
Image.Picture.Bitmap の Width と Height も変えてみてくれ。
579 :
デフォルトの名無しさん :04/08/21 04:54
しつもんです。 外観はTListViewのViewStyle=vsReportみたいな感じだけれども、マウスでクリック したとき一番左側の値だけ選択されるのではなく、行全体が選択されるような コントロールってどうやって実現するんでしか? 具体的に言えば、2chブラウザのスレ一覧につ変われているようなコントロールです・・・。
つ変われているような → 使われているような 実現するんでしか? → 実現するんですか? でした。
Special Launchみたいにフォームからマウスが離れると フォームが小さくなるようにするには どうしたらよいでしょうか?
584 :
デフォルトの名無しさん :04/08/21 13:20
ComboBoxの背景色は、透過させることができますか?
>>585 thx
CM_MOUSEENTERですね
ENTERじゃなくてLEAVEちゃうか?
DelphiにVBのsplit関数と同じものはありませんか?
ない。 コードが欲しけりゃDelphi Splitでググっとけ
>>588 Delimiterを設定して
DelimitedTextにソース文字列を代入する
split関数と同じものではないですね。
>578 できました!おありがとうございます。
ファイルの内容をString型の変数にすぱっと読み込みたいのですが そのようなことはできますか? TStringsへ読み込むと分割されてしまうので できればバイナリで読み込んでそれをStringにしたいのですが・・・
FS := TFileStream.Create(FileName,fmOpenread); //FS.Position := 0; FS.Read(s[1],FS.Size); 動作未確認
sl.LoadFromFile( s := sl.Text
Free・・・orz
>>594 sをSetLengthしないとえらいことになるはず
>>593 TStringsのTextプロパティは駄目なの?
ありがとうございます。 Textプロパティ使わせていただきました。
オブジェクトを使うほどでもなければ API だけでも十分対応できる。 ほかのどの方法よりも速いはず。 function LoadFileToString(const FileName: string): string; var Handle, Size: Cardinal; begin Handle := CreateFile(PChar(FileName), GENERIC_READ, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if Handle <> INVALID_HANDLE_VALUE then try Size := GetFileSize(Handle, nil); SetLength(Result, Integer(Size)); ReadFile(Handle, PChar(Result)^, Size, Size, nil); finally CloseHandle(Handle); end else RaiseLastOSError; // RaiseLastWin32Error; end;
>できればバイナリで読み込んでそれを ここには意味があるのかないのか
TStringStream なんてのがあるぞ。
私ならAssignFileで開いてBlockReadでファイルサイズ分まとめて読み込むけど。
BlockReadなんて古臭い関数は使わないほうがいい。
エラーチェックが気に食わんけど(Win32Check使えとか一応全APIチェックしろとか)
>>600 のでいいよ。
String型文字列をファイルに書き込みたいのですが 空のファイルができるだけです。何が問題でしょうか? FS := TFileStream.Create('hoge.txt',fmCreate or fmOpenWrite); FS.Write(s, Length(s)); FS.Free;
FS.Write(s[1], Length(s)); としたらできました。
>>606 FS.Write(PChar(s),〜
間違えた、すまん FS.Write(PChar(s)^,〜 こうだ
あれ?
>>607 ではだめですか?
一応動いてるみたいですけど
s[1]だと、長さが0の時困るでしょ
>>611 長さ0の時を試してみたけど大丈夫みたいでした。
うん、s[1]が範囲外で不正なメモリを指しても、サイズが0ならつまりメモリ上は全く上書きされないので問題なし でも、世の中には{$R+}というオプションがあって…
なんですか?その{$R+}というのは?
読み込むほうは FS := TFileStream.Create('hoge.txt', fmOpenRead); SetLength(s, FS.Size); FS.Read(s[1],FS.Size); FS.Free; としてるんですけど、こっちもポインタみたいな指定に したほうがいいんですか? どういう書き方になるんでしょうか?
>>616 それでいいと思う。
漏れもそう書いてる。
強いて言えば
if FS.Size > 0 then FS.Read(s[1],FS.Size);
かな。
うーんpcharが何なのかよくわからないなあ
一般的には「ヌルで終わる文字列」だが 今回の場合は文字列ポインタと言うべきだろうな
s[1]ってことはShortStringになるわけだが、長さは大丈夫なのか?
>>622 s:string[255];
と間違えてないか?
sの1文字(バイト)目だよ
Charになるというのならまだわからんでもないが・・
DelphiのString型はUNICODEじゃないんですか?
それはここで聞くよりヘルプ見たほうが早くないか?
>>626 バージョンとコンパイルオプションとWindowsによって変わるが、
D7まではSJISと思っておけばいい
D8はUNICODE
>>616 > 読み込むほうは
> FS := TFileStream.Create('hoge.txt', fmOpenRead);
> SetLength(s, FS.Size);
> FS.Read(s[1],FS.Size);
> FS.Free;
>
> としてるんですけど、こっちもポインタみたいな指定に
> したほうがいいんですか?
> どういう書き方になるんでしょうか?
だから、わからなかったら素直に
>>598 か
>>600 の方法使えって。
それで解決できるんだから。
>>615 > なんですか?その{$R+}というのは?
>>620 > うーんpcharが何なのかよくわからないなあ
ヘルプくらい引けよ。全部書いてあるだろ。
何か、釣りなんじゃないかという気がしてくる。
var パラメータは表記の問題で内部的には変数を指すポインタを渡してる。 つまり var パラメータの位置に置いた S[1] は、文字列 S の 1 文字目の 文字を指すポインタを渡してるということ。 Delphi の文字列 (長い文字列) は、参照カウンタとバッファサイズが実際の 文字列の前に付いてるので、単なる文字列バッファではない。 従って、これを直接 TFileStream の Read などに渡すことはできない。 しかし、Delphi の文字列を PChar にキャストすると Delphi の文字列が、 その変数の文字列バッファの先頭を指すポインタに変換されるので、 PChar(S)^ と S[1] は同じになる。 この 2 つの式の型はいずれも Char になる。
>>629 自分が知っている知識を全て常識と思わないようにね
次スレの
>>1 には、「わからないキーワードはとりあえずF1を押してみましょう」とか書いておくとか
>>630 結論は
>PChar(S)^ と S[1] は同じになる。
ということですネ!
文字列の長さが0の場合。 S[1]は例外を返す。 PChar(S)^はヌル文字列を返す。
>>633 繰り返しになるが…
「長さが0でかつ{$R+}」の場合を除き、varパラメータに渡す時または@でアドレス取る時、はYes
この際、難しいことは考えないことにします。
Record型について質問です Record型で「=」は使えないのでしょうか? type TItem = record end; として、Form1上にButton1をおいて procedure TForm1.Button1Click(Sender: TObject); var a,b: TItem; begin b:= a; if b =a then button1.Caption:= 'true'; ←[エラー] Unit1.pas(43): 互換性の無い型です end;
代入はできても比較は出来ない。 比較したければCompareMem関数を使う
DOAのOracleDataSetを使用してSQL(TStrings)を発行しているのですが、 このSQL(TStrings)を書き換えたい場合はどうすれば良いでしょうか。 文字列を代入すると互換性がないといわれてしまい、 StringをTStringsに変換する方法をさがしたのですが見つからず。 師匠たち教えて下さい。
SQL.Text := '代入したい文'
PChar(S)^ はアドレスの逆参照でしょ?
内部的にポインタだからアクセスしないだけで、
本当に逆参照したらAVが発生するでしょ。
>>637 使えない。
>640 ありがとうございます。これで明日も生きていけます
相当焦ってるか、もしく純粋に経験不足だな
>>638 ,641
ありがとうございました。
string中に入れたいので比較関数作って処理します
馬鹿初心者ですが、今度いろいろと質問させていただきます。
ってーか6と7の違いすらわからんよ
recordなんて使うなよ。 classにして比較メソッド作れ
>>641 S のバッファが割り当てられていれば、PChar(S) は有効なアドレスを
指します。
上のような場合、割り当ては SetLength を呼び出した時点で行われて
いるので問題ありません。
割り当てによって確保されたサイズの範囲内であれば逆参照も可能です。
ただし、バッファが再割り当てされると、元のアドレスを保持していても
それが有効でなくなる可能性がありますので注意が必要です。
>>647 用途によるでしょ。
record に string や動的配列を含む場合は (自動変数でなければ) 初期化や
終了処理が必要なので class にする方がいいと思われる場合が多いですが、
単純型だけなら record でも十分です。
もっとも、要素が単純型でない場合は CompareMem は意味をなさないので、
要素ごとに適当な方法で比較するしかありません。
>>630 >しかし、Delphi の文字列を PChar にキャストすると Delphi の文字列が、
>その変数の文字列バッファの先頭を指すポインタに変換されるので、
変換されるのではない。string 型自身が実は文字列バッファの先頭を指すポインタなので
単なるキャスト
>>648 >それが有効でなくなる可能性がありますので注意が必要です。
有効じゃなくなる可能性なんかないだろ。S が string 型の変数であるかぎり。
>>649 >元のアドレスを保持していても
と書いてあるから、
A := PChar(S);
のAが無効になる可能性があるという話ではないかな?
>>650 そうだね。それは、今回のキャストの話とはべつのような。文脈を読むと
>>648 >S のバッファが割り当てられていれば、PChar(S) は有効なアドレスを指します。
などと書いているし。バッファが割り当てられていない string 型の変数なんかないだろな。
>バッファが割り当てられていない string 型の変数なんかないだろな。 あっ、ローカル変数で初期化されていない場合かな
>>649 長い文字列は内部的にはバッファを指すポインタですが、文法上は
文字列型という型です。ポインタ型と文字列型は違います。
S := 'abc' みたいに書くし、S[1] は S の 1 文字目でしょ。
動的配列もオブジェクトもポインタですか?
後半は再割り当ての前後でバッファのアドレスが変わる可能性があると
いうことです。
例えば P := PChar(S) として P にアドレスを入れた後で、S に対して
SetLength すれば P に入っているアドレスは無効になるかもしれません。
それはポインタなら当たり前
>ポインタ型と文字列型は違います。 ちがうからキャストするんでしょ
>動的配列もオブジェクトもポインタですか? ちがいますがポインタにキャスト可能です。
今日も初心者回答者が大活躍ですな
いいから貴様等ヘルプぐらい読んでこい string → PChar は、長さが1以上ならそのままバッファへのポインタを、 長さが0の時は特別に用意された長さ0のC形式の文字列へのポインタを返してくれる 長さが0のstringは全ビット0なので、純粋なキャスト、例えばPointerにキャストすればnilだし、Cardinalにすれば0。 でも、PCharにしたときは、別の値になる。 疑うならCPUウィンドウでトレースしてみなさい
まあ、落ち着けw
660 :
デフォルトの名無しさん :04/08/23 12:58
ネットでダウンロードしたあるソースファイル(hoge.pas)を使用して(自分のusesに追加) コンパイルすると、 「hoge.pas:ファイルが見つかりません:'DsgnIntf'」 というコンパイルエラーが出るのですが 他に何か設定する必要があるのでしょうか? hoge.pasのusesにはDsgnIntfが書いてあります。
DsgnIntfは設計時専用のユニット。 昔は実行時に使われるソースに設計時のコードまで書いてしまうコンポーネントが多かったため Delphi5か6か忘れたけどその辺で、設計時パッケージを使わないとコンパイルできなくなってます 要するに、そのソースは古いものでしょう、と。 コンポーネントとしてインストールしたりせずに、単にユニットとして使うだけなら、 usesからDsgnIntfを消して、コンパイルエラーになったところを片っ端からコメントアウトでいけない?
>>658 長さが0でない場合には単なるキャストであることを確認
procedure TForm1.Button1Click(Sender: TObject);
var
S:string;
p:pointer;
i:integer;
begin
S := 'ABC';
p := pointer(@S);
//CopyMemory(@i,p,SizeOf(S)); // こっちでも同じ
Move(p^,i,SizeOf(S));
Label1.Caption := IntToStr(i);
Label2.Caption := IntToStr(integer(PChar(S)));
end;
では同じ値が表示されます。
>長さが0のstringは全ビット0なので、純粋なキャスト、例えばPointerにキャストすればnilだし、Cardinalにすれば0。
>でも、PCharにしたときは、別の値になる。
これも、上で S := 'ABC'; のかわりに SetLength(S,0); とすると確かめられる。
後者は初めて知った。ありがとう。
ところで、蒸し返すようだけど、Move() や TFileStream.Read() などの引数で
string 型にしたい場合、PChar(S)^ がいいの、それとも S[1] がいいの?
ヌル終端が不要で、長さが0の時に何もしないことが保証されているなら(MoveもTFileStream.Readもそう) Pointer(S)^が一番いい。不要な処理が一切無い それ以外(APIや外部に渡すとか)は、{$R+}の事を考えると、PChar(S)^の方がいいでしょうね
なるほど、ありがとう
Delphiでポインタのことを勉強するのにいい本ってありますか? ヘルプ読んでも全然使いこなせません・・・
なんか新鮮な質問だな・・・
amazon.comで調べました 9200円って('A`;)
間違えた Inside Delphiと勘違いしてた
Delphi でも C でも原理は同じ。Cでポインタについての本は結構あるでしょ。 上の話題のように、Delphi で string 型の変数がどのように実装されているか、 は、汎用性に欠けるし、知識としてもあまり有効ではありません。ポインタ一般に ついて学ぶのがいいでしょう。Delphi では、@ でその変数のアドレス、ポインタの 後ろの ^ は逆参照、型の前の ^ は、その型へのポインタ型、とかを知っていれば いいだけです。
@hogeとPointer(hoge)って一緒ですか? 一緒だと思ってるけど、いまいち自信がない(´・ω・`)
俺もポインタのこと良く解からないままずっと仕事してるな・・・いい加減しっときたい
ポインタとは読んで字の如くポインタです。
>>672 全然違うだろ。
@hoge は「変数 hoge のアドレス」をアドレスとするポインタ。
Pointer(hoge) は「変数 hoge に入ってる値」をアドレスとするポインタ。
>>675 ますます解らない。
@hogeはhogeが構造体でも使える
Pointer(hoge)はhogeがポインタや4バイトの整数の時しか使えない。
string型は実際にはポインタなので、Pointer(S) のような使い方ができる。
S = '' の時、PChar(S) は 00 となっているコード領域のアドレスを返すため、
逆参照可能。
PChar(S)^、PChar(nil)^ は問題ない。
>>676 @hogeは変数hoge(の内容)を指すポインタを返す。
Pointer(hoge) は変数hogeの内容をポインタとして扱う。
hoge: Cardinal
hoge := 100;
の場合
@hoge は 変数hogeを指すポインタ
Pointer(hoge) は メモリ上の100というアドレスを指すポインタ
関係ない話だけど、 Cなら"->"と"."は区別されているのだが、 Delphiの場合だとどちらでも"."でアクセスできてしまう。
アロー演算子大好きです
シラネーヨ
>>676 > @hogeはhogeが構造体でも使える
> Pointer(hoge)はhogeがポインタや4バイトの整数の時しか使えない。
やってみた。
var
Ptr: Pointer;
N: LongInt;
D: double;
begin
N := 0;
D := 0;
Ptr := Pointer(N); // 4バイトでPointer型と同じサイズだからエラーが出ない
Ptr := Pointer(D); // [エラー] : 正しくない型キャスト
end;
>>676 が言っているように、コンパイルできなかった。
Byte型もPointerにキャストできるよ。 B: Byte; Pointer(B) も使える。
ローカルなstring型は暗黙の初期化が行われるよ。 初期化なかったら大変だよ。
>>682 順序型ならなんだって出来るんじゃない?
このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが、 お礼はDelphiの布教と初心者の救済をお願いします。
WideStringって今でも書込み時コピーしてへんの?
>>686 「書き込み時」って、何に書き込むとき? 「今でも」って何?
WideString 自身を Stream にそのまま書き込むことはできるよ。
>>682 >Byte型もPointerにキャストできるよ。
そりゃ、integer と代入互換性があるからでしょ。Word だってそう。
>>672 >@hogeとPointer(hoge)って一緒ですか?
この違いが分かれば、一歩前進。ポインタって、もっともナイーブに考えると
アドレスを格納するための変数なんだから、変数 Hoge のアドレスと、それが
保持している値は違うことに気づけばいい。
ずっと昔に買った本に、AnsiStringは参照カウンタで管理され無駄なコピーをしないように努力するが、 WideStringは参照カウンタがないからAnsiStringほど効率がよくないって書いてあったんよ 今のヴァージョンでも同じかいな?
>>687 質問の意味がわからないならすっこんでろ。
>>689 D7のヘルプでは
>Win32 では,WideString の値は参照カウントで管理されません。
>Linux では,参照カウントで管理されます。
と書いてある。
>>691 ありがとう
winとlinuxで違うなんて変なの
>>690 Copy on Write っていうんだよ。「書き込み時」じゃ意味不明
俺はなんとなくわかったYO
代入時ならより分かりやすい
でもググると書き込み時コピーで合ってるぽいけど
Copy on Write の直訳だろうね。参照を受け取って、一方が変更されるまでは、 コピーをしない、という意味だよね。string 型や TBitmap なんかもそう。
>>693 「長い文字列」のヘルプも読んでないならすっこんでろ。
>これは書き込み時コピーと呼ばれます。
質問は WideString ですけど
ヘルプ読まないと回答してはいけないのなこのスレ
同一人物だから
で WideString 型がどういう話の流れで string 型のヘルプになるわけ?
質問者にヘルプ読めってことだろ結局
>>691 から
WideStringの書き込み時コピーについては
>>692 で終わってる。
以降は「書き込み時コピー」という用語が存在するかどうかの話。
686の質問から691の回答まで58分間。689の説明があるまで、まともな 回答がなかったのは事実。687は689の説明を引き出すのに役立った。 はじめから689のように質問していたら、687はなかったし、回答ももっと 早かったのでは。だから、質問の意味がわからなくてもすっこんでいる必要はない。 690,698,702のレスの方が無意味
TMemoでメモ帳を作っています。 改行時にオートインデントの機能を付けたいのですが全然うまくいきません。 どういうコードを書いたらいいのか教えて下さい。よろしくお願いします。
テキストボックスの横にUpDownコントロールをおきました。 updownのassociateプロパティでテキストボックスとひもづけました。 そうするとそのテキストボックスをtxtHogeとします。 txtHoge.Text := '10'; で値を入れることができません。なぜでしょう?
うそーん
テキストボックスのNameプロパティでなくCaptionプロパティだけを変えてるとか、 UpDownのmaxプロパティとかminプロパティの設定が間違ってるとか、、、
うーん。 UpDownのPositionに10といれればいけるけど テキストボックスの.textに入れると0のまま・・・
なんかイベントによって機能したりしなかったりするみたい UpDown1.Position := 10; でどうですか?
そうか Createイベントではだめなんですね
文字列が数字かどうかチェックする関数ありませんか? VBでいうIsNumericのような
function IsNumericStr(const Str: string): boolean; var i: integer; begin Result := True; for i := 1 to Length(Str) do if not (Str[i] in ['0'.. '9']) then begin Result := false; Break; end; end; こういう関数を用意すればいいかも・・・
>>714 function IsNumer(NumStr: String): Boolean;
begin
try
StrToInt(NumStr);
Result := True;
except
Result := False;
end;
end;
応用するとDateTimeなどにも使える。
IsNumericStr() の方が約4.5倍速い
いただきました。ありがd
さらに速度1割り増し function IsNumericStr2(const Str: string): boolean; var i: integer; begin Result := false; for i := 1 to Length(Str) do if not (Str[i] in ['0'.. '9']) then exit; Result := true; end;
'9999999999999999999999999999'はIntegerに変換できないんだけどな。
質問 >文字列が数字かどうかチェックする関数ありませんか? Integerに変換できなくても数字であればいいのでは? あっ、IsNumer() のほうならそのとおり。
System.Val…
-ついたらだめだったのでVBに戻ります
>>725 そうだそうしろ。2度と来るんじゃないぞw
Delphiって言語以上にコミュニティに問題があるな
>>720 を少し改造すれば負の整数(-付き)にも対応できるよ。
VB の IsNumeric は文字列関数じゃなくてバリアント関数じゃないのか? Delphi やるなら、まず何でもバリアントで扱うという考えは捨てた方が いいと思うぞ。
>>730 寝言はいいから早くDelphi版IsNumericのコードをください。
function IsNumeric(const V: Variant): Boolean; begin Result := True; try VarAsType(V, varDouble); except Result := False; end; end;
うちのdelphi try exceptがまったく効かないんだけど なんででしょう?
>>733 まず何をもって効かないと言ってるのか書いてみて。
昔2chで教えてもらったんだけど.... 例外キャッチだとIDEが止まるのがちょっといまいち。 D6から TryStrToInt/TryStrToInt64/TryStrToFloart があります。 D5以前ならこんな実装してもいいかな。 function CanStrToInt(const S: string): Boolean; var E: Integer; tmp: Integer; begin Val(S, tmp, E); Result := (E=0) and (@tmp=@tmp); end; function CanStrToInt64(const S: string): Boolean; var E: Integer; tmp: Int64; begin Val(S, tmp, E); Result := (E=0) and (@tmp=@tmp); end; function CanStrToFloat(const S: string): Boolean; var tmp: Extended; begin Result := TextToFloat(PChar(S), tmp, fvExtended); end;
>>734 エラーで落ちてしまいます。
本当はキャッチするんですよね?
例外の設定がおかしいと思われる。
設定ですか?インストールしたままほとんど弄ってませんが
>>736 コードさらせ
Except仕切れていないだけなんじゃないの
IDEから実行して止まってるだけだろどうせ
えっ!exeなら止まらないんですか? 知らなかった。
とまったらもう一回実行してみろ
>>742 IDEからでも止めたくなかったら、
デバッガオプションを設定する必要あり
そのオプションとやらはどこにあるんですか?
('A`)マンドクセ…
Delphiってほんとにいいね。 仕事で使えないのが残念
おい、まさかIDEで実行して、言語の例外で停止にチェック入れてるとかいうオチ?
Delphi 言語の例外で停止というのにチェック入ってます。 これがだめなの?
>>749 だめというか、デバッグには役に立つんだけどね。
なるほど!
すまん、逆だったな。 入ってなかったってオチ?だな
いや、いいのか・・・ 例外で止めたらexcept部分が実行されないんだな
どっちやねん!
システムモーダルなフォームを開きたいのですが可能ですか?
システムモーダルって、プロセスが止まっちゃうのでは?
こちらに書けばよかったですね・・・。 すいません質問があります。 WindowsXP標準搭載のCDライティングウィザードを プログラムから起動させてファイルを書き込みさせたいのですが、壁に当たってしまい困っています。 いまわかっているのはファイルをC:\Documents and Settings\ユーザ名\Local Settings\Application Data\Microsoft\CD Burningに 置くと自動的にバルーンメッセージが表示されCDに書き込める状態になるのですが、 そこからウィザードを起動させる手段がわからずにいます。拡張子が.exeでは無いようにおもうのですが。。 なにかよい知恵はありませんでしょうか?
システムモーダルって何?
ぐ・ぐ・れ♥
761 :
デフォルトの名無しさん :04/08/25 12:41
(フサギコ談話室からの難民です。よろしくお願いします) TInterfacedObjectに関する質問があります。 GCっぽい動作を期待しつつ、DelphiのHelpに記載されているサンプルを実行してみたところ、メモリリークが発生しているように思えます。 サンプルは、Delphiヘルプ「クラス型プロパティへの委任」から引用しました。 メモリリークの検出は、MemCheck.pas(使い方は間違ってないと思います*1)を用いました。 新規作成したプロジェクト(*2)でも、5個のメモリリークが検出されるのですが、件のサンプルを実装し、それを実行した状態だと6個に増えます。なぜなのでしょうか、エロイ方よろしくお願いします。修正法等もあれば、よろしくお願いします。 環境はDelphi6です。パッチは当たってます。 *1 program Project1; uses MemCheck,Forms,Unit1 in 'Unit1.pas' {Form1}; {$R *.res} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. *2 procedure TForm1.Button1Click(Sender: TObject); var MyClass: TMyClass; MyInterface: IMyInterface; begin MyClass := TMyClass.Create; MyClass.FMyImplClass := TMyImplClass.Create; MyInterface := MyClass; MyInterface.P1; // TMyClass.MyP1 を呼び出す MyInterface.P2; // TImpClass.MyP2 を呼び出す end;
インターフェイス同士で相互に参照してんじゃねーの?
TMyImplClass = class procedure P1; procedure P2; end; TMyImplClass自身はTInterfacedObjectじゃないからでしょ。 implementsは使ったことないからどう対処すべきかは知らないけど
バイナリファイルを1バイトずつ読み込むにはどうしたらいいんでしょう? BlockRead(だったけ?)を使えばいいのは判るけど レコードサイズがややこしいですねえ。
TFileStream使っとけ
厨な質問で申し訳ないのですが、TListViewをvsReportで使用すると TStringGridのようにも扱えますが、それぞれの使い分けというか、 どういうときにはTListViewを使用して、こういうときにはStringGridを 利用するみたいのを教えてください。
767 :
デフォルトの名無しさん :04/08/25 16:58
>>763 ありがとうございました。
TInterfacedObjectの破棄時、メンバにオブジェクトがあった場合、それも自動的に破棄される物かと思ってました・・・
>>764 別にBlockReadで読む必要はないぞ。
var
fp : File of byte;
b : byte;
begin
AssignFile(fp, Filename);
reset(fp, 1);
while not eof(fp) do
read(fp, b);
CloseFile(fp);
end;
で1バイトずつ読める。
でも、いまならTFileStreamを使った方が良いんじゃないかな。
CreateFile, ReadFile
TFileStreamは先読みしないのでHDDヘッダの オーバーヘッドが大きいと聞きました。 本当に一バイトずつ読みのにTFileStreamでいいの?
パフォーマンス気にするならWin32API使えよ
>>770 心配しなくてもOSのAPIが世話焼いてくれるって…
>>770 765だってTFileStreamで1バイトずつ読めとは思ってないだろ。
ある程度の大きさのバッファに読み込んで、そこから1バイトずつ処理すりゃいいじゃん。
言い訳カコワルイ
あわわ、結局何を使ったらいいのやら・・・(;・∀・)
あ、そうだ。書こうと思って忘れてたけど ちょっと前にあったPChar(s)^のやつ、 SetLengthを読み込むバイト数+1でやらないと 最後の1バイト切れるよ。
>>781 ありがとう。
おかげさまでつまらぬミスを改修できました。
nil ではなく無効なポインタを検出するにはどうすればいいのですか?
無効になった変数には nil を代入して下さい。 これが確実な方法です。 他の方法は不確実。
こんばんわ。 delphi勉強し始めでしてとりあえずブラウザ作ってるんですが WebBrowserにpgup/pgdnとかhome(ページの先頭へ移動)の命令を送るボタンとかつけたいんですが どうしたらいいのでしょうか。お願いします。
786 :
デフォルトの名無しさん :04/08/26 02:48
質問があります。 WideChar型の変数に全角文字を代入したいのですが、 以下ではエラーになります。 どうすればいいでしょうか? procedure TForm1.Button1Click(Sender: TObject); var W: WideChar; begin W := 'あ'; end;
787 :
デフォルトの名無しさん :04/08/26 02:54
Delphi製Cコンパイラが欲しいのですが、既存のもので何かありますでしょうか? あと、Delphi製のシェルなんてのも探してます。 散々調べてみたのですが、それらしきものが見つかりませんでした。 無ければ、つくります。
>>786 w := WideString('あ')[1];
w := #$3042;
function ToWideChar(c: WideString): WideChar; begin if Length(c) <> 1 then raise Exception.Create(c); Result := c[1]; end;
793 :
デフォルトの名無しさん :04/08/26 13:27
WideChar型にどうにかして空文字を('')代入することって無理ですかね?
空文字は文字ではないので代入できない。文字列なら代入可
delphi6proを5000円で譲ってくれるって話があるんですが、 8のアカデミック買うのとどっちがよさげでしょうか。
6pro買うかVS.NETのアカデミック買え
theSpokeよりVS.NETの方が機能は上なんですか?スレ違いですが・・・ 一応兄貴のお下がりでVBとCの本もいっぱい読ませてもらったりちょっと触らせてもらったりしたのですが、 delphiが一番打ってて楽しいので、del6getの方向でいってみます。
theSpoke は機能的には VS.NET 2003 Professional と同じ。
ただし紙のマニュアルなどは省略されてる。
>>799 は開発対象が、Win32 ネイティブアプリケーションなのか、
CLR 上で動くマネージドアプリケーションなのかによって、
最適な選択肢が変わってくると思う。
Delphi6 でマネージドアプリを作ることは不可能だし、VS.NET の
VB でネイティブアプリを作ることも不可能。
801 :
デフォルトの名無しさん :04/08/26 17:38
コントロールパネルを操作することって可能ですか?
>>801 その質問では「操作」が何を意味するのかわからない。
やりたいことをもっと具体的に書け。
>>802 すいません
具体的にはフォルダオプションのシングルクリックでプログラムを起動するように設定したり、XPでクラシック表示にしたりです。
805 :
デフォルトの名無しさん :04/08/26 17:56
>>804 本当ですか!?
どこかにサンプルとかありますか?
>>805 レジストリエディタとにらめっこをしながら
コントロールパネルで該当のオプションを変更しなさい。
SystemParametersInfo
808 :
デフォルトの名無しさん :04/08/26 18:43
指定した時間(13:30など)に音楽を鳴らすプログラムを作りたいんだけど、Timerコンポーネントを使うんでしょうか?
レス早っ! DateTimePickerで指定した時刻にイベントを実行するようにしたいんですが、 参考になるようなサイトはありますかね。
「指定した時間に」なら TTimer じゃないだろ TTimer は「一定時間後」或いは「一定時間ごと」だ 指定した時間なら ApplicationEvents.OnIdle で現在時刻を調べて判定
アフォ
813 :
デフォルトの名無しさん :04/08/26 19:06
>>811 そしたら常にメッセージループを回してないといけないじゃないか
現在時刻と指定された時間の差をTTimerのインターバルに設定すればいい話
sleepで十分
>>813 初心者がレジストリ操作を避けるのは
「うっかり操作ミス」でキーを消したりするとあぶないから。
ちゃんと該当するキーを調べた上でプログラムから操作するなら
Windowsの設定変更にこれほど強力な手はない。
TTimerのインターバルを利用する方法だと誤差が出たような気がする。
>>803 の前半の方は
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer の
ShellState の 4 バイト目の 5 ビット目 (0 から数えて) が
0 ならシングルクリック、1 ならダブルクリックのようです。
レジストリを書き換えるのはそんなに難しくないと思いますが、
書き換えた後にどうやって反映させるのかは知りません。
819 :
デフォルトの名無しさん :04/08/27 01:04
>>818 >>816 レジストリ直接いじるのをさけるのはミスが怖いとかじゃなくて管理者権限がないパソコンで動かすためです...
sh解決しました。
vbでいうところのscreen.mousepointer = vbhourglassに 相当するものを教えてください。
Screen.Cursor := crHourglass;
ちゃんくす
DelphiからVBに移行するのにいいページない?
素人はVBに移りなさいってこった
829 :
デフォルトの名無しさん :04/08/27 18:27
PageControlのタブのサイズを変更したいのですが、どこで出来ますか? 半角空白や全角空白を使って調整する以外に可能ですか?
>>829 TabWidth, TabHeight
デフォルト(0)だとフォントによって自動調整されている。
>>830 ありがとうございました。
子PageControl側でなく、子Tab側を探していたので見つかりませんでした。次からは親側も注意します。
訂正)親であるPageControl側でなく、子Tab側を
ある関数をスレッドにしたいのですが どうすればよいですか?
>>819 制限ユーザでも HKEY_CURRENT_USER 以下のレジストリは書き込みもできる。
SystemParametersInfo だって最終的にはレジストリを操作するものだし、
そもそも直接操作出来ないようなレジストリは他の API を使って間接的に操作することも出来ん。
>>827 「VBは遅くない」
「Cの知識がある俺にはDelphiは使いこなせなかった」
ということをいうのにずいぶん遠まわしないいかたをするページだ
おじさんは新しいものが覚えられないからな 仕方ないよ
超有名です。
>>836 読み間違えてない?
基本的にVCLマンセーなサイトだけど。
.NETをどうしても使う場合にも、
>Visual Basic を選択してはいけません。Visual C# を選ぶべきです。
という感じでVBやめなさいみたいだし。
ShellListViewでファイル選択時に、選択した合計ファイルサイズを ラベル(下記のソースではLabel5)に表示したいのですが・・・。 下のソースコードではファイルのみで、フォルダに対応できません。 複数階層のフォルダに対応させるには、どうしたらいいのでしょうか?
procedure TForm1.ShellListView1Change(Sender: TObject; Item: TListItem; Change: TItemChange); var i: Integer; size: Integer; path: String; rec: TSearchRec; begin Label5.Caption := '0'; size = 0; if (ShellListView1.ItemIndex = -1) then Exit; try for i := 0 to (ShellListView1.Items.Count - 1) do if (ShellListView1.Items.Item[i].Selected) then begin path := ShellListView1.Folders[i].PathName; if FindFirst(path, faAnyFile, rec) = 0 then size := size + rec.Size div 1024; end; end; finally FindClose(rec); end; Label5.Caption := IntToStr(size); end;
Delphi標準のWebBrowserでページを開くと、 TabやEnter、その他の入力ができなくなっています。 フォーカスはWebBrowserにあるのですが。 WebBrowser内で一度クリックすれば入力可能になりました。 どうすればクリックせずに入力可能な状態にできるのでしょうか。 ただ、ページによっては(Googleなど)はじめからEditBoxにカーソルがあり、 Tab、Enterなどが入力可能になっていました。 UIWebBrowserでも試してみたので、WebBrowserのバグではないと思います。 環境:Delphi6 E よろしくお願いします。
TMenuItemのShortCutを使ってはいかがかな?
聞いたことがないので、調べてみます。
このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが、 お礼はDelphiの布教と初心者の救済をお願いします。
データベースプログラムでNOT NULLの列を入力せずに POSTするとエラーが出るのですが、この時のエラーが 「無効/非表示ウィンドウにフォーカスを設定できません。」 と表示されるんです。これの意味がわからず、もう3日も悩んでます。 だれか教えてください。
>>844 ありがとうございます、再帰というものを始めて知りました。
ぐぐって頑張ってみます。
HTTPでゲットしたデータをそのままファイルに 落としたいのですがこれでよいでしょうか? procedure TfrmMain.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); var buff: array[0..4095] of char; ret: Integer; fs: TFileStream; begin ret := ClientSocket1.Socket.ReceiveBuf(buff, sizeof(buff)); fs := TFileStream.Create('hoge.jpg', fmOpenReadWrite); fs.Seek(0, soFromEnd); fs.Write(buff, ret); fs.Free; end;
buff: array[1..4096] of char; にしたらできました。
アクション関係で一発でダウンロード&ファイルに保存ってのがあったような。
TIdHttp.GetでTStreamに取り込んで保存しちゃえ
861 :
デフォルトの名無しさん :04/08/28 17:31
テキストファイルの文字列を全消去できますか?
TStringList.Create.SaveToFile('yourfile.txt');
frmSub := TfrmMain.Create(frmSub); frmSub.Show; で表示したフォームを OnCloseで Action := caFree; とするともう一度開くときに EStackOverflow例外エラーが発生してしまいます。 どのように回避すればよいでしょうか?
>>863 親フォームをCreateで指定する。
自分を指定してどーする
DateTimeToStr(Now) で日時を文字列に変換したのですが形式を yyyy/mm/dd hh:mm:ss にしたいのですがどのように書けばよいでしょうか?
FormatDateTime('yyyy/mm/dd hh:mm:ss', Now)
それ違ってる
>>867 mmは月。
従って、hh:nn:ss。
ああ、866をコピペしたから
>>869 >mm 月を先頭のゼロ付きで表示する(01 〜 12)。
> h 指定子または hh 指定子の直後に mm 指定子を指定すると,月ではなく分が表示される
hhの直後のmmは、分として判断されるので、
>>867 でもOK。
教えてください。 procedure TForm1.BitBtn1Click(Sender: TObject); var Jpeg :TJpegImage; begin Jpeg :=TJpegImage.Create ; Jpeg.LoadFromFile('hoge.jpg'); try Image1.Picture.Assign(Jpeg); except end; Jpeg.Free; end; 例外処理をしているつもりなのですが 0バイトのjpegファイルを読み込むと JPEGエラー #41. がでてしまいます。 例外エラーが出ないようにするにはどうすればよいでしょうか?
Create Try LoadFile の順で
×LoadFile ○LoadFromFile ゴメソ
>>873 その順番で試してみました。
が、同じでした。うーむ。
すみません。わかりましあ。
#41が何か解らないけど、IDEは例外で止まるよ。
最近はネ申と書くと謝辞になるのか?
最高級の謝意を表す文字です。
Explorerからフォルダ(ファイル)をListView1にD&Dしてフォルダ名を追加しようとしています DragAcceptFiles(Handle,True); ↑なら正常に動いてくれますが、Form全体が受け取り範囲になっています。 D&Dを受け取るのはListView上だけにしたいのです。 そして DragAcceptfiles(ListView1.Handle,True); に変えてみました。マウスカーソルは期待通りに変わっていますが いくらドロップしても無反応です。 FormのOnCreateに書いているのが悪いのかと思い(∵まだListViewがCreateされていないため OnShow部に書いてみても同じ結果です。 以下、その他の関係ある部分です private procedure DropFiles(var Msg : TWMDROPFILES); message WM_DROPFILES; procedure TDupForm.DropFiles(var Msg : TWMDropFiles); var FileName : array [0..255] of char; ListItem : TListItem; begin DragQueryFile(Msg.Drop, 0, FileName, SizeOf(FileName)); ListItem := ListView1.Items.Add; if FileExists(FileName) then ListItem.Caption := ExtractFileDir(FileName) else ListItem.Caption := FileName; ListItem.SubItems.Add('hoge'); DragFinish(Msg.Drop); end; この部分は弄ってません。 メッセージをきちんと受け取れてないのだと思いますが 解決の仕方が分からないので、教えてください。
Form で WM_DROPFILES を受け取れるわけないだろ。LISTVIEW1 で受けとらなきゃだめ。
イム にしたら?
同一人物です。 いや、ほんとに助かったので。俺にとっては神そのものです。
まちがえた。885は864と867です。
>>881 TListView の WindowProc で受け取りなさい。
>>888 「ありがとうございます。」ってついてるね。これがあるだけでずいぶん雰囲気が変わる
超神だの鬼神だのやりすぎだと思うがw
>ござまいす >ござまいす
894 :
デフォルトの名無しさん :04/08/29 01:51
すいませんが質問です。 DBGridのセルの文字数制限をかけようとしています。 cdsの各フィールドのSIZEを指定できればうまくいきそうなんですが、 コードでcds.FieldbyName.Size に値を入れると「cdsが既に開いてるぞゴルァ!」 とエラーが出てしまいます。考え方がいけないのか別のやり方があるのであれば おしえてくださぃ・・・
Delphiに「フォルダを選ぶ」のダイアログってあったっけ?
>>888 神から超神に格上げされた挙句に神の申し子に格下げされたのにワラタ
語彙が尽きたんだろうな・・・
>>895 こんなのがあったとは知りませんでした(本でも見かけたことないし・・)
勉強になりました。ありがとう。
レス番間違えた・・。898は896さんへ
ボタンのイベントなどにコードを書いて そのボタンを削除してもコードが残りますが そのコードを自動で削除してくる機能はありませんか?
コードの中身を消せ。 beginとendの間になにも書かなければコンパイルのときに自動で消える。
上書き保存したときや別のイベントにコード書くときも消えるよね
消えるのはDelphi自身だよ
Delphiは永遠に不滅です
「永遠に不滅」って、「馬から落馬」みたいだって思わないか?
Delphiはあと二年間は不滅です
ユーザが消滅
メッセンジャー、アンチウィルスなどで画面の右下に ひょこっとメッセージが出ますがあれをdelphiで作れますか?
バルーンのやつ?
DelphianWorldにコンポあるよ >バルーン
鼻血が出血。 うんこを排便。 精液を射精。
TQueryでSQLのinsert intoを使おうとすると、この機能は使用できません とか言われちゃうんですけど、使えないんですか?それとも何か設定 間違ってるんですかね?
ファイル名をバイト単位で取得するのはどーするの?
ごめん、分かんないな。自分でも良く分かってない。 あ だったら82 A0だよね。そう言う風に全角をバラしたいの。
実行させようとしているSQL文は、あるテーブルの レコードを、主キーを書き換えてコピーするという ものです。こんな感じ。(主キー001のレコードを 000に書き換えてコピーする場合) INSERT INTO Table(Code,Name,Address) SELECT '000', Name , Address From Table Where uCode= '001' InsertとSelectを組み合わせて使えないとか、そういう 話ですか?SQLの文法的にはあってると思うんですけど。
>>917 「ファイル名」に限らないですよね。AnsiStringに代入して、普通にs[1]やs[2]でアクセス。
>>914 オレもそのエラー文に苦しめられたなぁ・・
丸一日(本当に一日)試行錯誤を繰り返した挙句、
いつの間にか解消してしまって、解決策はもちろん原因すらわからなかったという・・
>>919 ありがと。それで添え字バイト目にアクセスできるのは分かったけど、
あ を 82A0みたいに表示させる方法が解んないや(´▽`*)アハハ
いくらでもありそうな気がするけどな。 IntToHexとかFormatとか
StrByteType
あ、なんかすごく的はずれな解答した予感。
Delphi用メール送信コンポーネントありませんか?
パスワードをiniファイルに保存したいのですが よい暗号化の方法ないでしょうか?
>>926 そのアプリでパスワードチェックを行うだけならMD5とかでハッシュ値に変換しとけばいいし
FTPとかのパスワード入力を自動化するんであれば内部で共通キー使って暗号化するしかない。
>>928 自前で暗号化しとけばいいですか?
xor演算とかでいいですか?
MD5ハッシュがいいと思う
procedure TForm1.Button1Click(Sender: TObject); var Socket: TClientSocket; begin Socket := TClientSocket.Create(nil); try Socket.ClientType := ctNonBlocking; Socket.Host := '202.239.72.116'; Socket.Port := 80; Socket.Active := True; Socket.Active := False; finally Socket.Free; end; end; 'connect'API でWindows ソケットエラー: (10049) が出るのですけど、どうすれば接続出来ますか?
Socket.Address := '202.239.72.116'; で接続できました。
さっそく試してみました。 希望の動きができました。 ただ、このアニメーションしたウィンドウが消えてくれません。 OnActiveにCloseを書いてみたのですが例外エラーで落ちて しまいます。どこで消したらいいのでしょうか? procedure TForm2.FormCreate(Sender: TObject); begin self.Left := Screen.Width - self.Width; self.Top := Screen.Height - self.Height; AnimateWindow(handle, 500, AW_SLIDE + AW_VER_NEGATIVE); Sleep(1000); AnimateWindow(handle, 500, AW_HIDE + AW_VER_POSITIVE); end;
至極初歩的な質問で恐縮ですが (AA、BBともTStringList) AA[i] := BB[i]; i := i+1; を特定の文字がAA[i]に含まれるまで繰り返すコードと、BBの要素があるだけ繰り返すコードを教えてください
BB[i]に含まれるまで の誤りでした
消えました。 しかし、少し消えるときに一瞬表示されるのか ちらついてしまいます。 もっと良い方法はないでしょうか? procedure TForm2.FormCreate(Sender: TObject); begin self.Left := Screen.Width - self.Width; self.Top := Screen.Height - self.Height; AnimateWindow(handle, 300, AW_SLIDE + AW_VER_NEGATIVE); Sleep(500); AnimateWindow(handle, 300, AW_HIDE + AW_VER_POSITIVE); close; end; procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin action := cafree; end;
VBではできませんでしたよ
>>938 Sleep を使ってるからだと思います。
メインスレッドで Sleep を使うと止まってる間メッセージ処理ができなくなります。
タイマーの呼び出しで閉じるようにしてみてはどうですか?
>>936 要件の通りにコードしてみたけど、そのままだと使い物にならないと思う。
// 特定の文字が BB[i] に含まれるまで繰り返すコード
// 特定の文字が含まれる前に i が少ない方の要素数に達した時点で例外
while AnsiStrScan(PChar(BB[i]), 文字) = nil do
begin
AA[i] := BB[i];
i := i+1;
end;
// BB の要素があるだけ繰り返すコード
// AA の要素数が BB よりも少なければ i がそれに達した時点で例外
var J: Integer;
…
for J := i to BB.Count - 1 do
begin
AA[i] := BB[i];
i := i+1;
end;
動きは完璧なのですが、そのフォームにラベルが表示できません。 PRINTCLIENTで書けというようなことを見たのでやってみたのですが 表示されません。どこが問題なのでしょうか? procedure TfrmMessage.AppMessage(var Msg: TMsg; var Handled: Boolean); begin if Msg.message = WM_PRINTCLIENT then begin self.Canvas.TextOut(0,0,'hello world'); Handled := True; end; { 他のメッセージに対しては Handled は False のままでおかれるので,} { 他のハンドルが処理することが可能となる} end;
すみません。できました。
ここは一人漫才のスレか?
Sleepの代わり procedure SleepProcessMessages(Milliseconds: Cardinal); var StartTime, NowTime: Cardinal; begin StartTime := GetTickCount; while true do begin NowTime := GetTickCount; if Milliseconds <= (NowTime - StartTime) then Break; Application.ProcessMessages; end; end; ただし、連続で呼び出すと挙動がおかしくなります。
できたと思ったのですが、メインウィンドウが非アクティブの時に 描画されません。なぜでしょう?
あと、親フォームを最小化すると子フォームも一緒に最小化されてしまうのですが 最小化されないようにできないでしょうか?
var InSleepProcessMessages; procedure SleepProcessMessages(Milliseconds: Cardinal); var StartTime, NowTime: Cardinal; begin if InSleepProcessMessages then Exit; InSleepProcessMessages := True; try StartTime := GetTickCount; while true do begin NowTime := GetTickCount; if Milliseconds <= (NowTime - StartTime) then Break; Application.ProcessMessages; Windows.Sleep(1); end; finally InSleepProcessMessages := False; end; end;
951 :
デフォルトの名無しさん :04/08/31 14:58
>>942 エラー リストのインデックスが範囲を超えています(1)が出ました
BBには'文字'が入った行は確実にあります・・どこがおかしいのかわかりません、助言お願いします・・・
>>951 まさかとは思うが、
begin
AA.Add(BB[i]);
i := i+1;
end;
で巧くいったりしないか?
>>952 ぬおおおおおお 巧くいきました。ありがとう
かなり知識不足なんで入門サイト片っ端から読んできます
>>948 AnimateWindow の後に次の一行を入れてみてください。
InvalidateRect(Handle, nil, False);
ラベルには TLabel を貼ってもいいし、カスタムペイントが必要なら
OnPaint イベントを使ってください。
>>949 については申し訳ないですがよくわかりません。
下手すると TForm を使ってる時点でアウトかも。
>>954 パーフェクトです。ありがとうございます。
>>951 AAに何も文字が入っていないなら、
リストに有効なインデックスは存在しない。
だからアクセスしようとするとEStringListError例外が発生する。
それと、
>>942 の、文字列中に文字があるかどうかの判定で、
BBに格納されている文字列には全く含まれていない「文字」を
指定した場合はどうなるかな?
これも「リストのインデックスが範囲を超えています」EStringListError例外が発生するんじゃない?
漏れがテストしてみたら例外が発生した。
i := 0;
while AnsiStrScan(PChar(BB[i]), 文字) = nil do begin
AA.Add(BB[i]);
i := i+1;
if i >= BB.Count then Break; // 追加
end;
などとすると、とりあえずうまく行く。
このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが、 お礼はDelphiの布教と初心者の救済をお願いします。
つか、AA, BBという変数名がコードを読みにくくしてる気がする
あるファイルのアドレス$200から$300の部分(画像データ)を メモリーストリームにうつすにはどうしたらいいでしょうか? どうもよく分からないのでご教授お願いします(汗
TMemoryStream.LoadFromFileでファイルを開いて $200にSeekすればいいじゃん。
Seekですか・・・ ちょっと調べてみます
いや・・なんならposition:=$200でも
>>959 procedure TForm1.Button1Click(Sender: TObject);
var
fromMS,toMS:TMemoryStream;
begin
fromMS := TMemoryStream.Create;
toMS := TMemoryStream.Create;
try
fromMS.LoadFromFile('C:\sample.txt');
fromMS.Position := $200;
toMS.SetSize($300-$200+1);
fromMS.Read(toMS.Memory^,$300-$200+1);
Memo1.Lines.LoadFromStream(toMS);
finally
fromMS.Free;
toMS.Free;
end;
end;
>963 できました ありがとうございます!!! くだらない質問につきあっていただいてすいませんでした
965 :
デフォルトの名無しさん :04/09/01 00:59
DirectOracleAccessを使いなされ。
967 :
デフォルトの名無しさん :04/09/01 01:22
>>966 レスありがとうございます。
純正のソフトだけでは出来ないのでしょうか?
>>963 は全ファイルをメモリに読んでコピーしてるのでファイルサイズが
大きいと失敗しますし、メモリが無駄かと思います。
読み出し側のストリームは TFileStream を使うことをおすすめします。
procedure TForm1.Button1Click(Sender: TObject);
var
ToMS: TMemoryStream;
FromFS: TFileStream;
begin
ToMS := TMemoryStream.Create;
try
FromFS := TFileStream.Create('C:\sample.txt', fmOpenRead);
try
ToMS.SetSize($300 - $200 + 1);
FromFS.Seek($200, soBeginning);
FromFS.Read(ToMS.Memory^, $300 - $200 + 1);
finally
FromFS.Free;
end;
Memo1.Lines.LoadFromStream(ToMS);
finally
ToMS.Free;
end;
end;
>ファイルサイズが大きいと失敗しますし、 ファイルの末尾を読みたいときはどうするの?
ああ、バッファリングされてないから無問題か。スマソ
>>965 TDatabaseを貼り付ける
エリアスをお望みのDBに設定。
Paramsにユーザー名とパスを入力。
procedure Encrypts(var Buff: PChar; Size: integer; PassWord: string); この関数を使いたくBuffにText1.Textを渡したいのですが どのようにわたせばいいのでしょうか? Encrypts(PChar(Text1.Text), Length(Text1.Text), 'pass'); とやってみたのですが 変数パラメータに定数オブジェクトを渡すことはできません。 というコンパイルエラーが出てしまいます。 よろしくお願いします。
> var Buff: PChar; なんで PChar が参照わたしなんだろうか? へんなの
> 変数パラメータに定数オブジェクトを渡すことはできません このとおりだろな。 var pc:PChar; としておいて GetMem() で適当に確保して渡せばいいんじゃないの
>>975 ポインタのポインタになるし、なんでだろうね。プロシージャ内で確保してるとか?
それにしても Size を設定してるし、ありえないか。
暗号化した戻り値があたらしい値で PChar で返ってくるとか。でも Size は var じゃないんだよなー
変数パラメータにはプロパティを渡すことは出来ません var s : string; s := Text1.Text; Encrypts(PChar(s), Length(s), 'pass');
リロード忘れorz
>PassWord: string なんだから、なぜ var PChar なのかは、戻り値が入っていそうだな var String でも いいようなきがするが
横やりかもしれんけど、DSPとかでも暗号化のunitが山ほどでてくるよ。 うまくいかなかったら、そういうの探してみるのもいいかも。 ま、フリーかどうか、商利用可かどうかとか、問題はあるのかもしれんけど。
DSPって何ですか?
例えばテキストファイルを読み込んでソートするだけのアプリなんかでは 起動時に読み込んでおくのと、OKされて処理するときに読み込むのと どちらが良いんでしょうか
後者
早っ ありがとうございます
理由は先に読む込むとキャンセルしたとき無駄になることと 読み込み、ユーザー入力、本処理 よりは ユーザー入力、読み込み、本処理 の方が読み込みと本処理が近くなるので読みやすくなる(可能性がある)から。
ローカル変数のboolean型の中にはデフォルトで何が入ってるのか気になっています。 Trueでもfalseでも無いという事は実験でわかったのですが、では一体何なんですか?
>>991 おおっ、わたしと同じことを・・
わたしの調べでは、TrueでもFalseでもない謎の値が入っていて
その値はそのときによってまちまちでしたよ。
ローカル変数は宣言だけでは初期化されません。だから気にしても無意味
>>991 Boolean に限らず明示的に初期化されない変数は、その変数を確保した場所
(メモリ、レジスタ) に元から入っていた値になるのでは?
False→ビット内がすべて0
True→それ以外
じゃないの?
procedure TForm1.Button1Click(Sender: TObject);
var
Flag: Boolean;
B: Byte;
i: integer;
begin
Flag := True;
for i := 1 to 255 do begin
B := i and $FF;
Flag := Flag and Boolean(B);
end;
if Flag then MessageBox(Handle, 'Trueだったよ', 'Boolean型', MB_OK);
end;
でテストしたらメッセージボックス出るけど。
>>991 関数内で定義したローカル変数(上の例だとFlag、B、i)は、初期化されていないと考えましょう。
使うなら自分で明示的に初期化してから使わないと危険です。
ありがとうございました。 クトゥルーでも眠ってるのかとビクビクしてました。
>>995 procedure TForm1.Button1Click(Sender: TObject);
var
b: boolean;
begin
case b of
True:Button1.Caption := 'True';
False:Button1.Caption := 'False';
else
Button1.Caption := 'unknown';
end;
end;
を試してみるとTrueでもFalseでもないことがわかる。
not演算子を使ってもやっぱりunknown
ByteBool 型,LongBool 型,または WordBool 型の値は,順序値が非ゼロの場合に True と見なされます。Boolean が期待される状況でこれらの値が使用された場合,コンパイラは順序値が非ゼロの値を自動的に True に変換します。
999
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。