Delphiで小さな実行ファイルを作ろう

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
またDelスレでゴメンなさい。sageで進行するので許してね
2デフォルトの名無しさん:01/12/23 13:04
常時あげ
3:01/12/23 13:04
参考サイト : http://www.din.or.jp/~tetsu/apps/ ここの小さい exeを作りたい
5:01/12/23 13:09
まずは
http://pc.2ch.net/test/read.cgi/tech/1008238418/216
ポトペタが嫌いな人へのDelphi入門スタート

メモ帳で
program Hellow;
uses windows ;
begin
 if MessageBox(0 ,'こんにちは','タイトル',MB_OKCANCEL or MB_ICONINFORMATION )= IDOK
  then MessageBox(0 ,'元気だよね','ありがとう',MB_OK or MB_ICONQUESTION );
end.
と書いて ファイル名  Hellow.dpr で保存
このファイルをDelphiでダブルクリックして実行。

入門編終わり
6:01/12/23 13:11
>>4 いやホントゴメンね

ダイアログアプリを作る時の参考になるコード
http://member.nifty.ne.jp/m-and-i/tips/useresfile.htm
7デフォルトの名無しさん:01/12/23 13:15
http://www.keddy.ne.jp/~ill/

ここのProgramsに置いてあるごみ。
いたい、痛すぎる。
>>7
始めたばかりなら別にいいんじゃない?
>>8

得意気に公開するのが痛い。しかもひろゆきを馬鹿にしているし。
10デフォルトの名無しさん:01/12/23 13:39
>>9
別に得意げには見えないけど?
>>10

UG気取り
12:01/12/23 13:46
とりあえず俺も小さなプログラム作るの挑戦中 ・・・あんまり意味ない行為とはわかってるけどね winAPIの勉強と思ってやってる

なにせ
SysUtils とか Registory ユニットを使うだけでそれぞれ20Kbyteくらい一挙に増えるから
直API叩きをやらなければならない
C#なら普通に作ってもバイナリ小いよ。
Delphiでコンソールアプリは良く設計するから、別に意識することないな・・・。
TPC.exeの変わりにDCC32.EXEを実行してるだけ。
15:01/12/23 14:03
とりあえず、こんな感じで直APIに挑戦中
たぶん大きなアプリになるとこういうのを個別に作るより
TRegistory使う方がトータルサイズは小さくなったりするんだろうけど

レジストリを読む関数
function ReadUserStrReg(const RegPath,SubKey: String):string;
var
Key: HKey;
err:DWORD;
typ:DWORD;
size: Integer;
begin
Result:='';
err := RegOpenKey(HKEY_CURRENT_USER,PCHAR(RegPath),Key) ;
if err = 0 then Try
err:=RegQueryValueEx(key,PCHAR(SubKey),nil,@typ, nil,@size);//必要なサイズを知る
if err<>0 then exit;
SetLength(Result,size);
RegQueryValueEx(key,PCHAR(SubKey) ,nil,@typ, PByte(Result),@size);
finally RegCloseKey(Key) end;
end;
16Delフサギコ:01/12/23 14:39
   ∧,,∧    マターリ
  ミ,, ゚Д゚彡
   〃つ旦O
 〜ミ,,[ ̄ ̄ ̄.]
      ̄ ̄ ̄
__∧_____

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1009085598
昨日、久しぶりにプログラミングの感覚を取り戻したくて
ちょっと作ってみた。コマンドラインのプログラム。

仕様は

 BbsIndent HtoZ ファイル名
とするとプログラムソースの先頭インデントを
半角スペースの場合全角スペースに置き換える

 BbsIndent ZtoH ファイル名
だと全角スペースインデントを半角スペースにする


DelphiIDEのツールからプログラムを呼び出して

実行時引数を
  HtoZ $EDNAME

  HtoZ $EDNAME

にすると、DelphiIDE上で普通の半角スペースインデントを
全角スペースに置き換えられるので
2chに貼り付けたりする時に便利

行先頭の半角スペース2個と全角スペース1個とを置き換えてます。

どうせならエキスパートを組み込んだ方がいいんだけど。
これはこれで手軽に使えるかな。
必ず変換ソースファイルを保存してから動作させるようにしましょう。
17Delフサギコ:01/12/23 14:46

  ∧,,∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ ゚Д゚ミっ < >>5 Helloの綴り間違ってるよ
  |''U ̄|   \_________________________
  | ̄ ̄|  ワザトカナ?
 /    ゙ヽ
(   ゚Д゚  ) < Hell World! Hell World!
人____ノ
and you scream! on HELLOWEEN.
19:01/12/24 09:51
フサギコさんにレス付けて貰った・・・嬉しい・・

という事でBbsIndent.exe コンパイルして実験してみました。
 Delphi5 59KByte
 Delphi6 126KByte なんと倍!

たった2つのユニットしか使ってないのにこのサイズ?という事で

usesに入れるだけで増えるサイズ
Forms  267KByte
SysUtils 24KByte 文字列や例外を使うなら必須か?
typinfo  24KByte
Classes  40KByte D6では86K


ところでこの BbsIndent.exeってコンソールアプリである必要ってないですよね?
{$APPTYPE CONSOLE}を外しても全く同じ動作をしました。
20:01/12/24 14:05
欲が出て簡単なインストーラを作りたいなと思いだしました。
リソースにファイルのアーカイブしたのを入れて実行したら
指定したディレクトリに解凍してレジストリの設定するような簡単なものです。
という事で出来るだけ本体は小さくしたい、20K代が目標です。
このサイズは、
SysUtils と Classesを使わずに作らないとやっぱり難しいようです。

という事で、既にファイルがあるかどうか調べる FileExist置換用の関数

function FileExist(fname:string):boolean;
var FindData: TWin32FindData;
begin
 Result:= FindFirstFile(PChar(fname), FindData) <> INVALID_HANDLE_VALUE;
end;
21:01/12/24 16:50
リソースの設定方法と読み方判りました。
test.rc
TEST RCDATA "test.MyArc"
 こんな1行のファイルを作ります。
 TEST は識別名で好きな名前を付けます
 RCDATAは決まっています
 test.MyArcは埋め込みたいファイルです

これを "プロジェクトに追加" で追加すれば勝手に test.MyArcが追加されます

このリソースを読む方法は

function setup:string;
var ResInstance,Size :integer;
var hr:HRSRC;
var src:PByte;
begin
 ResInstance := 0; //実行ファイルの場合は0を渡せばいいみたい
 // ResInstance := System.FindResourceHInstance(HInstance);
 hr  := FindResource (ResInstance, 'TEST', RT_RCDATA);
 Size := SizeofResource(ResInstance, hr );
 src := PByte(LockResource( LoadResource(ResInstance,hr) ));
 UnArchive(src,Size); //自作のファイル展開ルーチン
end;
22:01/12/25 08:50
APIで 直接ファイルを読書する方法判りました
それぞれ一挙に文字列に受け取ります。

function readFileStr(fname:string):string;
var hin:THandle;
var rsize:DWORD;
begin
result:='';
 hin:=CreateFile(PChar(fname),GENERIC_READ,0,nil,OPEN_EXISTING
 ,FILE_ATTRIBUTE_NORMAL,0);
if hin<>0 then try
  SetLength(Result, GetFileSize(hin, nil));
  ReadFile(hin,PChar(Result)^,Length(Result),rsize , nil);
 finally CloseHandle(hin);
 end
end;

function writeFileStr(fname,data:string):boolean;
var hout:THandle;
var wsize:DWORD;
begin
result:=false;
 hout:=CreateFile(PChar(fname),GENERIC_WRITE,0,nil,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
if hout<>0 then try
  if WriteFile(hout,PChar(data)^,Length(data),wsize,nil) then
   result:=wsize=Length(data);
 finally CloseHandle(hout);
 end
end;

これで目標の20Kbyte付近のアプリが出来ました。
驚いた事に systemとwindowsだけの場合 Delphi6の方がサイズが小さくなりました
23:01/12/25 13:31
>>16 フサギコさんのと同じ働きをします。サイズ16KByteです
---------以下ソース------
program BbsIndent;
uses windows;
const
 HankakuIndent: String = #32#32;
 ZenkakuIndent: String = #$81#$40;//全角のスペース

{ここに>>22 の readFileStr writeFileStr をコピペ}
   
function RepString( Str, OldPattern, NewPattern: String):string;
 var
  i: Integer;
begin
  Result:='';
  i:=Pos(OldPattern,Str);
 while i>0 do begin
  Result:=Result+copy(Str,1,i-1) //前半を複製
      +NewPattern;
  delete(Str,1,i-1+length(OldPattern));
  i:=Pos(OldPattern,Str);
 end;
 Result:=Result+Str;
end;

function upperCase(const s:string):string;
var
 c: char;
 i: integer;
begin
result:=s;
for i:=1 to Length(Result) do begin
  c:=s[i];
   if c in ['a'..'z'] then Result[i]:=char(ord(c)- (ord('a')-ord('A')) );
 end;
end;

var str:string;
begin
 if ParamCount <> 2 then Exit;
 if upperCase(ParamStr(1))='HTOZ' then begin
  str:= readFileStr(ParamStr(2));
  str:= RepString(str,HankakuIndent,ZenkakuIndent);
  writeFileStr(ParamStr(2),str);
 end else
 if upperCase(ParamStr(1))='ZTOH' then begin
  str:= readFileStr(ParamStr(2));
  str:= RepString(str,ZenkakuIndent,HankakuIndent);
  writeFileStr(ParamStr(2),str);
 end
end.
そこまでするんだったら、Variant とかを使わない
SysUtils/Classes を調整してみた方がおもしろいかも。

リハビリでやってみるか。どこかバイナリファイルをアップできる場所
おしえて。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/index.html
ここなんか(ここの)定番かと。
26:01/12/25 22:46
ダイアログアプリの作り方判りました。

1)Delphi5のCDROMからWORKSHOPを探してインストール
2)空行でTEST.RCを作る
3)Resource Workshop を走らせて2)のファイルを読む
4) 適当にダイアログを作る
例:
#define DIALOG_1 1
#define IDC_PUSHBUTTON1 101
#define IDC_PUSHBUTTON2 102
#define IDC_EDIT1 103

DIALOG_1 DIALOG 6, 15, 199, 62
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "DIALOG_1"
{
DEFPUSHBUTTON "空白全角に", IDC_PUSHBUTTON1, 4, 3, 50, 14
DEFPUSHBUTTON "半角に戻す", IDC_PUSHBUTTON2, 5, 20, 50, 14
PUSHBUTTON "Cancel", IDCANCEL, 5, 38, 50, 14
EDITTEXT IDC_EDIT1, 59, 5, 132, 54
}

5)Delphiの新規作成でコンソールアプリにし
  {$APPTYPE CONSOLE} を削除し、名前を付けて保存

6)Delphiのプロジェクトに追加で 2)を追加する
7)Delphiの新規作成でユニットを作成する

例:
program Indent2CH;
{$R 'TEST.res' 'TEST.RC'}
uses
Unit1 in 'Unit1.pas';
begin
WinMain; <-これを追加
end.

・・・つづく・・・
27unit1.pas:01/12/25 22:48
unit Unit1;
interface
uses Windows,Messages ;
type TDialog =class(TObject)
Handle:THandle;
private
  procedure WMCommand(var Message: TWMCommand); message WM_COMMAND;
  procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
public
procedure WndProc(var Message: TMessage);
procedure DefaultHandler(var Message); override;
end;
procedure WinMain;
var Dialog1:TDialog;
implementation
function DlgProc(hDlg: HWND; iMsg: UINT; wp: WPARAM; lp: LPARAM): LRESULT;stdcall;
var msg:TMessage;
begin
with msg do begin Msg :=iMsg; LParam:=lp ; WParam:=wp ; Result:=0 ; end;
 Dialog1.WndProc(msg);
 Result:=msg.Result;
end;
procedure WinMain;
var msg: TMsg;
begin
 Dialog1:=TDialog.Create;
  Dialog1.Handle := CreateDialog(hInstance,MAKEINTRESOURCE(1), 0, @DlgProc);
try
 while GetMessage(msg, 0, 0, 0) do
 begin
  if (Dialog1.Handle = 0) or not IsDialogMessage(Dialog1.Handle, msg) then
  begin
   TranslateMessage(msg);
   DispatchMessage(msg);
  end;
 end;
// CloseHandle(Dialog1.Handle);
finally
 Dialog1.Free;
end;
end;
{ TDialog }
procedure TDialog.WndProc(var Message: TMessage);
begin
Dispatch(Message);
end;

procedure TDialog.WMCommand(var Message: TWMCommand);
begin
case Message.itemID of
 101:begin   end; //ここにプログラムを入れる
 102:begin   end;
 IDCANCEL:PostMessage(Handle, WM_QUIT, 0, 0);
end;
end;
procedure TDialog.WMPaint(var Message: TWMPaint);begin end;
procedure TDialog.DefaultHandler(var Message);
begin  with TMessage(Message) do Result:=0; end;
end.
281:01/12/25 22:55
>>24 おお、すごいなあ  おいらはダイアログアプリでもう降参気味です

メッセージディスパッチを使うんだけど このitemIDをDelphi側から読む事
って簡単に出来ないのかな?

リソースワークショップで新規作成するときに  .pas とかあるから期待したけど
なんかユニットを指定したらエラーになるし使い方が判らない
>>28
WorkShop が吐き出す .pas をコンパイルする、かまたは .inc を出すんだと
思ったが。近頃使っていないんで、すまん。
WinAPIベースでよくつくるけど、
例外の再定義が面倒になって
さすがにSysUtilsは使っちゃうようになったよ。
311:01/12/27 08:29
>>29 なるほど、出来ました。
 incにすれば const だけが pasにすれば
unit name;
interface
const
 DIALOG_1 = 1;
implementation
end.
 てな感じのファイルが出来ました。 これを インクルードするなりプロジェクトに追加するなりすればOKですね。

>>30 おお、同士ハッケン!
  確かに毎回 SysUtils 相当の関数自作は厳しいですね。
  勉強期間なら頑張れるけど 本番だと厳しそう。
  というか、「素直に c 使え!」って感じの声が自分の中からも聞こえて来るように

 でもメッセージディスパッチが使える分Cより効率的な筈
 例外もabortなら標準で使える。
 abort+グローバル変数でもいいじゃないって自分を騙しながら
>  確かに毎回 SysUtils 相当の関数自作は厳しいですね。

使う関数だけコピペしたら良いんじゃないの?
>>32 見てみれば判るけど
 相互に関連しあってて簡単には分離出来ないぞ 例外とか
 もちろん分離出来るのもあるけどね
341:01/12/29 13:37
SelectDirectoryのようにTFormを使わないフォルダ選択関数出来ました

uses shlobj,activex;

function MySelectDirectory(const tit:String):string;
var
BInfo:BROWSEINFO;
RetFolder:PItemIDList ;
var fName:string;
begin
 result:='';
 setlength(fName,MAX_PATH);
 fName[1]:=#0;

 BInfo.pidlRoot    := nil; //ルートフォルダ名
 BInfo.hwndOwner   := 0 ; //親ウィンドウのハンドル。
 BInfo.pszDisplayName := pChar(fName); //選択されたフォルダ名が返る
 BInfo.lpszTitle   := pChar(tit);
 BInfo.ulFlags    := BIF_RETURNONLYFSDIRS;
 BInfo.lpfn      := nil; //ダイアログプロシージャへのポインタ
 BInfo.lParam     := 0; //プロシージャを使う時の
 RetFolder:= SHBrowseForFolder( BInfo );
  Result:=PChar(fName);
 if RetFolder<>nil then try
  if SHGetPathFromIDList( RetFolder, pChar(fName) ) then
   Result:= pChar(fName);
 finally CoTaskMemFree( RetFolder ); end;
end;
351:01/12/29 13:38
>>32 そうですね。 関数だけコピペしてすむのはコピペすればOKだと思います
36デフォルトの名無しさん:01/12/29 17:44
KOLはどうですか?
MCKでビジュアル開発できてADOも使えて45kbyteとか
URLはgoogleで探してちょ(すぐみっかる)

あとglutとかD3DXを使うというのも正しい手かも
ほかに小さくIEをくるんだアプリを作ってそこからCOM使いまくりというのもありかも
381:02/01/10 12:56
DDEで他のアプリに命令を送る方法判りました
 DDEって昔の技術みたいで殆ど解説が無いので結構苦労しました
DDEsendExec(相手のアプリ名 , トピック名 , メッセージ ) と使います
トピック名は エクスプローラのファイルタイプの設定で編集にすると見えるアレです


function DDeCallBack(CallType, Fmt: UINT; Conv: HConv; hsz1, hsz2: HSZ;
  Data: HDDEData; Data1, Data2: DWORD): HDDEData stdcall;
begin  result:=0;
end;

function DDEsendExec(const AppName,Topic,Cmd:string):boolean;
var DDE: Longint;
var Err: Longint;
var hszService,hszTopic:HSZ;
var Conv:HConv;
begin
DDE:=0;
Err:=DdeInitialize(DDE,DDeCallback, APPCMD_CLIENTONLY , 0);
Result:= 0=Err;
if not Result then begin exit;
end;
  hszService := DdeCreateStringHandle(DDE,PChar( AppName), CP_WINANSI);
  hszTopic  := DdeCreateStringHandle(DDE, PChar(Topic) , CP_WINANSI);

 try
  Conv := DdeConnect(DDE, hszService, hszTopic, nil);
   Result:= Conv <> 0 ;
  if not Result then exit;
  try
  err := DdeClientTransaction(PChar(Cmd),Length(Cmd)+1 ,Conv ,0, 0,XTYP_EXECUTE , TIMEOUT_ASYNC, nil);
  Result:=err<>0;
  finally
   DdeDisconnect(Conv);
  end;
 finally
  DdeFreeStringHandle(DDE, hszTopic );
  DdeFreeStringHandle(DDE, hszService);
  DdeUninitialize(DDE);
 end;
end;
39デフォルトの名無しさん:02/01/12 10:12
いちどあげとく
40デフォルトの名無しさん:02/01/22 08:36
あげ
41デフォルトの名無しさん:02/01/22 10:55
dfmtodprというユーティリィティでボタンとかリストボックスで作ったアプリは
Win32APIのテンプレートにしてくれるので便利

あと日本でもhalbow氏の
http://halbow.cool.ne.jp/top.html
は悪くはないがここまでやるならオブジェクト指向はいったんおいといて
関数ライブラリーにしたほうが良かろう。
42デフォルトの名無しさん:02/01/22 13:26
>> 41 ありがとう

Dfm2Dpr
ttp://ivs-d.chat.ru/

>>41

関数では継承できない......
>>41

関数ではメッセージ処理もできない
そんな面倒なことしてまで Delphi 使う理由があるのだろうか。
今のご時世EXEが大きくたって問題にはならんだろう。
工数掛けてまでサイズを取るか、工数掛けずに良質のものを作るのか?
もちろん後者なのは言うまでもないはず。
もういちど初心に戻って Delphi を使う意味を考えた方がいいのではと思います。
IDE付のgccと言う感覚で使ってるからなあ・・・
>>45

工数がどうの、サイズがどうの、という方ばかりが Delphi のユーザでは
ないことをお忘れなく。

>47同意。俺は趣味で使ってるからなー、意味が無くともサイズ削るのが楽しー。
今、ReleaseBuild用の代替ライブラリー作って遊んでる。まだ公開してないけど。
>>45
メモリやハードディスクが安くなり、通信速度が向上したから
といって、大きい exe でもことたれり、とするのはプログラマ
としては怠慢なのでは?
Delphi を使って、小さくて<良質な>実行ファイルができるなら
それに越したことはないだろう。
もちろん、コストとのトレードオフは言うまでもないが。
>>45=プロ(仕事)
>>49=アマ(趣味)
>>50
プロとは、フォーム1枚表示するようなアプリでも200kBの exe を
つくっても平気な方々のことですか?
ふーん。
そんなにサイズが気になるならDelphiを使わないという選択肢の方が賢かろう。
Delphiのフレームワークから逸脱するんならDelphiの魅力が半減するからな。
>>52
ご教示、ありがとう。
Delphiのユーザはサイズが気にならないんですね。
「Delphiを使わないという選択肢」を選んだとして
何を使えば、小さなアプリがつくれますか?

「Delphiのフレームワーク」とは、VCLのことですか?

ということは、Delphiの魅力の半分はVCLをつかって
大きな exe をつくる、ということなんですね。
(゚Д゚)ハァ?
Delphiの魅力は生産性の高さだろ。その多くはVCLの扱いやすさのおかげじゃない。
サイズにこだわるよりもっと機能の充実を考えるべきだろ。
そんなにサイズを追求するならVCか、全部アセンブラで組めば?

…と、傍から見ていると思う。
もちろんDelphiが裏で何をやっているかの勉強にはなるが。
5553:02/01/28 00:13
>>54 そんなにサイズを追求するならVCか、全部アセンブラで組めば?
VC だと小さいexeがつくれるんですね? Delphi ではどうしてだめなの?
(アセンブラはしりません)
コンパイルにかかる時間がもったいなくなければVC使えばいいよ。
5753:02/01/28 00:22
>>56
コンパイルにかかる時間が惜しいので、大きなexeをつくってるんですか?
5853:02/01/28 00:25
みなさん、ありがとう、VCに逝って来ます。
実行ファイルのサイズを小さくすることが目的なの?
1から44までを見る限り、APIを直接呼び出して
コードを小さくしよう、という意味にとれるのだけど。
まとめ
45からの議論を読んでみると

Delphi → 生産性が高く、コンパイルが速い → 大きな exe 生成
VC → 生産性が低く、コンパイルもおそい → 小さな exe 生成

となるんだけど、45さんや52,54さんの主張が真だとすると、なぜ、
Delphiユーザの数はVCユーザの数の半分にも満たないのだろう?
Delphiがでてから6,7年は経っているのに。

本当に、小さいexeにこだわるのはアマチュアだけ?
まぁ、オレはアマだけどさ。
「VC=EXE小さい」って言ってるけど、MFCアプリで静的リンクさせれば300KB超あるよ。(もちろんリリースモードで)
VC(MFC)が小さいと思ってるのは動的リンクさせてるからだぞ。
Delphiだって実行時パッケージ使えばかなり小さくなるから、サイズに関してはどっちもどっちだよ。
>>60
>Delphiユーザの数はVCユーザの数の半分にも満たないのだろう?
MS の製品じゃないから。
6360:02/01/28 02:46
>>61
ふーん、だとすると余計に
VCユーザの数>>>Delphiユーザの数 は不可解だよね。

>>62
OSをつくったのと同じ会社の製品である、ということが
そんなに重要かねぇー。MS大好き、というヤツは少ないと
思うんだけど?
まったく分からんことが多いなぁ。プログラミングというの
は論理の世界に属すると思ったんだが、人間はそうはいかない
みたいね。

寄らば大樹の陰、じゃないけどD6のスカさにうんざりなこのごろ、
D5に戻るのも癪だから、VCに行ってみる事にするよ。
じゃ、そういうことで。
Delphiはコンパイルが速く、VCLを「使えば」ラクにGUIアプリもつくれるから使ってます。
VCLはあくまでツール作るときの道具なの。

VCがコンパイル速くてVCL並みのライブラリが標準装備なら
今ごろそっち移ってる
6560:02/01/28 10:23
>>64
問題は、そんなことではなく、

VCはコンパイルが遅くVCL並みのライブラリが標準装備
されていないのにもかかわらず

VCユーザの数>>>Delphiユーザの数

だっていう現実のことさ。
ここはDelphiスレなので64さんの意見は当然だと思いますが、
その64さんでさえ、条件が同等ならVCに移る、といってます。
どうしてなの?

オレは就職が有利そうなので、院でのツールはVCにすることに
決めたよ。
>オレは就職が有利そうなので、院でのツールはVCにすることに決めたよ。
これがすべてを説明してますな< VCユーザの数>
厨房な議論の割にsageを守ってるのは立派。以後もage無いように。
6760:02/01/28 10:50
>>66 お褒め、ありがとう。
オレは2年のときからだから3年近くDelphiをつかってきて、
Delphiの普及をこころから願っているよ。でも、現実は厳しい
ね。Cは前から知っているし、MFCも使ったことあるが、
VCLよりAPIのラップの程度が薄くて、SDKを知っている
ものにとっては、結構簡単に使えそうな感じ。でもウィザードを
つかってフレーム作ったりするのは、たしかに面倒ですね。

スレタイトルと違う話題で申し訳なかったです。>>1 & ALL

本当に Delphi ユーザの増加を願っているよ。そうすれば、情報量も
書籍の数も充実してくるんだよね。

じゃ、またいつか。
681:02/01/28 15:01
 うーん。
 VCL はとても便利で、アプリを作るだけならVCL使わない意味はないと思う
だけど、VCLをより便利に使う為にも 何をやってるか判った方がいいと思ったんだ
それにはVCLによらないアプリの作り方もやった方がいいと。
 それならCでとも思ったし、実際Cにも手を出してみたけど「面白くなかった」んだ
 だって、サンプル豊富で、サンプル通りやったら動くのよ、

それと、自分用の簡単なインストーラを作りたくなって、インストーラ自体が300Kとかだと
恥ずかしいかなと
 だからレジストリへの書き込みとか、そんな方面から色々やってみてたんだ
 自分では結構スキルアップになったと思う。 C/C++でも生かせるしね
691:02/01/28 15:18
45からの議論なんだけど
 Delphiのユーザ数よりVC++が当然多いってのは、
Delphiの生産性の高さも原因じゃないかと思う。 実際Delphiでアプリ作ると
 コンポ作れば作るだけ生産性あがるし、フォームは継承出来るし、
 同じような仕事だったら 
 仕様書作るより早く、こんなイメージ的なアプリ作れて、数日で調整してどう
 ぞみたいな感じになる。

俺は小さな会社でまあその会社で必要なソフトの内製 ひとりで全部やってるんだけど
 組み込み的な仕事のWindows側や会社の事務の仕事から全部Delphiで賄ってる

 そんな訳で他にプログラマ雇ってもらう必要がない。

組み込み用のマイコンにC使うし、Cの部分の検証の為やデバドラ作らなけりゃいけない
時の為に VC++も買ってるけどVC++だけで同じ事やろうとしたら、やっぱり最低3人は
必要な気がするよ。 同業者見てもそんな感じ
>>65
・先行有利の法則
・Pascal に人気がない
・MSDN
・MS 製品は書籍がたくさん出る
7164:02/01/28 17:47
今ごろVCに移ってる、などと言っていましたが
将来を考えると最近C++移りたくなってきてるんです・・・。

うーん。

さすがに、ゲーム関連をDelphiでやってるのは少ないからなあ。
そもそもコンシューマだとDelphiはツールぐらいでしか活躍できないし。
>>70
それもあるが。
俺が仕事、趣味を通して考えるに、
企業ユース:VC>Delphi
個人ユース:VC<Delphi

ではなぜ企業ではVCなのか?
主な理由として、
(1) OSと同じMS製ならば何かと安心(ビジネスだと保守的になってしまう傾向にある。)
(2) その当時、C/C++がスタンダードな言語であったため、
   Delphi-Pascal は敬遠された。(ということもあり、試用せずに評価している。)
(3) 以前のボーランドは会社の状態が非常にやばかったため、
  つぶれそうな会社の製品を使う余地はない。

一方、個人=Delphiの理由は、
(1) VCに比べて敷居が低い
(2) 簡単にハデで高機能なプログラムが作れる
(3) VBの場合は、細かい制御等ができないが、Delphiは一通り何でもできる。
(4) VBと違いネイティブコードを吐き出せるし、ランタイムライブラリが要らないから
  配布し易い。(フリーウェア作者には好評)

仕事では客先から言語指定されるときはVC or VB。Delphiってことはまずない。
もちろん言語指定がない場合は当然Delphiでやってるよ。
DelphiがMS製なら企業ユースにもかなり浸透したと思うが。
>>71
将来を考えるのなら Java, C# やった方がいいのでは。
デバドラとか作るんなら C/C++ やっとく必要はあるが。
>>71 企業がゲーム作るとなるとWindows以外への移植とかも考えなければいけないし
    結局 C って感じになるんでしょうね

>>72
 企業でも、中小でコスト意識の厳しい所は Delphiになるのかも
 で Delphi選ぶと 効率がいいから人員が少なくてすむ=Delphiユーザが少ないとか
 実際Delphi使うと、一人で大抵の事出来るから、ソフト外注するなんて考えられないよね

VC++や C#でプログラマでございますってやっても 企業の都合でポイされるだけみたい
な感じがする。 だったら プログラマ職としてやるより、 他の業種のエンジニアとして
プログラムも出来るスタイルの方が長持ちするのかもなんてね
MS製かつDelphi似のC#ってそういう意味じゃ、かなりよいものかも。
BorlandやMSにさえこだわらなけりゃ
まあ、結局 コンパイラは道具。
 大事なのはコンパイラがいかに賢いかとかじゃなくて使う人間の方。

 そういう目で見りゃ、ここの1がやってるようなのは道具を研ぐというより人間を研ぐ行為で是だと思うな

善哉善哉
>>76 全面同意。
Delphi は道具として優れているのでとりあえず使っている。
CもC++も知っているし、そうね、3ヶ月あれば、いまの
Delphiユーザとしての自分のスキルに追いつける自信がある。
JavaとC#は囓った程度だが、恐れるにたらず、いつでも乗
り換えられると、と思っている。76さんの言うように、結局
特定の言語にこだわるより、道具として割り切って、自分自身
のスキルアップを目指すのが正解みたいね。その意味で、ここ
の1のスタンスはなかなかよいと思うよ。
一方、45さんのいうことも一理あるが、そもそもこのスレの
趣旨とは無関係、というか、はなからそのことは承知のうえである、
ってことですね。
Java見て、今まで自分作ってきたライブラリがほとんど標準で提供されていることに驚愕したよ
驚いた反面、これなら移行はすぐだと(自作ライブラリの移植がいらないなんて素晴らしい

そのかわりJavaはDesignPatternが当たり前のように出てくる罠
だらだらDelphi使ってると面食らっちまう・・・
79デフォルトの名無しさん:02/02/01 20:28
>>20
>Result:= FindFirstFile(PChar(fname), FindData) <> INVALID_HANDLE_VALUE;
これって見つかったときに CloseHandle しなくていいの?
成功したときはFindClose必須ですな
だれだよこんなスレ立てた奴…
http://pc.2ch.net/test/read.cgi/tech/1012574089/
82:02/02/05 14:11
http://pc.2ch.net/test/read.cgi/tech/1012574089/4
が動かない件ですが

if hWindow=0 then
MessageBox(0, PChar(SysErrorMessage(getLastError)), nil, mb_Ok);

を入れてみると 'ウィンドウ クラスを見つけることができません。' とメッセージが出ます
あれ、上で RegisterClass してるのにと見ると

function WinRegister: Boolean;
var
WindowClass: TWndClassEx;
begin

と肝心のクラス定義がローカル変数というオチのようです
>>82
ほんとだぁー、不思議、
var
WindowClass: TWndClassEx;
部分をグローバルにしたら動くね。どうして?
教えて下さい。
84:02/02/05 16:44
>>83 
私も詳しくは判りませんが、
RegisterClassではポインタをリンクリストみたいな感じで登録して
CreateWindowでポインタを辿って窓クラスを検索するようなイメージで考えていました

どちらにしても、関数内で閉じてない処理に、ポインタ渡しで永続的な情報を渡すのは
なんか変だなと思いますし
8583:02/02/05 17:04
>>84
レスありがとうございます。
わたしの環境では、
function WinRegister: Boolean;
が、そもそもfalseを返します。どうしてかよく分かりません。
CreateWindow() でのクラス指定は、RegisterClass(Ex) が返す
Atom を使うか、クラス名をそのまま指定しますよね。今の場合、
const
 AppName = 'Window1';
としてクラス名はグローバルなので、何も問題がないように思い
ますが、どーなんでしょ? あのコードをかかれた方も、D5では
うまくいくって言ってましたし。なぜかなぁ?
8683:02/02/05 17:24
>>84
あっ、84さんの仰っている事って、RegisterClass(Ex) のパラメータ
を、登録したプロセスの中のメモリに保持しなきゃダメってことですか?
どこかで、登録したウィンドウクラスの有効性は、登録したプロセスの
寿命と同じ、というのを読んだことがありますが、それと関連してるんで
すかね? それにしても、やはり function WinRegister: Boolean;
が false を返すのがふしぎです。
87:02/02/05 17:41
program Window1;
uses
 Windows,
 Messages;
const AppName = 'Window1';
type TMiniWin=class
private
 wATM    : ATOM    ;//RegisterClassの返すアトム
 WindowClass: TWndClassEx;
 hWindow: HWnd;
protected
 procedure WndProc(var Message: TMessage);virtual;
 procedure WMPaint(var Message: TWMPaint); message WM_PAINT;


function WinRegister: Boolean;
function WinCreate : Boolean;
public
procedure DefaultHandler(var Message); override;
constructor Create; virtual;
function Show:Boolean;virtual;
end;

function WindowProc(Window: HWnd; AMessage, WParam, LParam: Longint): Longint; stdcall; export;
var msg:TMessage;
begin
 msg.Msg :=AMessage; msg.LParam:=LParam ; msg.WParam:=WParam;msg.Result:=0;
 TMiniWin(GetWindowLong( Window,GWL_USERDATA) ).WndProc(msg);
 Result:=msg.Result;
end;

procedure TMiniWin.WndProc(var Message: TMessage);
begin  Dispatch(Message); //メッセージをディスパッチします
end;
procedure TMiniWin.DefaultHandler(var Message );
begin  with TMessage(Message ) do
 Result:=DefWindowProc(hWindow,Msg, wParam, lParam);
end;

function TMiniWin.WinRegister: Boolean;
begin
 with WindowClass do
 begin
  cbSize:=SizeOf(WindowClass);
  Style:=cs_hRedraw or cs_vRedraw;
  lpfnWndProc:=@DefWindowProc;
  cbClsExtra:=0;
  cbWndExtra:=0;
  hInstance:=HInstance;
  hIcon:=LoadIcon(0, idi_Application);
  hCursor:=LoadCursor(0, idi_Application);
  hbrBackground:=HBrush(Color_Window);
  lpszMenuName:=nil;
  lpszClassName:=PChar(AppName);
  hIconSm:=0;
 end;
 wATM:=RegisterClassEx(WindowClass);
 Result:=wATM <>0;
// if not Result then  MessageBox(0, PChar(SysErrorMessage(getLastError)), nil, mb_Ok);
end;
88:02/02/05 17:41


function TMiniWin.WinCreate: Boolean;
begin  Result:=false;
if wATM=0 then if not WinRegister then exit;
 hWindow:=CreateWindow({PChar(AppName)}PChar(wATM), PChar('ObjectPascalWindow'),
            ws_OverlappedWindow, cw_UseDefault, cw_UseDefault,
            cw_UseDefault, cw_UseDefault, 0, 0, HInstance, nil);
 Result:=hWindow<>0;
 if Result then begin
 SetWindowLong( hWindow,GWL_WNDPROC ,integer(@WindowProc));
 SetWindowLong( hWindow,GWL_USERDATA  ,integer(self));
 end;
end;

function TMiniWin.Show:boolean;
begin
Result:=False; if hWindow=0 then if not WinCreate then exit;
  Result:= ShowWindow(hWindow, CmdShow);
  Updatewindow(hWindow);
end;

constructor TMiniWin.Create;
begin  inherited
end;

procedure TMiniWin.WMPaint(var Message: TWMPaint);
var h:HDC;
var ps:PAINTSTRUCT;
 procedure textOut(x,y:Integer;s:string);begin Windows.TextOut(h,x,y,PChar(s),Length(s)); end ;
begin
 h:=BeginPaint(hWindow,ps);
  textOut(10,10,'こんにちは');
 EndPaint(hWindow,ps);
end;

procedure RunMessageLoop;
var AMessage: TMsg;
begin
 while GetMessage(AMessage, 0, 0, 0) do
 begin
  TranslateMessage(AMessage);
  DispatchMessage(AMessage);
 end;
end;
///////// main /////////
var MiniWin:TMiniWin;
begin
 MiniWin:=TMiniWin.Create;
 MiniWin.Show;
 RunMessageLoop
end.
89:02/02/05 17:43
>>83 さん 試しに 上のコードだとどうなりますか?

D6でも、元のコードを少しコードの順を変更したりして
スタックがそこまで消費されないと大丈夫になったりしますから
スタックにあると壊れてしまうからのように思います
90:02/02/05 17:55
ありゃ・・・・ 2度目は同名のWndClassが作れないから 複数の窓が開けないや


wATM : ATOM ;//RegisterClassの返すアトム
WindowClass: TWndClassEx;
この2つはクラス外に出して、ローカル領域にもってゆかないとダメみたい
9183:02/02/06 01:14
>>89

回答ありがとうございました。
帰宅したので、遅レス申し訳ありません。

ははぁ、Generic.c のウィンドウ部分をクラスにしたのですね。
大体動きましたが、ちょっと気が付いた点を......

1) WM_DESTROY メッセージの処理
がされていないので、Xボタンでウィンドウは破棄されるがメッセージ
ループから脱出できないのでアプリが終了しない
[対処]
procedure WMDestroy(var Message: TWMDestroy); message WM_DESTROY;
と宣言して、
procedure TMiniWin.WMDestroy(var Message: TWMDestroy);
begin
PostQuitMessage(0);
end;
としてキューに WM_QUIT メッセージをポストする

2) ExitCode の設定
がされていない
[対処]
function RunMessageLoop:WPARAM;
として、この関数の最後に
result := AMessage.wParam;
のように変更してから、メッセージループの実行部分を
ExitCode := RunMessageLoop;
とする。

3) MiniWin オブジェクトの破棄
がされていないので、結局、メイン手続きを
var MiniWin:TMiniWin;
begin
MiniWin:=TMiniWin.Create;
MiniWin.Show;
ExitCode := RunMessageLoop;
MiniWin.Free;
end.
にする。

以上です。あと、メソッドにできないウィンドウ関数で、ウィンドウハンドルと
それをラップしているオブジェクトを関連付けるために
SetWindowLong(hWindow,GWL_USERDATA,integer(self));
として GWL_USERDATA 領域にインスタンスを格納しているのは面白いと思いました。
ただ、初めに RegisterClass() でのウィンドウ関数の設定は @DefWindowProc に
なっており、ウィンドウ作成後に関連付けが行われるため、ウィンドウ作成に伴う
WM_CREATE などのメッセージをオブジェクトで受け取れないのは残念です。
また、WM_DESTROY で関連するオブジェクトを自動的に Free できるようにすると
便利だと思います。
9283:02/02/06 01:35
あと細かいことですが
hbrBackground:=HBrush(Color_Window);
の部分は
hbrBackground:=HBrush(Color_Window+1);
だと思います。
>WM_CREATE などのメッセージをオブジェクトで受け取れないのは残念です。
なんで?
出来てるよ?
9493:02/02/06 07:34
変な言い方したゴメン。
俺は出来てるよ。だった。
95:02/02/06 08:51
>>91 動いたという事は、
やっぱりスタック上のWindowClassが悪さしてたんですね。

解放の件は>>79さんにも指摘されましたが、ちょっと私のコードは甘いようです

WindowProcの件については、TMiniWinインスタンスアドレスを SetWindowLongで渡してい
る関係上、どうしてもCreateWindow時に インスタンスアドレスを渡せない為に仕方ないか
と思います。
WM_CREATE は窓ハンドル作成時に自分で自分に送りつけるしかないかと
96:02/02/06 09:00
ありゃ下げ忘れた・・・かちゅ〜しゃ使えなくなってたし

ダイアログと違ってクラスで実装しても VCLとは無関係な世界になって
あんまり面白くないですね。
 メリットとしてはFreePascalとかでも使えるくらいかな
たぶん初めからDefWindowProcじゃなくてWindowProcにWindowProcを設定して、
CreateWindowのパラメータでインスタンスアドレスを渡しWindowProc内部で、
WM_NCCREATE/WM_CREATEのときにSetWindowLongするって話?>93
98:02/02/06 09:28
なるほど >>97 さん CreateWindowの最後のlpParamで渡すんですね
9993:02/02/06 12:19
>>97
ビンゴ
10083:02/02/06 14:53
>>95
>やっぱりスタック上のWindowClassが悪さしてたんですね。
そうですね、これは微妙で深刻な問題だと思います。

とりあえず、元コードで
function WinRegister: Boolean;
が false を返す件は、with を使わなければ回避できそうです。

あと、細かいところでは
hCursor:=LoadCursor(0, idi_Application);
のところは
hCursor:=LoadCursor(0, IDC_ARROW);
だと思います。
  
  
101:02/02/16 08:34
いちどあげます

100さん >>88のコードをキレイに書こうと色々追加してたら とても大きくなってしまい
しかもキレイじゃありません。 うーん
それと、コンポーネントじゃない窓クラス作ってもそれほどの意味はやっぱりないですね
ダイアログアプリ程度が限界という感じかな
102100:02/02/16 11:58
>>101
>コンポーネントじゃない窓クラス作ってもそれほどの意味はやっぱりないですね

通常、インスタンスをひとつしか作りませんからね。そうかもしれません。
でもイベントをつけたり、プロパティーをとおしてウィンドウの制御をしたり
というふうにすると<勉強>にはなるかもしれませんね。
SysUtils, Classes, Controls, Forms, Menus, ActnList, Buttons,,,,
ぐらいの適当なパッケージを作って(〜600Kくらいになる)、
それとリンクさせるのが一番効率いいのかな。(何もしないフォームだと14K)
>>103
それは、exe の中身をパッケージに移しただけでは?
いや、確かに小さい exe ではあるね。なるほど。
106デフォルトの名無しさん:02/03/21 23:48
ageとくか
Delphi.NETのはむちゃくちゃ小さくなりそう。
皆、サイズのためになぜそこまで労力を注ぐ?
フォームにコンポ―ネントをバーンバーンバーン、
でコンパイルー、でOKじゃん!
OKじゃん!
OKジャン
OXジャン
ゲーム作ってるけれど正直な話、実行ファイルより他のデータの方が大きいので、
実行ファイルサイズなんて大して気にならない。
それよりもDirectXを使ったときの変な挙動が気になるから、
APIでゴリゴリ(もちろんラップして再利用化ぐらいしてるさ)。
>>112 このスレはもともと APIゴリゴリでDelphiを使おうというスレのようだった気がするんだが
1141:02/04/01 12:05
今ネタないので保守カキコ
GBAのエミュつくれる?
>>115
Delphiでも作れるよ。
でも何故わざわざここで聞くの?
117デフォルトの名無しさん:02/04/13 12:03
エミュレータを作るのはコツを覚えれば簡単。
まぁ性能に関しては知識がいるんだけどな。
118デフォルトの名無しさん:02/04/27 21:33
age
DelphiでMMOゲームって作れるのかなぁ。
>>119
作れる。以上。
>>120
正直今までObject Pascal見縊ってました。
>>121
というかVBのPascal版としか考えていなかったんだろ。
C++で出来ることの99%は出来るぞ。
>>119
こんなこと言っているやつは作れない。
所詮Delphiもそれだけの開発環境ということ。

VCなんかももちろん同じだが。
124デフォルトの名無しさん:02/04/30 04:00
GDI+をDelphiから使うユニットを見つけたので紹介。(と同時に質問させていただきます)

http://www.progdigy.com/

SelectObjectとかCreateDIBSectionとか鬱になる旧GDIのAPIを使わずに済むので、
APIだけでコードを書く時は莫大なメリットになる思います。
しかしXP以外は最初からOSに入っていないという罠も…。
英語の読める人にお聞きしますが、gdiplus.dllって再配布可能ですか?
>>124
>GDI+をDelphiから使うユニット
そのままDLLで使えないの?
正直、DelはGUI部分だけにしたい。
127124:02/04/30 06:01
書くの忘れてましたがgdiplus.dllはMicrosoftのDLLです。
XP以外ではMSのサイトから落としてくる必要があるのですが、これをアプリにくっつけて再配布できるか知りたいのです。
以下の辺りと思うのですが…。(添付のlicense.txtより抜粋)

* Distribution Terms. You may reproduce and distribute an unlimited number of copies of the Sample Code and/or
Redistributable Code (collectively "Redistributable Components") as described above in object code form, provided that (a)
you distribute the Redistributable Components only in conjunction with and as a part of your Application solely for use with a
Microsoft Operating System Product; (b) your Application adds significant and primary functionality to the Redistributable
Components; (c) you distribute your Application containing the Redistributable Components pursuant to an End-User License
Agreement (which may be "break-the-seal", "click-wrap" or signed), with terms no less protective than those contained herein;
(d) you do not permit further redistribution of the Redistributable Components by your end-user customers; (e) you do not use
Microsoft's name, logo, or trademarks to market your Application; (f) you include a valid copyright notice on your
Application; and (g) you agree to indemnify, hold harmless, and defend Microsoft from and against any claims or lawsuits,
including attorneys' fees, that arise or result from the use or distribution of your Application. Contact Microsoft for the
applicable licensing terms for all other uses and/or distribution of the Redistributable Components.

>>125
GDI+はC++型のクラスを用いる形なので、上記ユニットはNewInstanceをoverrideしてDelphiのクラスをGDI+のクラスとして振る舞わせてます。
124はまだ自分好みのwrapperクラスを(見つけ|作)ってないのか
>>127
それはEULAでしょ?再配布については記述されてない。
Redist.txtとか入ってなかったか?
もしくはEULAにRedistのセクションは無いのか?
>>124
こんなところで訊いて、yes or no の回答があったら信用するのか?
自分で訳せよ
試みとしては面白いけどVCL使わないDelphiなんて…

と今更逝ってみるテスト。
132124:02/04/30 22:41
>>128
ラッパー作ってますよ…でも、よくある俺様ライブラリ(自分のも含めて)よりも、GDI+は高性能と思うので。
それに曲がりなりにもMicrosoft製というのも大きいです。.NETなんかでも同じモデルが使われているみたいですし。

>>130
はい…おっしゃる通りです…辞書と格闘することにします。
GDI+は高性能じゃないよ。
GDIベースのゲーム用ライブラリを使った方がよっぽど高性能
高性能というよりは高機能かね。
>>131
>試みとしては面白いけどVCL使わないDelphiなんて…

続きはなに?
>>135

131のようなのは45以降を読んでないのね。
わざわざ書き込んで何を主張しようとしているんだろう?
スレ違いの茶々を入れて何がおもしろいのかなぁ。
137124:02/05/01 23:42
報告。全文を読んだわけではありませんが、アプリのローカルフォルダに入れて再配布できる…みたいです。

GDI+のアルファブレンディング、中でどうやっているのかと思えば、AlphaBlendなんてAPIが98以降存在している…
>>136
だから
>と今更逝ってみるテスト。
と書いてるんじゃないのか?
おまえこそ意味の無いレスをわざわざ書き込んでなにが面白いんだ?なにを主張しようとしてるんだ?
>>138
>>と今更逝ってみるテスト。
>と書いてるんじゃないのか?

だから何なんだ、ときいているのだよ?


140136 だが:02/05/02 03:14
>>138
>なにを主張しようとしてるんだ?

131はすれ違いで迷惑だ、と主張している
138=131 なのか? 136 の質問に答えろよ
なにが言いたい?
>>140
個人の感想にいちいち突っかかるなよ・・・
>>141

個人の感想は136、突っかかってきたのが138、と見えるが?

以上、個人の感想でした。
143デフォルトの名無しさん:02/05/16 22:25
記念式典age
144デフォルトの名無しさん:02/05/23 20:00
保守age
145デフォルトの名無しさん:02/05/29 23:26
sage
146voke:02/05/30 06:09
Del厨はしね
147デフォルトの名無しさん:02/05/30 23:31
このスレは不死身だ
148デフォルトの名無しさん:02/06/05 18:20
俺も不死身だ
149voke:02/06/05 22:01
Del厨はしねよ
150voke:02/06/05 22:19
Del厨はまじでしね
>>149-150
ageるなボケ
スマソ
小さな実効ファイル作るならアセンブラ(省略
>>153 あほ
スレタイをちゃんと読むように
インラインアセンブラでスタートアップコードから書き直し
良スレ保守
157デフォルトの名無しさん:02/06/15 22:54
UPXを使うのはどうでしょう?。
実行ファイルがめちゃくちゃ小さくなりますよ。

スキルを磨くのは良いけれど、UPXは凄いよ。
UPX いらねー。
せいぜい起動が速くなることがある程度のメリットしかない。
159Delフサギコ ◆zE1iiRdQ :02/06/16 00:35
UPXの使い方教えて....

        実は知らない.
   ∧,,∧   
  ,ミ ゚Д゚彡
  ミ  ∪  
 ミ〜,, ミ
  ∪ ∪
>>159
http://urikire.hypermart.net/UPXF.htm
フロントエンド使えタコ
161voke:02/06/16 03:40
Del厨しねよ
>>157
APIで組んで、UPXに食わす。さらに小さくなり(゚Д゚)ウマー
総行数6万行280KByte → 約100KByteとか。

>>159
最高に圧縮品質を高める設定なら
upx --best *.exe

あとはupx --helpでもしる!!
UPX を使えば実行ファイルが小さくなる → だからなんなんだ
Delphi とは無関係だと思うけど?
>>163
まぁ、今となってはありがたみはあまり無いね。
でも、ウインドウ一つ、strcopy()一つで100KBと言うのは誰でも一度はナンセンスだと感じたはず。
>>164
>誰でも一度はナンセンスだと感じたはず。

でもそのうちフォーム一枚で300kbになっても、どうでもよく
なるんだよね。こういう感覚は、自分は「便利さ」を優先しているので
VCLつかうのは仕方がない、という一種の諦めではあるんね。
1661:02/06/27 16:34
// クリップボードへのテキストコピーです

procedure toClip(const s:string);
var size:Integer;
var dh: THandle;
var dt:PChar;
begin
size:=Length(s)+1;
    EmptyClipboard;
   OpenClipBoard(0);
 try
  dh := GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE, size);
  try
   dt := GlobalLock(dh);
   try
    Move(PChar(s)^, dt^, size);
    SetClipboardData(CF_TEXT, dh);
   finally
    GlobalUnlock(dh);
   end;
  except
   GlobalFree(dh); //エラー時のみ
  end;
 finally CloseClipboard; end;
end;
1671:02/06/27 16:44
>>166  EmptyClipboard; と OpenClipBoard(0);  の順番が逆でした
これを使ってこんなのを作ってみました。
program Bin2Byte;
uses Windows,SysUtils;
// >>166の修正してコピペ
function readFileStr(fname:string):string;
var hin:THandle;
var rsize:DWORD;
begin
result:='';
hin:=CreateFile(PChar(fname),GENERIC_READ,FILE_SHARE_READ ,nil,OPEN_EXISTING
,FILE_ATTRIBUTE_NORMAL,0);
if hin<>0 then try
SetLength(Result, GetFileSize(hin, nil));
 ReadFile(hin,PChar(Result)^,Length(Result),rsize , nil);
finally CloseHandle(hin);
end
end;
function getWin32Find(const fname:string):TWin32FindData;
var h:THandle;
begin
  h:=FindFirstFile(PChar(fname),Result);
  if h = INVALID_HANDLE_VALUE then begin
   Result.cFileName[0]:=#0;
  end else Windows.FindClose(h);
end;
var buf,s,c0,wk,fname:string;
var i,n,siz,bufc:Integer;
procedure puts(s:string);
var i:Integer;
begin
 for i:=1 to Length(s) do begin buf[bufc+1]:=s[i];inc(bufc);end;
end;
begin
 if ParamCount<1 then exit;
 fname:=ParamStr(1);
 with getWin32Find(fname) do begin
 if cFileName='' then exit;
  s:=cFileName;
  end;
  for i:=1 to Length(s) do if s[i]='.' then s[i]:='_';
  bufc:=0;
  wk:=readFileStr(fname);
  siz:=Length(wk);
 SetLength(buf,siz*4+(siz div 4)+length(s)+1000);
 puts('const '); puts(s);puts(':array[0..'+IntToStr(siz-1)+'] of byte='#13#10);
  n:=0;
  c0:='($';
  while n<siz do begin
  for i:=0 to 15 do if(n<siz) then
   begin puts(c0+IntToHex(ord(wk[n+1]),2));inc(n);c0:=',$';end;
   puts(#13#10);
  end;
  puts(');'#13#10);
  SetLength(buf,bufc);
  toClip(buf);
end.
1681:02/06/27 16:49
>>167 を ファイル名を引数にして実行すると
例 Bin2Byte Bin2Byte.exe

実行結果

const =Bin2Byte_exe:array[0..43519]=
($4D,$5A,$50,$00,$02,$00,$00,$00,$04,$00,$0F,$00,$FF,$FF,$00,$00
,$B8,$00,$00,$00,$00,$00,$00,$00,$40,$00,$1A,$00,$00,$00,$00,$00
 ・・・・ 略・・・・
);

 というようなのがクリップボードに入ります。
 これを使えばバイナリファイルをリソースではなく直接ソースに埋め込めます

取り出す時のコードは

function writeFileBin(fname:string;data:array of byte):boolean;
var hout:THandle;
var wsize:DWORD;
begin
result:=false;
 hout:=CreateFile(PChar(fname),GENERIC_WRITE,0,nil,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
if hout<>0 then try
  if WriteFile(hout,data,Length(data),wsize,nil) then
   result:=wsize=DWORD(Length(data));
 finally CloseHandle(hout);
 end
end;
1691:02/06/27 17:14
ちなみに >>167 のコードは D5で43,519byte

これはまだ工夫すると半分に出来ます。
SysUtils を外して、IntToHex IntToStrの2つを自作に置き換えれば
19,455Byteとなりました
170デルファイの名無しさん:02/06/27 21:38
D6では40,448でした。拍手age
171デフォルトの名無しさん:02/07/07 17:04
age
172デフォルトの名無しさん:02/07/16 17:55
ほしゅ
hello,world対決
Delphi6 16,384バイト
C# 3072バイト
よって
C#>>>>>>>>>>>>>>Delphi
Perl 20バイト
よって
Perl>>>>>>>>>>>>>>>>>>>>>C#>>>>>>>>>>>>>>Delphi
Ruby15バイト
よって
Ruby>>>>>>Perl>>>>>>>>>>>>>>>>>>>>>C#>>>>>>>>>>>>>>Delphi
Cだと1,344バイトだった。
スタートアップルーチンなどは勿論デフォルトの物で。

cl -MD hello.c -link -merge:.data=.text -merge:.rdata=.text -align:64

#include <stdio.h>
main()
{
 printf("Hello, World!\n");
}
バイナリエディタで500Byteちょっとかな。

よって
バイナリエディタ>>>>>>>>>>>>C#>>>>>>>>>>>>>>Delphi
>173
Delphi6 9,216 バイトでしたが。
小さくしたいならuses SysUtilsは消しましょう。

ついでにC#と近い条件にするため実行時パッケージを使うと4,096。
負けてはいるけど">"14個も大袈裟かな…
KOL版System.dcu使って6,656…Delphiだとこの辺が限界みたいです。
180デフォルトの名無しさん:02/07/18 13:37
こうすれば 実行時パッケージなしで 8192バイトになるよ

program Hello;
uses
Windows;
const helloStr='Hello, World'#13#10;
var putSize:DWORD;
var buf:array [0..100] of char;
begin

AllocConsole;
WriteConsole(
GetStdHandle(STD_OUTPUT_HANDLE)
, pChar(helloStr),length(HelloStr),putSize,nil);

ReadConsole(
GetStdHandle(STD_INPUT_HANDLE)
, @buf,High(buf)-1,putSize,nil);

end.

実行ファイルのサイズは1024の倍数になる様子
普通は4kbの倍数のはず
普通は1bの倍数のはず
>>182はほっといて
Borlandのリンカにはファイルアライメントを調整するオプションはないの?
確かにどんなファイルでも1bの倍数ですねってのはほっといて、

普通にコンパイルすると.dprに関しては中間ファイルが作られず直接exeになってしまいますが
dcc32 -J でコンパイルすると.objができたので、これをilink32に渡して…

…誰かこの先を教えて下さい。
難点として、dcc32には-linkみたいなオプションをリンカに渡すためのものが無いのですね。
ilink32には一応-Afとか-Aoなどあるみたいですが。
Win9xで動かすタメにはAf:4096 Ao:任意で良いと思う
NT系ならAf:16 Ao:任意。
187デフォルトの名無しさん:02/07/19 10:30
どうしても 他より小さな実行ファイルを作りたいなら DCUを解析して
自分でEXEを作るしかないと思う。
 ただし、WinAPIしか使わない前提で、かつImport情報とリロケート
情報をちゃんと作らなければならないのが難点だけど・・・

でも、チラっとみた感じ、Importに必要な情報は入ってるようす
リロケート情報は判らない
>>185
bcc32には -l というオプションがありますけど
dcc32にはないのですか?
>>186
Win9xでも-Af:512でOKです。
Win95までは-Af:512でした。
DCC32は コンパイラ+アセンブラ+リンカ+リソースコンパイラ+リソースリンカ
リンクまで自前でしちゃうからリンカにオプションを渡すような
オプションは存在しないってこと?
保全・・・
サゲ進行だと誰も気づいてくれないような・・・
保守
193Delフサギコ ◆VzDeLphI :02/08/19 00:59
          ____
     ΛΛ.   ||:::::::::::||
    ミ   ミ―||:::::::::::||―――
    ミ   つ二二lニl 且
   | ̄ ̄|__ミ―――――
   `ー┬‐'' アスタから仕事ですねー
     ┴

SysUtilsを使いたくなくて
ByteTypeを自分で実装しようとおもうますた。

ByteTypeを自分で実装しようとすると
IsDBCSLeadByte APIを使ったり
どなたかが作った
IsDBCSLeadChar 関数を使うとよさそうですが

どうも変な挙動が出て困ってます。


procedure Check(A, B: Variant);
begin
 if A <> B then
 begin
  Assert(False, 'エラー')
// raise Exception.Create('エラー');
 end;
end;

  function IsDBCSLeadChar(c:char):boolean;
  begin
   Result:=c in [#$81..#$9f,#$E0..#$fc]
  end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Check(True, IsDBCSLeadChar( ('る'[1]) ));
 Check(True, IsDBCSLeadChar( ('る'[2]) ));

 Check(True, IsDBCSLeadChar( ('あ'[1]) ));
 Check(False, IsDBCSLeadChar( ('あ'[2]) ));


 Check(True, IsDBCSLeadByte( Byte('る'[1]) ));
 Check(True, IsDBCSLeadByte( Byte('る'[2]) ));

 Check(True, IsDBCSLeadByte( Byte('あ'[1]) ));
 Check(False, IsDBCSLeadByte( Byte('あ'[2]) ));
end;

このプログラムでテストが通るのですが
なんで"る"と"あ"で挙動が違うのでしょうか?
"る"の2バイト目にはなぞな何かがあるんでしょうか?
194デフォルトの名無しさん:02/08/19 01:04
ハァハァ・・・
Delフサのあのモサモサした身体に後ろから抱きつきたい。
モサモサ体を弄りたい(・∀・)!
195Delフサギコ ◆VzDeLphI :02/08/19 01:10
          ____
     .ΛΛ.   ||:::::::::::||
―――ミ;゚Д゚ミ―||:::::::::::||――キタ――
    ミ   つ二二lニl 且
   | ̄ ̄|__ミ―――――
   `ー┬‐''
     ┴
196ねこま:02/08/19 01:15
あ = $82A0
る = $82E9
#include <stdio.h>

main() {
 char buf1[]="る";
 char buf2[]="あ";
 printf("%s : %2x | %x\n", buf1, buf1[0], buf1[1]);
 printf("%s : %2x | %x\n", buf2, buf2[0], buf2[1]);
}

る : 82 | e9
あ : 82 | a0

あ の場合範囲外
る の場合範囲内

よくわからんが・・・。
198Delフサギコ ◆VzDeLphI :02/08/19 01:29
          ____
     .ΛΛ.   ||:::::::::::||
―――ミ;゚Д゚ミ―||:::::::::::||―オシエテモラタ―
    ミ   つ二二lニl 且
   | ̄ ̄|__ミ―――――
   `ー┬‐''
     ┴
199Delフサギコ ◆VzDeLphI :02/08/19 01:33
          ____
     .ΛΛ.   ||:::::::::::||
―――ミ;゚Д゚ミ―||:::::::::::||―オシエテモラタ―
    ミ   つ二二lニl 且
   | ̄ ̄|__ミ―――――
   `ー┬‐''
     ┴
つまり、APIが主っきりバグってると??

IsDBCSLeadByteがニポンゴの1バイト目発見のための
関数だとすると
普通に考えたら
  function IsDBCSLeadChar(c:char):boolean;
  begin
   Result:=c in [#$81..#$9f]
  end;
これじゃだめなのですか?

SJISの仕様とか知らべる気力もないんですが,,,

SysUtilsの20KB増がいやだから
単にByteTypeを作りたいだけなのに、、、
200Delフサギコ ◆VzDeLphI :02/08/19 01:41
        にひゃく
    ∧,,∧  茶どうぞ
   ミ,,゚Д゚彡
    ミ つ旦)~~
  〜と,,,~),,~) 
ttp://www.unixuser.org/~euske/doc/kanjicode/
ここの読んでみるといいかもです。

S_Jisのコードの割り当て方が詳しく乗ってますです。
~旦⊂(・∀・)ドウモ!
203ねこま:02/08/19 01:52
何が知りたいのか,ようやくわかった.
SJIS の LeadByte をピンポイントで正格に知る方法は無いよ(ね!?)
204ねこま:02/08/19 01:53
まちがいた
LeadByte じゃなくて2バイト目
よくわからんが、1バイト目読んで2バイト文字の1バイトめであれば
次のバイトはすっ飛ばすかなんかしなきゃあかんとおモイまう。

S-JIS にぽんごが1バイト目にとるであろう範囲
半角かな 1 バイト文字 0xA0〜0xDF
全角文字 2 バイト文字 0x81〜0x9F 0xE0〜0xFF

っでいいのかな?
206ねこま:02/08/19 02:01
つーか別にまちがいてないか
207Delフサギコ ◆VzDeLphI :02/08/19 02:01
 ∩| 
 ミ ゙''゙゙゙つ    ________
 ミ∧,,∧   /
 ミ,,゚Д゚彡 < SysUtils.ByteTypeはみたいでつ
 U U    \
           ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ソースコピペしてもちゃんと動かないので
やっかいなのだ。
208Delフサギコ ◆VzDeLphI :02/08/19 02:03
 ∩| 
 ミ ゙''゙゙゙つ    ________
 ミ∧,,∧   /
 ミ,,゚Д゚彡 < はみタイツじゃなくて・・・
 U U    \
           ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
SysUtils.ByteTypeは
2バイト目のお知らせが正確みたいでつ。

と書きそこねですた
209ねこま:02/08/19 02:19
>SysUtils.ByteTypeは
>2バイト目のお知らせが正確みたいでつ。
正確でなくては困ります.
「ピンポイントで」と言ったのは,1バイトの情報だけでという意味です.
すべては SysUtils.ByteTypeTest を通されます.

おやすみなさい.
ByteType が2バイト文字の2バイト目と判断する文字コード

$000〜#255の間でチェック

130, 132, 134, 136, 138, 140, 142, 144, 146,
148, 150, 152, 154, 156, 158, 160, 225, 227,
229, 231, 233, 235, 237, 239, 241, 243, 245,
247, 249, 251, 253

でも、この範囲外のコードを持つ2バイト文字もあると思うので
2バイト目だけで正確な判断は無理かと・・・。
>>199
仕様すら調べもせずバグ疑惑ですか…
他のスレの話題を混ぜる(蒸し返す)ことになり、また僕程度がこんな事を言うのは大変失礼ですが、
Delフサギコさんを満足させるライブラリは無い予感。

>>207
SysUtilsからソースコピペしても動かないのは、LeadBytes変数が設定されていないと予想。
初期化部分も持って来るか、そこだけIsDBCSLeadByteに書き換えれば動くかと。

それと、言語設定がS-JIS以外の時も考慮するなら、
(>>193のIsDBCSLeadCharのように数値を埋めこまずに)
IsDBCSLeadByte APIとかCharNext APIとかを使うべきです。
他に sysUtils.LeadBytes ; set of Char = []; を使う方法もあるよ
この初期化してる部分を参考にするといい
213Delフサギコ ◆VzDeLphI :02/08/19 08:38
>Delフサギコさんを満足させるライブラリは無い予感。
   _____________
 /
 | ?ハァ?
 | SysUtils.ByteTypeと同仕様で軽量
 | って仕様なライブラリは無いのでつか?
 \_ ____________
    |/
   ∧,,∧
  ミ,,゚Д゚ミy━~~
   U   ミ
 〜ミ   ミ
   ∪''∪
>IsDBCSLeadByte APIとかCharNext APIとかを使うべきです。
べきとか、そういうのはどうでもいいのですが
とりあえず、今の所中身がわからなきゃ調査に困るです。

>仕様すら調べもせずバグ疑惑ですか…
>>193をみて、IsDBCSLeadByteが正しいと思えるですか?
名前からして、'る'の2バイト目にヒットすると誰が思う?
誰もが'る'の2バイト目にもTrueを返すと思える?
いやま、第1段落はつまらない一般論です。
http://pc3.2ch.net/test/read.cgi/tech/1027343132/635 でも、ライブラリの充実を訴えてますが、
こんな程度で文句を言うようでは、どんなに高機能でいい設計のライブラリでも
満足できないんじゃ無いかなあ…と思えてしまって。失礼しました。
当然SysUtilsの外でByteTypeは実装できる筈(汗

で、SHIFT-JISですが、

IsDBCSLeadBytesは、文字どおりLeadBytesかどうかを判断する関数であって、
2バイト目についてどうにかする関数じゃ無いですね。
というか、1バイトだけの情報でそこまで求めるならば、
1バイト目と2バイト目の範囲が重なるコード体系は全滅ですよ。
マルチバイト文字列を扱う時は、先頭から走査していかないと何処までが1文字なのか区切りがつかないのは
文字列処理のセオリーというか、Delフサギコさんが知らなかった事の方が驚きというか。
とりあえず、漢字混じりのテキストファイルをバイナリエディタでいじってみる事を推奨。
第2バイトでないかというのは
 途中から検査したい時は 第2バイトにもならないコードを探して、そこから戻って
 検索する事で処理を高速にする為に必要なのです
そういえばIsDBCSTrailBytesなんてAPIはざっと見た限り無いですねぇ。
じゃ、便乗質問していいですか?
1バイト目の集合はGetCPInfoでいいとして、DBCSの2バイト目の集合はどうやって求めればいいでしょうか?
>マルチバイト文字列を扱う時は、先頭から走査していかないと何処までが1文字なのか区切りがつかないのは
>文字列処理のセオリーというか、

UNICDOE で上から下までかける現在の Windows 開発環境ではちょっと言い過ぎだね。
廃れかけている古い技術をあまり大声で言うもんじゃない。
>>216 そういやどうなんだろ?他の国では第2バイトは日本と同じなのかどうか興味あるね

>>217 そうなんだけど DelphiはTurboPascalの昔からShiftJISだったからさ
> 廃れかけている古い技術をあまり大声で言うもんじゃない。

なぁーに言ってるんだか。
現在の Delphi についてでしょ。

> 先頭から走査していかないと

これが重要なんだってば!
どうでもいいけどSysUtils.ByteTypeだとどうして
2バイト目も判定できるの?
指定された文字より前の文字も調べてる。
皆さんどうもです。やっぱ、2バイト目を求めるAPIは無いのでしょうか。

>>217
UTF-8も、2バイト目と3バイト目が重なる時ありませんでしたっけ?気のせいかな。
223デフォルトの名無しさん:02/08/20 14:30
          ____
     ΛΛ.   ||:::::::::::||
    ミ   ミ―||:::::::::::||―――
    ミ   つ二二lニl 且
   | ̄ ̄|__ミ―――――
   `ー┬‐'' うまく動かないなー
     ┴
          ____
     .ΛΛ.   ||:::::::::::||
―――ミ ゚Д゚ミ―||:::::::::::||――
    ミ   つ二二lニl 且
   | ̄ ̄|__ミ―――――
   `ー┬‐'' APIのバグだねこれ
     ┴
> やっぱ、2バイト目を求めるAPIは無いのでしょうか。

チャント流れ読んでる? 1バイト目が確定するなら
なんで2バイト目を取得する必要があるの?
流れって…俺214=216=222ですよぉ。
215の指摘を受けて、そのテクニックを(言語を問わず)使うために、216で便乗質問したのですが。
いやだから

>>216
>1バイト目の集合はGetCPInfoでいいとして、DBCSの2バイト目の集合はどうやって求めればいいでしょうか?

でしょ? 1バイト目が確定することを仮定しておいて、2バイト目
を議論するのはどういうことよ。1バイト目 LeadingByte なら
その次は DBCS の2バイト目であることは定義より明らかでしょ
215読んでます?
長い長い文字列で、現在位置が最後の方だった時、一々先頭から全部走査するのを避けるため、
後ろから、絶対2バイト目にはならないコードを探して、そこから普通に走査開始!
というテクニックと解釈しましたが。
>>227

222 では > 2バイト目を求めるAPIは無いのでしょうか。

と書いてるじゃないの。2バイト目を求めるのと、
「絶対2バイト目にはならないコード」を求めるのとは
同等じゃないぞ
229Delフサギコ ◆VzDeLphI :02/08/20 23:41
  ∧,,∧ ──────
 ミ゚Д゚,,彡 < 忙しすぎて、
 ⊂⊂ ミ──────
    ヾ ,,ミ〜 ────
     し じ ─────
            _____________
____∧ ∧_ /
___ミ,,゚Д゚ミ< レスも終えなくてスマソー
__ ミ ⊃ つ  \______________
_〜ミ,, ,,〃
_ ∪ ∪

>>214さん、そう、俺はVCLでも満足できません。
より高機能でいい設計のライブラリを求めてしまう。
楽をしたいから、いいライブラリに飛びつきたいのれす。
楽をしたいのは技術者として大切だと思うんですが,,,,

というか、TMemoにUndoが実装されてないのを
自然だと思えるセンスは俺にはないです。あからさまに不自然ぢやない?

ピンポイントで調べるのではなくて
ByteType関数と同じ仕様で文字列とIndexをわたしたら
そこが2バイト目かどうかを調べる。<<これはピンポイントではないですよね。
これはできると思うんだけど・・・

なんにせよ、
SysUtilsをusesした時の20KB増が嫌ってだけなんですけど、
このスレむきな話題かと重いますた。

>>223
仕様とバグは紙一重かも。

>>201タンのリンク先を目が節穴になるほど、みると
わかるのかな。
http://www.unixuser.org/~euske/doc/kanjicode/sjistab.gif
この図が重要だと思うてるんですが,,,,


>229
ttp://tohoho.wakusei.ne.jp/wwwkanji.htm#Map
この図も面白げです。
> TMemoにUndoが実装されてないのを

TMemo には Undo メソッドがあるよ
> ピンポイントで調べるのではなくて
> ByteType関数と同じ仕様で文字列とIndexをわたしたら
> そこが2バイト目かどうかを調べる。<<これはピンポイントではないですよね。
> これはできると思うんだけど・・・

文頭から調べる! 何度言った分かりますか。

> ByteType関数と同じ仕様

こんな関数簡単につくれるだろうに....
233Delフサギコ ◆VzDeLphI :02/08/21 00:04
     ______
      | CLXの    |
      |  TMemoす  |
      |______|  _____
      ∧,,∧.||__   /
    /ミ,゚Д゚ Φ/\< 死ってびっくり
  /| ̄∪ ̄ ̄|\/  \ミてびくり。
    |____|/      ̄ ̄ ̄ ̄ ̄

D7Pro以上お餅の方は
http://software.nikkeibp.co.jp/software/download/0209/klx0209.zip
ダウソしてUndoの実装みてみそ
CLXじゃなくてQTのAPI(?)関数コールしてます。
234Delフサギコ ◆VzDeLphI :02/08/21 00:08
                _____
      ∧,,∧___   /文頭から調べるのは遅いと
    /ミ,,゚Д゚ミ/\<  思われなんだけど,,,,,
  /| ̄∪∪ ̄|\/ \_____
    |____|/
    作るヒマないって逝ってるのに,,,
    もうちょっと考えさせてって。

    (というか、簡単につくれるだろうに、って言うなら
     作ってくれんですか?面倒なのなら"簡単に"なんて使うな)
より良いものを求める姿勢は確かに重要だけどさー、
ByteType程度自分で作れない奴が言うなよー、みたいなー。

「自分は何もしたく無いから、何でもかんでもライブラリで実装してくれ。理解できない仕様はバグね」としか読めん。

特にこのスレだと、(Systemユニット以外は)一切使わず全部自前で実装して省サイズって
流れでもいいと思う。
D7Pro ってもう出てるのか。知らんかった

> CLXじゃなくてQTのAPI(?)関数コールしてます。

見てないけど、Windows と QT のエディットコントロールの実装の差じゃ
ないのですか。VCL とか CLX とかのライブラリがどうの、ということじゃなく
> 面倒なのなら"簡単に"なんて使うな

ソースみたらほとんどコピペでできると思うよ。
>>234
>>211の第2段落
>>223
お前の頭のバグ
240Delフサギコ ◆VzDeLphI :02/08/21 00:46
      ∧,,∧l||l  ハァ...なんだか...
       ;゙⌒ヽ彡  
     〜ミ___ミ
    ''" ""''"" "''
>ByteType程度自分で作れない奴が言うなよー、みたいなー。
「作れないヤシがいうなよー」なら、
作れるやつだけで高尚な会話しとけ。
(つか、小難しい事を小難しくしか説明でけないヤツは
 本当には理解してないと表るから、いいよ別に
 難しい事を難しく話して、どうぞ。
 それに"その程度"ってなら、さっさと作ればいいでしょ?)

>理解できない仕様はバグね
バグかしら、と疑う事と、バグだと断定することには
ずいぶんと差があるのだけど、そのことわかってる?

>「自分は何もしたく無いから、何でもかんでもライブラリで実装してくれ。理解できない仕様はバグね」
オレが作りたいのはソフトウェアの機能であって
ライブラリを自分で実装するのはあまりキボンヌではないです。

>>236
もしかしたら、QTのUndo機能呼び出しがWinとLinuxで違うから
あえて別実装なのかも?
でも、CLXがQT.pasを読めない初心者向けに作られている
優れたライブラリとは、ちょっといえない気がするです。
>それに"その程度"ってなら、さっさと作ればいいでしょ?)
>ライブラリを自分で実装するのはあまりキボンヌではないです。

答えはもう211の第2段落で出ているし、難しく無い説明も何度も出ているので、
それすらやりたくない/理解するのが面倒/作ってくれ、としか読めませんが。

>バグかしら、と疑う事と、バグだと断定することには
>ずいぶんと差があるのだけど、そのことわかってる?

自分が勘違いしているかどうか疑うよりも先に他人を疑うのも、どっか変ですね。
242 :02/08/21 01:23
>>229
> 楽をしたいのは技術者として大切だと思うんですが,,,,
てか、お前技術者じゃないじゃん。
243ねこま:02/08/21 01:28
随分ごちゃごちゃしたスレになりましたね……

>>209 で言った SysUtils.ByteTypeTest はまさに
>>215 を実装したものです.
よって,わざわざ作る必要性がありません.
>>243
なるほど!

ソース読んで紙に書いて理解しました。
Leadじゃない→Trail or Single→その次の文字はLead or Singleという理屈なわけですね。
2バイト目になり得るコードの集合がわからなくても、戻る方法は実装可能でしたか…。
僕もひとつ勉強になりました。
>>244
で、そのコードは DBCS / 2バイトシステムでしか動かないわけだな。
UTF-8 / 通常は 1-3 バイトのシステムで破綻する。
246 :02/08/21 03:52
>>245
UTF-8なら、少なくとも1バイト目かどうかは一発で分かるんだから、
別にいいんじゃねーの?
>>242
楽をするために最大限の努力をするのが技術者だと思っているが……
まあ、そういう意味でもDelギコはもうちょっとガンバレやとしか言えんか。
Delフサ→Delギコ化スレになりますた。
>Leadじゃない→Trail or Single→その次の文字はLead or Singleという理屈

UTF-8 だと
Leadじゃない→Trail or Single→その次の文字はまだ Trail かもしれない。
ってことで終わり。

もちろん、UTF-8 だと Lead か Trail か直接判断できるので問題は無いんだけど
同じコードを使いまわすことはできない。
DBCSの時の話なんですけど。

2バイト目の集合を取得するAPIは無いなあ→
その場合言語設定を問わずに「戻る」テクニックを使うにはどうすればいいのだろう→
244で書いた方法、というわけです。

UTF-8なら言語設定関係ないので、直接UTF-8専用のコードを使うと思います。
というかそもそも UTF-8は移動用の形式であって作業用の形式じゃない
SJISの場合に、たとえばマウスで矩形選択した文字をひらいたいような場合
先頭から検索すればいいんだけど、それより高速にする方法は無いかとい
う事でしょ?
 今だとそんな工夫も必要無いくらいパソコンは高速なんだけどね
252Delフサギコ ◆VzDeLphI :02/08/21 21:58
           ____________
   ∧,,∧    /
  ミ,,゚Д゚彡 < とりあえず、できますた
   U  つ∀ \
 〜ミ  ミ ┴    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪ 思いっきり
SysUtils.BytetypeTestと同じやんけ....
              (犬阪弁)

  function IsDBCSLeadChar(c:char):boolean;
  begin
   Result:=c in [#$81..#$9F,#$E0..#$FC]
  end;
  
  function ByteType(const S: string; Index: Integer): TMbcsByteType;
  var
   i: Integer;
   SingleIndex: Integer;
  begin
   if Index = 1 then
   begin
    if IsDBCSLeadChar(S[Index]) then
    begin
     Result := mbLeadByte;
    end else
    begin
     Result := mbSingleByte;
    end;
   end else
   begin
    Result := mbSingleByte;

    i := Index-1;
    while IsDBCSLeadChar(S[i]) do
    begin
     Dec(i);
     if i = 0 then break;
    end;
    if Odd(Index - i) then
    begin
     if IsDBCSLeadChar(S[Index]) then
     begin
      Result := mbLeadByte;
     end else
     begin
      Result := mbSingleByte;
     end;
    end else
    begin
     Result := mbTrailByte;
    end;
   end;
  end;
253Delフサギコ ◆VzDeLphI :02/08/22 18:05
  ∧,,∧
 ミ,,゚Д゚ミつテストはこれでしますた。
  とりあえず、EmEditorPluginで
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1006076016
ここのソースが正常に動作しているので問題ないかと思われです。

  procedure testByteType;
  begin
   Check(True, IsDBCSLeadChar( ('る'[1]) ));
   Check(True, IsDBCSLeadChar( ('る'[2]) ));

   Check(True, IsDBCSLeadChar( ('あ'[1]) ));
   Check(False, IsDBCSLeadChar( ('あ'[2]) ));

   Check(mbSingleByte, ByteType('ABC', 1));
   Check(mbLeadByte, ByteType('あ', 1));
   Check(mbTrailByte, ByteType('あ', 2));
   Check(mbLeadByte, ByteType('る', 1));
   Check(mbTrailByte, ByteType('る', 2));
   Check(mbLeadByte, ByteType('ああああ', 1));
   Check(mbTrailByte, ByteType('ああああ', 2));
   Check(mbLeadByte, ByteType('ああああ', 3));
   Check(mbTrailByte, ByteType('ああああ', 4));
   Check(mbLeadByte, ByteType('ああああ', 5));
   Check(mbTrailByte, ByteType('ああああ', 6));
   Check(mbLeadByte, ByteType('ああああ', 7));
   Check(mbTrailByte, ByteType('ああああ', 8));
   Check(mbLeadByte, ByteType('るるるる', 1));
   Check(mbTrailByte, ByteType('るるるる', 2));
   Check(mbLeadByte, ByteType('るるるる', 3));
   Check(mbTrailByte, ByteType('るるるる', 4));
   Check(mbLeadByte, ByteType('るるるる', 5));
   Check(mbTrailByte, ByteType('るるるる', 6));
   Check(mbLeadByte, ByteType('るるるる', 7));
   Check(mbTrailByte, ByteType('るるるる', 8));

   Check(mbLeadByte, ByteType('ABCああああ', 4));
   Check(mbTrailByte, ByteType('ABCああああ', 5));
   Check(mbLeadByte, ByteType('ABCああああ', 6));
   Check(mbTrailByte, ByteType('ABCああああ', 7));
   Check(mbLeadByte, ByteType('ABCああああ', 8));
   Check(mbTrailByte, ByteType('ABCああああ', 9));
   Check(mbLeadByte, ByteType('ABCああああ', 10));
   Check(mbTrailByte, ByteType('ABCああああ', 11));
   Check(mbLeadByte, ByteType('ABCるるるる', 4));
   Check(mbTrailByte, ByteType('ABCるるるる', 5));
   Check(mbLeadByte, ByteType('ABCるるるる', 6));
   Check(mbTrailByte, ByteType('ABCるるるる', 7));
   Check(mbLeadByte, ByteType('ABCるるるる', 8));
   Check(mbTrailByte, ByteType('ABCるるるる', 9));
   Check(mbLeadByte, ByteType('ABCるるるる', 10));
   Check(mbTrailByte, ByteType('ABCるるるる', 11));
  end;
はじめからコピペで済んだのね
アホらし
ほしゅ
256デフォルトの名無しさん:02/09/07 15:47
このスレじゃなかったのかなあ・・・前にパッケージのインストールで
binフォルダにある何かを入れたら パレットにCPU タブが出て
メモリのダンプとか何のコードも書かなくても出来た記憶があるんだけど

そのパッケージの名前を忘れてしまった・・その時嬉しくなって2CHで報告した記憶があるんだけど
>>256
俺もDel6Personalでできた記憶がある。
Personalなのにダイアグラムが使えるようになったりもした。
再インストしたらできなくなったけど。
258C言語マンセー:02/09/07 18:11
Del房うざい。
小さいバイナリ作りたきゃC言語でも使えよ。
DelphiのいいとこはD&Dでフォーム作って
最速コンパイル(ここまで数分)だろ?
多少サイズがでかくてもいいじゃねえか。
なんで不得意なことするの?
うざいというなら読むな。あほ。
>>259
厨房お得意の台詞
> んで不得意なことするの?
不得意じゃないからです。
手間という点で言えば、C言語と同等かそれ以下(OOPLである点を考慮して)
それはそれとしてあなたなんでageてるんですか(藁
それと多少サイズがデカクナッテモいいじゃないかってのは同意。
最近どうでもよくなってきた。
263C言語マンセー:02/09/09 00:46
ごめんね
Delphi自体より、Pascal言語が好き。
だからDelphi開発環境に頼るだけじゃない、こういうスレは勉強になる。
procedure TForm1.Button12Click(Sender: TObject);
begin
button13.Enabled:=true
button26.Visible:=true
button1.Visible:=false
end;
---
↑これ、なんかおかしい?
エラーが出るけど。
>>265
スレ違いでエラーメッセージも書いてない、お前がおかしい。











セミコロンが抜けてるのは写し間違いか?
保守
>>265
ワラタ
しかもスレ違い。
269デフォルトの名無しさん:02/10/04 04:54
どうでもいいけどSysUtils.ByteTypeだとどうして
2バイト目も判定できるの?
        ∬           ∬   前方のバイトも見てるから
        。。 ・・Λ〜Λ  ・。。。 ∬   かと.
     o0o゚゚   ミ*゚Д゚,,彡   ゚゚oo
    。oO  ( (( ー----‐ )) )   O0o
   (~~)ヽ             (´^ヽO,
  (⌒ヽ             (⌒)(゙゙゙)~
   /~゙゙ヾ⌒`ゝ-(~´`(⌒(⌒~ヽ~ ~~  
   ゝー ′ '"      ``"       
10文字トリップだなぁ
272デフォルトの名無しさん:02/10/19 11:05
無くなると困るので保守
273デフォルトの名無しさん:02/10/28 22:37
ネタはないが無くなると悲しそうなので保守
みんなも SDKスタイルのコードに挑戦してるの? 通過儀礼?
KOL版System.dcu使って6,656…Delphiだとこの辺が限界みたいです。
276デフォルトの名無しさん:02/11/02 00:49
>>275
そんなことない。
Windows なら TForm 等の VCL を使わずに WinMain から CreateWindow とかでスクラッチで書けば
すごく小さくできる。
Delphi と Delphi 付属 VCL とをごっちゃにしちゃだめ。
277デフォルトの名無しさん:02/11/02 00:50
ちなみに、「Delphi 2 達人テクニック」を読めば、スゲーちいさい EXE を
作る方法が載っている。
Delphi 2 の時代のなのでもちろん Windows 専用だが、Kylix でも基本的な
考え方は役に立つはず。
>>276
VCL使わなかったらDelphi使う意味ないやん。
279デフォルトの名無しさん:02/11/02 01:48
>>278
VCL使わなくてもDelphiを使う意味はありません。
281280:02/11/02 02:06
正解!
・VCL使わなかったらDelphi使う意味ないやん。
・VCL使わなくてもDelphiを使う意味はありません。
この2つは同じ意味であり、皮肉になっていないと考える事もできる
>>282
>この2つは同じ意味であり

ぜんぜん同じではありませんよ。
>>276

あのねぇー、>>275 はそんなことは百も承知だよ。
CreateWindow() で作っても、KOL 版より小さくできない。デフォルトで uses
される System.pas の違い
自分でDCUをリンクするプログラム作ってEXEを作ればどう?
>>285

意味が分かりません。説明キボン
>>285
リ ン カ を 作 れ と ! ?

そこまでやるとすでにDelphiじゃねー。
最後はアセンブラ作るとか言い出すなよな。
アセンブラじゃなかったコンパイラ作れ、か。
289デフォルトの名無しさん:02/11/04 03:29
>>289
ブラクラ
コンパイラはキツイかもしれないが、リンカなら・・・・勉強なら作ったら?
つか、リンカの方が難しいし
つぶしがきかない知識だ。
>>292
そうかなあ・・・
組み込みの仕事なら使うでしょう。
リンカ全般のアルゴリズムというよりも、dcu?の解析をしなきゃいけないのが
潰しが利かないし労多くして益少ない作業だということでは?
このスレのテーマは 勉強 なんだから、そういう事も1回はどこかでやったらいいんじゃないの?

俺? 俺は・・・COFFでやったからいいや。
296デフォルトの名無しさん:02/11/09 19:23
KOLのつかい方を日本語で紹介してるところないかな?
・Delphiのエキスパート
・KOLを知っている
・見ず知らずの他人のためにわざわざ解説を書いてあげるやさしさの持ち主

これらが融合する人がいると思う?
298ねこま:02/11/09 19:39
dfm を API + KOL 向けにコンバートするツールができれば
リンカなどいらない様な気がする.
だれか作って (w
299デフォルトの名無しさん:02/11/09 19:45
KOLってなあに?
300ゲット300:02/11/09 20:18
    / ̄ ̄ ̄ ̄ ̄ヽ
   /          ヽ
   /   //////ヽヽヽ ヽ 
   |   /  ー   ー | |
   |   /    ・   ・ |/   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   \ |   ○  ー ○|   < 小さーい!すごーい!
    ノへ_____/    \____________
      岡部玲子
301デフォルトの名無しさん:02/11/10 11:38
誰かKOLとMCLに付いて教えて!
誰も知らないのか?
303デフォルトの名無しさん:02/11/15 16:04
僕は知らないよ.
 ミ,,゚Д゚彡 Korea On Line とかじゃないと思うです。
305ねこま:02/11/15 17:48
教えて!って言われても困ってしまいます
良スレ
OK灼?ロ
309デフォルトの名無しさん:02/11/30 02:34
なにも、そんなに KOL な。
310デフォルトの名無しさん:02/12/08 03:08
311デフォルトの名無しさん:02/12/10 10:39
DELPHI 6 PERSONAL版でMCLは使えるのか?
MCL? MCKではなくて?
313デフォルトの名無しさん:02/12/11 10:27
そうですた、MCKです。
ふーん
保守
316デフォルトの名無しさん:02/12/30 14:08
ageるぞゴルァ!!(゚Д゚ )
もういい加減削除依頼だしてくれよ、お願いします。
3181:03/01/05 19:36
あけましておめでとうございます。 ネタは無いのですが
319デフォルトの名無しさん:03/01/06 15:53
ヴァージョンアップのたびに EXE サイズがでかくなるから、
最近は古いヴァージョン使っている。
ただし、あまり古いと今度は使えない機能があったりするから
その辺を考慮して判断すると Delphi5 が最強だと思う。
320デフォルトの名無しさん:03/01/06 16:16
 ,、,、,||
;'`,゙、.||'、 I'm happy...
'; 、' /´;`'.,
 ´' .; ' ; '、'.
   '; 、 ' ,'
    '.,´; '
     l !j
    /ルゝ
>>その辺を考慮して判断すると Delphi5 が最強だと思う。

禿銅。
D6以降で Kylix が入ったのがすべての災いのもとである、と思う
>>D6以降で Kylix が入ったのがすべての災いのもとである

ったく、Linux みたいなマイナーな環境に引きずられて、もとの Del が汚された
と感じるよなぁー
変えたら変えたで文句言われるし
変えなければまたぶーたれる。
お前らいったいどうしろって言うんだよ。
>>323

某関係のひとですか?
323が変えたわけでもないのにエラソーなのはどうして?
そもそも「変えた」って何のこと?
> お前らいったいどうしろって言うんだよ。
実行サイズが大きくならないように言語やライブラリを拡張しろ
Del7でコンパイルしたフォームだけのEXEのサイズはいくつ?
327IP記録実験:03/01/08 21:47
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
             /ヽ       /ヽ
            /  ヽ      /  ヽ
  ______ /     ヽ__/     ヽ
  | ____ /           :::::::::::::::\
  | |       //       \  :::::::::::::::|
  | |       |  ●      ●    ::::::::::::::|
  | |      .|             :::::::::::::|   ・・・・・
  | |       |   (__人__丿  .....:::::::::::::::::::/
  | |____ ヽ      .....:::::::::::::::::::::::<
  └___/ ̄ ̄       :::::::::::::::::::::::::|
  |\    |            :::::::::::::::::::::::|
  \ \  \___       ::::::::::::::::::::::::|
329IP記録実験:03/01/09 02:58
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
           ∠ ̄\
            |/゚U゚|  ヤレヤレ
       ___|__|____
      / \       ___\
     .<\※ \____|\____ヽ
        ヽ\ ※ ※ ※| |====B=|
        \`ー──-.|\|___l__◎..|ヽ
          ̄ ̄ ̄ ̄| .| ̄ ̄ ̄ ̄|
               \|        |〜
そんなわけで、qbサーバでIPの記録実験をはじめましたー。
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 138720人 発行日:2003/1/9

年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。

そんなわけで、年末に予告したIP記録ですが実験を開始しています。

「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
>>1 もぅいいじゃないか。
開き直れよ! 俺は変態だ!!って。
変態の何処が悪いんだよ。
男はな、みんな大なり小なり変態なんだよ。
そのことを女の大半が知らないだけなんだよ。

結論として言えることは、女の無知が悪いってことだよ。 
ごめん、そんなにおもしろくなかったので寝ます(^_^;)
>>143
どこの板が取っているの?
さようなら、2ちゃんねる
本気も本気
覆しようのない事実なわけですが
>>907
それはある。
>>540
鑑定スレでお願いしようとして誤爆し・ま・す・た・!   
保守
http://qb.2ch.net/test/read.cgi/sakud/1028262850/66
まとめ方の理想像の例

http://qb.2ch.net/test/read.cgi/sakud/1028262850/69
育児のまとめは、とりあえず理想的かなと。一応、私もそれに
近い形で分類して、アンカー付けて、というのを心がけてます。
(ただ、不備な依頼を抜くかどうかは、人によりけりかな。「これは
不備」と書いてあげた方が、再依頼する人のチェックの手間は
省けるわけで)

http://qb.2ch.net/test/read.cgi/sakud/1028262850/143
>まとめるならレスアンカーは付けて欲しいなと。

負荷が高そうなサーバー…live(・∀・)?
>>374
IP記録されてること自体気づいてないユーザーの方が圧倒的かと・・・
>>705
来週も番組が無事でありますように
しょぼーん
のだと下四桁みたいだけどね。
3桁?&まだある、そのサイト?
さん
夜なのですの?
つうほうされますた
つうか、強制IDが入った時点で俺の2chは終わってたし。
書き込み回数激減したよ。強制ID入ったときは。
そこがばらすでそ。
どこから請求が来たかにもよるかも知らんが
あっ、漏れと同じ串だ
賛成!えらい。よく思いついた、あんたは凄い!天才!神!シャッチョウサン!
779 名前:スゴイ人  ◆y.GuoEaXhM 投稿日:03/01/11 11:43 ID:mqJGw88D
俺のことが言いたいんだろ?
ストーカーみたいに追いこんでくるね、ほんと。
2003・1・11
2ちゃん閉鎖ってなったらどう?
ありえなくもないだろ?

http://live2.2ch.net/test/read.cgi/news/1041948269/l50
隊長!誤爆しましたっ!
すまん!
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。
とにかく、今後の成り行きを見て行くしかありませんね。
授業料は、ひろゆきさん、もしくは一部の無鉄砲な人たちが
払ってくれるでしょう。

さ〜よな〜ら、大好きな2ちゃん〜♪

 
誤爆した悪い
バスで家の近くまで送るくらい思いつかないのかね?
横付けしろなんて言ってないだろうに…
子供が危ないかもしれないのに、
親は家で待ってるだけですか?
いや、匿名で時分の身元を隠した一方的な書きこみなぞ
全部削除してもかまわないとおもうね
誰が文句を言うと言うのだ
匿名である以上削除されても文句など出るわけもない
エスパー伊東
名誉毀損ってのは "事実" であっても該当するのは周知の事実ですよね。
(ただし、公共の利益になる場合はこの限りではないのだけど)

事実誤認のレスで 名誉を毀損された =営業的な不利益が生じた のであれば
確かにレスが事実誤認であることを証明するのは 原告側。

しかし その反証の場が 2ch でなくてはならないというのは ? です。

今や 2ch は管理人の個人サイトとは判断されないほど メディアとしての
認知・影響力が裁判所で認定されているですから
公序良俗に反する情報発信は情報の発信者が責任を負うべきでしょう。
その発信者の情報をわざと特定させないのは 
ある意味、確信犯的な共犯者と見なされても仕方ないでしょ。

(もちろん、Internet の匿名性 については十分、議論の余地はあります。)
引き続き gamble 行きます。
366山崎渉:03/01/13 18:51
(^^)
こっちか。

他に、今、裁判中なのは何??

368山崎渉:03/01/15 18:06
(^^)
age
370山崎渉:03/01/23 20:02
(^^)
371山崎渉:03/01/23 21:46
(^^)
KOLのつかい方を日本語で紹介してるところないかな?
せめて英語でもう少し詳しく知りたいなぁ。
コンポの作り方がいまいち理解できない。
つーか、KOLって何?
ヘヴィ・D!とか出るヤツ?
ジェノサイッ…… カタッ!
SysUtilsってどうやって実行時エラーを例外に変換しているんでしょう?
ErrorProc変数設定しても何も変わらないし。
SetUnhandledExceptionFilterを使ってもデバッグ時に実行時エラーを
捕まえられない・・・ていうか実行時エラーの破棄の仕方がわからない。
こういうときソースもっていないとやっぱりつらい。
(´-`)。o ○ (>>372のことも解決してないのに新たに違う話題が…
しかもスレに合ってる?人いないのに…)
>>375
Unhandled…よりも先にまずFS:[0]に飛んでくるので、そこで処理された場合Unhandled…には来ない。
try文をCPU窓で見ればわかるけど、以前のFS:[0]を待避させた上で置き換えてる。

ってなんでこんなつまらんこと知ってんだワタシは…
(´-`)。o ○ (母さん… このスレにも人がいたよ…)
379375:03/02/12 20:06
KOLのページにいってみたらerr.pasなるファイルがあってこれがSysUtils
互換のファイルだと書いてある。ソース読んでみるとSystem.ExceptObjProc
変数を設定することで実行時エラーからDelphi例外を生成できることを発見。
他にもExceptClsProcやAssertErrorProcを設定すれば標準の例外処理をほぼ
実現できるようだ。ちなみにこの方法でOS例外(実行時エラー)を処理できる
実行ファイルを作ると、Delphi6で16KBになった。

>>377
すいません、アセンブラわかりません。
なんでKOLはサイズ小さくできる仕組みなんですか?
いや、なんでVCLはサイズ大きくなるんですか?
なんでKOLはObjectなんですか?
いや、なんでVCLはClassなんですか?
なんでKOLのTListが高速なんですか?
いや、
いや、 ?
>>379
あら、それでは不親切だったかな。
解決したようですけど、一応説明加えとくと、

FS:[0]というのは、まあそういうOSが用意した変数があると思ってもらって、
アクセス違反や0割などが発生すると、まずFS:[0]に設定したアドレス(except節)へ飛ぶ。
で、まず例外をDelphiのオブジェクトに置き換え(そういう関数を呼ぶコードをコンパイラが勝手に埋めこむ)、
処理すべき例外かどうかチェックして(on 〜に相当)、処理できるならできる、できないならできないと返す。
処理できるルーチンが見つかるまで、スタックを遡って、見つからなければUnhandled〜というわけです。
で、この「例外をDelphiのオブジェクトに置き換え」の部分が、あなたの言ったExceptObjProcなど。
383デフォルトの名無しさん:03/03/05 17:02
保守
384デフォルトの名無しさん:03/03/09 10:04
やっとMCKの使い方わかったよ
保守
386山崎渉:03/04/17 15:58
(^^)
387山崎渉:03/04/20 04:03
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
すっごく下らないことだけど、教えてください。
小さいEXE作ろうと思ってMCKに挑戦してるんですが、あまりにも情報が少ないので。
例えば終了ボタンを作る場合、VCLならボタンのOnClickのハンドラにCloseと書くだけですが、
MCKだとどうすればいいんでしょうか。
389388:03/04/27 19:15
あちゃー、自己解決しました。
Form1.Close もダメだし、KOLForm1.Close もダメで困ってたんですが、Form.Close でいいんですね。
ロシア語の解説サイト(http://kol.mastak.ru/)を翻訳サービスで英訳して読んでたらわかりました。
390過疎地:03/04/27 23:31
MCKって何?
いや、マジで。
ロシア語って書いてるでしょ。ロシアじゃシェア高いんだよ。
で、最新パソコンで無くても動くように小さなVCLが欲しい要求が日本なんかよりとても大きくて
392388:03/04/28 10:17
>>390
http://bonanzas.rinet.ru/
とりあえずここ参照。
VCLでフォームにボタンやらエディットやら貼り付けただけでコンパイルすると400KB。
MCKだとほぼ同じ操作で同じ物が作れて、そのサイズが30KBなんだからすごいですよ。
300KBの間違いじゃないですよ。
ただ日本語はおろか英語でもほとんど情報がなくて、とりあえず始めるまでにえらく苦労しました。
あとクラスというものが使えないらしく、代わりにオブジェクトを使えとか書いてますが、
この辺がまだよくわからないです。
誰か詳しい人いないのかな・・・。
TRegExprの作者もロシアンだ。
394390:03/04/29 00:36
>>392
ふーん。
よく分かったけど、なんでdelphiと全く無関係なことを書いてるのか?という
新たな疑問が生まれました。
395デフォルトの名無しさん:03/04/29 01:21
MCKってBuilderじゃ使えんのかな
397390,394:03/04/29 02:43
>>394は忘れてくれ。
>>397
いや、凄すぎて忘れられないw
agaって初めて気が付きまして、インスコしてみましたKOL&MCK・・・

なにこれ、すごすぎ。
KOL&MCKの使い方というか、インスコのやりかたがワカラナイ。
Delphi 6 Personal使ってるけど、どうやるの?
  ∧,,∧
 ミ,,゚Д゚彡
 ミつ日(ミ
kol_mck.zipをダウソして解凍して出来る
Kol_mck.exeを実行して
C:\KOLができるです。

各Verのパッケージ(dpkファイル)があるので
それをDelphiから開いてください。

で、パッケージをコンパイルしてインストールしたら、
コンポーネントがたくさん入るはず。

それをしてから、
KOLサイトからDEMOプログラムをダウソして
プロジェクトファイル(dpr)を開いてみてください。

一番単純なFormだけのものとか開いて
ちょこちょこ改造すると面白い感じ。
402388:03/04/30 03:20
初めての人には敷居が高いので、というか自分がかなり苦労したので、
導入ガイドのサイトを作ってみました。
http://www.geocities.co.jp/SiliconValley-Sunnyvale/3282/

これでどんどんユーザーが増えて情報が増えるとウレスィな〜
なんて思ってたら、既にフサギコさんに言い尽くされてる。鬱氏・・・
まあ暇があったらコンテンツ増やすようにします。
普通のVCL、Form1から作り始めると
>[致命的エラー] Unit1.pas(7): ファイル 'ExptIntf.dcu' が見つかりません
こんエラーがでるです。

??
>>403
一度保存すると別のプロジェクトが作成されるんじゃなかった?
それを開くとMCKが使えるようになったような気がしますた。
>>403
>>402の導入ガイドへにわかりやすくかいてるYO
>>403
ん〜、私も何度か見た覚えが・・・
どうしようもない場合はBINフォルダのdefproj.dofを消すとデフォルトの状態に戻るので、
それで解決したような気がします。
407406:03/04/30 10:19
>>406は無視してください∧||∧
>>402
お気に入りに入れますた。
ロシア人やるじゃん (・∀・)イイ!!
410388:03/04/30 19:05
>>408
ありがとうございます。
まだ導入ガイドしかなく、デザインもジオのできあいのままで恥ずかしいですが、
少しずつ内容を増やしていこうと思ってます。
           _____________
   ∧,,∧∩  /
  ミ,,゚Д゚彡 < できまった!!>>404
   U  ミ   \
 @ミ  ミ       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪ ありがとうございます


[デフォルトプロジェクト]-[検索パス]
に入れるのと
[環境オプション]-[ライブラリパス]
に入れるのはどっちも同じ効果なんですか?
あれれ。
インストールしようとしたら
[致命的エラー] mirror.pas(51): ファイル 'Kol.dcu' が見つかりません
だそうです。
どうしたらよいのでしょうか。

(KOLDEF.INCもエラーが出たけどそれはコピーして持ってきた)
>>412
そりゃ見つからないんだから、
Kol.dcuを探して、
ダウンロードして、
パスの通ってるところなどに置いてから、
改めてインストールすれば良いのではないでしょうか?
>>412
できました。
BCBでも使えるかな?
試してみるか
417416:03/05/01 23:01
BCB6(UPDATE4)でテスト。
↓こんなん出ます。「この仕様」って、どの仕様やねん

[Pascal エラー] kol.pas(62235): Object : この仕様はサポートされていません
>>417
 class 型よりいにしえにobject型というのがあって、
  object型はBCBのpascalコンパイラではサポートされてないんだ。

 BCBで使うならobject型の部分をクラスにするかレコードにするかしないとだめだね
420デフォルトの名無しさん:03/05/02 08:58
いわゆるひとつの、age
>>419
そうなんだ・・・
422416:03/05/02 13:53
>>419
情報tnx.

とりあえず、type = object のところを機械的にclassに置き換えて試してみたが、
「オブジェクト型が必要です」と怒られてしまった。
うまくいかんものだな。
type = objectと
type = classは
オブジェクト生成の方法や
引数渡しの方法がぜんぜん違うから
そのあたりを調べながらやってみてはどうでしょうか?

大きいライブラリであるほど
焼き直しは大変だと思うけど。
424416:03/05/02 14:24
>>423
>オブジェクト生成の方法や
>引数渡しの方法がぜんぜん違う

やはりそうですか……

Delphiのobject型については、ぐぐっても思うように情報が見つからんので
ちと頭が痛いですyo

暇なときに、MLあたりで情報収集しますわ
KOLのリッチエディットコントロールで
RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName)
という形式が使えなくなった!
どうすればファイルを読み込めるのでしょう?
  ∧,,∧
 ミ,,゚Д゚彡
 ミつ日(ミ

とりあえず、これで動きました。
(サンプルアプリのMultiClbrd見たよ)

procedure TForm1.Button1Click(Sender: PObj);
var
 SL: PStrList;
begin
 SL := NewStrList;
 SL.LoadFromFile('C:\Borland\Delphi6\Projects\testKOL\Unit1.pas');
 RichEdit1.Text := SL.Text;
 SL.Free;
end;

ライブラリの根幹から
type Objectを使っているので
改造は大変そうですね。
427416:03/05/02 17:32
恥ずかしながら、object型ってのは今日初めて知った。
普段はBCBばっかり使ってるし。

昔Delphiで作った小物をいくつかKOL化してみたけど、いいわーコレ。
Indyみたいに、おまけでDelphiについてきたら面白いかも。
object型は C++ のクラスのようにヒープでない所(スタックやグローバル)にもインスタンスが作れる
そうすると解放の手間がいらないわけでその分便利なんだけど、
そういう便利さを使ってるとクラス型には簡単に置き換えてOKって訳にはいかない。

レコード型にして、メソッドの部分を関数に置き換えてゆくのも苦労だし
クラスに置き換えるのも結構大変
う〜ん、オブジェクト型についての情報が見つからない・・・
古めのDel本でも読んだらいい?
>>429
ターボパスカル本を探さないとダメでしょ Delphi1以後はclass型推薦だから
431429:03/05/02 21:30
>>430
情報サンクス
探してみる。
何か後ろ向きのような気もするけど・・・
どちらかと言えば、メソッド付きrecordなイメージ。
DelphiのclassはJava似だけど、objectはC++のstructに近い。多重継承を除いて…。

個人的には、object型でもインターフェースさえ実装させて欲しい。
433デフォルトの名無しさん:03/05/02 23:08
1立方センチメートルくらいの奴キボン
Object型の解説はここがいいかも
http://www.mactech.com/articles/mactech/Vol.02/02.12/ObjectPascal/
435ねこま:03/05/03 06:35
object 型の特徴
- override できない
- interface の導入も無理
- 唯一 virtual が出来る?のでこれで継承
※object 型の New 手続きの使い方はヘルプから削除されている

日本語での情報としては FDELPHI の過去ログが一番イイ!
いまさら感が否めないけど.
Delphi.NETの方では、完全にobject型がなくなるらしい。
その代わり、recordにメソッドが持たせられるとかどうとか。
ようは、C#っぽくなるわけだが。

どちらにせよ、objectは将来性がないから、あまり肩入れし過ぎないようにしないと(´д`;)
>override できない
一瞬戸惑ったけど、"override" という指令が使えない、という意味ですね。
C++同様に同名のvirtualメソッドを派生クラスで宣言すればオーバーライドです。
あと、virtualの後に数字を付ければ、今「message 数値」と書いているのと同様なことが出来るはず。

それとNew/Disposeはこんなの。
New(インスタンスを格納するポインタ, コンストラクタ(引数)); // New(PObj, Init(123));
Dispose(ポインタ, デストラクタ); //Dispose(PObj, Done);

Delphi1付属のOWL(Pascal版)のソースを見れば使い方はだいたいわかる。
でも代入演算子が再定義できないので、結局はメソッド付きrecordに留めておくのが吉。
>>436
ん?それ(recordにメソッド)がサポートされるからこそ、今安心してobject型が使えるんじゃないですかw

TOBJ = {$IFDEF DOTNET(←?)} record {$ELSE} object {$ENDIF}
 なんたら;
end;
a, so-ka, naruhodo(w
KOL難しいけど超ステキ!!
441デフォルトの名無しさん:03/05/03 20:18
最近のDel厨の流行りはKOLでつか
442ねこま:03/05/03 21:09
静かなブームです.
(流行ってない)
SaveToFileとかVCLでは簡単な記述ですんだけどKOLではそうはいかない。
しかも、フォント選択ダイアログがないことがもうダメかな。

そんな漏れにKOLを教えてくれー
>>443
SaveToFileあるよ。
KOLProjectのShowHintプロパティをTrueにするとKOLFormのShowHintプロパティもTrueになるけど、
実際にコンポーネントのHintプロパティに何か入れるとエラーが出ます。
KOLではHintは使えないんでしょうか?
TMyTimer = class(TTimer) みたいにして派生クラスを作るのは、KOLではどう書けばいいですか?
447446:03/05/09 23:58
つまり、TTimerを継承して独自のメソッドやプロパティを持たせたいんですが。
KOL知りませんけど、object型なら、TMyTimer = object(TTimer) でわ?
449446:03/05/10 20:47
>>448
レスどうも。
フォームの定義をまねて、
PMyTimer = ^TMyTimer;
TMyTimer = object(TTimer)
とやったらいけました。
constructorの代わりにNewMyTimerという関数を作って
その中で
new ( Result, Create);
とやってるんですが、これで正しいんでしょうか。
今のところ思い通りに動いてるからよしとするかな・・・。
450デフォルトの名無しさん:03/05/13 00:57
kol使いたくてDelphi personal入れたYO
451デフォルトの名無しさん:03/05/15 23:54
ホッシュ
実行ファイルのでかさなんて問題ではない時代に突入しているというのに・・・

早く作り上げるという選択肢を選ぶ方が賢い
世の中が全部そうなってるわけでもないでしょ。
興味の無いスレなら見なければいい話。
自己展開書庫の頭につけるコードとか、フロッピーが生き残っている環境とか、
小さい方がいいのはいくらでもある。
煽りにマジレスカコワルイ
KOLで作ってUPXで圧縮、これ最強。
100KB以上の巨大アプリはもういらん。
KOLってOOじゃないのかよ。
デザパタ適用できないのかよ。
UPXを使ってるプログラマは屑だと思いますよ^^
容量が小さくなるに越したことはないんだが。
>>458
そうだな。
>>457
何で?
無駄にメモリ消費するからに決まってんだろボケ
それがいやなら展開すりゃいいじゃん。
なら最初から圧縮するなよ
いまどきタダ同然のHDD領域がもったいないと思う奇特な奴だけが
圧縮すればいいだろ。
464デフォルトの名無しさん:03/05/18 00:29
まあUPXは見た目の小ささ以外には意味ないと思うな。
どうせ実行時にはメモリ上に展開されるわけだし。
配布するときはどうせzipだしな。
メモリ上は圧縮したほうが食うだろう。
どうしても実行可能状態でのHDD領域が気になる奴は、
ドライブごと圧縮すればいいんだし。
>>465
ほぼ同じ
素人が喜ぶツール
いやいや、玄人ぶったやつが頼んでもいないのに批判と解説をしてくれるツールだよ。
>>463
まあでも LAN越しやFDに入れて動かすには圧縮しておけば便利じゃないか。
>>465
UPXで圧縮してからzipアーカイブにした方が実は配布サイズが小さくなるYO。
まあ微々たる物だけどな。
>>465
起動時に若干多く食うだけ。
起動後は変わらない。
>>471
常時接続高速回線の時代に何言ってんだアンタ
475デフォルトの名無しさん:03/05/20 10:49
Air H"ですが何か?
55.6kですが何か?


 



                                      ( ´Д⊂ヽ
飽食の時代に貧乏性炸裂
今は崩食の時代だそうですよ
479デフォルトの名無しさん:03/05/20 14:22
玄人指向プログラミング
至高のプログラミング
>>474
鯖の負荷が小さくなる。
メールチェッカーを作っています。
program Project1;

uses
Windows,
ShellAPI,
Graphics,
Messages;

{$R *.res}

procedure ICONMessage(var Msg : TMsg);

var
FIconData : TNotifyIconData;
Icon: TIcon;
Point : TPoint;

begin
with FIconData do
begin
cbSize := SizeOf(TNotifyIconData);
uID := 1;
Wnd := Handle;
uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
uCallbackMessage := WM_USER + 100;
szTip := 'メール未チェック';
Icon := TIcon.Create;
Icon.LoadFromFile('Nomal.ico');
hIcon := Icon.Handle;
Shell_NotifyIcon(NIM_ADD, @FIconData);
Icon.Free;
end;
GetCursorPos(Point);
case Msg.wParam of
WM_LBUTTONDOWN:
begin

end;
WM_RBUTTONDOWN:
begin

end;
WM_LBUTTONDBLCLK:
begin

end;
end;
end;
end.
としてもうまくいきません。
タスクトレイに常駐させるサンプルを
かいていただけませんか?
>>482-484
スレ違い 質問スレ池
このスレでいいんじゃないの? 質問スレでAPIプログラミングは判らんでしょ。
>>486
ここのスレタイ嫁

ここでどうぞ↓
ミ,,゚Д゚彡フサギコとモナーのDelphi質問相談談話室
http://pc2.2ch.net/test/read.cgi/tech/1052312038/
488 :03/05/20 23:12
スレ違いだし。
「サンプル書け」だし。
つまらん煽りネタ?
どっちにしろ他逝けって感じ。
判ったよ。
じゃ、ここの
ttp://homepage1.nifty.com/~okapon/download/
小さいタスクトレイ常駐アプリケーションを作りたい!!

を参考にして下さいって事で
もしかして答えたかったのか?
この騒ぎに便乗しよう。
新着メール数を得るのにいいものはありませんか?
IndyのIdPOP3は使えないや…
dllとかでもいいので教えて下さい
「ありますか」「ありませんか」「出来ますか」「出来ませんか」

「ある」「無い」「出来る」「出来ない」


質問だけ敬語

レスは「ありがd」
>>491
このスレの頭から読めば判るだろうけど、
小さな実行ファイルを作りたいというのは自分で調べてローレベルから実装しようという意味だよ。
494491:03/05/25 09:26
>>493
すみませんでした。
TMemo / TButton / TTcpClient を設定。 TTcpClient には RemoteHostに自分のNPOP サーバと RemotePortに110
procedure TForm1.Button1Click(Sender: TObject);
procedure msg(s:string);
 begin Memo1.Lines.Add(s)  end;
function Send(s:string):string;
var w:string;
 begin  msg('送信 :' + s);
 with TcpClient1 do begin  Sendln(s);  Sleep(300);  WaitForData(1000);
  w:= Receiveln;  msg(w);
 if copy(w,1,3)<>'+OK' then abort;//通信エラー
  delete(w,1,4);
  Result:=w;
 end
end;
var w:string;
begin
 TcpClient1.Open;
 if not TcpClient1.Active then abort;
 msg('Active');
  TcpClient1.Connect;
  TcpClient1.WaitForData(1000);
 if not TcpClient1.Connected then abort;
 Send('USER '+user);  Send('PASS '+pass);
 Send('STAT');
 Send('LIST');
 TcpClient1.WaitForData(1000);
 while TcpClient1.BytesReceived>0 do begin
  with TcpClient1 do w:= Receiveln; msg(w);
  TcpClient1.WaitForData(1000);
 if copy(w,1,1)='.' then break;
 end;
end;
>>491
新着メール数をえるのに Indyが小さな実行ファイルを作るのに使えないというなら、
>>495のように TcpClientを直接叩け

それでも大きいというなら、WinSockを直接叩け
なお、495はサンプルコードだ。  QUITもしていない。
不明な点があるなら RFC1939 を読め。 検索すれば日本語翻訳も見つかる
あ USER を送る前に バッファの中身をReceiveしとくべきだな
500500:03/05/27 11:56
500
>>1
大きな実行ファイルを作りたいです
>>501
大きい画像を、リソースにでも埋め込めば?
>>501
Delphiで作ると普通に大きくなると思うが
504 :03/05/27 23:40
ネタにマ(略)
505デフォルトの名無しさん:03/05/27 23:47
>>503
ワラタ
>>1
ぼくは、誰にも負けない大きな大きな実行ファイルを作るのが夢なんです
(´-`)。o ○ (「Delphiで大きな実行ファイルを作ろう」ってスレ立てたら
エエやないの)
508デフォルトの名無しさん:03/05/28 10:42
>>506
ぼくは、誰にも負けない大きな大きなうんこをするのが夢なんです
509山崎渉:03/05/28 12:27
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
保守
あげ
保守
513デフォルトの名無しさん:03/05/29 23:35
あげ
保守!!
終わったな
Delphiで小さな実行ファイルを作ってる人は
あんまりいないの?
Delphiを使ってる人はサイズが大きくなるのを
黙認してるのかな…
>>516
Delphiで小さな実行ファイルを作ろう。

API直叩き。

Delphiを使う意味が無いことに気付く。

C/C++へ。
>>516
Delphiで小さな実行ファイルを作ろう。

実行時パッケージ使えばいいか。
>>516
いるよ〜。

ただ、>>517は事実なので、PascalとC++(というよりむしろ
高速コンパイルとtemplate)のトレードオフになってしまう。
で、両方を一定レベル以上で使える香具師ならtemplateを選ぶだろう。

俺のように、高速コンパイルを選ぶやつは少数派ってことです…
520デフォルトの名無しさん:03/05/31 02:04
Delphiを使う必要が無いということは、
Cを使う必要が無いと言ってるようなもん
Delphiの高速コンパイルは罪
はっきりいって、template満載のC++のコンパイルに我慢できないよ・・・
どうしてくれるんだYO!!
いいんだよ。
 STL使うよりコード書いた方が楽しいじゃないか
 テンプレート書くのは楽しいけど、他人のテンプレート使うと、なんだかVBプログラマになったようで嫌だろ?
ソースから使ってない関数等をすべて削除してくれるツールがあれば便利なのにな
使ってない関数はコンパイルすると 左に ・ が付かないから手動でやればいいんじゃないのかな
>>516
小さな実行ファイルの需要が限られているからでしょうか.
中規模以上なら数百キロの差は無視できるでしょうし,
自分で使うだけのアプリなら多少大きくても問題ないでしょうから.

>>517
KOLは無視?
別に良いんじゃない?
某有名Delphiさんのアプリで実行ファイル10MBのあったし。
そんなのに比べれば1Mや2Mくらいね〜

…デモ ヤッパリ サイズハ キニスル ヨナァ...
自分専用ならどうでもいいけど、配布するとなるとやっぱり小さい方がいい。
DL時間とかは今や問題にならないにしても、見た目がねえ。
というわけでKOLマンセー。
>>526
…それ、ゲームじゃないか?
音楽とか実行ファイルに含めりゃ余裕でそれくらいいくけど、別にDelphiに限ったことじゃない。
サイズ気になるなら、C使えばいいじゃん。
DelphiやVBの優位点はサクサク作れるスピードなのに、
それを殺してまでサイズを減らす必要あるのかな?
時代の流れで、サイズが気にされなくなってきてるならDelphiにとっては嬉しいことなのにね。
>>529
はいスレ違い
VCL込みで増えるサイズは400KB程度だよな。
大きいアプリに成れば成る程気にならなくなる。
KOL使えばVCLとほぼ同じ作り方ができて30KB程度だよ。
んなこたない
KOL標準のオブジェクトにスクロールバーが無いのはなぜだ。
と思ったら、IDE には表示されていないが存在する模様。
KOLが突然消えたら誰が責任取ってくれるの?
その時こそチャンス。 自分で小さいの作って一挙に名前売ってね
何であんなにサイズ違うのか判らん
VCL廃止してKOLにしてくれよボーランド
なんでVCLを廃止する必要があるんだ?
KOLはKOLで使っていけばいいし、VCLはVCLで存在することで何の迷惑もかけていない
選択の自由。ってやつだ。
KOLねぇ…。
漏れみたいな初心者には全く向いてないね、うん。
Memo1コントロールにあるようなMemo1.Lines.LoadFromFileとかが使えないし。
んー、漏れが勉強しなければいけないのかもしれないけど
使うかどうかは微妙〜
KOL と MCK のソースは読む必要があるかと。
日本語ドキュメントが無いならソース読むしかない。
>>542
英語を読むという手もあるぞ。
Padcalのソースと英語と、どちらが読みやすいかは、個人によるが…
>>541
RichEdit使っとけば?
RichEdit1.RE_LoadFromFileっての
CONCONクラッシュ
大は小を兼ねる
大きいことはいいことだ
547デフォルトの名無しさん:03/06/07 14:55
正直、コンパクトなサイズの実行ファイルにこだわり過ぎると、APIを駆使せざるを得ないので
しんどいし、生産性が極端に悪くなるから嫌だ。
>>548
その通りだけど、そうやって自分を鍛えようってのがこのスレの趣旨だろ
550デフォルトの名無しさん:03/06/07 23:38
Да, у меня есть время
>>550
What are u getting at?
552550:03/06/08 02:16
>>551
Крупный сайт о программировании
>>552
Oh yeah!
>>548
駆使って言うほどWinAPIって難しかったっけか?

ウインドウの初期化処理は使い回しできるし、後はメッセージ受けとるだけ。

「僕はコンポーネントをダブルクリックして自動的にコードを書かせなきゃプログラムは書けない!」

とか言うんなら、哀れな目で応援するが。
548が言ってるのは、Delphi使ってるんだからAPIAPIAPIAPIしなくても。
ということだと桃割れ
>>555
まぁ、今更VCL捨ててまで遊ぶのもアレだな。昔みたいにHDD320MBとかなら納得するけれど。
>>554
コンポーネントをダブルクリックしてもコードは自動生成されませんが。

いや、言いたいことはわかるけどね。

>ウインドウの初期化処理は使い回しできるし、後はメッセージ受けとるだけ。
この程度の話をしているわけではあるまい?
>>557
それ以外にDelphiはやらなくて良くてWindows APIではやらなきゃいけない事ってあったっけか?
コンポーネント書いたり、使ったりしたことある?>>558
>>559
あるよ。普通に。

最近は色々考えることあってTWinControlを欲しない物はクラスにしてるけど。
>>560
じゃぁ、コンポーネント化が「メッセージを受け取るだけ」ではないことは容易にわかるだろうに。

多分、知ってて書いているんだろうけどさ。
>>561
ビジュアルじゃないVCLライブラリに関しては便利なことは認めるけどな。
563548:03/06/08 19:56
正直に白状すると、VB(6.0以前)とDelphi(VCL依存コード)以外のプログラミング経験がないため、
CreateWindow、CreateWindowExの使い方を理解していない。
サブクラス化の簡単なのとか、SendMessage 等は一通り理解していますが。
じゃあ、このスレでも見て一通りやってみたらいいじゃない。
Cだと あの教科書コピペしたらそのまま動くから面白くないし、Delphiで書く方が理解が進むでしょ?
Win32APIでの窓作成はHalbowさんのページ見れば全然こわくないぞ
DelphiならAPIしらなくて窓作れるよ
>>565
でもこのスレ的にはSDKのCソース見て地道に勉強する方がいいだろうね。
アレ見てコピペしちゃあ結局Cで勉強してるのと同じでしょ。
というかそれが勉強になるならCでやった方が効率的だ。
>>564-567
ありがとうございます。
(結果報告は後日・・・)
APIばっか使ってたらWindowsが無くなったら大変なことにならないかい?
APIばっか使ってなくてもWindowsが無くなったら大変なことになります。

所詮、WindowsとLinuxでしか動かん開発環境だから・・・。
>>570
すべてを再利用しようとするなってこった。
VCLの思想やオブジェクト指向の知識はどこに行っても役に立つ。

言語に縛られるな。もっと大きく物を見ろ。
こーゆーやつほど小物なんだよなあ
イエティる
VB厨に言われても説得力がない
みなさんさようなら
いかないで…
いかないで〜 いかないで〜
愛したひとは〜 あなただけ〜
泣いて笑って〜 一人きーりー
あなーだけよとー ひとりきーりー
はぁ〜〜♪
579デフォルトの名無しさん:03/07/01 23:08
はじめてgccをさわってみたんですが、C++でプログラムすると結構でかいバイナリ吐きますね。

#include <iostream>
using namespace std;

int main()
{
cout << "  _、_" << endl;
cout << "( ,_ノ` )y━・~~~" << endl;
}

こんなプログラムを書いてコンパイルしたら、450Kにもなりました。
>>579
C++は小さいプログラムだと大きく感じるが、
大きいプログラムになってもサイズはあまり増えない。

Delphiは小さいプログラムでもそこそこの大きさで、
大きいプログラムになればなるほどサイズも
増えていくというのは常識。
>>580

なるほろ。
そうか?C++でもBoostとか使うと一気に増えるし、
どれだけライブラリ(中の無駄な部分)を抱え込むか/削れるか、の問題だろ?

VCLにも無駄な部分は多いけど。とりあえず全コントロールにドッキング要らん。
TControlを太らせなくてもTDockSiteとTDockPanelさえ用意しておけば済む話じゃ無かったのかと小一時間…
プログラミングスタイルの問題だと思うよ。
OOPとして使えばC++もDelphiも同じ。
ただし、C++の場合テンプレートがあるから、使えば使う程コードは増えてしまうよ。

しかしまあ、書いたコードだけサイズが増えてしまうのは仕方ないし、当然だと思うけどね。
当然ではないと反論してみる
>>579
iostreamつかうなYO
>>583
そういう所をコンパイラで最適化して欲しいけどなぁ
587山崎 渉:03/07/15 10:19

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
588山崎 渉:03/07/15 14:20

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
589デフォルトの名無しさん:03/07/21 07:55
がんばってFree PascalでWinアプリを作っちゃうってのはどうですか?
FreePascalはDelphiに比べてコンパイル時間は倍、作成したアプリのパフォーマンスは半分なので、ちょっと・・・
ロマンスティックだな
>>590

Free Pascalってそんなにひどいの?
>>589
Delphiのコンパイラがただで手にはいるんだから必要ないだろ。
>>593

(´・ω・`)
サイズを小さくしたいので、フォームは使わないでダイアログだけ出すように
したいんだけど、フォームなしの通常のアプリにするべきか、コンソールアプリに
するべきかどっちがいいんでしょう?
例えばコンソールアプリにした場合にダイアログを出しても問題はないのでしょうか?
ダイアログは API の MessageBox を使うと思います。

とりあえず簡単なテストしましたが、今のところ問題ないんですが
コンソールアプリとしては邪道だと思うので、そのあたりを教えて下さい。

要するにEXEサイズが小さければ何でもいいのですが。
>>595
中途半端で、キモイって思う人が居るくらいで、問題無い
597 :03/07/24 03:34
>>595
1.デルファイ ヲ ヤメル。
2.アセンブラ デ ゴリゴリ カク。
3.ウマー!!
>>596
了解です。
599デフォルトの名無しさん:03/07/25 12:45
だれか教えてくれ。
Linuxのサーバーに繋いで、ファイルのパーミッションを変更するもんを
作りたいのだが、Delphiは全くの初心者で、何の関数をつかえば、全く
わかりません。どうしたらできるの。
>>599
使うツールが違うよ。Debian使いなよ。
FTPクライアントでも作れ。ここで聞くな
>>599
なんのサーバーだ?FTPサーバか?
>>599
telnet でやれば。
つか、擦れ違い。
http://pc2.2ch.net/test/read.cgi/tech/1058834815/l50
から入ってゆっくり勉強せい。
604デフォルトの名無しさん:03/07/25 21:55
あのな、599だがな、ぎゃぎゃさわぐなっつうの。いま、説明するよ。
サーバーはsambaだ。クライアントは、OSがWindosのPCだ。
知りたいのは、Delphiには、パーミッションを取得し書き換える関数かなんかあると
おもうのだが、それは何だ、どうするのだ。と言うこと。
FTPクライアントでその機能をもっているものが多数あるのは知っている。その中の、
パーミッションだけを書き換える部分を特化したものがほしいのだ。できれば、オナー
やグループが書き換えられるともっといい。

いいか、初級Windowsユーザーがsambaにファイルをおくだろ。あとで、グループに
公開したいとか、なんかパーミッションを変更したくなった時、手軽にそれを変更でき
るアプリがほしいわけ。telnet使える連中なら苦労はしないんだよ。
でも、あれだな、603のいうとおり質問の場所まちがったかな。まあここで質問してしま
たので、最後までたのみまつ。おねがい。
>>604
一応突っ込んで置くが、DelphiはWindows3.1で動くバージョンも存在する。
英字を全角で書くようだったら、プログラマ失格だな。
>>604
>Delphiには、パーミッションを取得し書き換える関数かなんかあると
>おもうのだが

>>601>>603が正解。
608デフォルトの名無しさん:03/07/25 22:22
あのな、2ちゃんねるに投稿しているのであって、コード書いてんのとちがうんだよ。
わかる? 
>>608
「ここは教習所じゃない。」とかほざいて平気で信号無視するDQNとどう違うんだ?

610デフォルトの名無しさん:03/07/25 22:45
ぜんぜんちがうだろ。何勘違いしてんだ。
611デフォルトの名無しさん:03/07/25 22:54
ここは教習所だから人を轢いても俺の罪にならないと言って人を轢いたやつが、
公道を走ったとき、どうして人を轢かないんだ、と言っているのが、606だ。
こう、説明するとわかるか609
612デフォルトの名無しさん:03/07/25 22:58
プログラマーは、半角英数をいついかなる場合でも使わなければならないと勘違い
している頭の固いやつは、きっとプログラマーにはむかない。 ということで納得して
くれ。な、みんな。
なんだかんだで中出ししちまうくせに
614デフォルトの名無しさん:03/07/25 23:07
>>613 おもしろくない
615デフォルトの名無しさん:03/07/25 23:15
>>607 ありがとう。Delphiの限界をしったよ。Peal+CGIで考えてみるよ。
それにしても、FFFTPなんかは何で作っているのでしょうね。
>>612
ここで関数の有無を質問してる奴はプログラマーにはむかない。
ということで納得してくれ。な、おまえ。
617デフォルトの名無しさん:03/07/25 23:19
納得できん。もっとすじみちたてて説明してくれ。
618デフォルトの名無しさん:03/07/25 23:23
>>616 玉子焼きの好きなやつは、弁護士にむかない。と言っているのと同じだ。
>>617
多分あんたが夏とか冬に湧き出る人か、ここが2chだという事を認識できてない
頭の固い人だからじゃない?
620デフォルトの名無しさん:03/07/25 23:28
納得できん。もっとすじまんなめて説明してくれ。
621デフォルトの名無しさん:03/07/25 23:32
うぅ〜、わからん。ここが2chと認識できない。こうゆうやつが、関数の有無を
質問するのか。まったく下等な発想とおもうぞ。
622デフォルトの名無しさん:03/07/25 23:37
さぁ、みんな今日はもうおしまい。もう寝よう。
623デフォルトの名無しさん:03/07/25 23:48
FFFTPはVC++だよ
624_:03/07/25 23:50
>>623
だからどうかしたか?
626名無しさん:03/07/26 00:07
>>625
615だが、寝ようとおもったが、おまえな、せっかくおしえてくれたのに
失礼だろ。


>>625
つまりDelphiを窓から捨てようってことだ
フサギコの談話室があるに、わざわざ教えてくれそうも無いところで質問しないでも^^;
学校が休みになると下等生物がわいてくるね。
自分は下等生物ですっていってるようなことかくなっちゅーに
>>621
何逝ってんの?基地害?
下等生物とは>>630のことだが
>>630は加藤
ボタンを押すと
マン毛をかくプログラム

procedure TForm1.Button1Click(Sender: TObject);
var a,b,x,y,z:integer;
begin
randomize;
for x:=0 to 1000 do
begin
a:=random(Form1.Width);
b:=random(Form1.Height);
y:=Random(Form1.Width);
z:=Random(Form1.Height);
Canvas.MoveTo(a,b);
Canvas.LineTo(y,z);
end;
end;
>>634
300kb近いから小さい実行ファイルとは言い難いな。
procedure TForm1.Button1Click(Sender: PObj);
var a,b,x,y,z:integer;
dc:hdc;

begin
dc:=GetDC(Form.Handle);
randomize;
for x:=0 to 1000 do
begin
a:=random(Form.Width);
b:=random(Form.Height);
y:=Random(Form.Width);
z:=Random(Form.Height);
MoveToEx(dc,a,b,nil);
LineTo(dc,y,z);
end;
ReleaseDC(Form.Handle,dc);
end;

KOLのCanvasの使い方がよくわからないんでAPIにしちゃったけど、これで16,384バイト。
/* Button1をクリックするとButton2がランダムに表示され */
/* Button2を反射神経でクリックするとゲーム終了するゲーム */
/* コンポーネントはボタン2個、タイマー1個です */

procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.BorderStyle:=bsNone;
Form1.WindowState:=wsMaximized;
Timer1.Enabled:=False;
Button2.Visible:=False;
Timer1.Interval:=500;
randomize;
end;

//画面を最大化して、できるだけ広く使います
//終了するときはALT+F4キーを押してください

procedure TForm1.Timer1Timer(Sender: TObject);
var x,y:integer;
begin
x:=random(Form1.Width);
y:=random(Form1.Height);
Button2.Visible:=True;
Button1.Visible:=False;
Button2.Left:=x-50;
Button2.Top:=y-100;
end;
続き

//ボタン2を0.5秒ごとにランダムな場所に出現させます

procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=True;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage('おしまい');
Form1.Close;
end;
randomってマイナスにはならないの?
なりません、はい次!
>>637
D6Personal+KOL1.80でコンパイルしてみたけど、24KBになったよ。
D7なら16KBになるとか?
643637:03/07/31 00:20
>>642
私も同じ環境です。
ただKOLのSystem units replacementというのを入れてるので小さくなったようです。
試しに外してコンパイルしてみたら、24,576バイトになりました。
644642:03/07/31 01:32
>>643
なるほど、さっそく入れてみたら16KBになったよ。
サンクスコ
http://pitecan.com/fugo.html
これ読んで改心しました。
>>645
そんなの間に受けるなよ。
>>646
本当にそう思っているの?
あのページ見て、「冗談もほどほどにしろ」なんて一瞬でも思ったなら、
一度自分のコードを見直したほうがいい
>>647
いや、そうでもないだろ。
「一番単純で短いアルゴリズムを使います。」なんて書いてるが、
いくら単純でも O(n^3) なアルゴリズムなんて使うか?
場合による
必要に応じて
>>645
のページより

>カーネギーメロン大学で開発されたAmuletというツールキットを使うと
> ``Hello, world''とウィンドウに表示するプログラムのサイズが5MBになります。
>素敵な富豪感覚ですね。

delphi も所詮中産階級のようです。
>>648
使わない。
富豪的以前の問題で、ライブラリのソート関数使うだけ。

もうちと答えに詰まるような例えにしてくれ。面白くない。
勘違いしてもらうと困るが、富豪的プログラミングは、
富豪的に資産を使うのが目的ではなく、
より早く目的に達成するために、富豪的なプログラミングを許すということ。
>>652
アルゴリズム=ソートかよ。
夏だな。
655山崎 渉:03/08/02 02:18
(^^)
>>652
面白いとか面白くないとか
そういうスレじゃねえんだよ
夏だな
スレ違いですが、Mersenne Twisterの乱数って、Delphiのシステム乱数よりも早いですか?
659 :03/08/03 23:35
なんでスレ違いの質問するんですか?
バカだから
toste
>>659
夏だから
663デフォルトの名無しさん:03/08/05 10:43
遅レスだけど、
634にかなり感動した。&爆笑してしまった。
664デフォルトの名無しさん:03/08/05 11:09
作ったやつは ここで うぷしよう!

http://bluetree.2.pro.tok2.com/monjyu/up/up.cgi

って 削除されたら しらん
665_:03/08/05 11:17
おまえら貧民なの?
>>663
ボタンを数回押したらすごい剛毛になってしまいますた
夏だから言いたいだけちゃうんかと
台風だから
670山崎 渉:03/08/15 16:01
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
納得できん。もっとすじまんなめて説明してくれ。
保守
673デフォルトの名無しさん:03/09/11 14:38
procedure Dump2HD( pos:Integer ; sout:TStrings );
var h:THANDLE;
var i,x,y:Integer;
var dt : array[0..511] of byte; //2HD 512byteセクタ用
var siz:DWORD;
var s:string;
var w:string;
begin
 h:= CreateFile ('\\.\A:',GENERIC_READ, FILE_SHARE_READor FILE_SHARE_WRITE ,nil, OPEN_EXISTING,0,0 );
 if h=THandle(-1) then exit;
 SetFilePointer( h , pos,nil, FILE_BEGIN);
 try
 if ReadFile(h,dt,Sizeof(dt),siz,0) then begin
  i:=0;
  for y:=0 to length(dt) div 16-1 do begin
  s:=IntToHex(pos,4)+';';
  w:='';
   for x:=0 to 16-1 do begin
   if x<>0 then s:=s+' ';
   if Char(dt[i]) in [' '..'z'] then w:=w+Char(dt[i]) else w:=w+'・';
   s:=s+IntToHex(dt[i],2); inc(i);inc(pos);
   end;
   sout.Add(s +w);
  end;
 end;
 finally CloseHandle(h); end;
end;
varがやけに多いな
単にUPXなんかでexeをパッキングすればいいだけちゃうの?
UPX と比べて、2倍から10倍程度小さくなる。
このスレでC使えとかUPX使えとかPC買い換えろとか何の意味があるんですかとかって指摘は野暮ってもんだ。
PC買い換えろ??
679デフォルトの名無しさん:03/09/12 00:14
PC買い換えろ???
UPXを使えという奴は馬鹿。
あれは、ハードディスクの使用率をちょっと少なくするという利点だけで、
起動時間が遅くなり、使用メモリも増加する。
どなたか>>634をコンパイル&UPしてくださいませ。
>>680
ハードディスクよりメモリのほうが速い。
メモリ消費は確かに増えるがな。とくにDLLを圧縮すると
共有されるものもされなくなる。
だがそれがいい
DLLってNT系列のWindowsでも共有されるの?
>>684
書き込んだとき初めて独自にページが割り当てられて、
それまでは共有される(copy on write)。
UPXは圧縮解除のために全領域にわたって書き込みを行うから
まったく共有されなくなるわけ。
>>684 デフォルトでは {$IMAGEBASE $00400000} となっているので
デフォルトのままのDLLを複数のアプリがロードすると 当然同じアドレスにロード出来ない。
そうすると、別のアドレスに割り当てられられた方は実メモリを必要とする
リロケーションのためにコードセグメントに書き込む必要があるからね
というわけでdll作る時はてきとーな値に変えるように
689デフォルトの名無しさん:03/09/25 23:16
小さな実行ファイルでもバッファオーバーフロー
>>689
馬鹿?
共有されないって用途によってはひょっとしてすごくいいんじゃない?
変数に名前つきメモリ空間とか使わないで済むじゃん。
不定期ローテク講座参照。
> 変数に名前つきメモリ空間とか使わないで済むじゃん。
いや普通でも使わなくて済むが。区別する必要ができたらその時点で
共有されなくなるんだから。普通はメモリマネージャの中の人を
意識する必要はない。
「必要もないのに」共有されるからメモリの無駄遣いなの。
わかりやすいKOL導入ガイド
http://www.geocities.co.jp/SiliconValley-Sunnyvale/3282/
694デフォルトの名無しさん:03/09/26 12:04
わかりやすいKOL導入ガイド
http://www.geocities.co.jp/SiliconValley-Sunnyvale/3282/
ScrollBar は未実装だった。
696デフォルトの名無しさん:03/10/03 23:23
Delphiで小さなバッファオーバーフローを作ろう
697デフォルトの名無しさん:03/11/01 18:19
たまに保守
ところで、何でKOLはファイルサイズが小さくなるのでしょうか?
いらないと思われる機能を削ったから。> 698
VCL と同じようなことをしようとすると、結局似た大きさに戻る
>>698
たとえばあるユニットのある関数だけ使った場合、
使ったユニットの分だけ大きくなるのではなく、使った関数の分だけ大きくなる。
SysutilsやClassesといった、usesするだけでサイズが増えるユニットは、
Initialization部分などで関数や変数を使っているからだ。
と、フサギコに教わった。

普通にVCLアプリを作ると、ウィンドウ一つ作るのに多数のユニットを使っていて、
Initializationも多数あるし、クラスもたくさん使っているため、
実行ファイルははじめから数百KBになってしまう。
ところが、KOLの場合、KOL.pasだけでウィンドウを作れるので実行ファイルが小さい。
usesしているWindowsとMessagesは定数ならべるにすぎないユニットなので肥大しない。
クラスはすべて名前変えただけのTObj型なのでこれも肥大しない理由。

当然だが、サイズが小さい分、実装している機能も少なく、>>699のような結論。
Delphi1のころのPC環境(CPU:100MH, HDD:2G)と今のPC環境(CPU:3000MH, HDD:200G)を比較すると
相対的に無茶苦茶EXEのサイズ小さくなってるよな。
HDの容量単価で計算すると
昔 2GBytes 1万円とすると、0.0000046566 円/Byte
今 100GBytes 1万円 とすると、0.0000000931 円/Byte

Delphi+VCLの素組みアプリが400KBytesだとすると、
昔 約 1.91 円
今 約 0.04 円
ハードディスク占有率下げたくて小さいアプリ作りたいヤツはいない。

(ユーザーから見て)同等の機能を有する二つのソフトが、
500KBと50KBだったら、ハードディスク空いてても50KBの方を使っちゃう。
起動の時ガリガリガーモサッてソフトと、ジパッってソフトがあれば速いほう使っちゃう。
MsOfficeの同等品がダウンロード2秒のフリーソフトで存在すれば使っちゃう。
大した違いがなくてもユーザーは常に比較してるものだ。
プログラマでもないのにワープロとエディタ使い分ける人がいるんだから、
小さいEXEに対する需要も有り続けると思う。
大きい小さいは、個人の主観だろ
サイズが大きい小さいのスレだっけか?ここ
↑ サイズに自信がないんでしょ
>703
結構な数のフリーソフト使ってきたけど、Exeサイズで比較したことなんかないぞ
動作の軽快さとか、実際の使用に関ってくる部分といっしょにするなよ
>>707
君はO型なんでしょう。A型の人のことはわからないと思われ
>708
すげえ、当たりだ

でも、>703も50kと500kのアプリで、明らかに500kの方が使い勝手がよければ
確実に500kの方を使うんだろうし、結局たいした意味は無いと思うけどね<Exeサイズ

同等の機能、同等の使い勝手なら、俺はExeサイズよりもアプリの見栄えを優先するな。
あとは配布してるHPなんかも結構重要だったりする。
710 :03/12/03 23:07
procedure 願望;
begin
オレ.イチモツ.size:=1000000;
end;
delphiは日本語識別子通らないだろ
日本語版なら通る。
[ヒント] 願望.pas(3): 変数 'イチモツ' が宣言されていますが '人生' の中では使われていません
[警告] 願望.pas(3): 'カリ'が必要な場所に識別子 '皮' があります
[エラー] 願望.pas(3): 指定された引数で呼び出すことができるオーバーロード関数 '彼女' が定義されていません
[エラー] 願望.pas(3): 'smallchinko型' と 'largechinko型' には互換性がありません
[致命的エラー] '願望.pas' ユニットはコンパイルできませんでした
>>713 GJ!
>>714 GJ!
>>5
この方法で小さなEXEつくると
Indyとかの通信ようコンポーネント使えますか?
無理ですよねぇ?
>>716
WinSock使え。Win32APIな
>>716
使えるよ。大きなEXEになるけど。
俺思うんだけどさあ、小さいEXEがいいかどうかってのは、美意識の問題なんだよ。
だから、1バイトあたりいくらだとかいう経済的な話は全く関係ないんだよね。
小さい方が美しい、それだけだよ。
無駄の少ない美しいコード〜ってことかな?
オブジェクト指向は無駄だらけw
昔はサイズを気にしてたけど、今はメモリ1.5GBのHDD1TB超なので
気にしなくなった。
USBメモリとかに詰める人にとっては未だにサイズの削減は必須課題らしい
FDに比べたら十分大きいでしょ -> USB フラッシュ
725722:03/12/11 23:48
俺が作るソフトはFD1枚に入らないのは皆無だがw
手伝ってくれる方キボンヌ
http://program.dot.thebbs.jp/1071486463.html
質問です。
全くのプログラミング知識0から初めて、次のようなことを
実行するプログラムを作りたいのですが、まず手始めに、
どのようなサイト等で勉強すればよいでしょうか。アドバイス
いただけると助かりますm(_ _)m

使用ソフト  Delphi6 personal
プログラムの内容、 aというファイルにおいて、
バイナリの一部をXorさせた値を、あるアドレスに書き込み、
ある場所のバイナリを書き換えて、b というファイルを出力
する

728 :03/12/15 23:31
俺は自己満足にすぎないけど小さくしたい。
特に、自分で作ったものと同等の他社ソフトのサイズが小さいと燃ゆる。
他社ソフトが大きいと勝手に優越感。
あと、関係ないけどバグのあるライブラリをそのまま使ってる他社ソフトにも勝手に優越感。
サイズが小さいと軽いっていうやつが多いからな。
いまだにVB製のメモ帳が軽さをウリにしてるし。
VBってランタイムも考えるとサイズかなり大きいじゃん・・・・
現実はそんなもんか。
>>713
彼女はvirtualか、、、
>>732
童貞はいつまでたっても抽象クラスってことか
>>733

unit Who;

interface

type
 TWho = class(TMan)
 private
  procedure Lover; virtual; abstract;
 public
  procedure Friend; virtual; abstract;
 end;

implementation

uses RightHand;

end.
オレはシンプルなアプリの場合はHalbow氏のTAPIWindowを使ってる。
KOLほど小さくはならないけど、KOLほどクセが無いのでちょうどいい。
オレはシンプルなアプリの場合はBorland謹製の実行時パッケージを使ってる。
KOL以上に小さくなる上に、KOLほどクセが無いのでちょうどいい。
>>736
それ小さくなったとは言わないだろ・・・
>>736
本当だ、僕のモンスターがこんなに小さくなっちゃったっ!!
>>736
BCBで試したら出来たヨ!
400KBあったアプリがなんと十分の一以下に!ワァオ♥
>>735
俺も使わしてもらっているんだけど、
TAPIWindowって20バイトのメモリリークがあるんだよね。
どこでメモリリークを起こしているかわからないだよな。
>>740
確認してみたがしてなかったよ。
メモリーリークってどうやって調べるの?
>>742
メモリー関係なら
PMemoryManager のメンバー(関数ポインタ) をフックして調べればいいじゃない
あ、GetMemoryManager SetMemoryManagerで設定するんだったか
一番簡単なのは、終了時にAllocMemCount と AllocMemSize をチェックすることかな

後は、堀さんのMemCheck.pas を使うとスタックトレース有効にして使うのも便利なんだけど、
1つでもスタックトレースなしでコンパイルされているライブラリが、
あったりすると動作不良起こすので、事実上使えないのが悲しい
事情により、このホームページを閉鎖します。
予想外の多くの方々が訪れて頂き、ありがとうございました。

Halbow
予想外の多くの方々が荒らしたわけだ
749デフォルトの名無しさん:04/01/17 23:28
あらら。な、なんで?ずいぶん急だなぁ。理由が書いてないね。
GetHTMLしておきゃよかった(´・ω・`)
読んでる途中だったのに(´・ω・`)
751デフォルトの名無しさん:04/01/18 00:13
オレも。
HTMLヘルプ版落としておいてヨカッタ
HTMLヘルプ版、よく見たら転載OKになってるね。
どこかにうpしたいけど、うpろだ知らないし、ナローバンドじゃマンドクサ('A`)
ワイー
           _________
   ∧,,∧   /2002年5月から 
  ミ,,゚Д゚彡 < 更新されてないの?
   ミ つ旦)~~ \ 
 @ミ   ミ     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪
なんかワンポイント講座みたいなので最近更新したところがあったよね。
去年の11月くらいだったかな。ああ保存しておけばよかった・・・。
>>756
お前が2chで叩くからこんなことになったんだよ
反省しろ反省を
           _________
   ∧,,∧   / はぁ? 頃スゾ氏ネ>>758
  ミ#゚Д゚彡 < 俺はHal氏をたたいた
   ミ つ旦)~~ \  ことはねーぞ
 @ミ   ミ     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪   尊敬こそすれ、なぜ叩かねばいかん。
     駄みたいに何も貢献してない奴ならともかく。
     ああいう人にはずっと続けてほしかったな。

     勝手に勘違い厨がたたいてただけだろ
760デフォルトの名無しさん:04/01/18 15:11
ヲイヲイ
おめーら仲間割れかよ(笑)
作者は実装例の一つとして参考にすることを望んだが、
ユーザーはそのまま使えるライブラリを望んだ。
各自でどうにかすべきことを作者に要求し、
掲示板が2chみたいになっちゃった。
といういきさつでしたとさ。
ぐぐってて結局Halbow氏のサイトに行き着いて、お世話になるって事が少なくなかったので、
Halbow氏のサイトが無くなるのはけっこう痛いなぁ。
ハゲドウ
掲示板があったなんて知らなかったよ。
そのまま使ってるヤツなんていたのか・・・
767デフォルトの名無しさん:04/01/19 02:49
日記書いてたんだねぇ<キャッシュ
2003年11月22日(土)に「delphiに興味が無くなってきたうんぬん」って
書いてある。

ハンドルネタ面白いけど、複雑。
>>756
HTMLHelp版のはちょと古いまんまだよ。
Help版にはNotesシリーズがないしVCLも1章しかないけど、今ならGoogleキャッシュから何とか回収できる。
回収きぼんぬ。
Halbow氏とMr.XRAY氏に感謝。
マジ感謝。
GetHTML完了しますた。
掲示板はキャッシュされてないかな?
ほんとに荒れてたの?
>>775
Haibowさんの「最近はdelphiには興味がなくなって、VC#などをいじるようになってきた」みたいな書き込みに対して、
「あなたは落ちこぼれたんだ。Delphiマンセー」と噛み付いてきた奴はいた。
サイトをもうすぐ閉じると書いた後の話だけどね。
ハイボーさんキター
778デフォルトの名無しさん:04/01/21 23:14
ちょっとワラタ<ハイボーさん
779デフォルトの名無しさん:04/01/22 01:48
世界のヘイポー
776 の指摘する書き込みは、そんなにひどいものではないと思ったよ。
「使いもしないで .NET を否定するのは、新しいものを否定しているだけではないか」という程度の内容。

で、荒らされたんじゃなくて、Delphi-ML の個人を馬鹿にする記事を Halbow 本人が
書いちゃって、それが即本人に伝わり「諸般の事情で閉鎖」となったんです。

独り言コーナーでも、ML の何人かに対する不満を愚痴愚痴つづっていたし。
吐駄がいなけりゃねぇ
781デフォルトの名無しさん:04/01/22 03:08
そっそっソース♪ソースはどっれっ♪
 ∫,,,,,,,,,∧,,∧  
⊂,,,,,,,,,つ,,゚Д゚ミつ

もう公開終わりなの?
>>774

せっかくダウソしようと思ったのに…
784デフォルトの名無しさん:04/01/23 05:16
>>783
そのハンドルの人、そこそこ見るけど、その人が受けついだんかー。
一子相伝(?)。
たぶん別人だと思うけど、
春坊と同じような掲示板で似たような口調で回答つけているんだよなぁ。
APIのみでUnicodeWindowを作り、タイトルバーも文字入力もユニコード化出来たのですが、
メニューだけどうしてもユニコードになりません。
メニューはVSでデザインしてリソース化したんだけど、
コードページ1200は出来ませんとか言われるし、
InsertMenuWで手動で構成してもダメみたいです。
何か足りないのかな?
>コードページ1200は出来ませんとか
リソースコンパイラに対する指定だと思うけど、たぶんそれが原因。
メニューと文字列(ストリング)リソースは常に UNICODE で格納されます。
リソースコンパイラに指定するのはソースコードのコードページ
788786:04/02/04 09:52
VSでニュートラルとか既定とかを選んでもユニコードにできなかったから、
いったん.rcに変換して#pragma code_page(932)を1200に変えたりなど小細工したらVSでも読めなくなった。
そんな話してるんじゃないんだよ。
リソースで埋めようが、APIでメニューを作ろうが、どうしてもメニューだけは、
どれか一カ国語でしか挿入できなかったっていってるんだよ。
紛らわしくてすまんね。
メニューにも中途半端ユニコードウィンドウみたいな概念はあるのかね?
VCL いっさい使っていないよね?
メニューはキャプションと同じでウィンドウズが管理するから、アプリケーションそのものも
UNICODE ウィンドウになっていないといけないよ?

つーことで、確認。キャプションに任意の文字は表示できますか?
790786:04/02/04 12:42
VCLどころかsysutilsも使わず、関数指向で作ってる。
タイトルバーはハングル混じり日本語可能です。
貼り付けてある複数行エディットの右クリックメニューにはユニコード用項目あり。
ハングルページからのコピペも可能。
VSのデザイナーでハングル混じり日本語メニューが、ハングルだけ??になるので、
InsertMenuWで#$xxxx+#$xxxx+'日本語'を挿入するが、やはり??日本語になる。
フォントに問題があれば「・・日本語」になるが、?はOSがANSI変換できない場合に出る。
つーわけで、どこか中途半端ユニコードかなと確認中だけど、
そもそもメニューに多言語って表示できるの?と疑問。
MSDNには複数言語で別のリソース使いわけろと書いてあるけど。
InsertMenuW を使っているのなら、リソースの話は関係ないですね?
複数言語対応のリソースに関しては、SDK のドキュメントを。とりあえずニュートラルにしておけばどの状態でも読み込まれる。

なんかメニューウィンドウが ANSI になっているようですね。
あなたのコードが読めないから何ともいえないけど、-GD オプションつけて .map ファイル出して、
A バージョンの API を呼び出していないか確認してみませんか?
792786:04/02/04 14:11
>-GD オプションつけて .map ファイル出して
これわかりません

exeをバイナリエディタで開いたら
GetStartupInfoA
GetCommandLineA
GetModuleHandleA
GetModuleFileNameA
CharNextA
GetStringTypeExA
GetModuleFileNameA
GetLocaleInfoA
GetDiskFreeSpaceExA
GetObjectA
SystemParametersInfoA
SendMessageA
LoadCursorA
A付きはこれだけありました。SendMessageAが気になるところですが、
まだGrep確認中で見つかってません。
DCC32 コマンドラインコンパイラを使っているのかと...
IDE 使っているのならリンカページに対応する設定があると思う。

あと TDUMP ってのも使えると思うぞ。

で、SendMessageA が臭いね。これを誰が呼び出しているのかを調べるのが最初かな?
794786:04/02/04 15:42
おかげさまでだいぶAを削除できたぜ。
しかしメニューはやっぱりまだ??なんで、どっかで凡ミスしてると踏んで、
も一回クラス登録から見直してみます。
そこそこ有益な情報ありがとうよ。
IsWindowUnicode試してみた?
RegisterClass(Ex)W使ってる?
>>795
A 付きは全部チェックしたといっているし、キャプションは正常っぽいから
RegisterClassW は使っているかと思うが。LoadMenuA を使っている用に思えるの
だが。
797786:04/02/05 10:55
すまん、ちと野暮用でしばらくいじれなくなりました。
もうA付きはhInstanceに使われてるGetModuleHandleAのみ。
最初にメニューがユニコード化できてないことに気がついたとき、
LoadMenuAからLoadMenuWに変えた。
それまではリソースの名前をVSで"MENU"にしていて、
読み込めなくなったので数字に変えてみたら読み込めた。
これでユニコード文字表示できるか、と思ったら??のままだったって感じでしたぜ。
$#xxxxがsjisの文字なら表示できるのだがなぁ。
つーかスキー&セックス行ってくるから次の報告遅れます。
なんで#define UNICODEしないの? と思ったらDelphiスレか
Windows.pasでユニコード版の宣言が間違っていたりするが、
VCLがAnsiしか使わないので気がついていないDelphiのスレだよ
900
まだ800ですよ?
900のとき1000って書くための布石ですか?
802786:04/02/10 12:30
InsertMenuWもVSで作ったりソースも、未だユニコードになってくれません。
が、どちらを使った場合でも、いったんメニューを挿入した後、
AppendMenuWで、キャプションを書き換えた場合はユニコード表示できました。
何がおかしいのかまだわからないけど、当面これで二度手間すれば解決です。
訳わからんことばっかりやっててごめんな。
803786:04/02/14 10:59
APIでエディットコントロールを扱うと、折り返すというウィンドウスタイルがなく、
水平スクロールするかどうかを設定して再生成するところまでわかりました。
当然折り返し変更するたびにUndo出来なくなりますが、VCLはなぜかUndoできます。
VCLのTMemoやTRichEditでも、WordWrapを切り替えるたびにウィンドウを破棄しているようですが、
Undoの情報を再生成したウィンドウに受け渡してる部分が見つかりません。
どうやって、次のウィンドウでもUndo出来るようにしますか?
へえ、そんな事考えた事も無かったな。 
805デフォルトの名無しさん:04/03/09 03:44
良く、C++で出来ることはDelphiでも出来るって聞くんだけど、実際のところどのくらい低レベルなとこまでかけるの?
OSとかデバイスドライバクラスもいける?
ヘッダとかランタイムスタートアップの問題で実際にはムリだけど
言語としては問題なし。
C/C++も、その範囲だけではブートコードや、デバイスドライバが書ける訳ではない。
リンカーで配置アドレスを指定したり、デバイスドライバである事を示すマークを付けなければいけない。
ブートコードを書く時はCOFFを書き込むツールを作る必要がある時もある

Delphiは高速コンパイルの為に、コンパイル+リソースコンパイル+リンクを一度にやってしまう。
しかし、objも吐けるし、dcrを自分で処理すれば、そりゃ何でも出来る。
ただ、普段が便利なぶん、そういうノウハウが蓄積されないからあまりやる人がいない。
後、C/C++の場合、ランタイムを使わずに書く事が出来る。スタートアップコードだけ用意すればいい
例外サポートも例外を書かなければ空にすればすむ

Delphiの場合、空にすればいいといっても結構沢山のランタイムを用意する必要がある。
例外についても文字列を手続内で使うと自動的に使われてしまうので、
これもサポートしなければいけない。
出来ると言っても、最初の敷居が高い。
これを乗り越えれば書けるけど、乗り越えられるのはDelphi以外に低レベルな部分のノウハウを積んでる必要がある。
で、この敷居を乗り越えるのはほとんど自分の力でやる必要があると。
ただでさえ少ないDelphiの本や情報が、低レベルなんて誰も
やらないようなことだとさらに少ない。
でもまあ、情報が少ないから勉強になるとは思うよ。
実際デバイスドライバ作ってますなんてのも、仕事だとコードコピーしてちょっと直すだけで、
普通のWinアプリ作るのと同じ。あんまり勉強にはなんない。
    ∧,,∧  やあ、ご無沙汰です。
   ミ,,゚Д゚彡
    ミ つ旦)~~
  〜と,,,~),,~)

えっと、TaskTray常駐アプリで
Formを使わないタイプのサイズの小さい
アプリを作る方法、教えて欲しいです。

どこかに参考となるページとか紹介されてませんか?
    ∧,,∧  やあ、ご無沙汰です。
   ミ,,゚Д゚彡
    ミ つ旦)~~
  〜と,,,~),,~)

えっと、TaskTray常駐アプリで
Formを使わないタイプのサイズの小さい
アプリを作る方法、教えて欲しいです。

どこかに参考となるページとか紹介されてませんか?
フサギコさんともあろうお方が連投までして…

KOLぢゃだめなの?
     ∧,,∧,,,,,, )      (´⌒(´
  ⊂ミ゚Д゚⊂,,,,,,,`つ≡≡(´⌒;;;≡≡≡
ごめんなさーーーーい

KOLでTrayアイコンアプリは
作れるでしたけ?

アンインスコしちゃったからなあ…
>>814
ttp://okapony.hp.infoseek.co.jp/download/index.html
の「小さいタスクトレイ常駐アプリケーションを作りたい!!」を参考にするとよろし。
中で、Classes.pasとSysUtils.pasを使っているので思ったより小さいサイズにはならないけど。
フサギコっていくつなの?
最近特にボケてきたよね。
         
    ∧,,∧   ありがd
   ミ*゚Д゚彡 うまくいきそうでつ。
   ミ つ日  
 .@ミ,,,,,, ,,ミ

常駐ソフトって、exeサイズがメモリ上に展開されっぱ(?)だから
いまだに、ちっちゃい方が助かるですよね。
VCL系を3つも起動してると
なんか体感的に重くて…

>>819
・・・・ミ;゚Д゚彡・・・・ヒ...ヒミツ....
某ソフトはイメージサイズが10MBか15MBくらいあるんだよな
.NET アプリはランタイムを入れると40MBだよ。
そのアプリの数が少ないから今のところ1ソフト辺りのサイズめちゃくちゃでかいよな
>>814
exeサイズを気にされるのなら
ttp://bonanzas.rinet.ru/e_adds.htm#Utilities
のBAPTrayIconがとても良いです。
サンプルも付いてるからすぐわかります。
KOLですけど。
system.dcuを空にしてコンパイルできれば
フルアセンブラで小さなexeを作れそうだが
問題はどうすれば空のsystem.dcuを作れるのか
なんか隠しオプションがあった。dcc32 -? system.pasとかできるの。なんだったっけ。
まあアルファベット全部試せば(ry
KOL用の小さなsystem.pasとかあったはずだから、それ見ればわかるかな

ところでフルアセンブラで書くなら、高級言語のインラインアセンブラじゃなくて、
普通のアセンブラをそのまま使った方がいいと思うのだが
827825:04/07/01 22:12
隠しオプション?情報ありがとう。
>>普通のアセンブラをそのまま使った方がいいと思うのだが
Delphiで究極に小さいアプリを作ってみたいんです。
しかしインラインアセンブラでinvokeとif擬似命令が使えないから
やはりアセンブラか...?
Delphi8が届いたから実行ファイル(フォームのみ)のサイズを比較してみた。

*最新のアップデート(2004年7月現在)を適用済みの状態で作成
*下記のプロパティで統一(他のプロパティは初期状態の設定)

Caption : Delphi*(*はDelphiのバージョンの半角数字1文字)
Left : 0(Delphi8では8以下に設定をする事が不可能であるため8で設定)
Top : 0(Delphi8では8以下に設定をする事が不可能であるため8で設定)
Width : 320
Height : 240
Position : poScreenCenter
FormStyle : fsStayOnTop

Delphi1.exe : 195KB(200,448バイト) [Win16]
Delphi2.exe : 154KB(158,208バイト) [Win32]
Delphi3.exe : 174KB(178,688バイト) [Win32]
Delphi4.exe : 274KB(281,088バイト) [Win32]
Delphi5.exe : 285KB(291,840バイト) [Win32]
Delphi6.exe : 374KB(382,976バイト) [Win32]
Delphi7.exe : 359KB(367,616バイト) [Win32]
Delphi8.exe : 1.29MB(1,356,800バイト) [.NET]

Delphi1.exe : 16bitアプリケーションなのでNT系で実行をするとシステムが不安定になった。
Delphi2.exe : Delphi1〜Delphi8の全ての中でファイルサイズが1番小さくなった。
Delphi6.exe : Win98SEよりも古い9x系とWin2000よりも古いNT系では起動しなかった。
(クリーンインストール直後の状態で実行した結果であるためIE5以上を入れれば動く可能性あり)
Delphi8.exe : .NET専用アプリケーションなので例外ではあるがファイルサイズが1番大きくなった。

だから何?って感じですけど・・・KOLでもやってみようかな。
829デフォルトの名無しさん:04/07/17 05:23
>>828
乙乙。是非KOLでもやって下さい。ついでにKOL+UPXの比較もやって欲しいです。
Delphi2+KOL+UPXならDelphi6の実行時パッケージ以下になるかも。無理か・・・

Delphi6で作った実行ファイルがIE5以下の古いWindowsで動かないのは
IE5以上のOLEAUT32.DLLが必要だからです。
IE5とかVB6とかOffice2000を入れれば動きます。
ちなみに一緒に配布しようとするとOLEAUT32.DLLだけで500KB超えちゃいます。

Delphi7で作った実行ファイルはIE5以下の古いWindowsでも問題なく動きます。
Delphi6をわざとうんこにしてDelphi7以上を買わせるBorlandの罠か?
830デフォルトの名無しさん:04/07/17 05:43
Delphi8は.NETのランタイムを使うから、exeのサイズは小さくなるべきでは?
ランタイム使うの?
ボーランドも終わったな。
>>831
Delphi8を買うとDelphi7がもれなく付いてくるから
ランタイム不要のアプリケーションは一応作れるよ。
.NETアプリケーションを動かすには.NETパッケージが必要だから
Borlandに関係なくどんな開発環境でもその点は仕方がない。
.NETの未来には期待できないから終わったなと言われれば終わったかも。
なんかスレ違いになってきた。
>>828
おつかれ。
D6,D7はCLX, D8はWindows.Formsという選択肢もありますね。

もっとも、exeを小さくするのか、消費メモリを減らすのか、は、別問題…
834828:04/07/17 08:35
>>830
>>833
参考にしてくだされ。

Delphi8で作成した実行ファイル

*最新のアップデート(2004年7月現在)を適用済みの状態で作成

VCL フォームアプリケーションの場合

[TForm]
Caption : Delphi8
Width : 320
Height : 240
Position : poScreenCenter
FormStyle : fsStayOnTop
(他のプロパティは初期状態の設定)

Delphi8.exe : 1.29MB(1,356,800バイト)

Windows フォームアプリケーションの場合

[TWinForm]
Text : Delphi8
Width : 320
Height : 240
StartPosition : CenterScreen
TopMost : True
(他のプロパティは初期状態の設定)

Delphi8.exe : 21.0KB(21,504バイト)
835828:04/07/17 08:48
ついでに修正しました。KOLはちょっとまってね。

Delphi1〜Delphi8で作成した実行ファイル

*最新のアップデート(2004年7月現在)を適用済みの状態で作成
*下記のプロパティで統一(他のプロパティは初期状態の設定)
*Delphi8はVCL フォームアプリケーションを新規作成

[TForm]
Caption : Delphi*(*はDelphiのバージョンの半角数字1文字)
Left : 0(Delphi8は0に設定をする事が不可能であるため初期状態の設定)
Top : 0(Delphi8は0に設定をする事が不可能であるため初期状態の設定)
Width : 320
Height : 240
Position : poScreenCenter
FormStyle : fsStayOnTop

Delphi1.exe : 195KB(200,448バイト) [Win16]
Delphi2.exe : 154KB(158,208バイト) [Win32]
Delphi3.exe : 174KB(178,688バイト) [Win32]
Delphi4.exe : 274KB(281,088バイト) [Win32]
Delphi5.exe : 285KB(291,840バイト) [Win32]
Delphi6.exe : 374KB(382,976バイト) [Win32]
Delphi7.exe : 359KB(367,616バイト) [Win32]
Delphi8.exe : 1.29MB(1,356,800バイト) [.NET]

Delphi1.exe : 16bitアプリケーションなのでNT系で実行をするとシステムが不安定になった。
Delphi2.exe : Delphi1〜Delphi8の全ての中でファイルサイズが1番小さくなった。
Delphi6.exe : Win98SEよりも古い9x系とWin2000よりも古いNT系では起動しなかった。
(IE5やVB6やOffice2000等を入れてOLEAUT32.DLLをアップデートすれば動く可能性あり)
Delphi8.exe : .NET専用アプリケーションなので例外ではあるがファイルサイズが1番大きくなった。
実行時パッケージで作成した時のサイズと
最新バージョンのBPL(DPL)のサイズも知りたいな。
Delphi3とDelphi6は持ってるから分かるけど。
>>835のC++Builder1〜6のが知りたい
Delphi5を買って未だにShowMessage
ぐらいしか使ったことない、宝の持ち腐れだけど。

先輩方が書いてる軽量化の方法+UPXMaskを
使えば、もっと小さな実行ファイルが生まれるのかなー
とか、想像しちゃってます。
おまいは何のためにDelphi5を買ったんだw
840838:04/07/17 23:16
うーん、その後にVC買ってしまって^^;
HDD大容量&ブロバン時代にプログラムサイズ競っても無意味。
そんなことよりもDelphiの未来を心配しろ。
無意味だけど、Delphiの未来より面白いだろ
843828:04/07/20 16:00
実行時パッケージの比較です。KOLはもうちょっとまってね。

Delphi3〜Delphi7(実行時パッケージ)で作成した実行ファイル

*最新のアップデート(2004年7月現在)を適用済みの状態で作成
*下記のプロパティで統一(他のプロパティは初期状態の設定)

[TForm]
Caption : Delphi*(*はDelphiのバージョンの半角数字1文字)
Left : 0
Top : 0
Width : 320
Height : 240
Position : poScreenCenter
FormStyle : fsStayOnTop

[実行ファイル]
Delphi3.exe : 9.50KB(9,728バイト)
Delphi4.exe : 12.5KB(12,800バイト)
Delphi5.exe : 13.5KB(13,824バイト)
Delphi6.exe : 14.5KB(14,848バイト)
Delphi7.exe : 16.5KB(16,896バイト)

[実行時パッケージ]
[Delphi3] VCL30.DPL : 1.21MB(1,277,440バイト)
[Delphi4] VCL40.BPL : 1.79MB(1,884,160バイト)
[Delphi5] VCL50.BPL : 1.92MB(2,023,424バイト)
[Delphi6] vcl60.bpl : 1.26MB(1,323,008バイト) / rtl60.bpl : 656KB(672,256バイト)
[Delphi7] vcl70.bpl : 1.31MB(1,383,936バイト) / rtl70.bpl : 765KB(783,360バイト)
C++Builderの比較やってほしいなあ
>>844
スレ違いだからなあ・・・
Delphiなら2〜7を揃えて使い分けたいとは思うけど。
C++Builderを全バージョン揃える利点が感じられないし
VC++と併用してるけど結局VC++に移植してしまう事が多いよ。
C++BuilderにKOLみたいなのがあれば文句ないけどね。
>>841
>>842
ファイルサイズがMB超えるとメールに添付するのがためらわれるし
同じ性能でフロッピーに1個しか入らない大きさの実行ファイルと
何十個も入る大きさの実行ファイルだったら小さいほうが便利だよ。
USBメモリとかMOとかDVD-RAMとかでも書き込みや読み込みが速い方が便利でしょ。
釣られてみた。
>>846
>>841はそんなのはメリットとは言わない時代だと言いたいんじゃないのかな?
今の時代でも十分なメリットは沢山あるだろうよ。
>>846がメリットと思わない環境の方がまだ少ないんじゃないか?
Web上で公開する事を考えても小さければ小さい程良いよ。
アップロード時間やホームページ容量がさほど気にならなくなるし。
そもそも無駄に大きくて良い事は何一つないと思う。
849デフォルトの名無しさん:04/07/21 02:57
>そもそも無駄に大きくて
VCLを使うのが無駄だと思うならDelphi使うなよばーか
>>849
お前の方がばかだろ。ばーか。
851デフォルトの名無しさん:04/07/21 04:18
この糞スレはまだあったのか。
>>846
>>848
おまいらが正しいよ。キチガイは放置しとけ。
>>843
乙。KOLまだー?
>>848
あなたの28.8kbpsの環境ならかなりメリットあるでしょうよ。
Delで作るアプリでWeb上で公開するようなものに数十MBなんてことは無いだろうから
今時アップロードやダウンロードの時間を気にしているユーザーなんてのも皆無。
そんなにHPスペースが気になるならDelの議論するより、圧縮アルゴリズムの議論
でもしたほうがいいんじゃないか。

>>そもそも無駄に大きくて良い事は何一つないと思う。
無駄に大きいが簡単にできるのがDelの良いところだ。
ここの住人がVCLを使いまくってると勘違いしているキチガイがいるみたいですが
何をムキになって言っているのかさっぱり理解出来ません。
どうしましょうか?放置ですか?
基地外にかまうな。
ここはDelphiで小さな実行ファイルを作る議論をする所だ。
856848:04/07/21 11:31
一つだけ言わせて下さい。
俺は>>850ではありません。勘違いしないで下さい。
他の人が釣られたのか>>849の自演です。それだけです。
皆分かってるから大丈夫だよ。変なのにからまれても気にすんなよ。
いまこのスレ全部読んだ。定期的に >>841>>853 みたいな書き込みがあるんだね。

いちばん感激したレスをコピペしておくよ。

719 :デフォルトの名無しさん :03/12/10 12:19
俺思うんだけどさあ、小さいEXEがいいかどうかってのは、美意識の問題なんだよ。
だから、1バイトあたりいくらだとかいう経済的な話は全く関係ないんだよね。
小さい方が美しい、それだけだよ。
UPXで小さくしただけじゃ美しくないと思う。
UPXで小さくするのはDelphiと無関係だからね
Cでスタートアップルーチンからすべて書くのが一番美しい。
Delphiなんて駄目駄目。
>>861
スレタイ嫁
Delphiでもスタートアップルーチンからすべて書けるよ
あせんぶらー
うん、うん、一度はアセンブラと書きたくなるよねー
でも、アセンブラで窓アプリ作った人はそんなにいないよ。Delphi でも
インラインアセンブラ使えるけどさ。
866828:04/07/21 22:34
とりあえずKOLでの比較です。

Delphi2〜Delphi7(KOL)で作成した実行ファイル

*最新のアップデート(2004年7月現在)を適用済みの状態で作成
*KOL v1.90 21-Jan-2004/MCK v1.90 21-Jan-2004で作成
*下記のプロパティで統一(他のプロパティは初期状態の設定)

[TKOLProject]
dprResource : True

[TKOLForm]
Caption : Delphi*(*はDelphiのバージョンの半角数字1文字)
Left : 0
Top : 0
Width : 320
Height : 240
CenterOnScreen : True
StayOnTop : True

Delphi2.exe : 21.5KB(22,016バイト)
Delphi3.exe : 25.5KB(26,112バイト)
Delphi4.exe : 26.0KB(26,624バイト)
Delphi5.exe : 26.5KB(27,136バイト)
Delphi6.exe : 24.0KB(24,576バイト)
Delphi7.exe : 25.0KB(25,600バイト)

Delphi2.exe : VCLと同じくファイルサイズが1番小さくなった。
Delphi5.exe : ファイルサイズが1番大きくなったが5KBの差でしかなかった。
(VCLではDelphi2.exeとDelphi6.exeで219.5KBもの差があった)
Delphi6.exe : VCLでは起動が不可能だったIE4以下の古いWindowsでも動作した。
>>866
お疲れ様。
KOLで作るとタスクバーの右クリックメニューがまともになるのが良いね。
(元のサイズに戻す、移動、サイズ変更、最大化、最小化、閉じる)
VCLで作ると[元のサイズに戻す、最小化、閉じる]だけになっちゃうから
いかにもDelphiで作りましたって感じでなんだか嫌だ。
Delphi3とDelphi4の最小化アニメーションが標準で可能になるのも良いよ。
Delphi2のいんちき最小化アニメーションは綺麗になるのかな?
>>866
乙。
>>867
なる。
Delphi8のアイコンはカコイー
KOL使うとマジで10分の1位になるんだね。こんな手間掛けてネタじゃないよね?
実行時パッケージみたいにランタイムとかが要ったりするなんてオチはないよね?
>>870
使いやすさを犠牲にしてサイズを小さくしている感じ。
そこそこ使い勝手も欲しかったらHalbow氏のライブラリをつかうのもよいと思う。

>>828
KOLのSystem units replacementを使ってコンパイルするともう少しファイルサイズが小さくなると思う。
System units replacement 1.4使ったら逆に0.5KB大きくなったのですが・・・
俺の和訳がおかしいのかなあ?インストールし直してまた失敗すると辛いなあ。
D6PROでKOL1.90なのですがどなたか易しく教えて頂けませんでしょうか。
873:04/07/23 14:32

もっかいやったら出来ました。すみません。
教えて貰う程の事でもありませんでした。ただ寝ぼけてただけでした。
828さんと全く同じ設定でSystem units replacementを使用して作成。
Delphi6.exe : 16.5KB(16,896バイト)
874828:04/07/24 02:36
>>871
System units replacementって不要になった時に元に戻すのが面倒だよね。
Halbow氏のライブラリよりKOLのが使い勝手が良いと思うのは俺だけかな?

Delphi4〜Delphi7(KOL+System units replacement)で作成した実行ファイル

*最新のアップデート(2004年7月現在)を適用済みの状態で作成
*KOL v1.90 21-Jan-2004/MCK v1.90 21-Jan-2004で作成
*下記のプロパティで統一(他のプロパティは初期状態の設定)

[TKOLProject]
dprResource : True

[TKOLForm]
Caption : Delphi*(*はDelphiのバージョンの半角数字1文字)
Left : 0
Top : 0
Width : 320
Height : 240
CenterOnScreen : True
StayOnTop : True

Delphi4.exe : 15.5KB(15,872バイト) [Ver.1.1]
Delphi5.exe : 16.0KB(16,384バイト) [Ver.1.1]
Delphi6.exe : 16.5KB(16,896バイト) [Ver.1.4]
Delphi7.exe : 16.0KB(16,384バイト) [Beta Ver.2]

*[Ver.〜]はSystem units replacementのVersionです。
乙。俺もKOLのが好きだよ。慣れればVCLと変わらない。は言い過ぎだが。
System units replacementはシステムに組み込むと外すのが面倒だから
適当な別の場所に置いといてライブラリパスを切り替えて使ったほうが良いですよ。
>>874
乙彼。UPXの比較も是非やって下さい。
System units replacementは元々小さい実行ファイルで比較すると
数KB位しか差が出ない事が多いけど100KB以上の実行ファイルで比較すると
Delphi4+System units replacementで作ったファイルは格段に小さくなりますね。
uses節がWindowsとKOLだけの場合でもDelphi2+KOLよりも
Delphi4+KOL+System units replacementのが小さい事が多いですね。
UPXは最早Delphi関係ないだろ
小さな実行ファイルを作る手段の1つとして使うのはいいんじゃん?
ただ普通に作ってUPX使うだけじゃDelphiとは関係ないかも知れんが。
各バージョンのDelphiで作った小さな実行ファイルが
UPXで圧縮するとさらにどれ位小さくなるのか俺は興味があるな。
全く関係ないけどUPXのVersion 1.25が知らん間に出てた。6月か。
ShowMeassage('こんちは');
それってソースが短けえだけじゃん!ネタニマジレスカコイー!
ShowMeassage('Hello');
綴りまちがってるし >>ShowMeassage
ShowMassage('Halo');
delphiってVCのリリースモードみたいのないの?
>>884
出力先やビルドオプションをDebug/Releaseで分けることはできない。
オプションに関してはインクルードファイル中で{$IFDEF RELEASE}{$R-}{$ENDIF}とかやるしかない。
某はプロジェクト管理機能に関してはまるでやる気なし。
デバッグモードからリリースモードに切り替えてバグが出るよりは幾分かマシ
お前はデバッグ中とリリース時で全くオプション変えないのか?
886じゃないけど、俺は変えないなあ。
面倒だし、今のところ不都合ないし。
>>887
じゃ、ユーザーが使うリリース版は、開発者はデバッグしないのか?
出荷バイナリと開発バイナリが異なっているとしたら、何をテストしているのだ?
890888:04/07/29 13:14
Delphiは最適化に左右されるバグはでないらしいよ。
Delphiスレのどこかで断言された。

俺は最適化されるとデバッグが面倒だからOFFのままだけど。
>>889
質問に答えてないな
いったいどんなビルドオプションでリリースしてるんだ?
>>891
国語力0
>>891
VS C++ での話だが、開発初期は最適化オフ。テストが始まるころに最適化を有効にし、
ベータテストが始まったら最終的な出荷用フラグで開発。
そうしなきゃバグ取れないでしょ。

Delphi/PASCAL 系ではコンパイル時に強めに型チェックできるので、バイナリができる。
ということはロジックバグ以外のケアレスミスはほとんど残っていない。

ロジックミス(比較の符号を間違えるとか)はビルドオプションなどでは見つけられないバグ
だからどうしようもない。

昔の VB のような実行時にならないとチェックしようのない言語処理系とは
C/C++/C#/Delphi は本質的に異なるわけ。

インタプリタにも利点はあるので否定はしないよ。ただそういった点が開発スタイルにも
影響が出る。というのは事実だ。

VS だって C++/W32 はいまだに大量のコンパイルオプションをしょっているが
C# なんか本質的なスイッチは4つくらいじゃないか?
ディレクトリが変わる以外にデバッグとリリースとでどれだけのオプションが代わっているのか
考えてごらん。
デバッグ・リリースで変わるのはコンパイルオプションだけじゃないだろ。
これを簡単に切り替えられないDelphiのIDEは糞だけど代案があるから致命的な問題ではない。
Delphiに存在しない機能を必死に否定するのはアホのやることだよ。

なんにしてもスレ違いだな。
TForm1Button1Click
begin
Label1.caption:=Hellow,World!
end:
Delphiにない機能なんてないよ
ないのは未来だけ
>>895
つっこみどころが多すぎてわからない
まあ、IDE上ではデバッグ用のオプションで開発してリリース用にはmakefileを書いておくとか、
.dprをふたつ作ってプロジェクトグループで管理とか、代案は無い訳では無いが

スレ違いには間違い無いな
899828:04/08/01 10:06
>>829
>>876
>>878
こんな感じで宜しいですかね?

Delphi2〜Delphi7(KOL)で作成してUPXで圧縮した実行ファイル

*UPX Version 1.25で圧縮率をMAXにして圧縮
*UPX 日本語 frontend ver.0.4.5の標準設定で圧縮

[KOL&UPXのファイルサイズ / KOLのファイルサイズ / VCLのファイルサイズ]
(KOLのみを使用して作成した場合)

Delphi2.exe : 13.5KB(13,824バイト) / 21.5KB(22,016バイト) / 154KB(158,208バイト)
Delphi3.exe : 15.5KB(15,872バイト) / 25.5KB(26,112バイト) / 174KB(178,688バイト)
Delphi4.exe : 15.5KB(15,872バイト) / 26.0KB(26,624バイト) / 274KB(281,088バイト)
Delphi5.exe : 15.5KB(15,872バイト) / 26.5KB(27,136バイト) / 285KB(291,840バイト)
Delphi6.exe : 14.5KB(14,848バイト) / 24.0KB(24,576バイト) / 374KB(382,976バイト)
Delphi7.exe : 15.0KB(15,360バイト) / 25.0KB(25,600バイト) / 359KB(367,616バイト)

[KOL&UPXのファイルサイズ / KOLのファイルサイズ / VCLのファイルサイズ]
(KOL+System units replacementを使用して作成した場合)

Delphi4.exe : 10.0KB(10,240バイト) / 15.5KB(15,872バイト) / 274KB(281,088バイト)
Delphi5.exe : 10.0KB(10,240バイト) / 16.0KB(16,384バイト) / 285KB(291,840バイト)
Delphi6.exe : 10.5KB(10,752バイト) / 16.5KB(16,896バイト) / 374KB(382,976バイト)
Delphi7.exe : 10.5KB(10,752バイト) / 16.0KB(16,384バイト) / 359KB(367,616バイト)
10KBちょっとで作成できる程度の内容の実行ファイルが
Delphi6のVCLで普通に作成すると374KBもの大きさになってしまうって事は
いかにVCLで作成された実行ファイルに無駄が多いって事ですよね。
生産性の高さやランタイムが不要な点を重視してDelphiを使用している方々にとっては
ファイルサイズなんかどうでも良いって感じでしょうけど。
まあそれが普通でこだわるのはマニアとかフリーソフト作者とかだけだと思いますが。
でも俺は同じ機能と性能で他よりも小さい実行ファイルはカコイーと思う。
生産性を犠牲にしてまで小さくしたいとは思わないなぁ。
KOLは充分使いやすいけど。
まぁ自己満足と開発効率のどっちを取るかっつったら
自己満足
KOLすげぇ
900KB位のスクリーンセーバーをDelphi4+KOL+System units replacementに移植したら
80KB位になりました。Delphi6+KOL+System units replacementでも120KB位になりました。
SysUtilsとRegistryをKOLで代用するのにヘルプがないのでかなり手間取りましたが
慣れてしまえばVCLとさほど変わらないので何でもKOLで作れそうです。
最大の問題はDelphiの未来かな・・・
レジストリを変更してソフトを起動する実行ファイルをKOLに移植してみた。
(体験版のクラックアプリとかではありませんよ。念の為)
usesはWindowsとKOLのみでなんとかなりました。
VC++で24KBだったものがDelphi6+KOLで17KBになりました。
Delphi2+KOLでは10KBになりました。
Delphi4+KOL+System units replacementでは8KBになりました。
(大小アイコンとバージョン情報等のリソース込みのサイズです)
もっと早く使っておけば良かったよ。Delphiが旬のうちに。
KOLってなんぞや?
>>907
今から説明するとスレッドが終わってしまうよ。
次スレかKOLスレを立てておくれや。
そんな事してたら質問が不要な位に分かるかも。
KOLって安定してるの?
元々はDelphi(Object Pascal)だからコンパイラは同じだし
安定している物を作れば安定するし安定しない物を作れば安定しない。
しっかり作るかいいかげんに作るかは言語を問わず本人次第。
Windowsって安定してるの?って言われたら安定してないとしか答えられないが。
KOL v1.92デマスタ。ageナイケドネ。
KOLってKOL対応コンポしか使えなくなる?
うーむ、このスレって、道具を研いで切れ味を高めてそのついでに小さな実行ファイル
を作るのが趣旨だったような。この意味では、UPX は論外だろなー。KOL を使用する
ことが「道具を研ぐ」ことになるのかな?
物にもよるが標準のコンポーネントは基本的に使えない。
System units replacementを使用しなければusesにSysUtilsとかを
追加する事は可能。まだ未開拓だからはっきりした事は何とも言えないよ。
面白いからとりあえず色々やってみれ。
俺は道具を研いで切れ味を高めたつもりでKOLに負けた事があるよ。
最初から切れる道具は有効に活用した方が良いと思うな。
勿論さらに研ぐ事も大事だと思うがそんな時代じゃなくなってきたかも。
UPXは論外だけどDelphiとは相性が良いって聞いたことがあるが
何と相性が悪いんだろうか?マイナーな日本語開発環境とかかな?
HSPとかじゃん。
Delphi7(Pro)を3枚持ってるんだけど誰かDelphi2かDelphi4と交換して下さい。
最初の1枚目はオークションで1万円位で買いました。
2枚目は期間限定パッケージで3万円位で買ってユーザー登録をしました。
3枚目はDelphi8(Pro)をアップグレード価格(2万円)で買ったら付いてきました。
結局6万円位でDelphi7(Pro)を3枚とDelphi8(Pro)を1枚買ってしまいました。
オークションで売るのも面倒だしな・・・ってスレ違いだった。
漏れにとっちゃexeのファイルサイズより実行時メモリ使用量のほうが大事
メモリ食う量減るならKOL使ってみようと思うんだけど、そこんとこどうなの?
教えてエロイ人
>>918
828さんと同じ条件の実行ファイルをDelphi7とDelphi7+KOLで比較したら
メモリ使用量はDelphi7が4056KBでDelphi7+KOLが3008KBだった。
ちなみにDelphi7+KOL+System units replacementでは2996KBだった。
Pen4の3.06GHzとDDR333の1GBでWin2Kを使って測定した結果だから
環境によっては多少異なると思う。
最近はメモリ512MBが標準になってきてるからこれ位の差じゃ使う意味ないかな?
920デフォルトの名無しさん:04/08/04 22:52
C#Builderにはデバッグリリースビルドが実装されてるな。
上のほうでイラネとかいってた奴絶対使うなよw
sageない香具師はシカト。
>>919
100個起動したら十分差が付くから意味あるよ
>>922
100個起動する必要があるアプリに意味が無いので意味が無い。
常時起動ではなくても
HDDの数百KBよりはメモリの1MBのほうが重要だと思うよ
漏れは何を言ってるんだorz
たったの12KBじゃないかorz
>>922
勘違い野郎
>>924
恥の上塗り
Apacheなんかは100個起動されたりするしね
>>925
VCLとKOLの差は12KBじゃなくて1048KBあるじゃん。
>>919をちゃんと見れよ。
100個は無理だから10個ずつ起動して比較してみたけど
メモリ使用量で10MBの差が出たよ。
もっと大きい実行ファイルで比較したらどうなるんだろう?
価値判断はどうでもいい
データだけで十分
差が縮まった
複数起動したらコード部分は共通にならないの?
NT系はならないよ
なるだろ
メモリマップされてんだから
DLLのコード部分はなるけどexeはならないよ
>>935
dllとexeとファイルマッピングオブジェクトの関係を知らんのか?
exeは実行するたびにプロセスごとに独立したメモリにロードされるとでも?
既存のメモリ上のを別の場所にコピーしてからマッピングするんだよ
コードセグメントのSHARED(shareable?)フラグとかは関係ないの?
939デフォルトの名無しさん:04/08/06 09:32
何か変なデマ振りまいてる奴がいるが
exeのコード部はデフォルトで共有されるぞ
940デフォルトの名無しさん:04/08/06 09:39
双方ともソース出せ
http://www.microsoft.com/msj/1199/hood/hood1199.aspx
> Prime examples of shared memory are code pages and read-only data sections.
> Because these pages of memory don't change, the operating system can use the
> CPU hardware to map the physical pages of RAM into multiple ad-dress spaces.
コード部分はバッファオーバーフローによる
メモリ書き換えが出来る事からも分かるように、
書き換え可能だよ。だからコピーされるんだよ。
それはスタック領域
942=Copy on writeも知らない大馬鹿
944=自分の知っていることは全て常識,知らないやつは大馬鹿
945=942
944=946
exeのコードセクションが共有されるかどうかという話をしてるのに
知らないのはヤバいだろ
みんな知ってるならそもそもexeのコードセクションが共有されるかどうかという話を
する必要がないだろ
お前らexeサイズ肥大化させてやるからこのスレ空けろと
残念、ちょっと前までは閑古鳥が鳴いてたのに。
>>950
お前が950取ったから次スレ立てろと
次はKOLスレでどうぞ。やっぱ、このスレの趣旨とKOL使うのは、なんか違うような気がするです
俺もKOLとこのスレの趣向は微妙に違うと思う。
でもKOLスレとこのスレの次スレに分かれたらKOLスレのが人気が出そう。
っていうか両方ともスレが立たないに100万ペソ。
Delphiには未来が無いよな。でもDelphi9にちょっと期待している俺。
いちいち分割する必要はないだろう
ここはDelphi板じゃないんだ
wxWindowsもSWTもスレあるしな…
Delphiスレが増えるのが嫌なら比較スレとか雑談スレのひとつぐらい減らしても…

…と思ったが被害担当艦が無くなると質問スレが荒らされるしなあ
ネタも尽きたので終了ってことで
初心者向けに基本設定でこれだけはやっとけっていう
まとめを頼む。

ネタ
フォームアプリだけで数100食うのを設定でなんとか減らしなさい。
実行時パッケージクマー
>ネタも尽きたので終了ってことで

そうだね。なんだか、今の道具を磨くのも虚しくなってきた。2年後は無意味になりそうで。
>2年後は無意味になりそうで。
Longhorn は何年後に延期になったんだっけ
828さんまだ居ますか?
Halbow氏のGeneric01.dprを各バージョンのDelphiで比較して下さい。
ってもう居ないかな?
>>963
比較乙
俺に乙って言われても困るのだが・・・
Delphi5が17408バイトでDelphi6が9216バイトだった。
後は持ってないのと動かせる環境がないから俺には無理。
>>965
あそこには

> Delphi3.1 で 15.872キロバイト、Delphi2.0 では 10.240キロバイトであった。

って書いてあるから、あと4と7だけかな。
>>965-966
7は持ってるので試してもいいが、そのgeneric01.dprってどこにあるの?
Del7 15,360
D6 が特に小さいのは System.pas に大きな変更でもあるのかな
Delphi2最新アップデート適用後は8704バイト。
Delphi7最新アップデート適用後は16384バイト。
D5とD6は>>965が最新アップデート適用後と一緒だった。
D3とD4は持ってねえ。
971828:04/08/23 22:17
>>963
今さらですけどこんな感じでした。
全て最新アップデート適用済みのProfessional(Developer)版です。

Halbow氏のGeneric01.dprをDelphi2〜Delphi7でコンパイルした実行ファイル

[通常の方法でコンパイル]
Delphi2.exe : 8.50KB(8,704バイト)
Delphi3.exe : 15.5KB(15,872バイト)
Delphi4.exe : 16.0KB(16,384バイト)
Delphi5.exe : 17.0KB(17,408バイト)
Delphi6.exe : 9.00KB(9,216バイト)
Delphi7.exe : 16.0KB(16,384バイト)

[System units replacementを使用]
Delphi4.exe : 5.50KB(5,632バイト)
Delphi5.exe : 5.50KB(5,632バイト)
Delphi6.exe : 6.50KB(6,656バイト)
Delphi7.exe : 7.00KB(7,168バイト)
ほう。なるほどねえ。
スレの最後に面白い物が見られて良かったよ。
同じソースをコンパイルした同じ動作で同じ機能の実行ファイルなのに
Delphiのバージョンでファイルサイズが変わるのが納得いかないよ。
Delphi2〜7の全部が使用可能な環境を今からわざわざ用意するのも大変だし
1台のマシンに2種類以上のDelphiを入れると不具合が出そうだし
みんなどうやってるんだ?VPCとかVMwareとか使ってるのか?
>1台のマシンに2種類以上のDelphiを入れると不具合が出そうだし
 D3.1とD4
 D4とD5
 D5とD6
 D6とD7
という組み合わせで同居させたことがあるけど問題なかった。
同時にBCBも2種類入れてたりしたし。
5,6 / 6,7,8 の同居はやったけどまるで問題なし
一応install.txtにはBDEのバージョンに気をつけろみたいなことは書いてあった気がする
ここにいるようなoldtypeはBDEなんてつかわんだろうしな。
BDEはインストーラ要るしね
どうせ使うならFirebird embeddedの方がイイ