くだすれDelphi Part8 (超初心者向け)

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:03/12/11 18:10
OLEで起動させたエクセルのウィンドウの Xマークを
無効にしたのですが、どうすればいいのでしょうか?
どなたか教えて下さい。
Pure型のP2Pソフトを作ろうと思っています。//IndyのTcpServerとTcpClientを使う予定です。
相互にリンクを張り、ネットワークを形成します。3台以上
鯖側ソケットは多接続可能なので1つでいいと思いますが
鞍側は1ソケット辺り1つしか接続張れませんよね?
そうなると、やはり鞍側ソケットは接続したい数だけ設計時にあらかじめ作成しておかねばなりませんか?
動的に必要な分だけ作成できればいいのですが、イベントの関連付け(?)方が分かりません。

なお、当然のことながら全ての鞍ソケでのイベントは同じです。
954953:03/12/11 18:36

http://forum.nifty.com/fdelphi/faq/00117.htm
ども、これ参考にやってみま
955デフォルトの名無しさん:03/12/11 18:37
音を重ねて鳴らす方法を教えて下さい。
今は一つの音を鳴らしている間に他の音を鳴らすと最初の音が消えてしまいます。
やらしくおねがいします。m(_ _)m
956952:03/12/11 19:03
952です。
質問の訂正です。
OLEで起動させたエクセルをDelで作ったソフトからのみ
閉じるようにするにはどうすればいいのでしょうか、ってことです。
Del7+Win2000です。
宜しくお願いします。
>>953
OnChange := 適当;
958デフォルトの名無しさん:03/12/11 23:00
>>956
無理を言ってはいけません。
959デフォルトの名無しさん:03/12/11 23:03
>>955
MIDI使へ
>>955
WaveMix.dll
DirectX…とつぶやいてみる。
962956:03/12/12 08:02
>>958
はっ!りょうかいすますた!
963デフォルトの名無しさん:03/12/12 20:26
エクセルのファイルを印刷したいと思い下記のようにしたのですが、
これだと、シートが複数枚有っても1ページ目しか印刷されないようなのですが、
全ページ印刷させるには、どうすればいいでしょうか?
if OpenDialog1.Execute then
ShellExecute(Handle,'print',pchar(OpenDialog1.FileName),nil,nil,SWP_HIDEWINDOW);

WIN2000+デルファイ7PROです
宜しくお願いします。
>>963
1.スタートメニューをクリック
2.[ファイル名を指定して実行]をクリック
3.[名前(O):]にExcelの実行ファイルとオプション指定(オプションはExcelのヘルプファイル参照)
4.[OK]をクリック。
5.正常に起動したら、名前欄をクリップボードにコピー
6.ShellExecuteの第2パラメータに'open',第3パラメータに先ほどの名前をペースト。
965 ◆w/GbaCetvo :03/12/12 20:39
MD5を生成する http://forum.nifty.com/fdelphi/samples/01242.html を参考に
コードを書いてみたのですが、バイナリファイルの md5 値が実行する度に変わってしまいます。

どうも TFileStream の使い方を誤っているかか、キャストの方法が悪いような気がします。
string(buffer) としてバッファを一度 string にキャストしているのがいけないんでしょうか?
Array of Char を PBYTE に変換するやり方がこれしか思い浮かばなかったので、
この方法を使っているんですが、どうするのが良いのでしょうか?
966965 ◆w/GbaCetvo :03/12/12 20:39
インデントを再現するために、半角スペース2個を全角スペース1個に変換しています。
function MD5String(FileName: string): string;
const
 BufferSize = 512; // 根拠はないけど、512 くらい?
var
 ctx: MD5Context;
 digest: array[0..15]of Char;
 buffer: array[0..BufferSize -1] of Char;
 i, DataSize: Integer;
 Stream: TFileStream ;
begin
 Stream := TFileStream.Create(FileName, fmShareDenyWrite);
 try
  Stream.Position := 0;
  MD5Init(ctx);
  while TRUE do begin
   DataSize := Stream.Read(Buffer, BufferSize);
   if DataSize = 0 then break;
    MD5Update(ctx, PBYTE(PCHAR(string(buffer))), DataSize);
  end;
  MD5Final(ctx, digest);
 finally
  Stream.Free;
 end;

 Result := '';
 for i := 0 to 15 do
  Result := Result +
   LowerCase(IntToHex(BYTE(digest[i]), 2));
end;
buf: array[] of byte;
にしてSizeOf使え。
つか問題の切り分けくらいしとけ。
968 ◆w/GbaCetvo :03/12/12 21:17
>>967
var
buffer: array of byte;
(略)
DataSize := Stream.Read(Buffer, SizeOf(buffer));
if DataSize = 0 then break;
MD5Update(ctx, PByte(buffer), DataSize);

としてみましたが、EAccessViolation クラスの例外が発生してしまいます。
969 ◆w/GbaCetvo :03/12/12 21:36
>>965-968
以下のように記述することで解決しました。ありがとうございました。

const
BufferSize = 512;
var
(略)
buffer: array[0..BufferSize -1] of byte;
(略)
begin
(略)
DataSize := Stream.Read(buffer, BufferSize);
if DataSize = 0 then break;
MD5Update(ctx, buffer, DataSize);
970963:03/12/12 22:08
964さん、ありがとうございます。
起動オプションが分かりません。
ヘルプを見たり、ぐぐって見ましたが目的の物が見つけられませんでした。
どなたか、ヒントだけでもお願いします。
971 ◆le/tHonREI :03/12/13 00:56
メインウィンドウ以外の新しいウィンドウをメインウィンドウのメニューバーから開きたいのですが、どのようにすればよいのでしょう?
また、メニューバーの項目で「アプリケーションの終了」を行う事はできるのでしょうか?
できるのなら、そちらのやり方も教えて下さい。お願いします。
また自分はプログラミング超初心者なので、delphiを勉強する上で役立つサイト等ありましたら教えて下さい。
お願いします。
972デフォルトの名無しさん:03/12/13 01:00
また「愛ちゅん、シゲさん、ガキさん」がいないのか…。
ちょっとヒドくね?
あんまりだなぁ…。

よっすぃー優勝ってのは…。
973972:03/12/13 01:01
誤…誤爆…。
>>970
ネタのつもりだったんだけどな…
アプリ板でも逝ってコマンドラインからやる方法を聞いた上でShellExecuteにコピペしる。

>>971
>新しいウィンドウをメインウィンドウのメニューバーから開きたい
大さっぱに説明すると以下の通り。

1.新規作成から新しいフォームを作る。
2.フォームのNameプロパティに適切な名前を付ける。
3.フォームのユニットファイルに名前を付けて保存する。
4.メインフォームのinterface部の下にあるusesに、3.で保存したファイルの名前(拡張子無し)を挿入。
5.適切なメニューイベントを作る。
6.2のフォーム名.show メソッドで表示させる。

>メニューバーの項目で「アプリケーションの終了」を行う事はできるのでしょうか?
基本的にはメインウィンドウを閉じれば自動的にアプリケーションは終了する。
Closeメソッドを使えばよい。
例えば、TabControl.Canvas.Font.Color := cl赤; ってやるのと
SetTextColor(TabControl.Canvas.Handle, RGB(赤)); ってやるのとでは
メリット/デメリットってあるんでつかの?
>>975
別に移植するつもりは無くても、意味も無く環境依存なコードを書くのもどうかと思うが。
>>976
了解しますた
978デフォルトの名無しさん:03/12/13 01:58
最近Delphiいらないんじゃないかと思ってきたんですが
気のせいでしょうか?
どなたか次スレおながいします。
>MD5Update(ctx, PBYTE(PCHAR(string(buffer))), DataSize);

bufferの最後に#0が無いかもしれないね。
自身を削除するプログラムを作ろうとしているのですが.
うまくいかず困っています.

1.自身を削除するバッチを作成
2.CloseHandle(Application.Handle);にて自身の開放準備
3.自身を削除するバッチを実行
4.すかさず自身を終了

の四ステップを考えています.
ところがこれうまくいかないのです(TT
3をFormCloseに書いてみたりいろいろ試してみたのですが
どうしてもうまくいきません
何方が解決策お持ちでしたらご伝授くださいm(_ _)m
@echo off
MyApp
del MyApp
983デフォルトの名無しさん:03/12/13 11:34
OLEでエクセルを起動させ
Excel.Quit;
Excel.Unassigned;
として終了しているのですが、
実際は、フォームを閉じないとエクセルのプロセスが
消えないのですが、何か対処法はありますでしょうか?
デルファイの文法ってどういうのですか?
985971 ◆le/tHonREI :03/12/13 11:59
>>974
showメソッドでぐぐって "unit6.show;"を付加して実行しようとするんですけど、
[エラー] Unit1.pas(77): 未定義の識別子 : 'show'って出るんです。
開きたいウィンドウ名はunit6、イベントは下記の通りです。
procedure TForm1.N2Click(Sender: TObject);
begin
end;
また、closeメソッドについても上のイベントとボタンの名前以外は同じなので
上のイベントを使って説明してくだされば幸いです。宜しくお願いします。
>>984
Object Pascalに非常に類似しています。

>>985
Form1.show();
987971 ◆le/tHonREI :03/12/13 13:49
>>986
ありがとうございました。おかげで少し形になってきました。

皆さんでDelphi入門書のおすすめありますか?
今日か明日くらいに書店で購入してこようかと考えているのですが、
どうせ買うなら「これ一冊」という感じのを購入したいので先人の皆さんのお役に立った本を紹介してください。
988971 ◆le/tHonREI :03/12/13 13:54
すいません、追加で質問よろしいでしょうか?
現在メニュー関係を弄りだしたのですが、ショートカットが思ったようになりません。
Alt+Oなどを任意で設定できるのでしょうか?
また、Alt+Oに付加的にCtrl+Oも追加できますか?
追加質問になり大変申し訳ありませんが、やりかたのご指導お願いします。
>>987
>>68のサイトをみれば、困ることはほとんどないと思うが・・・

あとはコンポーネントのリファレンス、
Borland Delphiリファレンスガイド―6&7 Personal対応
が、初めてコンポを使うときに判りやすくてよかった。
あと、慣れてくるとDelphi6プログラミングバイブルが役立つ。
Delphi7のコースウェアと魔法のTipsも持ってるけど、俺はあんま見ないな・・・

あと個人的にDelphiコンポーネント設計&開発完全解説
の内容は時間があれば熟読してみたいとオモタヨ

>>988
TMenuItemのショートカットのことなら、ShortCutプロパティのヘルプをみれ。
複数のショートカットが割り当てられるかはわからない。
990971 ◆le/tHonREI :03/12/13 14:15
>>989
色々とご指導ありがとうございます。
ショートカットも欲しい機能だったのですが、
メニューでファイルだったらAlt+Fで開く"Flie(F)"ってのを作りたいのですが、
この場合はどうすればよいのでしょうか?

あと、次スレ必要でしたら立てますがいかがしましょうか?
>>990
http://www.geocities.jp/takamori700/faq/idx03_vcl_TMainMenu.html
このように設定して、オブジェクトインスペクタのショートカットプロパティを設定

でいい?
992971 ◆le/tHonREI :03/12/13 14:42
>>991
即レスありがとうございます。
ちょっと自分の考えとは違うんですが、詳細は以下のSS見ながら説明します。
ttp://up.isp.2ch.net/up/8e44c4fe1a3a.jpg
今この状態だと、ファイルがファイル(W)になってしまっています。
これをAlt+Fで開くファイル(F)にしたいのですが…
ShortCut全部取っ払ってメニューのキャプションを"ファイル(&F)"にしとけ
994971 ◆le/tHonREI :03/12/13 14:54
>>993
ありがとうございました。おかげでうまくいきました。
あと、次スレ立てました。
くだすれDelphi Part9 (超初心者向け)
http://pc2.2ch.net/test/read.cgi/tech/1071294733/
function MD5FileHash(Stream: TFileStream):string;
const
BufSize = 32768;
var
ctx: MD5Context;
digest: array[0..15]of Char;
buffer: pByte;
i, datasize: Integer;
begin
Getmem(buffer,BufSize);
try
MD5Init(ctx);
while true do begin
DataSize :=Stream.Read(buffer^,BufSize);
if DataSize = 0 then break;
MD5Update(ctx, Buffer, DataSize);
end;
MD5Final(ctx, digest);
finally
FreeMem(buffer);
end;
for i := 0 to 15 do
Result := Result +
LowerCase(IntToHex(BYTE(digest[j]), 2));
end;
996デフォルトの名無しさん:03/12/13 19:23
1000!
997
998
999

もそもそと1000ゲットするとはぞっとしない由。

次は http://pc2.2ch.net/test/read.cgi/tech/1071294733/
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。