モナーの *やさしい* Delphi質問スレ Ver.7
∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ´∀`)<. Delモナーがどんな厨房疑問でもやさしく答えます。
( ) .| Delモナーは時に私であり、時には別の人。
| | | | 他のスレに書き込んで罵倒される前に、まずここで質問しよう。
(__)_) \_________________________
前スレ モナーの *やさしい* Delphi質問スレ Ver.6
http://pc.2ch.net/test/read.cgi/tech/1019134412/ 前スレが埋まるまでは書き込まないで
(あるいはsage進行にして)ください。
>>2-10あたりに関連情報あり
○過去スレ
>>2 ○関連スレ
>>3-5 ○Delphi製品情報
>>6 ○関連リンク
>>7 ○質問者へ・回答者へ
>>7 ○ソース置き場案内
>>8
∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ´∀`)<. 前スレが埋まるまでは書き込まないで
( ) .| (あるいはsage進行にして)ください。
| | | \_________________________
(__)_)
http用のコード書いたのですが動きません。どこが変でしょう?
URL := 'www.yahoo.co.jp';
Port := 80;
var
sock :TSocket;
wsa :TWSAData;
addr :TSockAddrIn;
hostent :PHostEnt;
data :array[0..2048] of char;
begin
WSAStartup(MAKEWORD(1, 1),wsa);
StrCopy(data,'GET index.html HTTP/1.0'#13#10#13#10);
sock := socket(AF_INET,SOCK_STREAM,0);
addr.sin_family := AF_INET;
addr.sin_port := htons(Port);
hostent := gethostbyname(PChar(URL));
addr.sin_addr.S_addr := htons(Port);
connect(sock,addr,Sizeof(addr));
send(sock,data,2048,0);
recv(sock,data,2048,0);
Result := data;
end;
11 :
仕様書無しさん:02/05/12 21:17
こちらのサイトよりBORLAND製品のキージェネレーターが落とせますので
C++Builder6 Enterprise
JBuilder6 Enterprise
Delphi 6 Enterprise
の各体験版をBORLANDに申し込みまして
シリアルぶっこんでkeygenでオーソライズしちゃいましょう
すべて動作確認済みです
Enterprise以外はkeygenが使えませんので注意してください
※下記サイトに逝く時はなるべくjavaは切った方がいいでしょう
http://www.cracks.am/cracks/b4.html
>>11 規制依頼出して良いんだよね?このバカの。
BORLANDソフトがへぼいから今回のNET路線についていけず
逝くしかない
キージェネレーター使ったり、シリアル掲示板いっても、
別に正規ライセンスがもらえるわけじゃないからなあ・・・。
正規ライセンスを合法で無料で手に入れる方法キボンヌ。
∧,,∧
ミσ゚Д゚ミσ Borlandに入社シル.
>>17 確か、エンプラ体験版にはVCLソースついてなかったので
バイナリが別もんだと思うけど
キージェンして使えるようになんのかなー。(動作確認しなくていいよ(藁))
無料で使いたいなら、Personalで十二分だと思われなんだけどな。
19 :
デフォルトの名無しさん:02/05/13 01:15
トランポリン大好き。
家の中はトランポリンだらけ。
家に帰ると、玄関でホップ。
「ただ〜〜い、まぁ〜〜〜!」
“ま”のところで前方宙返り。
妻が奥からホップしながらやってきて、
「あな〜、た〜、おかえりっっ!!」
“あな”で前宙、“た”で後宙、“えり”で月面宙返り。
(注・妻は国体3位の腕前)
で、その調子でメシを食う。
みそ汁はいつも天井にまき散らす。
食べ終わると、後方伸身二回宙返りでそのまま風呂へ着水。
上がるとそのままベッドへ、文字通りひとっ飛び。
妻とは空中でないと燃えない。
抜けないようにうまくシンクロして飛ぶのが難しい。
寝相は二人とも大人しいほうで、時々天井に頭をぶつける程度。
問題は朝で、「行っ、て〜き、まぁ〜す!」の前方伸身宙返りで
外に出た途端、アスファルトに激突。
入院歴15回。
固いアスファルトなんて大嫌いだ。
(´-`)。o ○ (このスレ違いなヤツらの存在理由は何?)
MSDNで検索できん。(鬱
>>10 まずい点は幾つもありそうだけど・・・
まず、
GET /index.html HTTP/1.0
または
GET / HTTP/1.0
次に
send()で2048バイト全部送るな。後ろについてるゴミもsendしてる。
それから
recv()も1回にするな。recv()が0を返すまでデータは続くので、繰り返すこと。
根本的に
エラーチェックちゃんとやれ。
addr.sin_addr.S_addr := htons(Port);
なにやってんの。
26 :
デフォルトの名無しさん:02/05/13 14:26
重複スレが立ったので上げるよ〜
厨房質問ですまんけど、Del6Personalを使ってCGIは作れるの?
VBみたいに標準入出力の扱いに苦労はしない?
>>27 Readln Writelnって言う標準入出力の関数がある。
VBってSTDOUT/IN使うの大変なの?
29 :
embedder ◆GqCvG9cU :02/05/13 23:09
embeddedwbを前スレでDLした者です。
ちょっとつっかかりましたが、無事インストロ…インストール出来ました。
いいですね!いろいろオフにしてブラウズさせるのが欲しかったので、
とてもイイ!すごく細かく設定出来るみたいだし。
しかし、これって2ちゃんで知ったんだけど、フリーなの?
Readme入ってないし、サイトにはライセンスが見つからない…。
GPLとか、なんか面倒なのはちょっと遠慮したいんだが、御存知の方、いらっしゃいませんか?
30 :
デフォルトの名無しさん:02/05/13 23:27
クソスレ立てちゃって・・・
32 :
デフォルトの名無しさん:02/05/14 00:13
batファイルがあるのですが、それを実行することは出来ますか?
33 :
embedder ◆GqCvG9cU :02/05/14 00:18
あれれ?反応無いな…。embeddedwbって使ってる人少ないのかな?
>>32 command.comの引数として渡してみ?
35 :
デフォルトの名無しさん:02/05/14 00:26
>>34 どうすれば、command.comを実行することが出来ますか?
CreateProcessとかウワサ聞いたんですけど。
36 :
デフォルトの名無しさん:02/05/14 00:27
>>33 ソースの最初にFreewareって書いてあるからGPLとかじゃないじゃない?
37 :
embedder ◆GqCvG9cU :02/05/14 00:31
>>36 あ…本当だ…。今見てみたら書いてあるね。とりあえず、安心…かな?
サンクス!
>33
EmbeddedWBってかちゅも使ってたね、
40 :
デフォルトの名無しさん:02/05/14 10:20
IndyってFtpServerなコンポーネントはないのかな?
>>40 FTPサーバーコンポーネントって成立するの?
既にアプリケーションな気が・・・。
そういえばそんな気がしますね。Httpがあったからつい。
馬鹿なこと言って申し訳ない。
>>42 いや、書いてから考えたんだけどリクエストに応じて何らかの作業が出来れば便利だね。
このファイルを取得すると現在の時刻の情報を返すとか。
UNIXの/procファイルシステムのようなことができるなと。
44 :
デフォルトの名無しさん:02/05/14 13:33
>>40 9.0.3BだけどIdFTPServerってのがあったよ。
45 :
デフォルトの名無しさん:02/05/14 13:46
マウスを動かさない限り、(一定時間が経過しても)消えないヒントを、グリッドのセルごとに表示したいのですが、
OnMouseMoveイベントの中に以下のコードを記述するとヒントが点滅してしまいます。
StringGrid2.Hint:=IntToStr(m)+'月'+IntToStr(d)+'日'
+'('+StringGrid2.Cells[ACol,7]+')'+' '+StringGrid2.Cells[0,ARow];
Application.ActivateHint(ClientToScreen(MousePos));
どのような方法が良いのでしょうか?
>>45 AColとARowが変化しない間はActivateHintを呼ばないとか。
>>46 それを実行すると、点滅ではなく一定時間で消えます(つまり通常のヒントと同じ)。
ちなみに点滅するのはマウス移動中ではなく、マウス停止中のことです。
OnMouseMoveイベントはマウス移動中のみ発生すると思っていたのですが、
どうやら、移動していなくても、マウスポインターを置いているだけで連続的に発生しているようです。
>>47 自分でTHintWindow使って表示してやれば?
49 :
デフォルトの名無しさん:02/05/14 16:51
レコードの配列を一括でファイルに保存、読み込みできないでしょうか?
tFileStreamとかをつかってやろうとしているのですがわかりません。
どうか教えてください。
>>49 memcopyでバイトストリームとして書き出す。
>>49 つぅかcomponentStreamとか無かったっけか?
>>49 デッキマッセ〜
Stream. Write( 配列名 , sizeof(配列名[0])*( High(配列名)+1) )
早速ありがとうございます。
procedure TForm1.FileSaveAs1Accept(Sender: TObject);
var
ms:TFileStream;
begin
ms:=TFileStream.Create(FileSaveAs1.Dialog.FileName,fmOpenWrite);
ms.Write(ffloor,sizeof(ffloor[0])*high(ffloor)+1);
ms.Free;
end;
procedure TForm1.FileOpen1Accept(Sender: TObject);
var
ms:TFileStream;
begin
ms:=TFileStream.Create(FileOpen1.Dialog.FileName,fmOpenRead);
ms.Read(ffloor,sizeof(ffloor[0])*high(ffloor)+1);
ms.Free;
end;
と、やってみたのですが、何も読み込まれていないようです。
ので、保存がされているかどうかも不明です。
Readの書き方が違うのでしょうか?
まず、 High(xx)+1 は Length(xx) の方が簡単
ms.Write(ffloor,sizeof(ffloor[0])*length(ffloor));
ms.Read(ffloor,sizeof(ffloor[0])*length(ffloor));
次に、ffloor って何? まさかオブジェクトの配列じゃないよね?
type
TFloor = record
...
end;
type
TForm1
...
private
fFloor:array[0..99,0..99]of TFloor;
です。まさかオブジェクトですか?
ああ 固定長でしかも2次元ですか なら
.Write(ffloor,sizeof(ffloor));
だけでOK
そして 49さんは ゲ開板で RPG作ってる人でしょう? きっと
>>53 ファイルが出来てないんじゃないの? 確認した?
fmCreate で作成した方がいいんじゃないの?
ハ、ハズカシー!
ファイルを読み込んで「再描画」忘れてました。
すみませんすみません。
fmCleateの方も修正しました。
ちなみにゲーム作ってますが別の人だと思います。
二次配列でフロアつったらバレバレですが。
今まで主にスクリプト系の言語を使ってきて、デバッグは print をところどころに
挟むみたいなことをやっていました。
delphiで効率よくデバッグするにはどうするのが手っ取り早いでしょうか?
>>60 win2Kなら write/writelnで GUIアプリでも コンソールが自動的に出て表示されます
63 :
Delフサギコ ◆zE1iiRdQ :02/05/14 19:49
Professional版以上のDelphiなら
OutputDebugStringというAPI関数を書けば
IDEのイベントログWindowに出力結果が表示されます。
procedure TForm1.Button3Click(Sender: TObject);
begin
OutputDebugString('OutputDebugStringで文字を出力');
end;
(ス)または
var
hwndNotepadEdit: HWND;
procedure DebugPrintNotepad( S:string );
var
hwndNotepad: HWND;
begin
if not isWindow( hwndNotepadEdit )
then begin
hwndNotepad := FindWindow( 'Notepad','無題 - メモ帳' );
hwndNotepadEdit := FindWindowEx( hwndNotepad,0,'Edit',nil );
end;
if not isWindow( hwndNotepadEdit ) then exit;
SendMessage( hwndNotepadEdit,EM_REPLACESEL,0,LPARAM( PChar( S+#13#10 )));
end;
 ̄ ̄ ̄ ̄ ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
\ ∧,,∧
ミ゚Д゚,,∩
⊂;゙ ,ミ ←
 ̄  ̄ ミ゙゙_ ミ〜 ト  ̄  ̄  ̄
∪゙ヽ ミ オ
/ ∪ \
/ : オ
/ || . ォ \
/ | : ォ \
/ .
| . ォ
>>60-03 まぁTMemoでもはっつけて
TMemo.Lines.Add('げぼばべぶぅ〜〜');
みたいにすりゃいいかと。
どんな環境でも使えるし。
なんだかんだで一番簡単なデバッグがprint系関数だという罠。
って言うかDelphiってAlertなかったっけ?
∧,,∧ /TMemoは(うそはうそであると見抜けない人でないと)
ミ ゚Д゚ミっ < 描画関係や起動終了時のデバッグには
|''U ̄| \使うのは難しい
| ̄ ̄|
/ ゙ヽ
( ゚Д゚ )
人____ノ
>>67 テンプレを理解していない人には
(テンプレを使うのは)難しい
∧,,∧ ワナワナ
ミ#,゚Д゚彡
ミ つ ミつ
@ミ ミ
∪ ∪ セッセッセ...セイカイ!
>>69 教えてたも。
printデバッグの質問をしたものです。みなさんいろいろとありがとうございます。
デバッガはやっぱり面倒なんですよ。
ところで assert ってあるんですか?
GUIアプリでも コンソール出して writeするのがデバックは一番簡単だと思うけど?
手間いらないし、write(変数) だけで文字でも数字でも適当にダンプするし
もしかして、やり方知らないのかな?
最初からコンソール出しておきたいなら
GUIアプリでも {$APPTYPE CONSOLE} を どこでも書けばいいだけ
(.DPRでもいいし テストしたいユニットでもいい)
コンソールをその時だけ出したいなら AllocConsole; を writeの直前で呼ぶ
なあ、Del6のTControlにはマウスホイール関係のイベント(OnMouseWheel)があるけど、
なんでパレットから使えるコントロールにはこれらのイベントがPublishedになっていないの?
TMainMenuでメニューを追加して、NAMEの中身が長い文字になるとプログラム終了時に落ちるみたいだが?
再現しますか?
俺の環境
WindowsXP (HOME)
Delphi6 pro
>>76 ごめん、再現しませんでした。 WinXP D6pro(upd2)
78 :
デフォルトの名無しさん:02/05/15 18:40
(´-`).。oO(浮動小数でmodやdivりたいときはどうすればいいんだろう……)
割算をした後、切り捨て
roundとかで丸めてから・・・は、負け?
C#で作ったアプリをDelphiに移植しようとしてるのですが、Delphiの方ができないことだらけです。
どうすればよいでしょうか?
>>83 >Delphiの方ができないことだらけです。
具体的に。説明のしようがない。
Object Pascalの言語についての質問ですが、
Pascal にはインライン関数とかないのでしょうか?
もしございましたら簡単な例と一緒に張ってくれるとありがたいです…
>>85 軽く調べたけどやっぱりないみたい。
そんな速度的にシビアなプログラム書いてるの?
>>75 デフォルトで親にメッセージをまわして、最後にフォームで受けとれるから。
僕の周りのDelphi使いがみんなC#に移行してしまってるのですが、皆さんはいつ移行しますか?
>>90 明日にでも。
文法の勉強は終わった。後は買うのみ。
今作ってるクラスライブラリの移植から始めるか。
92 :
デフォルトの名無しさん:02/05/16 00:16
いいね・・・買えるんだ・・・
∧_∧
/⌒ヽ )
i三 ∪
|三 |
(/~∪
>>92 それが問題なのよ。
流行るかわからない技術に\13000出すの。
今回単品のアカデミックないでしょ?
じゃあ、WinXPが付いて\23000のアカデミックVSの方がお買い得。
でも、C++はともかくVBはいらないしなぁ・・・。
悩み死にしそうです。
Del厨って貧乏人が多いんだね。
VS.NETの最上位エディションに25万払ったって3日で元が取れるのに。
>>94 >VS.NETの最上位エディションに25万払ったって3日で元が取れるのに。
論拠無き発言はネタですよ。
さっきからDelスレにいる、ただの煽りでしょ。
>>95 VS.NETを使って得られる知識・感動が25万円に相当するという意味です。
>>96 了解。
ふぅ、どっちにしようかなぁ〜。
いっそSDK + 自前でIDEもどき書くか・・・。
ああ・・・貧乏人って煽られた・・・
∧_∧
/⌒ヽ )
i三 ∪
|三 |
(/~∪
>>99 気にすんな。オレなんかwin95だ(藁
環境すら手に入らん。
いいんだ。win95は偉大なOSだ(藁
漏れは雑誌の体験版で触ってみる予定。
ただ、C#の本軽く立ち読みしたくらいだから、結局インストロールして終わりそうな罠。
>>101 収録まで後7日。
それを見て判断したいけど待ちきれない+出費\1000プラス。
ああ・・・迷い死ぬ・・・。
今すぐWindowsUpdateに行けば.NETの環境(コンパイラつき)が手に入るじゃん。
体験版出るのか。漏れもさわってみよう。
また一人Delphi使いがC#に移行する( ̄ー ̄)ニヤリッ
では、ここはC#質問スレに模様替えしましょう。
>>100 気にするな俺なんか、K6-200MHzマシンでしかもLinuxFTP版でFreePascal使ってるし。
なんか、Del厨がC#の乗り換えたとか、寝返ったとかホザイてるアホがいるみたいだが、
何?言語が全て?しょーもない物しか作れない奴に限って言語に執着があるのは経験
から知っているが、DelphiもC#も全て使えてナンボだろ、それとも、今までDelphiだけで
仕事をしてこれるほど今まで楽な仕事しかしてなかったか?
それに、Delphiでないと組めないようなプログラムは、.NETのC#だと組めないし、
お遊びプログラムでもDirectX関連のサポートがイマイチなC#よりもVC使う方が楽だろ、
C#がそんなに嬉しいか?、
最終的には開発環境は手段でしかないので、良いシステム・良いアプリケーションを組む
事に専念した方がいい。>最近騒いでるコーダ連中
俺は、道具は一つ使えりゃいいんだから、複数勉強する時間があるなら、使い方じゃなくて原理を勉強しろよ
・・・と言いたいな。 使い方知ってるだけなら、ワードの使い方知ってるのと変わらないぞ。
実際はプログラミングの理論よりもさらに業務知識の方がもっと大切。
それぞれの分野で資格取れるくらいに勉強しとけよ。
>>110 使い方覚えるだけで、プログラム作れるのが近代言語なんだよ!
正直に言えよ。 新しい事が頭に入らなくなったんだろ?
Delだって使い方覚えるだけで書けるのは同じじゃないか
とりあえずスレ違いだから
C# vs Delphi スレたててやってちょ。
みんな仕事で使ってるのか、凄いなぁ。
煽ってるのは元Del厨、煽りに乗るのが現役Del厨。
真性.NET厨を巻き込まないでくれ。
ガキは(・∀・)カエレ!
二度と(・∀・)クルナ!
プログラミング言語を習得するのって個人差はあるにせよそれなりに大変で、
すべての言語のスペシャリストにはなるのには無理がある。
だから自分が習得している or 習得しようとしている言語が優れていると「思い
たい」。
ところが自分が思ってるだけだといまいち確信が持てないから、こういう所で
話題に出して白黒つけたがる。自分の贔屓の言語の優位性をアピールして
自分の選択が間違っていないと安心したい。
プログラミング言語に限らず、OSやWebブラウザなんかでも同じ種類の現象
があちこちのスレで確認できる。それだけの話。
そもそもこういうくだらない言い合いの元を作ってるのは他スレを荒らしてる
自称Delphi使いであることをお忘れなく。
ガキは(・∀・)カエレ!
二度と(・∀・)クルナ!
(当然他スレを荒らしてる自称Delphi使いも含まれる)
121 :
embedder ◆GqCvG9cU :02/05/17 00:29
えー、embeddedwbコンポーネントを入手していろいろいじくってる者です。
感想キボンヌって人がいたと思ったので、感想です。
なかなかいい感じなんだけど、一つ疑問が浮上。
なぜか、テキストなのに「文字化け」するものがあります。もちろんエンコードを適切にすれば
直りますが、なんでテキストで…?HTMLでも化けるのと化けないのがある。
もともとIE5.5が化けがちだから「こんなもんかな?」と思ってるけど、
テキストは…ハテ?
>>121 EmbeddedWD使ったことないけど、エンコードの自動選択?
勘でモノを言っているのでsage
%2dのわからない君にこそ、倉薫をお薦めだ!
思いっきり誤爆です、ごめん。
>>121 HTMLでエンコードを指定して書けばいいじゃん。
126 :
embedder ◆GqCvG9cU :02/05/17 01:11
>>122 いや、自動選択は自動選択でいいんだけど、そんなの関係ない「素のテキスト
ファイル」が化けるのよ(^^;。
まぁ、テキストなんて表示させなきゃいいってことかな?
でも、全部じゃないんだよなぁ。割合はすごく少ないけど…。不思議だなぁ…?
127 :
デフォルトの名無しさん:02/05/17 01:51
とりあえず、VBAがポンコツなのは満場一致だろ?
IncludeTrailingBackslashと、
ExcludeTrailingPathDelimiterのソースを教えてください。
Delphi4では何故か存在しないのです…。
>>126 むむ。ずっと使ってるけどバケたことは無いなー。
そのテキストをどっかにウプするかはっつけてくれよん。
Delphi 6 動作環境
OS Windows 98/Me/2000/NT4(SP5)
CPU Intel Pentium/166(推奨Pentium II/400以上)
メモリ 64MB(推奨128MB)のメモリ
HDD 120 MB 以上の空き容量
その他 CD-ROM ドライブ
マウスなどのポインティングデバイス
とあるんですがWIN95やXPでは動かないのですか?
たとえばshowmessageとか命令文あるじゃないですか。
これって一覧表みたいなのはないんですか?
他にどんな命令ができるかが知りたいんです。
「初めてのプログラミング入門」って本買ったんだけど、
載ってないんです。
133 :
デフォルトの名無しさん:02/05/17 11:20
>>133 ヘルプもさがしてるんですが、見つからないんです。
一覧表みたいなのがのってるんでしょうか?
>>134 VCL リファレンスヘルプというのがあります
>>133 >>135 ありました!!
ありがとうございました。
さっそくどんなのがあるか研究してみます。
ツールチップヘルプをAPIかなんかで意図的に表示させる方法ある?
あるよ
139 :
デフォルトの名無しさん:02/05/17 13:59
ポインタ型とかポインタ関連の使いどきが
よくわからんのですが、どんなとき使うんですか?
気がむいたとき
ええと、色んなコードを見て勉強しましょう
>>139 確かに、DelphiはCに比べるとポインタを使わなければならない場面は少ないです。
ただ WaveOut系のAPI で音を合成して鳴らすとか VCLにない細かな事をやりたくなると必要になってきます
>>138 具体的な方法を言ってみな、ほれ(プッ
>>139 1.ポインタを要求するAPIを使うとき
文字列やレコード型(構造体)を扱うAPIに要求される
2.動的変数を扱うとき
たとえば、TListItem(TListViewの各々の項目を表すオブジェクト)には、
Data(Pointer型)というプロパティがあるが、これにListItemに関連があるデータのポインタを割り当てれば、
データの管理がやりやすくなる。
3.ていうかポインタがないとどうしても実現できないアルゴリズムも結構あるよ(線形リストとか)
>>140 わからないから気がむかない・・・
>>141>>142 サンクスコです。
使う場面は少ないけど、使わなきゃならない場面は出てくるのですね。
何故、直接じゃなくてポインタを介して操作しなければならないのか
未だよくわかってないですが、いろんなコード見て勉強してみます。
>>142 クラス型を使えば リストも見かけポインタ使わずに書けるよ
ポインタ使わなくては使えないアルゴリズムなんてないでしょう。
>>142 煽り方があまりに哀れだから教えてあげよう
THintWindow使うんだよ、わかった?
もっと詳しく書いたほうがいいのかな・・・
?WM_NOTIFY(TTN_SHOW) を送るという話ではないのか???
THintWindowでヒントみたいなのを開きたいだけかい?
なんかここ、回答者に向いてない人いないか?
質問者を舌先三寸でやり込めて得意げになってるの。
(;´A`)ヤサシインダヨネ…
いやだから
>>137 のような質問だと具体的に何をどうしたいか判らないんだよ
自分のアプリの Application . Hintを強制的に表示したいのか?
これは Windowsの提供するツールチップコントロールではない。
それに似せた独自のもの
それとも、OpenDialogのようなDelphiの管理化にないヒントを無理やり表示させたいのか
ところで、話は変わるが…
なんか、コード書いてて、動作がおかしい気がしたんで調べてみた。
Del5(Pro)で作ったアプリはそのままじゃXPで使っても
ボタンとかがXPのスタイルにならない。
で、コレ↓なんかでXPスタイルにする「*.manifest」を書いたんだが、
ttp://www.forest.impress.co.jp/article/2001/11/09/xpstyleapply.html そーすると、ListBoxの一行に使える文字数が、かなり減ったぞ。
長いから画面には入り切らんが、Length()で調べたら、
本来、半角4000文字くらいまで扱えるはずが、半角1000文字あたりまで。
ファイルに保存してみたら、変な文字で終わってるし。
これ、他の環境でも再現するんか?
だとしたら今作ってるソフトには注意書きをせねばならんが…。
>>151 ユニコードとかね。
そもそもListBOXに1000文字以上つっこむ(略
>>129 アップデートファイルですか?
バージョンアップですか?
ageてしまった…。
スマソ
155 :
デフォルトの名無しさん:02/05/17 19:06
delphi6のsampleにあるエクスプローラのようなフォルダ選択
コンポーネントをdelphi5で使えるようにする方法を教えてください
>>152 サンクス。
1000文字=1000バイトだったら、全角だと500文字になって、
ちょっと改行しないで書いたテキストを読み込んだら
越えちまうなあと思っていたんだ。
俺は大丈夫でも、ユーザーも開かないとは限らんし。
で、言われて改めて調べてみたら、確かにユニコードっぽいところはある。
半角だけで1000文字ちょいだが、半角全角入り乱れても1000文字ちょいだった。
ただ、ユニコードって確か2バイト文字だから、
本来4000書けるなら2000くらい書けていいと思うんだよなあ。
全角ばかりなら2000文字まで行くし…。
まあ、結局は気を付けて作るしかないってことか。
ユーザーにも一応注意して使うように書くよ。
TListBoxのItemIndexプロパティが変更されたときに
発生するイベントがほしいので、コンポーネントを作った
のですが、実際に動かしてみると、うまく動きません。
どこが間違っているのでしょうか?
ItemIndexが変更されたときというのは、プログラムで
ListBox1.ItemIndex := 1;
とした場合と、ユーザーがクリックするなり、ListBoxに
フォーカスがあるときに矢印キーを押すなりしたときの
両方の場合です。
Delphi6 Personalです
以下ソースコードの抜粋です
TListBoxEx = class(TListBox)
private
FOnChangeItemIndex: TNotifyEvent;
protected
procedure SetItemIndex(const Value: Integer); override;
published
property OnChangeItemIndex: TNotifyEvent read FOnChangeItemIndex write FOnChangeItemIndex;
end;
procedure TListBoxEx.SetItemIndex(const Value: Integer);
begin
inherited;
OnChangeItemIndex(Self);
end;
すみません。インデント忘れました。
TListBoxEx = class(TListBox)
private
FOnChangeItemIndex: TNotifyEvent;
protected
procedure SetItemIndex(const Value: Integer); override;
published
property OnChangeItemIndex: TNotifyEvent read FOnChangeItemIndex write FOnChangeItemIndex;
end;
procedure TListBoxEx.SetItemIndex(const Value: Integer);
begin
inherited;
OnChangeItemIndex(Self);
end;
>>158 チミのプログラムには欠陥が2つある。
一つは、リストボックスの選択項目の変更を補足し切れていないこと。
SetItemIndexをオーバーライドしても、プログラム内部からItemIndexをいじったときにしか拾えない。
最低でもWM_COMMANDとLB_SETCURSELというメッセージを拾わなければならないはず。
もう一つはOnChangeItemIndexイベントに手続きが割り当てられていない時を考慮していない
実行すると100%エラー
しかし、その目的のためだけなら、目的の処理を記述した関数を作って、
OnClickイベント内と、ItemIndexを変更するコードの直後に
その処理関数を呼び出た方が手間食わずに良いと思われるが。
まあ、とりえあえずヘルプ読んで出直しなさいってこった
161 :
デフォルトの名無しさん:02/05/18 00:29
こった
>>159 type
TListBoxEx = class(TListBox)
private
FOnChangeItemIndex: TNotifyEvent;
public
procedure CNCommand(var Msg:TWMCommand);message CN_COMMAND;
procedure LBSetCaretIndex(var Msg:TMessage);message LB_SETCARETINDEX;
procedure LBSetCurSel(var Msg:TMessage);message LB_SETCURSEL;
published
property OnChangeItemIndex: TNotifyEvent read FOnChangeItemIndex write FOnChangeItemIndex;
end;
{ TListBoxEx }
procedure TListBoxEx.CNCommand(var Msg: TWMCommand);
begin
inherited;
case Msg.NotifyCode of
LBN_SELCHANGE:
if Assigned(FOnChangeItemIndex) then FOnChangeItemIndex(self);
end;
end;
procedure TListBoxEx.LBSetCaretIndex(var Msg: TMessage);
begin
inherited;
if Assigned(FOnChangeItemIndex) then FOnChangeItemIndex(self);
end;
procedure TListBoxEx.LBSetCurSel(var Msg: TMessage);
begin
inherited;
if Assigned(FOnChangeItemIndex) then FOnChangeItemIndex(self);
end;
s := 'ABCDEFG';
SetLength(s, Length(s)-1);
とやった場合、自動的にsの末尾の文字はメモリ上から解放されるのでしょうか?
>>163 解放されるより#0で埋められると思います
>>164 ということは、メモリ上の値は
ABCDEF#0#0になるということですか?
>>165 場合によっては末尾の#0は解放されるかもしれません されないかもしれません
167 :
デフォルトの名無しさん:02/05/18 15:27
delphiXってdelphi6では使えないのね...ショック
168 :
delphi6personal:02/05/18 19:31
VCL使いまくりなんでFormの上がごちゃごちゃになってます。
新しいFormを作った方がいいんでしょうか?
ただ、一つ増やすだけで実行ファイルの大きさがほぼ2倍に…。
やはり動作が軽い方がうれしいんですが。
|-□□-| フムフム
\ - /
UPXで、あっしく
あんまり沢山 WinContrl載せると Win98とかリソース不足で困った事になるよ
>>168 >一つ増やすだけで実行ファイルの大きさがほぼ2倍に…。
こういうことはありえません。
174 :
デフォルトの名無しさん:02/05/18 20:51
音量コントロールのダイアログをプログラムから開くにはどうしたらいいですか?
>>168 >VCL使いまくりなんでFormの上がごちゃごちゃになってます。
VCL は Delphi ひとつにひとつしかありません。
>171
>UPXで、あっしく
これをすると何が楽しいのでしょう?
>>163 >s := 'ABCDEFG';
>SetLength(s, Length(s)-1);
>とやった場合、自動的にsの末尾の文字はメモリ上から解放されるのでしょうか?
おもしろい質問だね。「そうじゃない」という答えがあったらどうするつもり
なんだろうね。
質問です。お願いします。
本についてるサンプルコードの「書込み禁止」を解除したいのですが、できません。
右クリックで出るヤツのチェックをはずしてもダメでした。
どのようにすればいいですか?
>>178 それ以上の方法はない。
CD-ROMのファイルとか言ったら殴る。
AssignFile(f, 'C:\test.tmp');
Reset(f);
for i := 0 to c do
BlockWrite(f, Data[i]);
という感じにしたとき、Closeするまでファイルに書き込まれる全データは
メモリ上に確保されているのですか?
>>176 圧縮率とかによって違うかも知れないが、1MB程に膨らんだアプリが
やはりモノ次第ではあるが約300K程度に縮んで、
アプリの起動が速くなることがある。
あとネットワークでプログラムを配布したいとき、
FD等の低速少容量メディアで常用したいときも、
結構(゚д゚)ウマーになれる。
要は目的次第で使うか使わないか決めればいいだけ。
馬鹿の一つ覚えのように全部のプログラムにやる必要はない。
>>179 、、、なんというか、、申し訳ありません、、。できました。
>右クリックで出るヤツのチェックをはずしても
エディタ上でこれをやってました。(コンパイルもセーブも不可)
Delの外からフォルダ内の全部のヤツの「読み取り専用」のチェックをはずしたらできました。
約1日のどツボでした、、。ありがとうございました。
>>174 直接APIを叩くか sndvol32.exe を実行。
/R オプションとか付けて実行すると録音ボリュームが出せるよん。
で、Formは1つがいいのですか?2つがいいのですか?
>184
ひとりより、ふたりがいい♪
ふたりより、さんにんがいい〜♪
>183
サンクス!助かりました。
190 :
デフォルトの名無しさん:02/05/18 22:54
1変数のマイナス演算子と2変数の減法演算子との異なる点を挙げよ。
っていう問題を教えてください
>>192 一重積んでは母のため・・・
二重積んでは父のため・・・
>>168 場合によりけり。これだけの情報ではなんともいえん。
ただ2つにするなら、2つ目は自動作成の対象から外しとけよ。
>194
thx!
196 :
デフォルトの名無しさん:02/05/18 23:36
存在するファイルのサイズを調べるにはどうしたらよいでしょうか?
FileSizeを使用すると、開かなければならないし、テキストファイルはできないみたいだし。
>>197 自己レス
解決しました。
TSearchFile.Sizeで取得できました。
199 :
デフォルトの名無しさん:02/05/19 00:27
for文の繰り返しの中でtry ...except でエラー処理を行ってるのですが、
繰り返し中にエラーが出た場合、エラー処理後次の繰り返しの処理を
行ってほしいのですがどうすればいいでしょうか?
try
for i:=0 to count-1 do
listview.Items.Item[i].SubItems.Add(strName[i]);
except
on EOLeException do begin
lstFile.Items.Item[i].SubItems.Add('エラー');
statusbar.Panels[0].Text:='エラーです');
//ここで次の繰り返しに処理が戻ってほしいです
end
end;
tryの位置が間違ってない?
201 :
デフォルトの名無しさん:02/05/19 00:30
>>199 for i:=0 to count-1 do
try
listview.Items.Item[i].SubItems.Add(strName[i]);
except
on EOLeException do begin
lstFile.Items.Item[i].SubItems.Add('エラー');
statusbar.Panels[0].Text:='エラーです');
end
end
>>199 forの中にtry入れれば動きそうな・・・。
>>199 何故そのような複雑怪奇なブロック構造…はどうでもいいが、
単にforループの中にtry〜exceptを記述したらだめなの?
二分の間に4つもレスが付くとは…
逆四面楚歌です。
あの、でるふぁいは結構覚えやすくて
いいと聞いたんでこれからフリー版で
始めてみようかなとおもっとるんですが。
ちょっとした簡単なソフトを作成するぐらい
だとして、開発環境にはデルファイ本体含めてどれくらいの
容量を必要としますか?
HDDが残り6Gなので心配ですです。
あと、でるふぁいをインストールしたことで
なにかしら問題がおこったり、アンインストールが
大変だったりしませんか?
よろしくお願いします。
>>206 ダウンロードページにも行かないで真人間とか言われても困る。
それくらいの実験も出来ないで〃
VBと比べて起動がかなり重いとだけ言っておいてやろう
>>209 そう言えば女神様の顔結構長時間見てた記憶が・・・。
BCBよりは有機質的で好きだけど。
起動後はさくさくだけどね。
VBと比べてもコンパイルがかなり速いとだけ言っておいてやろう
>>211 そう言えばVB、コンパイル中のプログレス結構長時間見てた記憶が・・・。
VCよりは早くて好きだけど。
コンパイル後はバグバグだけどね。
Win2K RC2 にサービスパックあててる場合、
インストールできないという罠。
しかし、そんな奴はめったにいない罠
>>213 つぅか未だにRC使ってるってタイーホ。
RCが分からなくってとりあえず笑ってる
>>206
217 :
デフォルトの名無しさん:02/05/19 00:56
ListBoxのOnMeasureItemでHeightに256以上を入れると
表示がおかしくなるのですが(256を越えると0に戻るっぽい)
1つのセル(?)の高さを256ピクセル以上にする方法は
無いもんでしょうか?
みなさんどうも。
コンパイルが早いとかはもう調べてありますし、
ボーランドのサイトにもいって落としそうにもなりました。
聞きたいのは、でるふぁいの本体のサイズとかじゃなくて
なにかしら小規模なアプリを作成出来るような環境にするには
どれくらいのスペースが必要ですかということなんでし。
本体展開すればそれであとは必要ないんでしょか?
ねたじゃないでう。
Windowsの制限じゃないの?
DrawGridかなんか使うしかないんかな。
>>218 6GBありゃ十分、
開発するシステムの規模によるが、小規模アプリなら
ひとつで bin / src あわせても 10MB ぐらいじゃないの。
6G空いていて何が心配なんだろう…
CD3枚入れたとしても半分も埋まらないのに…
>>220 Delphiで10MBは中規模かと。
日曜プログラマとしては。
10MBは、なかなか行かんなー
営業にはふっかけるタイプなんで。
そうですか。つまり、デルファイ本体以外には特に必要ないということですね。
いやー、mpgは容量食うんで、いま6Gでもそのうちなくなっちまうんじゃ
ないかと。
そろそろCDRに焼きたいんですが、自分家にはないもんでなかなか・・・。
どうもでした。
まずはHSPから始めてみようと思います。
素晴らしいオチだ。
>>225 どうでもいいけどあなたは誤った道を選択したと言っておく。
あくまで俺の価値観だから気にしなくても良いよ。
あの、真人間は結構覚えが早くて
いいヤツと聞いたんでこれからメルトモとして
付き合い始めてみようかなとおもっとるんですが。
ネタでオブラートしたマジな質問でした。
本当にアリガトウございました。独女板にかえります。
お花畑住人によろしくつたえといて。
いっぱい釣れた
キャッチ&リリースでお願いします
あの子のハートをキャッチ&リリース
あの子のハートをアロック&デリート
あの子のハートをトライ&キャッチ
つまんない人間だね。
200さん201さん202さん203さん 遅くなりましたがレス有難うございます
エラーが出たらtryから抜けるのでfor文の中に入れればいいのですね
ひとつ賢くなりました。
あの子のハートをK&R
オマエモナー
人間じゃなかったよ
あーあ
243 :
デフォルトの名無しさん:02/05/19 03:40
imagingのimgEditのscrollpositionについて教えてください
画像を表示させて画像をマウスで選択したら、選択したところを拡大
するようにしたいので、まずmousedownイベント時にX座標とY座標を
記憶させ、mouseupイベントでマウスボタンを離した場所のX,Y座標から
選択範囲を計算させintX:=abs(startX-X);intY:=abs(startY-Y);
perX:=imgEdit.Width / intX;perY:=imgEdit.Height / intY;
imgEdit.zoom:=(min(perX,perY))*100;
というふうに拡大率を出し、(startX,startY:選択開始位置)
imgEdit.ScrollPositionX:=startX;imgEdit.ScrollPositionY:=startY;
と画像を表示する場所を指定してあげても指定した位置に表示されません
どうかお願いします
( ゚д゚)ホスィです
>>167 過去ログぐらいみやがれよ、散々がいしゅつだが使えます。
ちっとはweb検索しやがっていただきたく思う所存にございます。
>>219 レスありがとうございます。
Gridとは盲点でした。
ちょっとやってみたらGridなら高さ1000にしても問題無いみたいです。
「俺が作ったコンポーネントを2ちゃん住人が試し斬りするスレ」
を作っていい?
いや、別スレ立ててまでやる必要はないとは思うが、
こういう事やっていいスレはどこかにないか?と。
Delスレ立てすぎると風当たりが強くなるぜ。
とりあえず、相談室あたりでネタが続くかどうかやってみてからでも遅くないのでは?
251 :
デフォルトの名無しさん:02/05/19 16:45
D6にて、動的にフレームを生成してフォームに貼り付けたいのですが、
フォームが閉じられた時にparentで指定したオブジェクトが開放されると
動的に生成したオブジェクトも開放されるのでしょうか?
それとも FormのDestroyあたりで、明示的に開放しないと駄目でしょうか?
こんな感じでやってます、
procedure TForm1.FormCreate(Sender: TObject);
var
i:Integer;
begin
for i:=1 to 99 do
begin
Frame[i]:=TFrameDenBody.Create(Self);
Frame[i].Parent:=Self.ScrollBox1; //<---フォーム上のScrollBoxの上に作成
Frame[i].Visible:=True;
Frame[i].Name:='iFrame'+IntToStr(i);
Frame[i].AutoSize:=True;
Frame[i].Top:=(Frame[i].Height*(i-1));
end;
あと、実際開放されているか否かを確認する方法ってパフォーマンス
モニタで確認するのでしょうか?それとも何か良いツールがありますか?
あれば教えて下さい。
252 :
デフォルトの名無しさん:02/05/19 16:52
procedure TForm1.FormCreate(Sender: TObject);
var
i:Integer;
begin
for i:=1 to 99 do
begin
Frame[i]:=TFrameDenBody.Create(Self);
なんでこんなのをうつと
プログラムになって
pcがうごくのかよくわからん
>>252 すみません、よく理解できないのですが、
Create(Application)じゃないとって意味でしょうか?
1、Parentを指定すれば、もちろんその親が解放される時に一緒に解放される
2、解放されたかどうかを見たいなら、
type TFrameDenBodyExt=class(TFrameDenBody)
public
destructor Destroy; override;
end;
として destructor TFrameDenBodyExt.Destroy; でログに吐いてみたら?
例えば
destructor TFrameDenBodyExt.Destroy;
begin
AllocConsole; writeln(Name);
inherited;
endl;
とか
もちろん 作成は
Frame[i]:=TFrameDenBodyEx.Create(Self);
> Frame[i]:=TFrameDenBody.Create(Self);
> Frame[i].Parent:=Self.ScrollBox1; //<---フォーム上のScrollBoxの上に作成
FrameのOwnerはSelf=Form1
FrameのParentはScrollBox1
Ownerが破棄されるときには一緒に破棄されるけど
Parentが破棄されても一緒には破棄されんかったと思う。
Parentが破棄されると消えちゃうけど。
 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
∧,,∧
ミ,, ゚Д゚彡
〃つ旦O
〜ミ,,[ ̄ ̄ ̄.]
 ̄ ̄ ̄
>>254 解放の確認方法まで教えていただき、ありがとうございました。
>>255 つまり、Create(Self.ScrollBox1)の方がいいって事でしょうか?
>>257 折れは Frame[i]:=TFrameDenBody.Create(Self);でいいと思うよ。
但し、初期化をサボってOwnerを破棄して再作成する事で初期化するってなら、scrollbox1を指定した方が楽かな。
>>258 なるほど、Delフサギコ さんありがとう御座いました。
うそを教えてしまった。Parentでも破棄されるのね。
∧,,∧
ミ゚Д゚,,彡 .┳ そういう時は
ミ "⊃ミ ┃
〜ミ " ミ ┃
ミ_ミ`,ミ (◎) ̄))
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧,,∧
ミ,,゚Д゚彡 ジンジャーで・・・
ミ "⊃┳⊃
〜ミ " ┃ミ
ミ ミ┃ミ
(◎) ̄))
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
-= ∧,,∧
-=≡ ミ,,゚Д゚彡 逃亡や!
-= ミ "⊃┯つ
-=≡〜ミ "//ミ
-=≡ミ_ミ'/,ミ
-=(◎) ̄))
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
function Tsfiform1.GetFolderIcon: HICON;
var
sfi: TSHFileInfo;
hi: THandle;
begin
hi := SHGetFileInfo('',
FILE_ATTRIBUTE_DIRECTORY,
sfi, SizeOf(sfi),
SHGFI_SMALLICON or SHGFI_SYSICONINDEX or
SHGFI_USEFILEATTRIBUTES);
Result := ImageList_GetIcon(hi, sfi.iIcon, 0);
end;
と、MLからソースを探し出して使おうとお持っているのですが
ImageList_GetIconメソッドがそのままだと未識別とでてしまいます
何かapiが必要なのでしょうか?
uses CommCtrl;
264 :
デフォルトの名無しさん:02/05/19 18:15
for文で、カウンタが奇数の時だけ実行できるように出来ない?
for Int := 1 to 50 do begin
if Odd(Int) = False then continue;
〜
end;
または
for Int := 1 to 50 do
if Odd(Int) = True then begin
〜
end;
ってやるしかない?できるだけ高速な処理を望みたいのだが。
>>264 Int(こんな変数使うなよぅ) * 2 + 1。
267 :
デフォルトの名無しさん:02/05/19 18:19
>>265 よく分かんないんですけど、
for Int := 1 to Int * 2 + 1 ですか?
Odd()は関数呼び出しじゃないのでそれほど時間はかからない筈、が
カウンタを自分でインクリメントしてwhileでまわすのが多分速い。
>>267 Int を変数名にするのは C系言語の経験のあるプログラマから見ると
「凄く気持ち悪い」ということでしょ
* 2 + 1 の意味までは考えてないけど
270 :
デフォルトの名無しさん:02/05/19 18:22
>>268 Int := 1;
while Int = 50 do begin
Int := Int + 2;
〜
end;
っていうことですね。
271 :
デフォルトの名無しさん:02/05/19 18:23
>>270 whileの条件が変だけどそんな感じです。ただInc(Int, 2)の方が速いかも。
>>270 そのままだと
while文の中は1度も実行されないね
多分 while Int<50 の方がご希望通り
for i := 0 to count div 2 do
begin
a[i * 2 + 1] = i;
end;
x * 2 + 1は絶対奇数。授業でやらんかったか?
>264
自問自答?
すまん、途中までしか見えてなかったんで変なレスつけてもうた。
for i := 1 to 50 do
begin
if Not Odd(I) then continue;
TestProc;
end;
i:=1;
while i <= 50 do
begin
Inc(i,2);
TestProc;
end;
これで比較してみたが。動作速度はほとんど変わらず。(0.3%位後者の方が早いが…)
>>277 inc(i,2)
コンパイルしてCPUウィンドウのアセンブラ見ると実は
i := i + 2;
になってる。
試しに
inc(i);
inc(i);
にしてみたらこっちの方が極々僅かだが速かった。
漏れの試したCPUはClassic Athlon 800MHz。
試しに後者のInc(i,2);を書き換えて再テストしてみて。
って、ここまでして最適化しないと逝けない事ってそうそうないと思うが…
>>278 試したみたけど確かに少し早い。
ついでにasmでも試したが違いはほとんどわからん。
>>277 :(間違っていたら言え)
i が3から始まってるよー(whileの方)
> (0.3%位後者の方が早いが…)
1回抜けてる分を考慮すると、後者のほうが遅いのでは?
頼むから1000分の数倍早いプログラムより見やすいソースを
優先してくれ・・・(;´д`)
近代的CPUでは実行速度はメモリアクセスの回数が主要因という事をお忘れなく
>>281 まぁそーだね、最速だがアクロバなソースより、10秒遅くても読みやすいソースの方が
数十倍優れていると思われる。(バグを防ぐって意味でも)
けっ プログラムなんて仕様通り動けばいいんだよ!
286 :
デフォルトの名無しさん:02/05/20 09:53
フォームのないユニットでデータベースの更新処理をするにはどうしたらいいのでしょう。
BDEとかフォームがないから貼れないのですが、コードのみで記述することになる
のでしょうか?やり方を教えていただけないでしょうか。
>>286 コンポーネントも所詮はクラス。OwnerをnilにしてCreateして下さい。
データモジュールに貼り付けてください。
289 :
デフォルトの名無しさん:02/05/20 11:30
>>287 >>288 の方ありがとうございました。
データモジュールってこのような時に使うんですね。
290 :
デフォルトの名無しさん:02/05/20 17:38
Screen.ActiveForm.Componentsをループさせて画面上の項目を自動的にクリアする関数を作成して
使っていますが、Frameを使っているフォームは上手く機能しません、ループの中を追って見てもFream自体は
取得できるのですが、その中身までは出てきません。
ソースから部分的に抜き出すとこんな感じです
↓
var
i:integer;
wCompo:TComponent;
begin
for i:=0 to Screen.ActiveForm.ComponentCount -1 do
begin
wCompo:=Screen.ActiveForm.Components[i];
if (wCompo is TEdit) then
(wCompo as TEdit).Text:='';
end;
end;
この方法だとFream上のコンポーネントを取得する事はできないのでしょうか?
それとも、他に方法があるのでしょうか?教えて下さい。
>>290 Fream1.Edit1.TEXT:='';
Fream1.Edit2.TEXT:='';
Fream1.Edit3.TEXT:='';
Fream1.Edit4.TEXT:='';
Fream2.Edit1.TEXT:='';
Fream2.Edit2.TEXT:='';
Fream2.Edit3.TEXT:='';
Fream2.Edit4.TEXT:='';
とクリアしてはいかがでしょうか?
私はそのようにしておりますが、
今まで問題は発生しておりません。
時としてプログラムとは柔軟に
コーディングを行うことも必要ですよ。
290にて FrameをFreamと間違っている箇所がありました。訂正しておきます。
>>291 私のからコピペされたのだと思いますが、Fream->Frameですね。
> 時としてプログラムとは柔軟・・・
参考になりました・・・・。はい。
293 :
デフォルトの名無しさん:02/05/20 18:17
「Delphiオブジェクト指向プログラミング 」を今でも通販で買えるサイトは無いでしょうか?
amazonもcbook24も在庫がありませんでした
>>291 ( ´,_ゝ`)プッ
保守性最悪なコーディングだな
>>291 問題が発生してないって、それで問題が発生したら怖いだろ
オマエそんなコーディング書いてよく偉そうにできるな、その方が謎だよ
だんだんムカついてきた(藁
時には柔軟?オマエのそれの何処が柔軟なんだよボケ!ガチガチじゃねーか
>>290 今試してみたけど、確かに貴方の書いた通りですねフレーム上のコンポが取得できないですね
フレーム自体がフォームと同じ扱いだからでは?つまりActiceFormじゃないって意味です
ああ、やっぱり他の人も思ってたんだ。
>>291のは参考にするべきじゃない・・・。
>>292 ComponentCountやComponentsはFormだけが持ってるプロパティじゃないから、
再帰関数作ればコンポーネントの追加・削除に左右されないコード書けるよ。
配列作って代入しとくんだろうな〜
>>295-296 量にもよるね
2つ3つで一般化してたら、そっちの方がビョーキ気味だと思うし
if Components[i] is TFrame then
MyClearFrame(Components[i] as TFrame);
じゃ駄目?
302 :
デフォルトの名無しさん:02/05/20 18:56
TlistItemのチェックボックスについて質問です
ListViewで選択されてる項目にチェックを入れたい場合、
if ListView.Items[intImgIndex].Checked=false then
ListView.Items[lstFile.Selected.Index].Checked:=true
else
ListView.Items[lstFile.Selected.Index].Checked:=false;
上文のようにしたらいいと思ったのですが、さっぱり上手く動きません
どこが悪いか指摘ください
上文↓の間違いです
if ListView.Items[ListView.Selected.Index].Checked=false then
ListView.Items[ListView.Selected.Index].Checked:=true
else
ListView.Items[ListView.Selected.Index].Checked:=false;
>どこが悪いか指摘ください
ハンガリアン
>>300 そりゃ、当然量にもよるけど、今回の場合は、最初の質問からして画面上のEditなりを
全てクリアしたいってことでしょ、その答えがあれじゃ話にならんとおもたのですよ
しかも、内容的に質問した側より答えた側のレベルの方が低そうな上に、なにやら、
偉そうに「時として」なんて書いてるし、妙に不快なツボに入った、俺だけかな?(藁)
まあまあ、答えは再帰で一発OK。ダラダラ代入文を書くなゴルァ!!ということで・・・
>>302 ハンガリアン
>>303 ListView.Items[ListView.Selected.Index].Checked:= not ListView.Items[ListView.Selected.Index].Checked;
とかはダメ?
お世話になりました、出来ました!
こんな感じで再帰的に処理することにしました。
↓
procedure MyClear(pControl:TWinControl);
var
i:integer;
wCompo:TComponent;
begin
for i:=0 to pControl.ComponentCount - 1 do
begin
wCompo:=pControl.Components[i];
if (wCompo is TFrame) then
MyClear(wCompo as TFrame);
if (wCompo is TEdit) then
(wCompo as TEdit).Text:='';
end;
end;
今までのScreen.ActiveFormで作っていた物にoverloadして差し替える事にします。
本当にありがとう御座いました。
>>307 駄目でした、どうもリストにある項目をマウスや矢印で選択すると
checkboxにcheckがあるかどうか関係なしにcheckedプロパティが
trueのまま固定されてるみたいです
ふと思ったのですがListView.Items[ListView.Selected.Index].Checkedは
ListView.Selected.Checkedと同じみたいですね
>>309 >if (wCompo is TFrame) then
> MyClear(wCompo as TFrame);
それだとTPanelとか使ってるときだめだろ。
折角だから、TFrameじゃなくTWinControlにしとけ。
ControlCountとControlsのペアじゃないからTPanelがあっても大丈夫だと思う。でも、
引数をTComponentで取って、ComponentCountとComponentsのペアを使う
引数をTWinControlで取って、ControlCountとControlsのペアを使う
のどちらかにしたほうがいいと思う。
Components→同じOwnerを持つコンポーネントでループ
Controls→同じParentを持つコンポーネントでループ
かな?
申し訳ない解決しました
スペースキーでチェックのon/offをしようとしてたのですが、どうも
ListViewはもともとスペースでon/offが出来るみたいでした..
315 :
デフォルトの名無しさん:02/05/20 23:58
質問です。
TStringsのGetやSetとは、一体何に使うのでしょうか?
TStringsをpublishedプロパティに持つコンポーネントを作成しているのですが、
参考にTComboBoxStringsなどのソースを当たってみたところ、
GetやSetが出てきて、これが何なのかがよく分かりませんでした。
Delphi5のヘルプにも無いみたいです。
宜しくお願いします。
316 :
デフォルトの名無しさん:02/05/21 00:03
>>315 プロパティへのアクセスメソッド。
C#にもある概念なのでマスターしておくこと。
str :TStrings;
a :string;
str := TStrings.Create();//(抽象クラスなので本来は不可能)
str[0] := "monor"; //= str.Set("monor",0);
a = str[1];//= a := str.Get(1);
>C#にもある概念なので
ハァ?
>>318 public new Kakiko this[int Index]
{
get
{
return (Kakiko)base[Index];
}
}
>>318 ソース読めよ。よりはましと言うことで。
はい、次の方。
>>315 ソースよりもヘルプ読むべきだと提案してみる。
[クラスとオブジェクト]の項目を角まで嫁
>>317 C#の事をDelスレで話すと荒れるからやめようや。
>>322 まぁ、お前は一生ソースでも読んでろってこった。
早速アフォが2匹ほど…鬱出汁脳
>>317 済みません、単純に見逃してました。
GetStringsやSetStringsという名前ではなかったもので。
皆さん有難うございます。
コンボボックス(Style=csDropDown)は、
ドロップダウン項目を選択すると、その内容がエディタ部に入る仕組みですけど、
ドロップダウン項目を選択した後、その内容をプログラムで変更して、
エディタ部に入れる方法はありますかいのう?
ありますのう
C#はどうよ?
>>327 まだWindows.System.Form使い始めでいまいち。
かなりVCLに似た仕様で違和感はないっす。
onchangeでtext書き直す
>>330 318 名前:デフォルトの名無しさん 投稿日:2002/05/21(火) 00:07
>C#にもある概念なので
ハァ?
ふっかけてきたくせにキレるバカw
>>331 俺?318じゃないよ。つーか質問スレにC#との比較話題持ち出すなやって事で。
俺に言わせりゃ
>>318もうぜぇんだよ、って感じ。
>>332 別人と同意した上で。
>C#との比較話題持ち出すなやって
C#にも同様の概念がある。
って書いただけなんだけどね。
100歩譲ってこれが比較だとしても迷惑のかからないポジティブな比較だと思うが。
やはり新スレは作るべきではなかったな・・・
アフォばっか(藁
? ?
? (゚д゚) ?
>>333 の言ってることがサパーリな漏れ
>333は放置しとけ
↓次から何事もなかったかのようにどうぞ
↑C#さいこー!!!!
質問させてください。
これからDelphi 6 Personalを使おうと思っているのですが、
「Personalではデータベースのサポートが無い」
という話を耳にしました。
そのサポートというのは、具体的にどんな事を実現するサポートなのでしょうか?
また、そのサポートが無い場合でも、ある程度容易にデータベースを作れるのでしょうか?
データベースと簡単に接続してやり取りする物が付いてこないだけなので
一から全部作れば作れないことも有りませんが、とても大変らしいです。
>>344 「Delphiはデータベースに都合が良い」と聞いていたのですが、
それはProfessionalの方だけだった様ですね。
データベースのサポートが無いのは残念ですが、
Delphiは優秀なツールとの事なので、使ってみることにします。
レスありがとうございました。
ADO使えば?
>>345 PQCompo + PostgreSQLならパソナルでもじゅうぶんに使えますよ
>>343 データベースは作れる。
しかしビジュアルなDBコントロールがないので プログラム量は当然増える。
CGI的な動作をさせるとかならそれでもかまわないかもしれない
Pro以上なら、貼り付けて設定するだけでフロントエンドとしてそれなりに使える
>>348 仕組み的に知ろうとすると、逆にProのDBコンポを使わない方が勉強になる場合が多いのは皮肉だね
Grid一つ取ってもパーソナルだとStringGridなりを使って独自にプログラムする必要があるし、そこから
独自Gridコンポを作ったりすると、DBコンポの有り難味は薄れてくるし、自前で作ったコンポの方が
自由度が高いので使い勝手も良くなるし。
結局、深く知れば知るほどPro以上の価値はVCLのソースが見えるって部分だけになっていく。(藁
(VCLのソースは独自にコンポを作る場合にも絶対に必要なので結局Pro以上は買う事になるけど)
,,,,,,,,,,,,,,,,∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,,,,ミ,,゚Д゚彡 < TQuery使わなくてもDBにSQL流せるの?
UU"""" U U \_______________
Pro附属のDBEditとかDBGridとかは
使った事ないんだけど。
DBGridを自作すんのはいいけど、
TQuery、TStoredProcなどを自作すんのは大変だろな。
キャッシュアップデート関連が特に。
レポートはついてんだっけ?>Personal
>>347 のPQCompoは日本製だしマニュアルアも日本語だから読んだらいいんじゃないの?
SQLも流せるというより、それが主な目的のコンポ ただし TComponent継承だから独自のものね
それなら oo4o使ったほうが簡単そうだけど。。。
データコントロールに慣れてると大変だけどね。
>>346-348 アドバイスありがとうございます。
まだそこまでレヴェルが全然達してないので、
また実際データベースを作る時にでもアドバイスよろしくお願いします。m(_ _)m
>333
私は内容自体は全く問題ないと思いましたが,
一部の読み手が神経をとがらせている話題には
触れないほうがよいかも.
(何があろうと言わなければならないことなら話は別ですけど)
うるさいよ?
\
(゚д゚) エンジョイプレイ!
<( )
< \
ib objects 使えば personal でもビジュアルBDコントロールを使える
ただし、interbaseもibobjectsも日本語ドキュメントが公開されてない罠
360 :
デフォルトの名無しさん:02/05/21 21:31
PDFファイルの中の、/title (もなもな)とか/subject (ギコギコ)という
部分の、「もなもな」「ギコギコ」
というutf-16の文字列を取り出して
シフトJISに変換してMemo1.lines.add
とかしたいのですが、
Memo2.Lines.LoadFromFile(
OpenDialog1.Filename);
などとして、Memoに読ませると
「ギコギコ」の途中で切れちゃいます。
テキスト以外を含むファイルから
特定の文字列を抽出する時は
皆さんはどのようにされるのですか?
また、普通はどうするのですか?
Delphi6parsonalをセットアップ
したばかりで、プログラムの基本
がまだつかめてません。
>>360 ここのみんなと、「普通」と分けて
るけど、ここの住人は「普通」じゃ
無いってか?
362 :
デフォルトの名無しさん:02/05/21 23:30
366 :
デフォルトの名無しさん:02/05/22 02:08
367 :
デフォルトの名無しさん:02/05/22 16:43
文字列の引き算?ってどうすれば
いいのでしょうか?
つまり、長さが一定でない文字列か
ら、最初の数個の文字や、末尾の
1文字を削除したいのですが。
>>367 copy と length をヘルプで見て よく考えてみて下さい
Copy(x, n, n)
370 :
デフォルトの名無しさん:02/05/22 17:00
formに貼ったmemoに読み込んだ
unicode文字を、
WideCharLenToString関数に
与えて普通に読める文字にする為
の、ソースサンプルを教えてほしい
のですじゃ。
371 :
デフォルトの名無しさん:02/05/22 17:05
WideCharLenToString関数って
うにこーどに未対応のWindows95
でも使える?
372 :
デフォルトの名無しさん:02/05/22 17:06
373 :
デフォルトの名無しさん:02/05/22 17:25
ヘルプに載ってる
RightStr関数を使おうとしたら
未定義の識別子っていわれた。
なんで、使えないやつがヘルプに
あるの?
ヘルプのユニットのところにStrUtilsとありますね。
uses StrUtilsとすれば使えますよ。
375 :
デフォルトの名無しさん:02/05/22 17:51
WideCharLenToString関数を
使ってみたら
StringとPWideCharには互換性が
無いと言ってきた。
StringからPWideCharへの変換は
どれをつかうの?
>>374 usesって、そうゆうものだったのか
ありがとう助かったよ。
ってか
織れが厨すぎるのか?
377 :
367(初心者):02/05/22 17:59
378 :
デフォルトの名無しさん:02/05/22 18:10
文字化けしてstringになってる
unicodeをPWideCharとみなして
読める状態に変換するには、どうしたら良いのでしょう?
Windows95
Delphi6parsonal
379 :
デフォルトの名無しさん:02/05/22 18:13
>>372 見捨てられてるんですか(;ー;
私のマシンはまだWin95
380 :
デフォルトの名無しさん:02/05/22 18:16
ところで、
PWideCharって
なあに?
お願いがあります。
チャットで荒らしをしてる人が居ますです
こらしめたいのです
というかそこのみんなが迷惑しているのです
解決法などを教えてくださいです。
プロバイダってなんです?
お願いがあります。
スレッドで荒らしをしてる人が居ますです
こらしめたいのです
というかそこのみんなが迷惑しているのです
解決法などを教えてくださいです。
386 :
デフォルトの名無しさん:02/05/22 19:24
>>383 聞く場所がちがう。
荒し対策とプログラム技術とは
直接関係ない。
というより、あなたそのものが
この板にとって荒しそのもの
2度とくるな。
387 :
デフォルトの名無しさん:02/05/22 19:41
TFileStreamでファイルの
何行目の何文字目から、特定の記号
が出るまでを、抜き出すのは
どうすればいい?
で抜き出したやつをPWideCharタイプの変数に入れたいんだけど。
Delphi.net 日本語版 2003年11月発売予定
>>388 それってDelphi 6の次ってこと? 違うの?
>>388 マジっすか?あと5ヶ月かぁ、貯金はじめないと間に合わないな。
Delphi7は、2002年12月です
げ、.NET 2003年?来年かよ!
>>392 おい、それネタ?それともちゃんとした情報?
ある程度ちゃんとした情報だが、正式発表ではない、まだ予定は未定だ。
CBは来年ですが、Linux版ではKylixとCBが合体して Kylix3として今年の夏〜秋にリリースされる予定。
Win版も将来的にはその方向に・・・。あと、VSに対抗する製品も検討されていますが、辛いのが
経営戦略的にリリース時期がズレズレなので、これも将来的にリリースを統一する方向・・・。
これ以上は語れません。
398 :
デフォルトの名無しさん:02/05/22 20:37
ん?DelphiとBCBも統合するの?
399 :
デフォルトの名無しさん:02/05/22 20:40
統合されたらいいなあ BCBやってる時に パスカルソースも同じように編集出来れば最高
JBuilderも統合されないかなあ。
BCB# とか出る?
つーか、出るにしても #の位置が微妙になるなぁ、入れるとしたらBC#Bか?
>>400 JBは根本から違うから無理でしょ。
つーか、Delphi程度に軽くなって欲しいな JB
>367
Delete手続きという手もあります.
別板のコテハンつかってしまいました(>_<).
はやく新しい専用ブラウザに慣れなければ….
柏餅が好き、と。メモメモ。
>>387 TFileStream に行とか文字とか、という概念はありません。
407 :
デフォルトの名無しさん:02/05/22 23:31
なんつーか、ここで「どうしてなの?」なんてこと書く前に検索すれってばよ。
と。
408 :
デフォルトの名無しさん:02/05/22 23:33
ウニコードについて聞きまくってるのは同一人物かい?
409 :
デフォルトの名無しさん :02/05/23 00:02
質問ですが、RichEditにて指定した位置の文字例が何かであるか
を調べるにはどのように記述したらよいでしょうか?
教えてください。お願いします。
ちなみにちゃんとヘルプで調べましたが、見つからなかったため
書き込みしました。
>>409 ちなみにMSDNライブラリも調べると幸せになります。
411 :
デフォルトの名無しさん:02/05/23 00:12
>>409 >指定した位置の文字例が何かであるか
質問の意味が分かりません
>>409 x行目、y文字目からz文字を調べるとしたら、
var
ls, cs: String;
begin
ls := RichEdit1.Line[x];
cs := Copy(ls, y, z);
ShowMessage(cs);
end;
でいいんじゃね?
414 :
デフォルトの名無しさん:02/05/23 04:30
>>406 じゃあ行をみつけるには
1バイトづつ読みとってif文と"="で
改行コードと比較するループを回す
しかないのか。
なんか効率悪そうだなあ。
いいほうほうないのかな?
>>414 TStringList.LoadFromStreamで読み込めば?
>>414 TMemoryStreamならポインタ操作できるよ
>>414 ちゃんとしたコンパイラですから、そうやればいいのです。
ただ、1バイトづつ読むのではなく、ブロック単位に読んで1バイトづつ処理します
LoadFromStreamで読んでも、中身はそういうやり方をしています
>Borland previewed a programming language for Web Services creation
> & scripting (codename Charlotte)
これなんだろ?ゴルァ
∧,,∧,,,,,, ) (´⌒(´
⊂ミ゚Д゚⊂ `つ≡≡≡(´⌒;;;≡≡≡
""""" (´⌒(´⌒;;
ズザーーーーーッ
>>419 > SelPos := Pos(FindText, Memo1.Lines.Text);
Memo1.Lines.Textの内容を
今のSelStart+1位置から最後まで切り取ってから
Posにわたしたらいいでしょう。
>>420 コードネーム人参
クラス名は全て人参に含まれる栄養素名。
carrot???
http://dictionary.goo.ne.jp/cgi-bin/dict_search.cgi?MT=Charlotte&sw=0  ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄
∧,,∧,,,,,, )
⊂ミ,,゚Д゚⊂ `つ;
"""""マジボケですか?
Charlotteはシャルロット
改変、流用自由なソースを改造厨
ファイルを変換するやつから
変数を読ませるやつに改造しようと
してTFileStreamをTMemoryStreamに変更。
Ms.Writeのところで、TMemoryStreamとIntegerには
互換性がありません。というエラー
発生!どのように直せばいいのでしょう?
// Unicode(Big Endian)の文字列を読込みShift-Jisのテキストを返す
function LoadUniBi(const titleName: string; nagasa1: Longint): string;
var
Ms: TMemoryStream;
Sz, n: integer;
Pc: PChar;
Tc: char;
begin
Result := '';
Ms.Clear;
Ms := Ms.Write(string(titleName),nagasa1);
try
Ms.Position := 0;
sz := Ms.Size;
try
Pc := AllocMem(sz + 10);
Ms.Seek(0, soFromBeginning);
try
if Ms.Read(Pc^, sz) = sz then
begin
n := 0;
// WordのLow, Highを入替える(何て原始的な方法)
while n < sz do
begin
Tc := (Pc+n)^;
(Pc+n)^ := (Pc+n+1)^;
(Pc+n+1)^ := Tc;
Inc(n, 2);
end;
Result := WideCharToString(PWideChar(Pc+2));//先頭2byteをカッ
ト
end;
finally
FreeMem(Pc);
end;
except
raise Exception.Create('メモリを確保出来ませんでした.');
end;
finally
Ms.Free;
end;
end;
シャルロットを返して!
426 :
デフォルトの名無しさん:02/05/23 19:14
PDFファイルから/title (もなもな)を
鳥だそうとしているものです。
/titleが6行目に出てくるので
イカのソースをかいて鳥だそうと
したのですが、化けちゃっています
。
おかしな、部分をご指導願いたい
のですが。
procedure TForm1.PDF1Click(Sender: TObject);
var title1:string;
s1:string;
s2:string;
title2:string;
Li:string;
L1:integer;
PW:PWideChar;
begin
if OpenDialog1.Execute then
begin
//ReadTextByStream(OpenDialog1.FileName,Memo1.Lines);
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;
begin
title1 := Memo1.Lines[6]; //6行目取出し;
s1 := copy(title1,9,length(title1)-9); //9文字目から全体の長さ-9を取
出;
PW := @s1; //ポインタ代入;
L1:=length(s1); //長さ代入;
WideCharLenToStrVar(PW,L1,title2); //プロシージャ呼出;
//title2 := WideCharLenToString(PW,L1);
Li := RightStr(OpenDialog1.FileName,10) + ',' + title2;//ファイル名+
抽出結果;
Memo2.Lines.Add(Li); //メモ書き出し;
end;
end;
あ”ぁ、インデントが消えてる?
なぜ?
すみません。
>>424 そのエラーを出さないだけなら
Ms.Write(PChar(string(titleName))^ , nagasa1);
とか 代入を止めたらいい
それから MS:=TMemoryStream.Create; を忘れている
でも、そのコードを見る限りは、Streamを使うよりは文字列のまま使った方がいいと思う
たぶん以下のと同じコードだと思うのだけど?
function LoadUniBi(const titleName: string; nagasa1: Longint): string;
var
wk:string;
Sz, n: integer;
begin
Result := '';
sz := length(titleName);
SetLength(wk,sz);
try
begin
n := 0;
while n < sz do
begin
wk[n+1+0] := titleName[n+1+1];
wk[n+1+1] := titleName[n+1 ] ;
Inc(n, 2);
end;
Result := WideCharToString(PWideChar(PChar(wk)+2));//先頭2byteをカット
end;
except
raise Exception.Create('メモリを確保出来ませんでした.');
end;
end;
>>427 変だと思うのは
PW := @s1;
これは具体的にどうしたいのでしょう?
あと良く知らないのだけどPDFファイルはバイナリも含むのではないかな?
だとするとLoadFromFileでは都合が悪い
Delphiで小さな実行ファイルを作ろう
http://pc.2ch.net/test/read.cgi/tech/1009080085/22 ファイルを読むのに
function readFileStr(fname:string):string;
を使って 位置を調べるのに Pos関数を使ってはどうでしょうか?
それとも改行は正しく入っている
>>429 うごきましたよ!
激しくありがとう。
冒頭のアドバイスで、コンパイル
できました。
ご提示いただいたコードもしっかり
うごきました。
感謝します。
>>430 アドバイスありがとうございます。
PW := @s1; は
WideCharLenToStrVarに文字列を
渡したいのです。
unicode>s-jis変換として。
PWがPwideCharというポインタらし
いので、stringsではまずいみたい
だったので。
私が読みたいPDFはバイナリも含んでます。
しかし、まだ、LoadFromFileしか分からなかったもので。
ただmemoに読んだ時に10行目の
'/Subject ('の先に#0があって
そこで読み込みが終わってしまうの
で、とりあえずイイカナ?
と妥協してしまってます。
ほんとは、/Subject (ギコギコ)の
部分も取り出したいのですが。
教えていただいたPos関数などを
使ってがんばってみます。
memoに張り付いている10行は
改行されてるみたいです。
フサさんありがとうございます。
ただ、問題はmemo.textから如何にして一部を取り出すかがわかんないです…
下検索の場合、
RichEditのヘルプにあるように始点と終点は特定できても、
その間にあるテキストを如何にして取り出すかがわかりません。
申し訳ございませんが誰かもう一度お願いします。
434 :
デフォルトの名無しさん:02/05/23 22:58
>>427 「イカのソース・・・」
やきそば?(w
しかも、レスの番号が死にな(427)だ。
435 :
デフォルトの名無しさん:02/05/23 23:37
某所で「ウニコード・UTF-16・Tfilestream」の質問してる
「ミカンの皮」っての、マルチポストだよネ?
ここで聞きまくってるのと。
436 :
デフォルトの名無しさん:02/05/24 00:14
Delphiで簡単に掲示板のようなcgiは作れますか?
>436
作れるが、当然Windowsのサーバ上でしか動かんぞ
>>433 簡単な方法。
Copy関数でMemo.Lines.Textの一部を取り出す。
これをループ。
439 :
デフォルトの名無しさん:02/05/24 00:18
Delphiで簡単に連番エロ画像ぶっこ抜きアプリは作れますか?
>>439 (事件の真相はこうです。警部殿。)
V
_________
|________| Z
||∧∧|| z (\_/)
|(,-Д-) Σ (・∀・ )
■∪∪■ ( )
(-_||∪∪|| | | |
(∩|| ̄ ̄|| (__)_)
質問させてください。
ファイルを扱うソフトを作りたくて、接続されている
ディスクドライブの一覧をComboBoxコンポーネント表示させたいのですが、
その方法を教えてください。
よろしくお願いします。m(_ _)m
442 :
デフォルトの名無しさん:02/05/24 02:19
delphi ML過去ログにありそうだから、そこも検索すれ。
つーかTDriveComboBoxでは駄目なのか?
>>442-443 Delphi MLという所にありました。
ここはかなり情報量が豊富ですね。
またわからない事があったらそこで調べてみます!(^^;
ありがとうございました!m(_ _)m
>>444 その様なコンポーネントがあったとは…。
さすがでるふぁい、かゆいところに手が届くようにできてるのですね!
今度からそれを使ってみます。
ありがとうございました!m(_ _)m
DelphiMLのアドレスくらいスレの最初に書いておいたほうがいいかも。
7に書いてあるじゃん!!
448 :
デフォルトの名無しさん:02/05/24 15:07
ファイル名が連番になっている
ファイル群を、順に読み込ませたい
のですが、ファイル名の番号が抜け
ていて、存在しないファイル名を
指定してしまった時に例外が出ます。
例外を出さずに、メッセージを
出して中断するにはどうしたら良い
のでしょう?
ご教示いただけないでしょうか?
以下がソースです。
begin
ShowMessage('連番ファイル名で値が最大のファイルを選択してください。');
if OpenDialog1.Execute then
begin
//ReadTextByStream(OpenDialog1.FileName,Memo1.Lines);
Fn1 := OpenDialog1.FileName;
Fn10 := LeftStr(Fn1,Length(Fn1)-19);
ShowMessage(Fn10);
Fn12 := 'log';
Fn0 := LeftStr(RightStr(Fn1,7),3);
ShowMessage(Fn0);
F := StrToInt(Fn0);
// ShowMessage(IntToStr(F));
while F >= 1 do
begin
Fn11 := IntToStr(F);
if F <= 99 then
Fn11 := '0'+ Fn11;
if F <= 9 then
Fn11 := '0' + Fn11
else
Fn2 := Fn10 + Fn11 + '.' + Fn12;
Memo1.Lines.LoadFromFile(Fn2);
begin
//ここでいろいろ処理。
end;
F := F-1;
end;
end;
end
if FileExitst(Fn2) then begin
Memo1.Lines.LoadFromFile(Fn2);
・・・
else エラーの処理
433で書いたのは終点ではなく始点から終点までの長さだったので、
Copy関数を使って取り出すことが出来ました。
どうもありがとうございました。
451 :
デフォルトの名無しさん:02/05/24 17:26
キャレット、又の名をカレットとも呼ばれるものについて質問です、
Edit等で出てくる 「|」形状のキャレットを変形させて■形状にしたくて以下のようにしました。
procedure TForm1.Edit1Change(Sender: TObject);
begin
CreateCaret(Edit1.Handle,0,Edit1.Font.Size-4,Abs(Edit1.Font.Height));
ShowCaret(Edit1.Handle);
end;
取りあえず、これでEdit1のフォントがMSゴシックだと、なんとなく変形できるのですが、
問題は、Editが画面上に大量にあるのです、大量にあるEdit全てにこの方法で書くのは
非効率的だと思うのですが、何か良い方法はないでしょうか。(本来は、最初に1回だけ
変更したら、フォーム内全てのキャレットが変更されて欲しかったですが・・・)
>>451 とりあえずイベントハンドラを1つで済ますことは可能だけど
>本来は、最初に1回だけ変更したら、フォーム内全てのキャレットが変更されて欲しかったですが・・・
このためには更に工夫が必要でしょう
>>432 var s1:string;
@s1
これは pascal文字列s1のアドレスです
AsciiZ文字列そのものが欲しいのなら
pChar(s1)
のようにそのまま型変換しなけれいけません
>>451 だからDelにはコンポーネントを作成する機能があると思うのだが…
もっと良い方法あるかもしれないし、毎回 CreateCaret/ShowCaret
していいのかも判らないけど
procedure TForm1.IdleProc(Sender: TObject; var Done: Boolean);
begin
if ActiveControl is TEdit then
with ActiveControl do
begin
CreateCaret(Handle,0,Font.Size-4,Abs(Font.Height));
ShowCaret(Handle);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnIdle:=IdleProc;
end;
456 :
お願いします:02/05/24 21:06
RichEditを使ってカラフルな表示をしようと思っています。
TCustomRichEdit.SelAttributes に載っているの例文の方法では
1行ごとにしか色付けができません。
複数行ではなく、
「赤色青色緑色」
を同一行に収めたいのです。
つまり↓のHTMLと同じことを再現したいのですが
<font color="#FF0000">赤色</font><font color="#00FF00">青色</font><font color="#0000FF">緑色</font>
どうやればいいんでしょうか?
Googleで検索してもよほど基本的すぎるのかどこにも載ってません。
>TCustomRichEdit.SelAttributes に載っているの例文の方法では
>1行ごとにしか色付けができません。
当然。
SelAttributesの説明をよく読め。
458 :
デフォルトの名無しさん:02/05/24 21:58
>>457 >当然。
だからどうしたらよいのですか?と聞いてるんですが・・・(汗
>>458 >だからどうしたらよいのですか?と聞いてるんですが・・・(汗
2行目も読んだ方が良いぞ。
460 :
デフォルトの名無しさん:02/05/24 22:18
>2行目も読んだ方が良いぞ。
言っている意味がよく分からないですが・・・(汗
>>460 SelStart / SelLength で選択してから SelAttributes
462 :
デフォルトの名無しさん:02/05/24 22:43
どういうこと・・・?
神よ、なぜ456に「応用力」というものをお与えにならなかったのですか?
>>456 例文に載ってる方法を実行する時にボタン押すよね?
そのボタン押す前に マウスで文字をドラッグしておいてみて
465 :
アナザヘヴン:02/05/24 23:12
どうも逆ギレっぽい反応がイヤなのですが・・・(汗
466 :
デフォルトの名無しさん:02/05/25 00:48
s:TStringList;
s:=TStringList.Create;
s.Add('a');
とやるとコンパイルエラーになります(オーバーロード関数Addが定義されていません)
書籍にはこう書いてるのですが、何が悪いのでしょうか?
また、s.Appendとかs.AddObjectとやると、未定義の識別子Append(AddObject)と表示され
やはりコンパイルエラーになります。これもわかりません。
467 :
デフォルトの名無しさん:02/05/25 00:52
>>466 「S.」と打って、しばらく眺めてれ!
答えが見えて(略)
>>467 確かに一覧には出てきませんが、書籍にはこのようなコードが載ってるんですよ。
(Addは一覧にあるけど、パラメーターの型が違う)
>>466 中途半端なコードじゃなくその関数を丸ごと書いてみたら?
どうも他の部分に間違いがあるような気がする
>>467 >>469 お騒がせしました。
with Form1 do の中で実施していたのですが、
Form1の中にs(TMenuItem)というメンバーがあったのが原因でした。
レスありがとうございました。
471 :
デフォルトの名無しさん :02/05/25 02:07
TBrush.Assignって実はAssignToなんでしょうか?
----Delphi ヘルプより-----
Assign メソッドは,ブラシの内容を別のブラシにコピーします。
procedure Assign(Source: TPersistent); override;
説明
Assign メソッドは,ブラシのプロパティを別の TBrush インスタンスにコピーします。
-----
ソース見てもそんな感じなんですが、TResourceManagerってぇのがよく分からん。
お願いします。
>>471 Dist.Assign(Source) = Source.AssignTo(Dist)
>>472と考えてもいいと思いますが、使う時はAssignだけにするべきです。
Assignは内容をコピーするメソッドですが、自分が新しくクラスを作った時、
Assignだけだと、自分のクラスのAssignは定義できても、他のクラスのAssignを書き換えるわけに行かないので
「自作←他」方向のコピーしか実装できないことになります。
そのためにAssignToはあります。
他のクラスのAssignで、有効な組み合わせが見つからなかった時は、自作クラスのAssignToを呼んでくれるので、
「他←自作」方向のコピーが実装できます。
TResourceManager.AssignResourceをよく読めてませんでした。
普通にAssignでしたね。お騒がせして済みません。
それにしてもヘルプの文はややこしい・・・。
476 :
デフォルトの名無しさん:02/05/25 22:47
TStringList.Delete( Count );
とすると、行が削除されるのですか?
たとえば、
あ
い
う
が、あるとすると、
TStringList.Delete( 1 );
を実行したら
あ
う
となるんですか?
または、
あ
う
となるんですか?
自分で試せアフォ
>>476 Memo1.Assign(aStringList)とかして
自分で実験して見れば〜
>>476 質問する前に、どうして実験しないのか、のほうが不思議です。
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Clear;
Memo1.Lines.Add('あ');
Memo1.Lines.Add('い');
Memo1.Lines.Add('う');
Memo1.Lines.Delete(1);
end;
め ん ど く さ い か ら で す
Σ(゚Д゚)
>476
とっととしねよ
>>476 476 の書き込みをするより、479 のコードを書くほうが簡単だと思うが?
あぁ、そうか、質問の内容からすると、コードを書けなかったのね。
こ れ ぐ ら い で 死 に ま せ ん
Σ(゚Д゚)
484は
476じゃ あ り ま せ ん
Σ(´Д`ズガーン
488は
476じゃ あ り ま せ ん
476は
476じゃ あ り ま せ ん
すいません。自分で実験すればよいことをわざわざ質問してしまいました。
申し訳ありません。
もう476を名乗る書き込みはやめてください。
神様、どうして
>>488をコンパイルエラーとなさらなかったのですか?
彼は人間としての仕様を十分に満たしてはおりません。
停まるだけならまだかわいいものですが
>>488は自身のバグにより
人々に多大な迷惑をかけております。
せめて、せめてリンクエラーにして下さっていれば・・・。
おお、神よ・・・。
ただし結局どっちなのかだけは答えてください。
493 :
デフォルトの名無しさん:02/05/25 23:05
----------------- 沈静 -----------------
もうわかったから。おやすみね
[エラー]
>>476:未定義の識別子 : '手抜き野郎'
[致命的エラー] project.dpr(476): '
>>476' ユニットは自助努力できませんでした。
おはようございます。
特定の他のアプリのエディットボックスに、
文字列を自動的に入力するようなアプリを作ろうとしています。
これが初めて作るプログラムというレベルです。
Googleしながら一晩試行錯誤した結果、
FindWindowExで、狙ったエディットボックスのウィンドウハンドルを取得する事はできた…はずなんですが、
それから先がどういう関数を使っていいのかさっぱりわかりません。
どうかご教授ください。
お願いします。
>>497 ありがとうございます。
早速こんな感じで書いてみたのですが、
コンパイルエラーがでます。
どこをどう直すべきでしょうか…?
procedure TForm1.Button2Click(Sender: TObject);
var
hForm,
hEdit: HWND;
begin
hForm:=FindWindow(nil,'Form1');
hEdit:=FindWindowEx(hFrom,0,'Edit',0);
SendMessage(hEdit,'あいうえお',0,0)
end;
_____________
∧,,∧ /
ミ,,゚Д゚彡 <
>>63みてよし
U つ∀ \____________
〜ミ ミ ┴
∪''∪
>>499 できた、できました!
ありがとうございましたm(_ _)m
4GBクラスのファイルをオープンしてファイルサイズを取得したいんですが、
FileSize()関数では正しい値が得られません。
API関数のGetFileSize()を使わずに正しい値を得る方法はありますか?
また、構造体のフィールドにpCharを使用した場合に、
何か不具合が起こることはありますか?
>>502 ありがとうございます。
後半の方は、メモリにゴミがたまりやすくならないか、ということです。
でもキチンと破棄すれば大丈夫ですよね。
>>503 >ゴミがたまりやすくならないか
???
CPUが確率論的にどうさしてるならともかく、そんなの貴方次第。
溜まるんじゃなくて、溜めてるの
Delphi のプロジェクトを CVS でバージョン管理している人いる?
>>508 そもそもなんで.jpなんて作る必要があるの?
本家sourceforgeでいいじゃん
StringGridで行数を動的に増やしていくのって
どうすればいいんでしょうか…
最後の行に入力されたら一行増やすってのをやりたいんですが
ミ ゚Д゚彡,,,RowのCountを増やす。
あ、やっぱり自分で書くしかないんですね
プロパティにあるかと探してました
失礼しますた
CVS の使い方がいまいちわからん。
IDE で開くと、書き込み禁止になっていて更新できないじゃん。
519 :
デフォルトの名無しさん:02/05/27 20:21
CVSってな〜に...?^^);・・)?ロ_ロ)?
>>519 検索しようね。
後、PC-UNIXに興味を持ってもおもしろい。
>>518 いま、ちょっとVSS使っているから、あたまがごっちゃになっているんだけど。。。
ちゃんとチェックアウトしてる?
チェックアウトすると書き込み可能な状態になるはずだよ。
なんかオプションもあったかも。
つか、WinCVSを日本語化して使うと楽チンかもよ。
そういやCVSのスレってないね。
ありそうなもんだけどね。
CVS を使う時に、まずマスターのフォルダからリポジトリにインポートしますよね?
で、作業フォルダにチェックアウトして更新していくと思うんだけど、
最初のマスターファルダのファイルはどうすればいいの?
削除してしまってOK?
>>525 削除してもいいし、その上からチェックアウトしてもよい。
誰か WinCVS を使い倒すスレ立ててくれ。
530 :
デフォルトの名無しさん:02/05/28 09:43
アドベンチャーゲームのようなシステムを作ろうと思っているのですが、
DirectXを使わずにFormをフルスクリーンにする方法が分からず困っています。
EnumDisplaySettings, ChangeDisplaySettingsとSetWindowPosなどで
出来るかと思ったのですが、画面の解像度は切り替えることが出来ても
Formがフルスクリーンになりません。
どのようにしたらフルスクリーンにできますか?
>>530 BorderStyle := bsNone;
WindowState := wsMaximized;
にすればフルスクリーンになります。
>>531 ありがとうございます。さっそく試してほぼ思い通りの動作ができましたが、
フルスクリーンにしたときだけMainMenuを消すためには、
全てのMenuItemに対してVisibleをFalseにするしかないでしょうか。
>>532 メインメニューの名前が MainMenu1 とした場合、
消したい時、
Self.MainMenu := nil;
表示したい時、
Self.MainMenu := MainMenu1;
>>533 そうか、nil入れれば消えるんですね。ありがとうございました。
アドベンチャーゲームができるには先が長そうだな・・・
まぁ、がんがれ (´ー`)y-~~~
536 :
デフォルトの名無しさん:02/05/28 10:33
nil って何?
nullと同じ意味?
Caption := IntToHex( Integer(Pointer(nil)) ,8);
先ほどフルスクリーンについて質問した者ですが、
解像度の変更で分からないことがあります。
元の解像度に戻すとき、
ChangeDisplaySettings( nil, 0);
とすると、「変数実パラメータと変数仮パラメータとは同一の型でなければなりません」
と言われます。
それで、
ChangeDisplaySettings( DEVMODE(nil), 0);
や
type PDEVMODE=^DEVMODE
ChangeDisplaySettings(PDEVMODE(nil),0);
などを試したのですが、どれもうまくいきません。
nilを渡すにはどうすればいいでしょうか。
また、EnumDisplaySettingsの2番目の引数に
ENUM_CURRENT_SETTINGSが渡せない(定義されていないと言われる)のですが、
この方法で現在の設定を取得することはできないのでしょうか。
>>535 がんがります
>>539 第一パラメータは参照を渡しますから
ChangeDisplaySettings(PDEVMODE(nil)^ , 0);
でも、解像度の変更はそれでやらない方がいいよ。
だってディスクトップに整列されたアイコン崩れてしまうでしょ?
>>540 自分がデスクトップのアイコンを自動整列にしてるんで、その辺無頓着でした。
ただ、そういうのが気になる人ならアイコン整列用ソフト入れてるんじゃないかとも
思います。
…それ以前に解像度変更するための他の方法知らなかったりしますが。
過去ログで昔見かけたような気がするので検索してみようと思います。
解像度を変更しなくとも、アドベンチャーゲームなら 640x480のオフスクリーン画面を
画面改造度にあわせて拡大して描画した方が良いのでは?
というような意味です。
>>541 ・遅くなる
・画像が多少汚くなる
この2点が気にならない程度に収まるならそれでもいいんですけど…
実際にその方法でやってるゲームを見たことが無いので、
やはり何か問題があるのではないでしょうか。
ただ、その方法もアリだとは思うので、いちおう実験してみようと思います。
問題なければその方法でやるかも。
とりあえず次のレス書く前に
>>545のスレを熟読しようと思いました。
スレ違いでごめん。
CVSの本を見てたら、開発側の人たちがゴタゴタしているようなんだけど、
今は大丈夫なの?
548 :
デフォルトの名無しさん:02/05/29 14:37
DirectXで申し訳ないのですが、
DXImageList1.Items.Items[0].Draw(DXDraw1.Surface,100,100,0);
と、本当は書きたいのに、なぜか何も描画されず、
DXDraw1.Surface.Canvas.Draw(100,100,DXImageList1.Items.Items[0].Picture.Graphic);
と、この一行のみ置き換えたら描画されるようになりました。
しかし、色抜きをしたいので是非もとの方法を使いたいと思っています。
どうしてしたの方法では描画でき、上の方法では描画できないのでしょうか?
わからない方教えてください。
それDirectX?
何かのラッパーライブラリ?
ヽ(`Д´)ノ戻るよ!ウワァァン
553 :
デフォルトの名無しさん:02/05/29 18:24
windowsのエクスプローラの左側のようにフォルダを表示するコンポーネント
どっかにないですか?
Del6使え
Del5じゃ無理?
>>553 SHBrowseForFolder ではダメ? 使い方は小さな実行ファイルを作ろうスレに
>>548 わからない方教えてください。
ぜんぜんわかりませんが。
>556 ごめんなさい15レス目あたりでチンプンカンプン>小さな実行スレ
僕も全然わかりません
わたしも分かりません。
拙者も如何とも解せぬなり。
よかったね。
(@´ー`@)なっちもわからんべさ。
おいらもサッパリわかりませんです。。。
566 :
デフォルトの名無しさん:02/05/29 21:05
ファイルをゴミ箱に移すときSHFileOperationをつかいますが、
windowsの設定でゴミ箱に移すとき確認するようにしてる場合、
SHFileOperationが実行されると「ゴミ箱に移しますか?」と出るのですが
これをwindowsの設定関係なしで出ないようにする方法か、出ても
ユーザが「はい」「いいえ」のどちらを選択したか知る方法はないでしょうか?
FOF_NOCONFIRMATION指定しても駄目?
FOF_NOCONFIRMATIONをflagに追加すれば全て許可されると分かりました
申し訳ない..
>>553 Shell Component Library
>550
いただいたよ.サンクスコ.
てか、これ全部自分で打ったの?がんばったねえ.
>>553 有難うございます!! 恐らく探していたのはこれのような気がします!
...
......リンク切れてた...
ヘルプファイルですが、いくつかミスってるので、折を見て修正します。
本当はプログラマーズガイドをやろうと思ったのですが、
目次を眺めただけで圧倒されてあきらめてしまいました・・・
Borlandは一生WinHelpのままなのだろうか?
結局出来なかったのですが大変参考になりました。
ありがとうございました。
ヘルプミーです!
間違えてDelphiをゴミ箱に捨ててから、元に戻したら、
コンポーネントパレットがFramesとSamplesタグの物しかなくなってしまいました!
どうしたら元に戻りますか?
コンポーネントをインストールとかですかね、やり方わからないんですが。
詳しい方々、どうか助けてください。
>>574 そーゆーときゃ素直に再インストールしようよ
>>575 そうですか…DLすると4時間くらいかかるので、かなり鬱です。。。
ま、仕方ないか…。
ありがとうございました。
>>576 次にダウンロードしたら、ダウンロードした時のインストーラは残しておけよ
ついでに忠告しとくと、レジストリもD6の部分のバックアップを取っとけ
ただし、どうやったらいい? とか聞くようなレベルならそれは辞めとけ!
捨ててみたけど再現しないぞ(゚Д゚) ゴルァ
パッケージ一覧のチェックが外れてるか、パッケージ一覧から消えてるか、
パレットの設定で非表示になってるとか、そもそもbplファイルを捨てて戻してないとか、
とかとか・・・
>>578 もう消しちゃいましたけど、いつもゴミ箱は清潔に保っているので、bplがゴミ箱に残っていた事は無いです。
これから寝るんで、その間にDLが終わっている事でしょう。
580 :
デフォルトの名無しさん:02/05/30 12:43
昼寝か…
>>424 >>429 参考にさせていただきました。
この、ソースに、'\'記号対策を
盛り込むとしたら、どんな感じ
にすればいいでしょうか?
試してみたところ、名や山、小など
の文字がある部分で、化けるので
バイナリエディタで確認すると
\が入っていたので。
function LoadUniBi(const titleName: string; nagasa1: Longint): string;
var
wk:string;
Sz, n,m: integer;
begin
Result := '';
sz := length(titleName);
SetLength(wk,sz);
try
begin
n := 0; m := 0;
while n < sz do
begin
if (titleName[n+1]='\')and(titleName[n+2])='\') then begin Inc(n);continue;end;
wk[m+1+0] := titleName[n+1+1];
wk[m+1+1] := titleName[n+1 ] ;
Inc(n, 2); Inc(m, 2);
end;
Result := WideCharToString(PWideChar(PChar(wk)+2));//先頭2byteをカット
end;
except
raise Exception.Create('メモリを確保出来ませんでした.');
end;
end;
Delphiにて正規表現コンポーネントを作成中ですが需要ありますか?
>>583 Perl互換で外部DLL必要無しなら需要あります。
awk互換なら
>>584のがいい出来なので需要ありません。
586 :
デフォルトの名無しさん:02/05/30 16:59
>>582 ありがとうございます。 試させていただきました。 山や小などは良いのですが 輸や名、館などはまだ化けました 作は屏に、木は杜に、酒は岑に化け ました。 一筋縄では逝かないってことでしょうか。
>>586 じゃ、文字化するコードの16進ダンプを取ってみて
>>587 文字化けは、たとえば
元の文字列を
横浜作業所(現場名)とすると
16進は
FE FF 6A 2A 6D 5C 5C 4F 5C 5C 69 6D 62 40 FF 08 73 FE 58 34 54 5C 72 FF 09
で、化け方は
横浜屏???????)
16進は
89 A1 95 6C 9B A0 3F 3F 3F 3F 3F 3F 3F 81
こんな感じです。
他の文字の16進は
木は67 5C
輸は 5C 8F
酒は5C 91
こんな感じでした。
>>583 TComponentを継承しておらずVCL非依存ならほすぃ
どうやら文字2バイト目の5Cを忘れてたみたい こんな感じでどう?
function LoadUniBi(const titleName: string; nagasa1: Longint): string;
var
wk:string;
Sz, n,m: integer;
begin
Result := '';
sz := length(titleName);
SetLength(wk,sz);
try
begin
n := 0; m := 0;
while n < sz do
begin
if (titleName[n+1]='\')and(titleName[n+2])='\') then begin Inc(n);continue;end;
wk[m+1+0] := titleName[n+1+1];
wk[m+1+1] := titleName[n+1 ] ;
if (titleName[n+2]='\')and(titleName[n+3])='\') then Inc(n);
Inc(n, 2); Inc(m, 2);
end;
wk[m+1+0] := 0;
wk[m+1+1] := 0;
Result := WideCharToString(PWideChar(PChar(wk)+2));//先頭2byteをカット
end;
except
raise Exception.Create('何かエラー');
end;
end;
書式付きテキストと画像を表示したいのですが、とりあえず下のような方法を思いつきました。
・RichEdit2.0 のラッパーコンポーネント(TRichEdit98 など)を利用する
・IE コンポーネントを利用する
・独自コンポーネントを作成する
Delphi 6 Personal の環境で一番簡単に実現できる方法はどれでしょうか?
また、何か他によいコンポーネントなどをご存じでしたら、教えてください。
>>550 ちらっと見たけど凄くよさげ。今度じっくり読ませてもらうよー
ありがとう
596 :
デフォルトの名無しさん:02/05/30 23:06
>>594 書式付きテキストってRichTextだよね?
だったらTRichEditだね。
IEはHTMLだから関係ないよ。
>>596 レスありがとうございます!
> 書式付きテキストってRichTextだよね?
言葉足らずで申し訳ありません・・・
フォントの書体や色などの装飾を指定して表示できればフォーマットはなんでもいいのです。
RichEdit が簡単そうなのですが、文章中に画像を表示する方法がネックになっていて、困っています。
何かよい方法はないでしょうか?
>>598 部分的に文字の色を変えたりしたいので、Labelはちょっと・・・
HTMLにしる
>>601 HTML を表示するには IE コンポーネントを利用することになりそうですが、
Delphi で IE コンポーネントを利用するとメモリリークすると聞いたのですが、本当ですか?
他の軽いコントロールでHTMLを表示できれば一番いいんですけど・・・
Σ(゚Д゚ )y-~~ ソウナノ!?
>他の軽いコントロール
自作しる!
(ノД`。)
606 :
デフォルトの名無しさん:02/05/31 00:09
>Delphi 6 Personal の環境で一番簡単に実現できる方法はどれでしょうか?
答え:諦める
607 :
デフォルトの名無しさん:02/05/31 01:25
>>599 なんで?書式付きテキストといったらリッチテキストが最初に思い浮かぶけど。
> IEはHTMLだから関係ないよ。
ここの事だと予想。
>>602 RichEditとブラウザなら、ブラウザの方が表示速度は断然速い。
メモリリークの話はしらないけど、Windowsに付いてるモニタツール
使ってメモリを解放してるかしれ調べればよい。
610 :
デフォルトの名無しさん:02/05/31 01:33
>>608 なんでそこがひっかかるのか全く分からん。
書式付きテキスト=リッチテキストを表示するならRichEditだから、
IEコンポーネントを使っても意味がない、IEはHTMLを表示するために使うべき
と言う意味なんだけど。
RichEditやIEコンポが嫌なら自前でTextOutするコンポ作れよ。
612 :
デフォルトの名無しさん:02/05/31 02:03
>>610 あのな、HTMLってのは書式付きテキストを包括してるっつー話なんだよ。
>>609 >RichEditとブラウザなら、ブラウザの方が表示速度は断然速い。
そうなの?WinHelp>>>HTMLHelpなので、RichEditのほうが速いと思てたヨ。
_____________
∧,,∧ / RichEditの方が早いに
_ ミ,,゚Д゚彡_< きまっとる。。。と思われなんだけど。。。
.=| |==U==U=| |= \
| |@ミ ミ .| |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| | ∪''∪ | |
| | | |
リッチエディットは埋込OLEを使えば絵でも埋め込めるそうですが
Delphiから使うにはそれなりの努力が必要なようです
>>613 RTFを独自形式にコンパイルしてるからでしょ。
>>593 ありがとうございます。
ただ
wk[m+1+0] := 0;
wk[m+1+1] := 0;
この部分で
Charとintegerには互換性が
ありません。
と出てしまうのですが。
wk[m+1+0]:=#0かな
>>618 コンパイル通りました。
しかし、実行させると
ページ違反が出てしまうのですが。
621 :
デフォルトの名無しさん:02/05/31 14:00
>>582 >>593 それから
多かった')'は取りました。
(titleName[n+2])='\')を
(titleName[n+2]='\')
としてみました。
>>620 2つめの wk[m+1+1] := 0; を消すとか SetLength(wk,sz+2); とか
もう少し自分で考えてみるとか
623 :
デフォルトの名無しさん:02/05/31 14:33
>>622 ふたつとも、試させていただきましたが、やはり、ページ違反が出て
しまいました。
624 :
デフォルトの名無しさん:02/05/31 15:02
>>622 ヘルプにWideCharToStrVar手続きがあったので、
Result := WideCharToString(PWideChar(PChar(wk)+2));//先頭2byteをカット
の部分を、
WideCharToStrVar(PWideChar(PChar(wk)+2),dest1);
Result := dest1;
としてみたのですが
ページ違反は変わりませんでした。
どのように直していけば良いのでしょうか?
>>624 エンコード方式が良く判らない
// 横 浜 作 業 所 ( 現 場 名 )
// 6A2A 6D5C 4F5C 696D 6240 0028 73FE 5834 540D 0029
//FE FF 6A2A 6D5C5C 4F5C5C 696D 6240 FF08 73FE 5834 545C72 FF09
\ (#$5C)が2つ入ると \ 一つという約束の他にも \が絡んだ別の規則がありそう
それと#0が入った場合の対策もある様子
という事で、どういうエンコード名なのかそれだけ調べてみて
627 :
デフォルトの名無しさん:02/05/31 15:33
Delphiのフォームファイル .dfm を Delphiで作ったプログラムから読込むと
object Label1: TLabel
Left = 12
Top = 12
Width = 38
Height = 12
Caption = #12418#12376#12418#12376
end
こんな感じで日本語の部分が #〜のように変換されています、これを
漢字として表示させるにはどのようにいたすればよろしいでしょうか?
>>628 早々にお返事ありがとうございます。
それは、ちょっと違うと思うのですが・・・。困った・・・。説明が下手で申し訳ありません。
1.
Delphiで新規にフォームを作成して、ラベルでも貼り付けてから
Captionへ'日本語'とか設定して保存して下さい。
2.
保存した Form1.dfm を メモ帳等で開いても同様に日本語が #nnnnnに変換されて
いることが確認できると思います。
これを メモ帳でなくて、自分で作成したプログラムから開いて#nnnnnではなく、
日本語として見たいと言うことなのです。
630 :
デフォルトの名無しさん:02/05/31 15:47
>>626 ありがとうございます。
utf-16のbig endianの様です。
>>629 ついでに、オマエもエンコード名調べろや
ミ ゚Д゚彡
テキストで以下のようなものを
XXX.regと名前をつけて保存、実行というか[結合]をしてミレ
----
REGEDIT4
[HKEY_CURRENT_USER\Software\Borland\Delphi\6.0\FileFormat]
"DFMFormat"=dword:00000000
----
>>630 いや、だから UTF-16を8bit文字に収まるようにエンコードしてるようだけど
そのエンコード方式を調べてみてって意味です。
636 :
デフォルトの名無しさん:02/05/31 16:14
>>634 ソースを良く見て、何をしてるのか読みとって下さいって事ですね。
うーん、難しそう。
>>634 >>625 を見る限りは
UTF16に変換して、
上位バイトが 00 なら $0029->$FF09 $0028->$FF08
そして、C言語の \ エスケープを加えたようです
たとえば $002D はどうなる? というのが判らないのです。
とりあえず
>>625 だけは変換出来る事を確認
(なお WideStringはAnsiStringに代入すれば自動的にUnicode->ShiftJisされます)
function WEcvt(const s:String): WideString;
var Sz, n,m: integer;
var Endian:boolean;
var p:pChar;
function getb:Char;
var w:string;
begin
Result:=p^;
if Result=#0 then exit;
inc(p);
if Result='\' then begin
case p^ of
'b': Result:=#$08;
'a': Result:=#$07;
'f': Result:=#$0C;
'r': Result:=#$0D;
't': Result:=#$09;
'v': Result:=#$0B;
'n': Result:=#13;
end;
inc(p);
end;
end;
function getw:WideChar;
var c1,c2:Char;
begin
Result:=#0;
c1:=getb;if c1=#0 then exit;
c2:=getb;if c2=#0 then exit;
if Endian then Result:=WideChar((ord(c1) shl 8)+ord(c2))
else Result:=WideChar((ord(c2) shl 8)+ord(c1));
if Result=#$FFFE then begin Endian:=not Endian;
Result:=#$FEFF;
end;
end;
var i:Integer;
var w:WideChar;
begin
i:=0;
Endian:=false;
p:=PChar(s);
Setlength(Result,Length(s));
repeat
w:=getw;
if w=#$FEFF then continue;
inc(i);
Result[i]:=w;
until w=#0;
SetLength(Result,i);
end;
>>619 ありがとうございます!
HTML は便利なのですが、IE コンポーネントの評判があまりよくないようなので、
とりあえず TRichEdit に OLE 機能を追加したコンポーネントを作成してみたいです。
Delphi の RichEdit は 1.0(?) らしいので ついでに RichEdit2.0 に対応させたいのですが、
どこかに適当なサンプルなどはないでしょうか?
RichEdit98 のソースを見たのですが、膨大すぎてさっぱり分かりませんでした・・・
なにしろ Delphi 使うの初めてなので (ノД`。)
640 :
デフォルトの名無しさん:02/05/31 19:44
>>638 ありがとうございます。
しかし、まだ一部の文字で失敗しています。
東神田一丁目ビル(現場名)
FE FF 67 71 79 5E 75 30 4E 00 4E 01 76 EE 30 D3 30 EB FF 08 73 FE 58 34 54 5C 72 FF 09
が
東神田
93 8C 90 5F 93 63
と'一'のところで切れました。
それから、
鹿児島市立図書館(現場名)
FE FF 9E 7F 51 50 5C 5C F6 5E 02 7A CB 56 F3 66 F8 99 5C 28 FF 08 73 FE 58 34 54 5C 72 FF 09
が
鹿児島市立図書? (現場名)
8E AD 8E 99 93 87 8E 73 97 A7 90 7D 8F 91 3F 81 69 8C BB 8F EA 96 BC 81 6A
となり、館の文字が化けました。
また、半角英字が、含まれると
その文字含め、以降が切り捨てられました。
という状態でした。
はじめまして。
(1) Delphiでは、VBのようなシステム予約定数はないのでしょうか。
(VBの例)
vbCrLf → 改行復帰 (文字コード定数)
vbKeyF1 → [F1]キー (キーコード定数)
vbBlack → 黒 (色定数)
(2) Delphiでは、複数行まとめてのインデント変更はできないのでしょうか?
(VBのIDEの[Tab]/[Shift] + [Tab] に相当する機能)
(3) VBでは、定数の配列は作れません(変数として生成することは当然可能)が、
Delphiでは可能でしょうか?
(4) VBでは、オブジェクトの「型」名のプリフィクスを付ける命名(いわゆる、
「ハンガリアンスタイル」)が推奨されますが、Delphiで推奨される命名
規約は何かありますか?
(この質問、袋叩きにされそうで、ちょっとコワイ・・・)
以上、よろしくお願い致します。m(_ _)m
>>641 (1) ある
(2) できる
(3) できる
(4) VCLに合わせる感じにはなってる
>>640 その 東神田一丁目ビル(現場名) と鹿児島市立図書館(現場名) に対応しました
しかし、これはどういう変換なんでしょう? \エスケープかと思ったら #0を平気で含んでるし
function WEcvt(const s: AnsiString): WideString;
var Sz, n: integer;
var Endian:boolean;
var p:pChar;
function getb:Char;
begin
Result:=p^;
if n>=Sz then
exit;
inc(p); inc(n);
if Result='\' then begin
Result:=p^;
case p^ of
'b': Result:=#$08;
'a': Result:=#$07;
'f': Result:=#$0C;
'r': Result:=#$0D;
't': Result:=#$09;
'v': Result:=#$0B;
'n': Result:=#13;
end;
inc(p);inc(n);
end;
end;
function getw:WideChar;
var c1,c2:Char;
begin
c1:=getb; c2:=getb;
if Endian then Result:=WideChar((ord(c1) shl 8)+ord(c2))
else Result:=WideChar((ord(c2) shl 8)+ord(c1));
if Result=#$FFFE then begin Endian:=not Endian;
Result:=#$FEFF;
end;
end;
var i:Integer;
var w:WideChar;
begin
Sz:=Length(s);
i:=0;
n:=0;
Endian:=false;
p:=PChar(s);
Setlength(Result,Sz);
repeat
w:=getw;
if w=#$FEFF then continue;
inc(i);
Result[i]:=w;
until w=#0;
SetLength(Result,i);
end;
プロシージャや関数から途中で抜けるにはどうしたらいいですか?
C言語のreturnやBASICのexit subみたいな動作です。
645が関数でExitを使ったとき
Resultへの代入を忘れてまた質問してくるのに500ウォン
>>641 (1)
vbCrLf: Sockets.pasかIBUtils.pasにCRLFが定義されている
vbKeyF1: VK_F1
vbBlack: clBlack
(2)
デフォルトの配置だとCtrl+Shift+I, Ctrl+Shift+U
(3)
ヘルプの「配列型定数」参照
(4)
VCLのソースを参照。
650 :
デフォルトの名無しさん:02/05/31 23:46
>>Del子
つーか、いきなり大風呂敷広げてricheditだの言ってるくらいなら、
メモ帳あたりから始めろって思うのはオレだけ?
「初心者だから分からないんです」って堂々と、ここでほざくことに
なんの意味があるの?
構って系の人ですか?
∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ´∀`)<. Delモナーがどんな厨房疑問でもやさしく答えます。
( ) .| Delモナーは時に私であり、時には別の人。
| | | | 他のスレに書き込んで罵倒される前に、まずここで質問しよう。
(__)_) \_________________________
>>650はなんでそんな熱くなってるの?って思うの俺だけ?
ウワー ダサ・・・
とりあえず、どうでもいい書き込みはsageろよ禿
656 :
デフォルトの名無しさん:02/06/01 00:04
(4)
VCLを見た感じ
メンバ変数は全部F〜、ローカル変数はプレフィクスなしの分かりやすい名前、
列挙型にはプレフィクスつけるって感じ?
コンポーネントの名前ってどうしてる?
Del4プログラミング技法には、Label→lbl、Edit→edって感じで
プレフィクスつけるのが標準みたいに書いてあって、俺ずっとそうやってるけど。
lblHogeとか、pnlHogeとか。
だから、Button1とかのまま書いてる人のソースってすげえ読みづらい・・・。
>>649 sLineBreak の方が、プラットフォームに依存しないからなおよい。
標準で System に定義されてるしね。
でも確実に CR + LF にしたい場合には #13#10 が無難。
GExpertsのソースだとFを大文字じゃなくて小文字で書いていて(fHandle←みたいな感じ)
わりと見やすいと思った。
コンポーネントにプレフィックスは付けたことないなぁ。
みんな付けてるのだろうか。
lblHogeならHogeLabelにするな。
>>644 \エスケープかと思ったら #0を平気で含んでるし
まえの話のながれからすると pdf ファイルの文字列だと思われ。
#0 はなくて、ファイルイメージは '0' という文字のアスキー
コード $30 が入っていると思われ
pdf ファイルの仕様書に、文字エンコ―ディングときの backslash の
エスケープ文字としての使用法にすべて書いてある。
function pdfStrToStr(s:string):string;
var
ss:WideString;
rs,s1,s2:string;
i:integer;
begin
i := 1;rs := '';ss := '';
while i <= (Length(s) div 2) do begin
s1 := UpperCase(s[i*2-1]+s[i*2]);
if s1 = '5C' then begin
s2 := UpperCase(s[i*2+1]+s[i*2+2]);
if s2 = '5C' then begin
rs := rs+'5C';
inc(i);
end else
if StrToInt('$'+S2) > $65 then begin
rs := rs+IntToHex(StrToInt('$'+S2)-$65,2);
inc(i);
end;
end else
rs := rs+s1;
inc(i);
end;
for i := 1 to (Length(rs) div 4) do
ss := ss + WideChar(StrToInt('$'+rs[i*4-3]+rs[i*4-2]+rs[i*4-1]+rs[i*4]));
result := ss;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
//s := '9E7F51505C5CF65E027ACB56F366F8995C28FF0873FE5834545C72FF09';
s := '6771795E75304E004E0176EE30D330EBFF0873FE5834545C72FF09';
s := pdfStrToStr(s);
Memo1.Lines.Add(s);
end;
私もコンポーネントにはプレフィックス付けますね。
Edit→edt だけど。
俺はつけないなぁ。
プレフィックスは列挙型につけるだけ。
変数名は間違えればコンパイラが怒ってくれるので付けない
列挙型には付ける。コンポは名前が重複しやすいので、付ける。
"住所"というキャプションのラベルと住所の入力欄なら
edt_Addressと lbl_Address とか。
命名法の議論は不毛なり ← これ定説
>>665 別に議論じゃないと思うけど。
各々が「自分はこうしてる」って言ってるだけ。
>>665-666 命名法の議論は不毛なり ← これ定説
↓
命名法の議論は不毛な争いに発展することが多い ← これ定説
あれはサイババの勝手なんですよー。定説ですよー← これ定説
Delphi挑戦します。目標シミュレーションゲームです。
スキルは0。鬱。
とりあえず絵を表示させてキー入力で動かしてみたいと思います。
スレ違いでしたらすいません。
>>670 ありがとうございます。
俺RPGツクールやってたんですが、いろいろ兆戦したいということで
Delphiいじってみようと。
それではそのスレにこっそり移ります。
672 :
VB→Delphiです:02/06/01 03:26
VBには、テキストファイル(中身はCSV)をデータベースとして接続できる
みたいですが、DelphiはCSVをデータベースとして、SQLを利用するみたいな
事は出来るんでしょうか???
もしかしたら、超恥ずかしい質問をしているのかもしれませんけど…
今、EXCELで作成したどでかいCSVファイルがあって、VBAだとめたくそに重く
VBでオンメモリで全部読み込んでしまって、検索は二分木法とか、1番目から
シーケンシャルに比較していくという、旧タイプのコードを書いてたんです
が…
時代遅れが!と笑わず、このCSVをDelphiでDB的に扱うにはどうしたらいい
ものか、お知恵を拝借させて下さい。
673 :
デフォルトの名無しさん:02/06/01 04:44
DELPHIで作ったアプリって最小化の動作がなんかおかしいよ。
あほなの?
おまえがね
>>672 1、CSVファイルをBDEに取り込む・・・・・・・・・SQLも使用可
2、CSVのまま扱うdbコンポーネントを探す・・SQLは無理
3、ExcelをADOで・・・・遅いしVBAがマシかも
>>673 俺のVCLなしで作ったアプリ見ても同じことが言えるかな(ゲラゲラ
>>676 Delphiでそんなもん作ってる時点でDQN。
素直にC使えや。
APIだけで書くならどの言語だって同じように手間かかる。
なら別に好きな言語で書いていいやん。
そのせいで誰かが迷惑するんでなきゃね。
>>677 今時、CでOOPできるかよ(ゲラゲラ
各スレで「〜してる時点でDQN」って書いてる人は同一人物とおもわれ
人物特定したがってる時点でDON
>>679 過去から永劫未来まで無理だと思うのだが。
だ が そ れ が い い 。
>>679 OOP=クラス
って言うのも早計だけどな。
685 :
ななし@641です:02/06/01 12:42
>>642-643 >>648 コメントを頂いた方々、ありがとうございました。m(_ _)m
実は、(3)だけ(定数の配列)は「たぶんできるんだろうな」と思いながら
聞いてみました。
残念だったのは、(1), (2), (4)を結局、ヘルプで見付けられなかったこと
です。キーワードが悪いのでしょうか?
# まさか、PersonalとProfessional, Enterpriseでヘルプが違う、なんて
# ことはないですよね?(^^;
>>672 検索程度の機能があればいいならTStringListやTStringsの
CommaTextプロパティを活用すれば簡単に作れると思う。
>>673,676 最小化はDelphi 4以前の話でしょ。
>>686 Del5移行でも、微妙におかしいよ。
例えば、「デスクトップの表示」で最小化させた状態から復帰させるときなんか。
あと、Appウィンドウの関係、Win2000移行のモーダルダイアログのタイトルの
点滅機能が働かないね。VCL使いつつ回避してるソフトもあるけど。
CommaTextはスペース入っててクォートで囲まれてないと悲しい事になります。
あのですね、昨日Delphi6PersonalをDLしたんですよ
まあ、Delphi入門ページとか見てやっていたわけですよ
んで、今日も朝からやっていたんですよ
ちょっとサンプルばかりじゃなんだから簡単なものを作ろうと思ったわけです
まあいろいろと弄りながらね
で、ききたいことがあるんですよ
オブジェクトのサンプルにShellTreeViewがあるじゃないですか
あれで選択したフォルダのパスはどうやったらわかりますか?
誰かお願いします
つーかなんでDelphiで作ったプログラムはあんなに重いんだ?!
694 :
デフォルトの名無しさん :02/06/01 17:37
二つ質問です。
1)
TWinControlのInvalidateはコントロール全体を再描画するそうですが、
RepaintはInvalidateのあとUpdateを呼び出すそうですね。
Invalidateがある以上Repaintは必要ないように感じるのですが、
一体Repaintにはどんな意味があるのでしょうか。
2)
また、TControlのRefreshは何に使うのでしょうか。
単にRepaintを呼び出しているようなので、
下位オブジェクトがRepaintに一定の動作を与えて、
なお且つRepaintと区別する必要がある場合に使うのかとも思ったのですが、
virtualでもdynamicでもないので、不思議です。
宜しくお願いします。
>>689 ShellTreeView1.Path
\Delphi6\Demos\ShellControls にソースがあると思うから、見てみるといいかも。
>>696 ああ、なるほど!
「すぐに」がポイントなんですね。
理解できました。
大変ありがとう御座います。
引き続き2)もどなたかお願いします。
>>695 出来たよ、ありがとう
サンプルソースも結構使えそうだった
>>689 一瞬、吉牛のコピペかと思った。(^^;
(ことば遣いが似てたから)
>>690 具体例も上げられなきゃネタにもならんわ(ゲラゲラ
>>690 exe単体で動くから、いらない部分も含んでるからとかじゃないの?
>>700 >昨日初めて上達早いな。
Delphiなんて、VBやってた奴ならすぐコンポーネントは使えるだろうし、
他のオブジェクト指向言語やってたなら、Delphiもすぐにできるようになるだろ。
あとはVCLさえマスターすればいいだけの話。
Delphiが初めてのプログラミングなら上達早いと思うが。
704 :
デフォルトの名無しさん:02/06/01 23:01
RichEditをOLE対応にしたのですが、実行時にビットマップなどを挿入するにはどうすればいいのですか?
705 :
デフォルトの名無しさん:02/06/01 23:34
プログラムって何グラム?
DelphiなんかやめてSHARPポケコンPC-G850の内蔵BASICにしたほうがいいですよ。
>>708 いや、もっともな意見だね
ところで PC-G850 ではどんなDBが使えるの?
ソードのM5で手をうとうじゃないか。
>>709 PC-G850ではInterBase、DB2、Oracle、MySQL、PostgreSQLが使えます。
selectして返事が返ってくるまで無茶苦茶かかりそうだな。
パーソナル使ってるんだけどTHTTPはプロフェッショナル以上ですよね
HTTPでファイルをダウンロードしたいんですけどパーソナルじゃやはり無理ですかね?
なにか他の使ってできるとか、そういうの無いですか?
Socket使うとかいろいろあるだろ。
718 :
デフォルトの名無しさん:02/06/02 14:44
Delphi で 複数言語に対応したアプリを開発するにはどうすればいいのでしょうか?
メニューやボタンのキャプションを、簡単に切り替えたいのですが・・・
720 :
デフォルトの名無しさん:02/06/02 17:29
TMediaPlayer以外で、Waveファイルに音声を録音する
記述を教えて(´Д`;)
723 :
デフォルトの名無しさん:02/06/02 18:15
OnClickでSenderのメソッドを使いたいのですが、
C++Builderではdynamic_cast<T>->methodですが、
Delphiではどうするの?
お願い教えて!
(Sender as T).methodがダイナミックキャスト
725 :
デフォルトの名無しさん:02/06/02 18:20
>>723 THogeHoge(Sender).HogeMethod(uma,mazu);
キャストしる。
>>726 それはdynamic_castではなく、C style castに相当するね。
>>724がdynamic_cast相当
729 :
デフォルトの名無しさん:02/06/02 18:28
>>729 as で変換すればキチンと(?)例外吐いてくれるけどさ。
cast する前に is 演算子で型チェックするのを忘れずに。
731 :
デフォルトの名無しさん:02/06/02 18:54
できれば、WaveInの解説文キボーン。
733 :
デフォルトの名無しさん:02/06/02 20:23
TMediaPlayerを使って、録音ソフトを作ろうとしたのですが〜
「MCIデバイスがありません」と〜
叩かれて、TMediaPlayerを使えませんでした〜
どのように修正したらよいですか〜
思ったんだけどDelphiとVBってIDEの仕様が似てない?
どっちの方がいいのかな?
>734
スレ違い
>>733 たぶん他のソフトでMCIデバイス使用中だと思われ
737 :
デフォルトの名無しさん:02/06/02 21:28
>>736 どこも使っていないように思われ・・・。
>>733 MediaPlayerで同じファイルを開いていませんか?
739 :
デフォルトの名無しさん:02/06/02 21:45
フォーム上に既存のコントロールを、あとから作ったパネルなどの上に乗っけることって出来ますか?
一度一枚のフォームとして作ったものを、やっぱページコントロールをつけてそこに乗っけたいんです
>>740 Frameを使うかPanelFormというコンポがあったと思う。
(フォームをパネルみたいに張り付けれるやつ)
743 :
デフォルトの名無しさん:02/06/02 22:35
OutOpenをTrueにしたら解決しますた!!
ありがとう。これでネレル。
>>741-742 早速レスありがとうございました
すこし言いにくいのですがコピペで解決してしまいました。
一度試してはいたのですが、カットした後に乗っけたい(パネル)コントロールを選択してから
ペーストしなきゃいけなかったんですね・・・失礼しました〜
746 :
デフォルトの名無しさん:02/06/03 01:43
Edit1 Edit2 Edit3 があったとします。
Edit1から Edit2へ [TAB]で移動した場合と
Edit3から Edit2へ [TAB]で移動して来た場合の違いを
Edit2のイベント内(例えば OnEnter等)で知ることは出来ないのでしょうか?
良い方法があれば教えて下さい。よろしくお願い致します。
書き間違ってました、ごめんなさい。
誤) Edit3から Edit2へ [TAB]で移動して来た場合の違いを
↓
正) Edit3から Edit2へ [Shift]+[TAB]で移動して来た場合の違い
>>746 グローバルのフラグを作って
Edit3 とEdit1 の OnExitで値をセットするぐらいかなぁ?
>>748-749 そーですか。
APIか何かで取得出来るか?と色々とやっていたのですが、やはり
その辺りで処理するしかなさそうですね。
有難う御座いました。
MediaPlayerの表示の大きさを変えるのはどうしたらいいですか?
begin
MediaPlayer1.FileName := GikoMovie;
MediaPlayer1.Open();
MediaPlayer1.Display:= Panel1;
end;
752 :
デフォルトの名無しさん:02/06/03 16:57
コンポーネントのTListBoxとかの'T'って何の略ですか?
754 :
デフォルトの名無しさん:02/06/03 17:10
コンポーネントのソースを開いてみるとメッセージハンドラってのでしょうか?
CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
こんなのですが、これって、イベントとかが発生した時にWindows上でメッセージが流れる
それを捕まえる為のものだって認識しているのですが僕の認識は正しいでしょうか?
厨房である僕にご指導くださいませ
>>754 あってるよ
メッセージディスパッチという仕掛け。
具体的には Dispatch(var Message); メソッドで
メッセージIDで自動的に必要なメソッドが自動的に呼ばれる。
>>755 なるほど、そうですか、ご指導有難うございます。
CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
この場合だと、後半の部分のCM_TEXTCHANGEDがメッセージIDの種類を
判断する部分だと考えて宜しいのですね。
メッセージIDは、unit Controls;の上の方で定義してあるのは判ったのですが
ここに定義していない物があれば、独自に定義した物を利用しても良いので
しょうか、それとも、それは互換性とかで問題になる可能性があるのでしょうか?
(そもそも、未定義のメッセージIDがあるのかも知らないのですが・・・^^;)
mybaseってソースないのでしょうか?
>>754-756 長いことDelphi使ってきたけど、オマエ達の言ってる意味がサーーパリ判らん俺はなんなんだ?逝った方がいいってこと?
>>756 理論的には自由に使ってよい。
未定義というかユーザー用の領域WM_USERがある。
これはアプリ内で閉じたメッセージに使える。
TControl継承でなければ、もちろん好きに使っていい。
残念なのは動的に メッセージIDを指定出来ない事。
これが出来ればRegisterWindowMessage で割り当てたIDもディスパッチ出来るのだけど
Delphi 6 付属の Win32 HELPより
Range Meaning
0 through WM_USER - 1 Messages reserved for use by Windows.
WM_USER through 0x7FFF Integer messages for use by private window classes.
0x8000 through 0xBFFF Messages reserved for future use by Windows.
0xC000 through 0xFFFF String messages for use by applications.
Greater than 0xFFFF Reserved by Windows for future use.
結局 0x8000〜0xBFFF は以前は Windows予約だったけど,今はここがユーザ用になった
逆に WM_USER領域はユーザ領域だったが、ここをWindowsがアチコチ使ってしまっている
使ってはダメという事
昔も今も、一番安全なのは RegisterWindowMessage を使う事
なおDelphiは
CM_BASE = $B000;
CN_BASE = $BC00;
を使っているので注意
>>760-764 凄く勉強になりました!!
今までモヤモヤしていた部分が晴れてきたみたいな気がします(たぶん気のせいでしょうが)
本当にありがとうございました。
>>764 一番安全なのは RegisterWindowMessage を使う事
まぁそうなんだけど、定数せんへんできないのが難点
ユーザ定義メッセージを100個も宣言することもないので、
事実上、メッセージID の使用領域はスカスカですよ。
Dispatch() するクラスをちゃんと調べれば、まず足りないということは
ありえません。神経質になる必要はありません。
>>758 まぁ、「ウィンドウズについては何も知らない」ということですね。
定数せんへん → 定数宣言 スマヌ
>>766 >まぁ、「ウィンドウズについては何も知らない」ということですね。
ちょっと言い過ぎ
Object Pascal の記法が奇異に感じられるだけかも知れんし
>>758 TPWで拡張された流儀を引き継いでるって感じなんだけど
メッセージループそのものも知らないのならやっぱ勉強しておいた方が吉
久しぶりにTPWのコードを見たけど
Delphiのライブラリ内部のコードはTPWとあまり変わっていないことに気が付いた
>>768 >>まぁ、「ウィンドウズについては何も知らない」ということですね。
>ちょっと言い過ぎ
>Object Pascal の記法が奇異に感じられるだけかも知れんし
758 は Delphi を長いこと使ってきたっていってるじゃん。
メッセージIDを知らないってことは、Windows の仕組みについて
何も知らないって言ってもいいと思ふ
771 :
デフォルトの名無しさん:02/06/03 20:56
TEdit内の文字数を調べるには?
おしえてください〜。
Length(Edit1.Text)
>>771 Length(Edit1.Text) なんかだと、文字数というよりバイト数か
なら
w: WideString;
w := Edit1.Text;
Length(w);
>>774 一行で Length(WideString(Edit1.Text))
776 :
デフォルトの名無しさん:02/06/03 21:19
ありがとうございました!!
誰もわかりませんか?
>>777 HelpみたらDisplayRectっぽいけどそれじゃダメ?
つかHelpは探した上でやってるよなあ・・・。
自力でAPI使ってやるしかないかも。
>>778 helpは全部見ましたよ
DisplayRectには値を入れることはできません。
(´-`).。oO(じゃあ俺が今見てるエロ動画は幻か・・・DisplayRectで伸縮自在なんだが
>>779 最後の一文読んだ?
注意 DisplayRect プロパティは,メディアデバイスを開いた後でのみ設定できます。
(*´д`)
そーなのだよ、Windowsの仕組みについては、何もどころか全くわからんよ。
VCLの囲みの中でしかも、独自にコンポーネントも作ることもなく他人の作ったコンポの
ちょっとした直し程度しかせずにやってきた、正直言って、今日は自分がVB使いとなんら
変わりないと感じた1日でした。(マジ)
デキター━━━(゚∀゚)━━━!!!!
デキター━━━(゚∀゚)━━━!!!!
ばんざーい!ばんざーい!ばんざーい!
>>778さん
>>780-782さん
ありがとうございますた(;´Д`) ハァハァ
よかったよかった。
>>785 自己啓発情できたすばらしい1日でしたね
789 :
デフォルトの名無しさん :02/06/03 23:00
そーなのだよ、Delphiの仕組みについては、何もどころか全くわからんよ。
サンプルの囲みの中でしかも、独自にアプリも作ることもなく他人の作ったアプリの
ちょっとした直し程度しかせずにやってきた、正直言って、今日は自分がガキの使いとなんら
変わりないと感じた1日でした。(ネタ)
エロファイルにpgpってあるんだけどなに?
暗号化してあるってのはわかるんだけど
パスもわかる
PGPのソフトは何使えば複合化できるの?
794 :
デフォルトの名無しさん:02/06/03 23:41
デルファイやってたら将来C言語とかに移るときに役に立つような
知識が身につきますかね?
>>794 身につく人は身につくし、だめな人は何をやってもだめ。
作ったプログラムをexeにするにはどうしたらいいんでしょうか?
ヘルプにexeで検索かけてもでません。鬱。
探し方悪いのか。鬱鬱。
┏┓
┃┗┓
┃ ┗┓ 押せ
┃ ┏┛
┃┏┛
┗┛
800 :
デフォルトの名無しさん:02/06/04 00:15
CM_〜〜、CN_〜〜系のメッセージって、プログラム書くとき
使うことってあるんですか?
WM系はよくメッセージ横取りしたりするのに使うし
自分でフォーム間のやりとりにWM_USERに数値足したメッセージを
使うことはあるけど、CM系とかCN系のメッセージって今まで
何にもいじったこと無いなあ。
コンポーネント作るときよく使う
l>押します。鬱。すいませんでした。
CMで〜す
っていうか、WMとCMの違いってなんだ
TFrom内にもWM_ACTIVATEとCM_ACTIVATEとあったりして
わけわかんねー
できました。
どうやら単にドコにexeが保存されてるかわからなかっただけの模様。鬱。
807 :
デフォルトの名無しさん:02/06/04 00:38
え!?マジだったの?
>>806 君、「ひまわり」から始めた方がいいよ。
マジで。
このスレは、たんなるバカとDelphiバカが混在していて楽しいズラ
>>794 C言語に必要な知識はほぼ身につくけど、いざ移行するとCのバルキーな
言語仕様に鬱になる罠。
C++には若干不足もあるけど、やっぱり役立つ。でもCの時と同じ罠が・・・
最近ではC#がいーみたいです。漏れは良く知らないけど。
まぁそんなこと心配してるよりDelphiの勉強を始めた方が良い事は確か。
杏より梅が安し、ってやつです。
本気でバカですいません。鬱。
>>808 お前みたいなホームラン級のバカもいるしな(藁
Cのコードは読めるが書けない。
漢字読めるけど書けないのと同じかな?
>>812 単に必要がないからでしょ
必要になったら書けるよ
>>740 Parent変更するだけだろ!!
with Form2 do
begin
BorderStyle:=bsNone;
Top:=0;
Left:=0;
Parent:=Self.TabSheet1;
Show;
end;
>>791 複合かよ!!
>>793 1chかよ!!
>>798 点数があんのかよ!!
>>799 押してーよ!! でも、押せねーよ!!みないな。
>>807 ぴゅー太かよ!!
>>808 空手バカかよ!!
>>809 果実かよ!!
>>810 本気かよ!!
>>811 ホームラン級かよ!!
>>812 漢字とは違うだろ!!
質問です。
var
L,S,T:Strings;
で、関数をいろいろ使用した後に
L := S+T;
とした時に
LにSの文字列しか入りません。
L := T+S;
とすると、今度は
LにTの文字列しか入りません。
これは、どのような可能性が
考えられるのでしょうか?
訂正です。
L,S,T:Strings; 誤
L,S,T:String; 正
それから
末尾にへんなものでも付いてる?
と思い
delete(t,length(t)-1,1);
L := t+s;
showmeseage(L);
としても、末尾の')'が'・'と表示され
ただけでした。
>>815 一番に 考えられるのは S,Tに#0 が含まれいるという事です。
>>818 delete(t,length(t)-1,1);
は t:='123' とすると結果は '13'が残るように思います
#0を消すには
S:=PChar(S);
T:=PChar(T);
L:=S+T;
としてみて下さい。
おそらく厨房な質問で申し訳ありませんが・・・
TData = class
Data : array[1..8,1..1100] of Integer;
procedure TForm1.button1Click(Sender: TObject);
begin
for i:=1 to n do Data[i]:=Data.create; //nは数百ぐらいの任意の数
// 処理
end;
procedure TForm1.button2Click(Sender: TObject);
begin
for i:=1 to n do Data[i].Free;
close;
end;
ヘルプなぞみてここまではできました.
処理はうまくいきます.
しかしアプリを終了するときにエラーが出てしまいます.
メモリーが開放されていないようなのです.
何が足りないのが教えてください.
>>820 できました。
ただ、何故この方法で、#0が
消えるのかが、まだ理解できて
ませんが・・・、
ありがとうございました。
deleteに関してはたしかにそうですね。
>>821 書き間違いが多くて判りません。 ちゃんと書きなおしてみて下され
Dataは整数の配列なの? それとも TDataの配列なの?
そして2次元配列ではないの? さらに、Data.Create はTData.Createの間違い?
825 :
デフォルトの名無しさん:02/06/04 14:35
デルファイでつくったプログラム、面白いゲームとかが
沢山DLできるページがあったら教えてください。
827 :
デフォルトの名無しさん:02/06/04 15:44
Extended型の変数の値をString型に変換して代入する方法を教えてください。
低レベルな質問ですいませんが、よろしくお願いします。
FloatToStrでできました。どうもありがとうございました。
>>821 Data : array[1..8,1..1100] of Integer;
と定義しているのだから、そもそも、
Data[i]:=Data.create;
なんていう代入は出来ないのでは?
てか、このままだと、コンパイルとおらないと思うから
実際に書いたのはこうじゃないはず・・・。
元のソースから、コピペで抜き出してみれ。
>>828 自己解決してるのに何がありがたいんだYO!
あまり長くなっては思いはしょりました
すいません
type
TData = class
Data : array[1..8,1..1100] of Integer;
var data1: array of Tdata;
procedure TForm1.button1Click(Sender: TObject);
var i: intger;
begin
for i:=1 to n do Data[i]:=Data.create; //nは数百ぐらいの任意の数
// 代入
// 処理
// 保存
end;
procedure TForm1.button2Click(Sender: TObject);
var i: intger;
begin
for i:=1 to n do Data[i].Free;
close;
end;
です.
よろしくお願いします
type
TData = class
Data : array[1..8,1..1100] of Integer;
var data1: array of Tdata;
procedure TForm1.button1Click(Sender: TObject);
var i: intger;
begin
for i:=1 to n do Data1[i]:=Data.create; //nは数百ぐらいの任意の数
// 代入
// 処理
// 保存
end;
procedure TForm1.button2Click(Sender: TObject);
var i: intger;
begin
for i:=1 to n do Data1[i].Free;
close;
end;
また間違えてましたすいません
for i:=1 to n do Data1[i]:=Data.create; //nは数百ぐらいの任意の数
↓
for i:=1 to n do Data1[i]:=TData.create; //nは数百ぐらいの任意の数
----
の間違いでした
たびたびすいません
ちなみに
エラーは終了ボタンを押したときに以下のように出ます
”プロジェクト*.exeがEInvalidPointerクラスの例外を生成しました
無効なポインタ操作”
と出ます
どこがいけないのでしょうか?
厨房でスマソ
どこが違うって言われてもなあ…
とりあえずData1の大きさをsetlengthで指定しる。
えーとそれはやってます
入れとくべきでした
_____________
∬ ∧,,∧ /
~━っミ ゚Д゚彡,, < ソース自体むちゃくちゃで
∀._(,,,~ ,,,~⊃_ \しかも小出しだしなー...
━┳┷ |. ,(~ヽ,,,ミ.  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
┃...| ̄ ̄し'J.  ̄ ̄ ̄ しんどいぞ....
┻ ヽ ̄ ̄ ̄ ̄ ̄ ̄ ̄
最小限の再現ソースをかくといいかも。
>>それを書くことで自分の理解も深まって
結果的にバグが取れるかもね。
仰せのおうり
再現ソース書いてみます.
すれ汚してすまそ
バグは821の頭の中にあるようです
どこがむちゃくちゃかどうかも分からない厨房なので
はずかしいのですが・・・
以下のようにを書いて見ました
ボタン1を押してボタン2を押すだけでエラーが出ます.
エラーは835と一緒です.
どこがだめなのかヒントでも教えてください
お願いします
****************
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
TData= class
data: array[1..8,1..1100] of Integer;
end;
var
Form1: TForm1;
Data1 : Array of TData ;
n : integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
n:=120;
SetLength(Data1,n);
for i:=1 to n do Data1[i]:=TData.create;
end;
procedure TForm1.Button2Click(Sender: TObject);
var i: integer;
begin
for i:=1 to n do Data1[i].Free;
close;
end;
end.
>841
SetLengthした後で Low(Data1) と High(Data1) を見てみれ。
>>821 Delphi ヘルプより。
>動的配列の添字は常に整数であり,0 から始まります。
つまり Data1[n] にはアクセスしちゃ駄目ー
843様,844様
ありがとうございます.
そんな基本的なことに気がつかないなんて・・・
これだから初心者から抜け出せないのですね.
精進します
>>841-845 つーか、このソースが動いたとして何がしたいの?
根本から何か間違っていると思うのはおれだけなのか?
何処かに連想配列コンポとかありませんか?
誰か知らない?
>>806 って、他の掲示板でもexeがどーのこーのって質問してない?
>>848,805
>っていうか、WMとCMの違いってなんだ
>TFrom内にもWM_ACTIVATEとCM_ACTIVATEとあったりして
>わけわかんねー
WMは正式なWindowsメッセージ。
CMはVCLが内部的に使ってる裏メッセージ。
∧,,∧ / ̄
@,,,ミ,,゚Д゚彡 < とりあえず
>>841のソースでうごきますた。
⊂,,,,,,,,,つつ. \_
LowとHighあたりは間違いの元だけどね。
nに寒気を感じたのは俺だけですか?
854 :
デフォルトの名無しさん:02/06/05 18:43
MIDI音源を制御するコンポーネントとかありませんか??
>>854 Delphian World へ行って MIDI で検索する。
MIDI音源を制御するコンポーネントとかがあります。
>>847 TStringList.Objects[]使えばできる。
Delphiで作ったアプリを「左右に並べて表示」をすると、
画面半分の大きさで表示されるんですけど
正しく表示させるにはどうすればいいですか?
>>858 さんありがとうございます。
この修正、結構厄介なんですね(^^;
861 :
デルファイマスター@一週間:02/06/05 23:30
いつになったらDelphi 7は発売されますか?
>>860 ありがとうございます。
ただ、sample見ないで貼り付けて実行したら、
フォームが消えました(^^;
もう少しsample読みます。
865 :
デフォルトの名無しさん:02/06/06 01:14
866 :
デフォルトの名無しさん:02/06/06 01:41
Delphi6 personalバージョンについて質問です
Delphiを起動するときってかならずForm1とUnit1.pasが表示されますよね。
Delphiを起動したときに、コンソールアプリを作成するようにしたいんですが
いちいち新規作成→コンソールアプリケーションを選ぶのも面倒なので
起動直後からコンソールアプリを作成するにはどうしたらいいでしょうか?
あと
{ TODO -oUser -cConsole Main : ここにプログラムコードを書いてください }
ってのが激しくいらないんですが、消すことはできますか?やり方を教えてください
869 :
デフォルトの名無しさん:02/06/06 03:22
DCC32って何ですか?
私の辞書に、検索という文字はない。
故に辞書も検索できない。
1点
>>866 あらかじめコンソールアプリの雛型をどこかに作っておいて
そのショートカットをスタートメニューに入れればいいんじゃない?
バージョン番号が大きいほど優れていると錯覚してる初心者が多いから
Delphiの次製品はコンパイラのバージョンのDelphi 15 にすればいいかも。
>>866 新規作成にコンソールアプリってのがなかった?
>>866 どっちもリポジトリ使ったらできた。でも、余計な作業も増えた。
>>875 P-RateだとかAthlonXPのほにゃらら+とかみたいで、
なんか嫌。
Delphi6でExcelをOLE埋め込みすると、一部分しか表示できないのですが、
全体を表示させる方法はありませんか?
(スクロールさせても下のほうが切れてます)
881 :
デフォルトの名無しさん:02/06/06 19:05
インターネットに接続しているかどうか判定する方法はありますか?
>>881 電話がつかえなかったらインターネット中です。
ダイヤルアップ ユーザー ハッケソ
>>882 (;´д⊂ イジワルしないで教えてください
>>881 どっかにpingしてみる。
(ルータ経由だと実際に通信してみるしか確実な方法は無い)
886 :
デフォルトの名無しさん:02/06/06 19:18
>>885 ping先の鯖が落ちていたら確実じゃない罠
確実な方法はないということですか?
あまり確実だなくてもいいので、一般的にはどういうほうほうでネット接続を検知しているのでしょうか?
>>887 ルータなしに限るなら(ダイアルアップなら)方法はあるが、ユーザーにあらかじめ
そうなのかを聞いておかないとね。
uses WinInet;
function IsInternetConnected: boolean;
var
ConnectType : DWORD;
begin
ConnectType := INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN +
INTERNET_CONNECTION_PROXY;
Result := InternetGetConnectedState(@ConnectType, 0);
end;
>>888 どういう方法でしょうか?
よかったら教えてください・・・
>>889 ありがとうございます、試してみます!
Delphi6でAccessデータを取得するには
BDEしか手段がないのですか?
BDEはEnterpriseかProfessionalには付属してるとのことなので
それを購入したらいいのかな・・・
DOAでも可能?
DOAってなんだよ…
DAOのつもりなのかADOのつもりなのか…
>>892 あぁぁ・・・
すんませんすんませんすんません・・・
DOAなんてないんですね・・・
DAOとかADOってのもわかってないんですが
DAOってOraclとかのエンジン?
894 :
デフォルトの名無しさん:02/06/06 20:12
>>891 ADOコンポーネントで可能。
BDEでもできるけど、AccessはメインじゃないからADOがよい。
ADOならAccessの入ってないパソコンでもMDBを操作できる。
ODA 政府間開発援助・・・
896 :
デフォルトの名無しさん:02/06/06 20:14
ポケコンにDelphiをインストールしようとしましたがなかなかうまくいきません。
どうすればよいですか?
機種はPC-G850Sです。
>>894 おぉ!ありがとうございます
BDEは端末にいちいちインストールしないといかんのですね
ADO 調べてきます
多謝です
DOA: テクモが出してる格闘ゲーを装ったギャルゲー
アフォ晒しついでに思い切って聞いてしまおう
MDBって・・・なんですか?(泣
891が取得したいデータが入っているファイルの拡張子。
>>898 ここが本家サイトだから読むといいよ。
http://www.microsoft.com/japan/msdn/data/default.asp 簡単に言うと、マイクロソフトのデータベース戦略が「Universal Data Access」
これは、データベースに限らず、すべてのデータを一元管理しようという思想。
で、この思想を支える技術が「OLEDB」。データの種類ごとにCOMを用意して
すべてのデータにアクセス出来るようにしようとする技術。
で、このCOMを汎用的に操作できるクラスライブラリが「Active Database Objects」
すなわちADO。ActiveXだから、これに対応した開発環境ならばADOが使える。
我々が作る場合は、まず、どのデータを操作するか、適したOLEDBプロバイダを
選択する。んで、ADOのライブラリを使って操作する。
Delphiの場合は、ADOのライブラリも使えるけど、BDEやその他のDBコンポーネントと
互換性を持たせるためにTDataSetから派生させたADOコンポーネントを使う。
だから、Delphiで使う場合は、ADOのライブラリよりもTDataSetのプロパティや
メソッドを中心に使うとよい。Delphiとの親和性が高くなる。
>>901 あぁぁ
ありがとうございます
そっか(W
>>902 うわーい
ご丁寧にありがとうございます
とっかかりがわからなくてさんざん調べていたのですが
これだけ糸口をいただけるなら
しばらく勉強しつついろいろと調べてみます
VB6ならprofessionalがあるのですが
Delphiでやってみたくて 購入する版から苦悩ちうなんです
3文字やら4文字のアルファベットの羅列で
頭が混乱してるので とてもありがたいです
ありがとうございます
>>903 がんばってね。ADOだけならProfessionalで十分活用できるよ。
906 :
デフォルトの名無しさん:02/06/06 21:09
Delphi Personal箔"闌gq"逐÷・摩・・・Aインストールk"・摩・_メs"・B
t項準・・・・lw"・・・・÷楳÷摩・・・Ha・・・ム逐・準・・BOSw"vibр盾翌唐les"・B
909 :
デフォルトの名無しさん:02/06/06 22:42
listviewにイベントを作成しようと、オブジェクトインスペクタの
イベントのOnClickをダブルクリックしたら、エラー「メソッドlistviewClick
を追加すべき場所が見つかりません。"END"またはINITIALIZATIONがユニットソース
からみつけられませんでした」
とでます。解決方法を教えてください。
>>909 全くの「素」の状態から、ソレやっても同じ状態になるかい?
質問するときは環境とかいろいろ書けれ!
>>909 予想としては、1個「end;」が無いとか…。違うかな…。
>>913 そうだ「end.」だ…(今確かめた)。トホホ…。
915 :
デフォルトの名無しさん:02/06/07 10:05
TFileListBoxにユーザのPCで表示可能な形式の画像ファイルだけを表示させたいです。
Maskプロパティを使って、制限するという所まではわかるのですが、
PCから表示可能な画像の拡張子が必要です。
それを取得する方法を教えてください。
まず「表示可能な画像」の定義をきめないといかんな。
917 :
デフォルトの名無しさん:02/06/07 10:29
>>916 あ、「Delphiで表示可能」or「PC本体の能力で表示可能」ってことでしょうか?
DelphiではBMPかJPGかアイコンしか表示できないんでしたっけ…?
ピクチャービューアを作ろうと思ったのにぃ…。鬱出汁脳。
>>917 Delphi「に付属するライブラリ」ではjpegとかまでだね。
でもそれをもって「Delphiで表示可能」をくくらないでくれ。
作ることも、探してくることもできるだろ。
>>918 くくってるつもりは無いのですが、どこまでをDelphiと捉えるかの問題じゃないですか?
俺には作れないので探してきます。ありがとうございました。
Susieプラグインに対応。これで完璧
921 :
デフォルトの名無しさん:02/06/07 17:27
アプリケーションにフォーカスが当たっている状態での
動作で何かキー(例えば’A’)を押したとすると
OnKeyPressメソッドを呼び出し、ShowMessageで
Aの表示されたダイアログを呼び出すことができるというプログラムで、
フォーカスの当たっていない状態でもAを押した時この動作をしたいと思うのですが
どうやるのかが解かりません。
どうか教えてください。お願いします。
>>921 キーボードフックで検索すればいくつか引っかかるかと。
>>921 A は無理だけど
別のアプリ使ってて Shift+Ctrl+A とかなら ホットキーを使うといい
1) フォームのOnCreateで
const MyId= 1234;
procedure TForm1.FormCreate(Sender: TObject);
var Key,Modifiers: Word; Shift: TShiftState;
begin
ShortCutToKey(TextToShortCut('Shift+Ctrl+A'),Key,Shift);
Modifiers:=ord( ssAlt in Shift )* MOD_ALT ;
Modifiers:=ord( ssCtrl in Shift )* MOD_CONTROL +Modifiers ;
Modifiers:=ord( ssShift in Shift )* MOD_SHIFT +Modifiers ;
UnRegisterHotKey(Handle, MyId);
RegisterHotKey(Handle, MyId,Modifiers ,Key) ;
end;
2) OnDestroyで
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnRegisterHotKey(Handle, MyId);
end;
3) フォームにメッセージハンドラを追加
procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
適当な文字列の最後の\以降の文字列の、最後の.以降の文字(拡張子です)を獲得したいのですが、
正規表現コンポーネントを使用せずに獲得する方法ってあるでしょうか?
>>926 ファイル名から拡張子を抜き出したいだけなら、ExtractFileExt じゃだめ?
任意の文字列から、だと上手く動くか判らんが・・・・・
929 :
デフォルトの名無しさん:02/06/07 21:23
スクリーンセーバーのように、ユーザの入力が一定時間無かった時に特定の動作をする
プログラムを作りたいのですが、DLLを作ってグローバルなマウス入力やキー入力をフックするしか
方法はないのでしょうか?
すいません、出来ました。
すいません、930=926です。
>>929 Delphiじゃそんなことできねーよ(藁
933 :
デフォルトの名無しさん:02/06/07 21:47
DelphiってC++Builder6のMasksはないんでしったけ?
Masks::MatchesMask(filename, "*.txt")
>>933 Personal には無いみたい。
Pro版には付いてるようです。
937 :
デフォルトの名無しさん:02/06/07 22:10
>>935 もうちょい具体的に言わないと何とも言えぬ。
バックグラウンドで動作するのか、アクティブなのか、とかね。
911,913さん
ごめなさい〜ほんと、endがなかったです。申し訳ありません
ほんとの素人とは私です......
940 :
デフォルトの名無しさん:02/06/08 01:19
D6proからADOでmdbファイルを使ってプログラムしようとしているのですが、
私の認識としては mdbを使う場合、Access自体かAccessのランタイムが必要になる
であろうと考えておりました、実験してみると、やはりAccessが入っていないPCでは
mdbへアクセス出来ませんでした。
ここまでは予想していた通りだったのですが、実はOfficeのDeveloper版を購入してあり、
AccessRTのセットアップでAccessのランタイムをインストールすると見事にD6で作成
したプログラムが実行できましたが、Accessのランタイムをアンインストールした後も
実行出来る事が判りました。D6からmdbを使う場合にはAccessのランタイムをインストール
しなくても何かDLLをコピーするだけで使えるのでしょうか?
mdb(Access)側でVBAを使うでもなく、単にDelphiのISAMファイルとしてmdbを
利用したいだけなのですが・・・。
>>939 今時珍しい心の清らかな人アルネ。あやまらんでもいいアルヨ。
>>940 DBをアプリで使う&配布を簡単に済ませたい場合は
MyBaseしかないかなーと思いこんでいたからAccess+ADOは
盲点だった&ちょっと注目してる。
この方法だとAccessさえ持ってればアプリで作成したデータを
Accessで好きなように加工/メンテ/他形式への変換ができるから
作り込むアプリの機能を最低限で済ませられるメリットがあるのが
良いね。
もしよかったら今後も経過報告してくれるとうれしい。
サブルーチンを作って呼び出すにはどうすれば良いんでしょうか?
>>944 procedure sub(var x:Integer);
begin
x:= x*x;
end;
と、どこかに書きます。 コンパイルしてエラーが出るなら書く場所が違うので移動
サブルーチンでなく、"関数"あるいは"手続き"でヘルプをお探しなさい
>>945 それを呼び出すにはどうすれば良いんでしょうか?
sub(nil);だとエラーが出ます。
>>947 Integerにnilを渡しちゃだめ。
変数パラメータに定数を渡しちゃだめ。
procedure sub(x: Integer); とすれば、
sub(0); で呼び出し可能。でも計算結果は戻ってこない。
てか、これはマジな質問なのか?
ねたに一票。
そもそもnilを渡すことなど思いつくことがおかしい・・・。
サブルーチンとか言ってるし、ブビ厨か?
nilを代入したのも、新しく覚えた言葉を使いたがってるだけとか。
>>937 アプリがアクティブかどうかは問いません。
どちらかで動作していて、ユーザがパソコンに触れていない時間が続いたら、
自動的に終了するようにしたいのですが、どうすればできるのか見当も付きません・・・
有難う御座いました 出来ました。
nil=null=空で使えるかと思ってました。
×945 ○947
>>953 ネタじゃないらしいので一言。
nilは空のポインタだが、数値に空という概念はない(必ず何かの値が入っている)。
Delphiに限定した話ではないが、0とnil(null)を混同しているなら整理が必要。
>>952 「ユーザがパソコンに触れていない時間」を取得できればいいわけか。
昔メーリングリストでそんなのあったな・・・
>>952 アプリの外で何か作業をしているかを確認しないといけないならフックが必要だと思いますよ。
>「ユーザがパソコンに触れていない」
なら、スクリーンセーバを登録して、スクリーンセーバからメッセージを貰ったら?
>>958 ユーザのスクリーンセーバーの設定を強引に変更するのはスマートじゃないよねぇ
pCharをファイルに書き込む際、
var
p: pChar;
f: file;
begin
(略)
BlockWrite(f, p, StrLen(p)+1);
(略)
end;
としているのですが、読みとり方が分かりません。
#0が出るまで1Byteずつ調べていかねばならないのですか?
>>960 後方シークが許されるなら、適当な長さずつまとめて読み込んで、メモリ上で
#$00を探す、という手が使えますが、出来ないなら1Byteずつ、ってなりますね。
特に既存のファイルフォーマットに制約されないなら、文字列の直前に
文字列長を書き込んどけば楽でっせ。
var
s: String;
len: Byte;
//書き込むとき
len := Length(s);
BlockWrite(f,len,1);
BlockWrite(f,PChar(s)^,len);
//読み込むとき
BlockRead(f,len,1);
SetLength(s,len);
BlockRead(f,PChar(s)^,len);
これだとByte型の制約から255文字までだけど・・・
>>961 なるほど、やはり直前にサイズを書いておくべきですね。
ファイルのパスを保存するので、ShortIntを用いれば十分ですね。
ミスった…。ShortIntじゃなくてSmallIntです。
>>956 それ、やっぱDLL作ってシステムフックでやるの?
ちょっと面倒だなぁ…
いろいろと…
あるプロシージャでpCharのメモリをStrAllocを用いて確保したのを、
別のプロシージャ(Destroy)でStrDisposeを用いて解放しようとすると
無効なポインタ操作と言われます。
解放するにはどうしたらいいのでしょうか?
>>965 方法は間違ってない。なにか変なことやってるだろ。
ソース晒してみたら?
967 :
デフォルトの名無しさん:02/06/09 18:08
>>965-967 ローカル変数だったら「未定義の識別子」だろ。
やっぱソース晒すしか無さそうだね。
あとString使って、SetLengthで代用できるなら、そっちの方が
なにかと安全かな。
>>968 ローカル変数だったら「未定義の識別子」だろ。
違うプロシージャで同じ名前のローカル変数っていう可能性もある
PDataSという、TDataS構造体へのポインタがありまして…。
Name: pCharといふフィールドを持っています。(他にもありますが)
これをTListを継承したリストに格納(StrAllocとStrPLCopyで。)
して、Destroyするときに
for i := 0 to Count-1 do
begin
StrDispose(PDataS(Items[i])^.Name);
Dispose(Items[i]);
end;
としているんですが、どこが違うでしょうか?
>>970 StrDisposeじゃなくてDisposeのほうじゃない?
>>971 StrDisposeの方をコメントアウトすると例外が生成されないんですが…。
974 :
デフォルトの名無しさん:02/06/09 19:42
こういう場合どうするんでしょうか
str := ''';
>>973 procedure AddData(bs: String;...);
var
ps: PDatas;
(略)
New(ps);
ps^.Name := StrAlloc(Length(bs)+1);
StrPLCopy(ps^.Name, bs, Length(bs));
(略)
Add(ps);
としています。
>>974 str := #$27;
で良いと思います。
>>972 Disposeの方をコメントアウトしても例外が生成されないだろ、多分。
とりあえず、
> Dispose(Items[i]);
は
Dispose(PDataS(Items[i]));
だと思われ。
>975
アリガトウ
>>976 Dispose(PDataS(Items[i]));
に書き換えましたが、やはり例外が発生します。
>>979 ここに上がってるソースには問題ない。
どこかほかの個所でメモリを破壊してるんだろ。
ちなみに↓はうまくいくコードだ。
procedure TForm1.Button1Click(Sender: TObject);
type
PDatas = ^TDataS;
TDataS = record
Name: PChar;
end;
var
ps: PDatas;
bs: String;
list: TList;
i: Integer;
begin
list := TList.Create;
bs := '( ´∀`)';
for i := 0 to 999 do begin
New(ps);
ps^.Name := StrAlloc(Length(bs)+1);
StrPLCopy(ps^.Name, bs, Length(bs));
list.Add(ps);
end;
for i := 0 to list.Count - 1 do begin
StrDispose(PDataS(list.Items[i])^.Name);
Dispose(PDataS(list.Items[i]));
end;
list.Free;
end;
DataSの他のメンバは?Nameを上書きしていない?
>>980-981 う〜ん、色々と見たんですが何せソースが膨らみすぎてて…。
印刷して色々と調べてみます。
>>983 整理しにくくなるじゃねーかよ! 新しいの立てろゴルァ!
>>984 あっちを残しておくとまた厨がageて
ごっちゃになるのであっち使おうぜ。
>>985 しゃーねーな、削除依頼出して消してもらえんのかな。
>>984 スレのタイトルが気に食わないんだったら
.idxファイルを直接いじって変えられるけど?
的外れなレスだったらスマソ
あ、かちゅ〜しゃ使ってるんだったらだけどね