くだすれDelphi Part8 (超初心者向け) 952 :
デフォルトの名無しさん :03/12/11 18:10
OLEで起動させたエクセルのウィンドウの Xマークを 無効にしたのですが、どうすればいいのでしょうか? どなたか教えて下さい。
Pure型のP2Pソフトを作ろうと思っています。//IndyのTcpServerとTcpClientを使う予定です。 相互にリンクを張り、ネットワークを形成します。3台以上 鯖側ソケットは多接続可能なので1つでいいと思いますが 鞍側は1ソケット辺り1つしか接続張れませんよね? そうなると、やはり鞍側ソケットは接続したい数だけ設計時にあらかじめ作成しておかねばなりませんか? 動的に必要な分だけ作成できればいいのですが、イベントの関連付け(?)方が分かりません。 なお、当然のことながら全ての鞍ソケでのイベントは同じです。
955 :
デフォルトの名無しさん :03/12/11 18:37
音を重ねて鳴らす方法を教えて下さい。 今は一つの音を鳴らしている間に他の音を鳴らすと最初の音が消えてしまいます。 やらしくおねがいします。m(_ _)m
952です。 質問の訂正です。 OLEで起動させたエクセルをDelで作ったソフトからのみ 閉じるようにするにはどうすればいいのでしょうか、ってことです。 Del7+Win2000です。 宜しくお願いします。
958 :
デフォルトの名無しさん :03/12/11 23:00
959 :
デフォルトの名無しさん :03/12/11 23:03
DirectX…とつぶやいてみる。
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 に変換するやり方がこれしか思い浮かばなかったので、
この方法を使っているんですが、どうするのが良いのでしょうか?
966 :
965 ◆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);
964さん、ありがとうございます。 起動オプションが分かりません。 ヘルプを見たり、ぐぐって見ましたが目的の物が見つけられませんでした。 どなたか、ヒントだけでもお願いします。
971 :
◆le/tHonREI :03/12/13 00:56
メインウィンドウ以外の新しいウィンドウをメインウィンドウのメニューバーから開きたいのですが、どのようにすればよいのでしょう? また、メニューバーの項目で「アプリケーションの終了」を行う事はできるのでしょうか? できるのなら、そちらのやり方も教えて下さい。お願いします。 また自分はプログラミング超初心者なので、delphiを勉強する上で役立つサイト等ありましたら教えて下さい。 お願いします。
972 :
デフォルトの名無しさん :03/12/13 01:00
また「愛ちゅん、シゲさん、ガキさん」がいないのか…。 ちょっとヒドくね? あんまりだなぁ…。 よっすぃー優勝ってのは…。
誤…誤爆…。
>>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 別に移植するつもりは無くても、意味も無く環境依存なコードを書くのもどうかと思うが。
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; として終了しているのですが、 実際は、フォームを閉じないとエクセルのプロセスが 消えないのですが、何か対処法はありますでしょうか?
デルファイの文法ってどういうのですか?
985 :
971 ◆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();
987 :
971 ◆le/tHonREI :03/12/13 13:49
>>986 氏
ありがとうございました。おかげで少し形になってきました。
皆さんでDelphi入門書のおすすめありますか?
今日か明日くらいに書店で購入してこようかと考えているのですが、
どうせ買うなら「これ一冊」という感じのを購入したいので先人の皆さんのお役に立った本を紹介してください。
988 :
971 ◆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プロパティのヘルプをみれ。
複数のショートカットが割り当てられるかはわからない。
990 :
971 ◆le/tHonREI :03/12/13 14:15
>>989 氏
色々とご指導ありがとうございます。
ショートカットも欲しい機能だったのですが、
メニューでファイルだったらAlt+Fで開く"Flie(F)"ってのを作りたいのですが、
この場合はどうすればよいのでしょうか?
あと、次スレ必要でしたら立てますがいかがしましょうか?
992 :
971 ◆le/tHonREI :03/12/13 14:42
ShortCut全部取っ払ってメニューのキャプションを"ファイル(&F)"にしとけ
994 :
971 ◆le/tHonREI :03/12/13 14:54
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
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。