Delphi初心者のための寺子屋

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
Delphi初心者が問題をコツコツと解きながらレベルアップするためのスレです。
2デフォルトの名無しさん:2005/11/23(水) 23:38:37
糞スレたてんな。
Delphi関連のスレがいくつあると思ってんだ?
既存のスレを利用しろ池沼


/*          終了          */
3デフォルトの名無しさん:2005/11/23(水) 23:58:22
早く、問題出せ
俺はやらないが…
4デフォルトの名無しさん:2005/11/24(木) 00:57:02
そもそもDelphiのスレなんて必要ねーよ
糞言語氏ね
5デフォルトの名無しさん:2005/11/24(木) 01:36:10
object pascalをいじめないでください><
6デフォルトの名無しさん:2005/11/24(木) 02:51:06
Dr.Dのマシン語寺子屋ってコーナーがあったなあ・・・・
7デフォルトの名無しさん:2005/11/24(木) 09:28:17
Unicodeはどうやって扱えますか?
8デフォルトの名無しさん:2005/11/24(木) 09:56:47
さあ!私にDelphiを教えなさい!
9デフォルトの名無しさん:2005/11/24(木) 10:34:28
前スレより問題文を転載

//ここから問題文
次は、例外処理の締めとしてRaiseを使おう。
ファイルが開けないときは
writeln(filename)した後、今の例外処理(Writeln(E.Message);)
を実行するように、
また、読み込みエラーのときは、E.Messageの内容を
"読み込めねー"
に変更してみてみてくれ。どちらも Raise を使えば簡単にできる。
//ここまで問題文
10デフォルトの名無しさん:2005/11/24(木) 10:34:51
ちなみにこのプログラムに手を加えろという問題です

const
    filename='test.txt';
var
    sum:    double;
    fp:    TextFile;
    str:    string;
begin
    sum:=0;
    try
        AssignFile(fp, filename);
        Reset(fp);
        try
            while (not Eof(fp)) do
            begin
                Readln(fp, str);
                sum:=sum+StrToFloatDef(str, 0);
            end;
            writeln(FloatToStr(sum));
        finally
            CloseFile(fp);
        end;
    except
        on E: Exception do Writeln(E.Message);
    end;
end.
11デフォルトの名無しさん:2005/11/24(木) 10:36:03
現在の回答

sum:=0;
try
  AssignFile(fp, filename);
  try
    Reset(fp);
  except
    Memo1.Lines.Add(filename);
    raise;
  end;
  try
    while (not Eof(fp)) do
    begin
      try
        Readln(fp, str);
      except
        raise Exception.Create('よみこめねー');
      end;
      sum:=sum+StrToFloatDef(str, 0);
    end;
    Memo1.Lines.Add(FloatToStr(sum));
  finally
    CloseFile(fp);
  end;
except
  on E: Exception do Memo1.Lines.Add(E.Message);
end;
12デフォルトの名無しさん:2005/11/27(日) 18:53:41
次の問題まだぁ〜?
13デフォルトの名無しさん:2005/11/27(日) 21:46:37
>>11

これで例外処理関係はOKだと思うがどうだろう?

それでは次は文字列処理かな。
入力された文字列から'='を探し出し、
(=より前の文字列)'は、'(=より後ろの文字列)'です。'
という出力、および、処理にかかった時間を出力
するプログラムを作ってみてくれ。
14デフォルトの名無しさん:2005/11/28(月) 00:18:18
いいかげん自作自演うざいんですけど…
15デフォルトの名無しさん:2005/11/28(月) 02:18:02
>>14
レスアンカーつけないと誰に言ってるんだか分かりませんよd(^-^)b
16デフォルトの名無しさん:2005/11/28(月) 03:09:04
つまり、>>13は高速に文字列の中から
'='の左と右を分けたいわけね。
17デフォルトの名無しさん:2005/11/28(月) 03:31:56
自演乙
18デフォルトの名無しさん:2005/11/28(月) 16:40:00
>>13
program Project1;

{$APPTYPE CONSOLE}

uses
    SysUtils, Types, MMSystem;

const
    str='Delphi=399,000YEN';

var
    i:    Integer;
    len:    Integer;
    StartTime:    DWORD;
    EndTime:    DWORD;

begin
    StartTime:=timeGetTime;
    i:=1;
    while str[i]<>'=' do
    begin
        Write(str[i]);
        Inc(i);
    end;

    Write('は');
    Inc(i);
19デフォルトの名無しさん:2005/11/28(月) 16:40:36
    len:=Length(str);
    while i<=Len do
    begin
        Write(str[i]);
        Inc(i);
    end;

    Writeln('です');

    EndTime:=timeGetTime;

    Writeln(Format('タイムは%d_秒です', [EndTime-StartTime]));
    Readln;
end.

//ここまで。よろしくお願いします。
20デフォルトの名無しさん:2005/11/28(月) 23:16:12
>>18-19
題を出したのとは別人だけども。

・題意は、入力文字列は固定ではなくReadLnで実行時に入力させることを意図していたと思われる。のでReadLnを使う。
・また、'='が見つからなかった場合の処理。
・ふたつめのwhileループは、ループ回数がループ開始前にわかっている。こういう場合は定石としてはforを使う。
・DelphiっぽくNowとTDateTimeを使ってみよう。

ていうかこのスレでいきなりtimeGetTime見て驚いた。
21デフォルトの名無しさん:2005/11/28(月) 23:20:21
ついでに>>10は、
PascalとしてはDoubleじゃなくRealのほうがいいね。
Delphiだとどっちでも同じ(64ビット倍精度浮動小数点)だけど。

…ちなみに精度が欲しければExtended(80ビット拡張精度)を使う、つーか
Delphiは浮動小数点の内部計算全部Extendedでやってるので、
実はExtendedで統一した方が変換ロスとか無くていい。
22デフォルトの名無しさん:2005/11/29(火) 09:01:26
>>20
program Project1;

{$APPTYPE CONSOLE}

uses
    SysUtils;

var
    i, j:    Integer;
    len:    Integer;

    StartTime: TDateTime ;
    EndTime: TDateTime ;

    Hour, Min, Sec, MSec: Word;

    str:    String;
begin

    Readln(str);

    StartTime:=Now;

    len:=Length(str);

    i:=1;
    while str[i]<>'=' do
    begin
        Write(str[i]);
        Inc(i);
23デフォルトの名無しさん:2005/11/29(火) 09:02:09
        if i>len then
        begin
            Writeln;
            Writeln('=が見つかりませんでした');
            Readln;
            Exit;
        end;
    end;

    Write('は');
    Inc(i);

    for j:=i to len do
    begin
        Write(str[j]);
    end;

    Writeln('です');
    EndTime:=Now;

    DecodeTime(EndTime-StartTime, Hour, Min, Sec, MSec);
    Writeln(Hour,'時間',Min,'分',Sec,'秒',MSec);

    Readln;
end.
//ここまで。よろしくお願いします。
24デフォルトの名無しさん:2005/11/29(火) 09:32:44
>>22

ただ、次の点をアップデートしていただけるとうれしい。
・文字列処理の習得を中心に考えているので結果(XはYです)の出力はまとめて
 行うようにしてほしい。
・Delphi初心者がいきなりコンソールアプリから入るとは考えにくいので
 できればGUIでお願いしたい。
・こちらではコンパイルして確認するわけではないのでコードすべてをアップする
 必要はない(そのため細かいバグは見落としますがそれはゴメン)
25デフォルトの名無しさん:2005/11/29(火) 10:19:21
DelphiでINIファイルの読み書きをしたいのですが・・
良いサンプルとかありませんでしょうか?
26デフォルトの名無しさん:2005/11/29(火) 11:00:56
>>25
ヘルプでTIniFileを検索して、あとは色々たどっていけばサンプルがあるけど、それじゃダメか?
27デフォルトの名無しさん:2005/11/29(火) 12:13:12
>>26
TIniFile検索してみたけどちょっとわかりずらいっす。
でもTIniFileを使うってのがわかったので助かります。
さんくす
28デフォルトの名無しさん:2005/11/29(火) 18:30:10
>>22-23 & >>24
空文字列が入力されたら存在しないstr[1]をアクセスしにいかないか?
29デフォルトの名無しさん:2005/11/29(火) 18:48:21
>>28
    if len=0 then
    begin
        exit;
    end;

修正しました
30デフォルトの名無しさん:2005/11/29(火) 20:52:30
>>27
D7だとヘルプのテキスト検索で「TIniFile とTMemIniFile の使い方」
ここにサンプル載ってるけどダメか?

ちょっとコード書いてみて、具体的にわからない所があったら質問してみ。
31デフォルトの名無しさん:2005/11/30(水) 13:05:59
メディアンフィルタとかガンマが付いてるTImageの派生クラスはありまつか?
32デフォルトの名無しさん:2005/11/30(水) 17:12:15
>>24
結果をまとめて表示、GUIをやりました
よろしくお願いします

procedure TForm1.Button1Click(Sender: TObject);
var
    i, j:        Integer;
    len:        Integer;

    StartTime: TDateTime ;
    EndTime: TDateTime ;

    Hour, Min, Sec, MSec: Word;

    str_src:    String;
    str_dest: String;
begin
    str_src:=Edit1.Text;
    StartTime:=Now;
    len:=Length(str_src);

    if len=0 then
    begin
        ShowMessage('なにか文字を入力してください');
        exit;
    end;

    i:=1;
    while str_src[i]<>'=' do
    begin
        str_dest:=str_dest+str_src[i];
        Inc(i);
33デフォルトの名無しさん:2005/11/30(水) 17:12:50
        if i>len then
        begin
            ShowMessage('=が見つかりませんでした');
            Exit;
        end;
    end;

    str_dest:=str_dest+'は';
    Inc(i);

    for j:=i to len do
    begin
            str_dest:=str_dest+str_src[j];
    end;

    str_dest:=str_dest+'です';
    EndTime:=Now;

    DecodeTime(EndTime-StartTime, Hour, Min, Sec, MSec);
    Memo1.Lines.BeginUpdate;
    Memo1.Lines.Add(str_dest);
    Memo1.Lines.Add(Format('%u時間 %u分 %u秒 %u', [Hour,Min,Sec,MSec]));
    Memo1.Lines.EndUpdate;
end;
//ここまで
34デフォルトの名無しさん:2005/11/30(水) 20:35:52
>>32


文字列処理は大丈夫っぽいのでまとめてお題を出しちゃおう。
1 Pos(AnsiPos)関数を使ってみる
2 その他使えそうな標準関数がないか探して使ってみる
3 PCharを使ってみる
35デフォルトの名無しさん:2005/12/01(木) 02:33:50
>>34
あんたホントに理解してんの?
36デフォルトの名無しさん:2005/12/01(木) 09:24:06
>>35
日本語処理のことかな。
そこは出題意図ではないので別の機会で勉強してくれ。
37デフォルトの名無しさん:2005/12/01(木) 10:18:01
日本語処理を無視した文字列処理はナンセンス
38デフォルトの名無しさん:2005/12/01(木) 10:23:44
>>37
ごめんな。
俺だけがお題を出すのも限界があるから是非もっとよいお題を頼む。
39デフォルトの名無しさん:2005/12/01(木) 10:42:02
お題
「このスレの1−38までを Memo1 にコピーして、「Delphi」という文字列が何度
現れたか数えなさい。
40デフォルトの名無しさん:2005/12/01(木) 14:08:14
>>34の1
begin
    str_src:=Edit1.Text;
    StartTime:=Now;

    len:=Length(str_src);
    eq_pos:=pos('=', str_src);

    if len=0 then
    begin
        ShowMessage('なにか文字を入力してください');
        exit;
    end;
    if eq_pos=0 then
    begin
        ShowMessage('=が見つかりませんでした');
        Exit;
    end;

    str_dest:=copy(str_src, 1, eq_pos-1);
    str_dest:=str_dest+'は';
    str_dest:=str_dest+copy(str_src, eq_pos+1, High(Integer));
    str_dest:=str_dest+'です';

    EndTime:=Now;
    DecodeTime(EndTime-StartTime, Hour, Min, Sec, MSec);
    Memo1.Lines.BeginUpdate;
    Memo1.Lines.Add(str_dest);
    Memo1.Lines.Add(Format('%u時間 %u分 %u秒 %u', [Hour,Min,Sec,MSec]));
    Memo1.Lines.EndUpdate;
end;
41デフォルトの名無しさん:2005/12/01(木) 14:26:49
>>34の2

回答1.DeleteとInsertを使う
Delete(str_src, eq_pos, 1);
Insert('は', str_src, eq_pos);
str_dest:=Concat(str_src, 'です');

回答2.出来合いの関数を使う
Borland - Delphi Q&A 文字列を一括置換するには
http://www.borland.co.jp/qanda/delphi/d0005103.html

回答3.正規表現を使う
TRegExpr - PukiWiki
http://onigiri.s3.xrea.com:8080/delphi/index.php?TRegExpr

※2と3は標準関数ではないですが見つけたので添えておきます
42デフォルトの名無しさん:2005/12/01(木) 17:43:03
D5 以降だと StringReplace があるけど
43デフォルトの名無しさん:2005/12/01(木) 18:24:52
>>42
天才あらわる
44デフォルトの名無しさん:2005/12/01(木) 22:23:51
>>34の3
    PSrc:=AllocMem(len+1);
    PSrcCopy:=PSrc;
    ZeroMemory(PSrc, len+1);

    for i:=1 to len do
    begin
        PSrc[i-1]:=str_src[i];
    end;

    while PSrc^ <> #0 do
    begin
        if PSrc^ = '=' then
        begin
            str_dest:=str_dest+'は';
        end
        else
        begin
                str_dest:=str_dest+PSrc^;
        end;
        Inc(PSrc);
    end;
    str_dest:=str_dest+'です';
    FreeMem(PSrcCopy, len+1);
45デフォルトの名無しさん:2005/12/01(木) 22:41:39
メモリ割り当ててコピーは無駄。ポインタ使う意義が半減。

PSrc := PChar(str_src);

でいいんでない?
46デフォルトの名無しさん:2005/12/01(木) 23:10:52
>>45
了解です。修正しました。
PCharとStringの変換が意外と楽で感激
    PSrc:=PChar(str_src);
    while PSrc^ <> #0 do
    begin
        if PSrc^ = '=' then
        begin
            str_dest:=str_dest+'は';
        end
        else
        begin
                str_dest:=str_dest+PSrc^;
        end;
        Inc(PSrc);
    end;
    str_dest:=str_dest+'です';
47デフォルトの名無しさん:2005/12/01(木) 23:13:41
>>39
    p:=0;
    cnt:=0;
    str:=Memo1.Text;
    len:=length(sword);

    repeat
        ap:=Pos(sword, copy(str, p, High(Integer)));
        if ap>0 then
        begin
            p:=p+ap;
            Inc(cnt);
            Inc(p, len);
        end;
    until ap=0;
    ShowMessage(IntToStr(cnt));
48デフォルトの名無しさん:2005/12/01(木) 23:32:47
>>39をPCharを使って解きました
文字列の添え字に間違って0を使ってしまってハマってしまいました
PCharのときは0から、それ以外(constやstring)は1からでいいんですよね?
    p:=1;
    cnt:=0;
    str:=Memo1.Text;
    PStr:=PChar(str);
    len:=length(sword);

    while PStr^ <> #0 do
    begin
        if PStr^ = sword[p] then
        begin
            Inc(p);
            if (p=len) then
            begin
                Inc(cnt);
                p:=1;
            end;
        end
        else
        begin
            p:=1;
        end;
        Inc(PStr);
    end;
    ShowMessage(IntToStr(cnt));
49デフォルトの名無しさん:2005/12/01(木) 23:32:52
>>47
パチパチパチ、すばらしい
◎-3

減点は、この場合は問題ないだろうけど、日本語処理では Pos じゃなく AnsiPos
を使うこと。

いろいろ改良点があるけど

ap:=Pos(sword, copy(str, p, High(Integer)));

これがこの処理のキモ。でも、文字列コピーは最も効率悪い方法。
1MByte のテキストで検索文字列が1000回現れたら、1000回コピーする
ことになる。PChar をつかってなるべくコピーをしないで処理する方法を
考えるのが次のお題。

50デフォルトの名無しさん:2005/12/01(木) 23:34:57
> PCharのときは0から、それ以外(constやstring)は1からでいいんですよね?

そう。string 型は、パルカルのときの実装を引きずっていますので例外的に1から、と覚える
51デフォルトの名無しさん:2005/12/02(金) 00:00:42
×パルカル
○パスカル
52デフォルトの名無しさん:2005/12/02(金) 00:06:33
49 のヒント AnsiStrPos
53デフォルトの名無しさん:2005/12/02(金) 09:07:30
TEditに英文字のみ入るようにする方法教えて下さい。
5453:2005/12/02(金) 09:19:30
イベントハンドラでキー入力をカット出来ないかなぁ?
55デフォルトの名無しさん:2005/12/02(金) 09:35:55
>39にも誰か答えてやれよ
56デフォルトの名無しさん:2005/12/02(金) 09:38:03
×39
○31
57デフォルトの名無しさん:2005/12/02(金) 09:58:38
> Delphi初心者が問題をコツコツと解きながらレベルアップするためのスレです。

単発質問はくだすれへ
58デフォルトの名無しさん:2005/12/02(金) 16:42:41
>>48

Inc(p);
if (p=len) then

これじゃ、比較が一バイト少ないよ。それから、2バイト文字を考慮してないので
ダメです。「Delphi」ならまず問題ないけど「D」だったら、2バイト文字の2バイト目も
数えてしまう可能性がある。
59デフォルトの名無しさん:2005/12/05(月) 21:38:25
>>49
日本語処理にも気をつけました
よろしくお願いします。

const
    sword='Delphi';
var
    str:    AnsiString;
    cnt:    Integer;
    PStr: PChar;
begin
    cnt:=0;
    str:=Memo1.Text;
    PStr:=PChar(str);

    repeat
        PStr:=AnsiStrPos(PStr, sword);
        if (PStr<>nil) then
        begin
            if (StrByteType(PStr, 0)=mbSingleByte) then
            begin
                Inc(cnt);
            end;
            Inc(PStr);
        end;
    until PStr=nil;

    ShowMessage(IntToStr(cnt));

end;
60デフォルトの名無しさん:2005/12/06(火) 00:37:50
>>59
AnsiStrPosを使ってる時点で2バイト文字として意味のある位置で
結果が返ってる筈なんでStrByteTypeいらない。

というか前からスキャン方式でStrByteTypeは使っちゃだめ。
途中の位置をいきなり指定してそれがどこにあたるか調べるのは
前後の文字を辿るしかなく、
逆にそういった機能を持つ関数を使うことは
その次点に到達するまで前からスキャンしてきたこと自体を
無駄にしてる。
前から辿るならAnsi〜系を使わずに自力でマルチバイト処理をするとしても
LeadBytesで充分。
61デフォルトの名無しさん:2005/12/06(火) 00:46:30
>>59

惜しい。あと一歩。78点くらい。
たぶん結果は正しい。冗長なのが減点の原因。

AnsiStrPos は二バイト文字をサポートしていますので、検索の先頭を間違わなければStrByteType による確認は不要です。

それから、見つかったら、PStr は検索文字列の長さ分だけ Inc() してから再度検索します。

    repeat
        PStr:=AnsiStrPos(PStr, sword);
        if (PStr<>nil) then
        begin
          Inc(cnt);
          Inc(PStr, Length(sword));
        end;
    until PStr=nil;

このようにすると検索文字列が 「Delphi」であっても「デルファイ」であっても問題なく検索できます。
>>59 の回答は検索文字列の最初が一バイト文字であることを仮定しているので正しくないです。

しかし、かなりな進歩で驚いています。

次のお題は、何回現れるかの他に、その位置も返すような関数をつくってください。具体的には、RichEdit に
同様にテキストを読み込んで、ボタンを押すと Delphi の部分が赤い文字列になるようにします。

赤文字にする方法、位置情報を返すための配列の定義の仕方など、分からないことがあったら個別に質問してください。
62デフォルトの名無しさん:2005/12/07(水) 01:04:33
>>61
begin
    cnt:=0;
    spos:=0;

    str:=RichEdit1.Text;
    PStr:=PChar(str);
    len:=Length(sword);

    repeat
        p:=AnsiPos(sword, PStr+spos);

        if (p>0) then
        begin
            Inc(cnt);
            Inc(spos, p);

            with RichEdit1 do
            begin
                SelStart:=spos-1;
                SelLength:=len;
                SelAttributes.Color:=clRed;
            end;
            Inc(spos, len);

        end;

    until p=0;
    ShowMessage(IntToStr(cnt));
end;
//ここまで
よろしくお願いします。
63デフォルトの名無しさん:2005/12/07(水) 02:35:14
>>62
AnsiPosに暗黙のPChar→String変換で引数渡してるよね…。
これは暗黙に実行されるわりにコストがメチャ高いので、
ループの中では避けたほうがいい。
上と同じでAnsiStrPosじゃダメだったの?
64デフォルトの名無しさん:2005/12/07(水) 03:05:54
>>62

すばらしい!

つぎに、汎用的に使えるように関数にしてみてください。

type
TPosArray = array of integer;

function SearchAndPos(const SubStr, Str: string; PosArray: TPosArray): integer;

で戻り値が出現回数であるような。>>63 さんのおっしゃるとおり、AnsiStrPos をつかって
実装してみてください。
65デフォルトの名無しさん:2005/12/07(水) 03:10:21
すみません、関数は

function SearchAndPos(const SubStr, Str: string; var PosArray: TPosArray): integer;

の形です。var をわすれました。
66デフォルトの名無しさん:2005/12/09(金) 04:07:45
>>64-65
AnsiStrPosを使うように変更しました
よろしくお願いします

function SearchAndPos(const SubStr, Str: string; var PosArray: TPosArray): integer;
var
    PStr:     PChar;
    PBgmStr:    PChar;
    PSubStr:    PChar;
    Cnt:    Integer;
    Len:    Integer;
begin
    Cnt:=0;
    Len:=Length(SubStr);

    PBgmStr:=PChar(Str);
    PStr:=PBgmStr;
    PSubStr:=PChar(SubStr);

    repeat
        PStr:=AnsiStrPos(PStr, PSubStr);
        if (PStr<>nil) then
        begin
            Inc(Cnt);
            SetLength(PosArray, Cnt);
            PosArray[Cnt-1]:=PStr-PBgmStr;
            Inc(PStr, Len);
        end;
    until PStr=nil;

    result:=Cnt;
end;
67デフォルトの名無しさん:2005/12/09(金) 09:57:48
>>66

すばらしい!
実際のの動作はすみませんが、時間が出来たらあとで検証してみます。
見た限りでは問題無さそうです。

>>47 から比べると格段の進歩です。検索には一度も文字列コピーをしてないのですよね。

今回の教訓は、ひとかたまりの論理が完結したら、関数や手続き、クラス内のメソッド
などで表現すべき、ということです。コードの断片より、関数などで完結した論理を
表現しておくと、たとえ他の言語や環境になったとしても論理そのものは生きるので
自分の財産にすることが出来ます。
68デフォルトの名無しさん:2005/12/09(金) 09:58:14
次の課題。

1)Delphi には Pos や AnsiPos にように文字列の先頭から、最初の位置までを
検索する関数がありますが、途中から検索する関数がありません。それを

function AnsiPosEx(const Substr, S: string; initPos: integer): Integer;

の形で AnsiStrPos をつかって、つくってください。そして、それをつかって >>66
書き直してみてください。

2)>>66 では見つかるたびに SetLength() を使って配列を一つずつ増やしています。
これは非効率的なので、たとえば10個づつ増やすようにしてみてください。
69デフォルトの名無しさん:2005/12/09(金) 20:18:26
>>68
function AnsiPosEx(const SubStr, S: string; initPos: integer): Integer;
var
    PSubStr:    PChar;
    PS: PChar;
    PBgn: PChar;
    PPos: PChar;
begin
    PSubStr:=PChar(SubStr);
    PS:=PChar(S);
    PBgn:=PS+initPos;

    PPos:=AnsiStrPos(PBgn, PSubStr);
    result:=PPos-PS+1;
    if result<0 then
    begin
        result:=0;
    end;
end;
70デフォルトの名無しさん:2005/12/09(金) 20:19:15
function SearchAndPos(const SubStr, Str: string; var PosArray: TPosArray): integer;
var
    PStr:     PChar;
    Cnt:    Integer;
    NowPos: Integer;
    Len:    Integer;
begin
    Cnt:=0;
    NowPos:=0;
    Len:=Length(SubStr);
    PStr:=PChar(Str);

    repeat
        NowPos:=AnsiPosEx(SubStr, PStr, NowPos);
        if NowPos<>0 then
        begin
            if Length(PosArray)=Cnt then
            begin
                SetLength(PosArray, Cnt+10);
            end;
            PosArray[Cnt]:=NowPos-1;
            Inc(Cnt);
            Inc(NowPos, Len);
        end;
    until NowPos=0;
    SetLength(PosArray, Cnt);
    result:=Cnt;
end;
//ここまで

よろしくお願いします
71デフォルトの名無しさん:2005/12/09(金) 22:22:06
>>69

完璧!! -2 点 =98点

減点は、AnsiPosEx の第二引数に PChar を使ったこと。const の string 型は
呼び出しても、関数内で変更できないのでコピーされることはないです。ですから
string 型のまま使ってください。AnsiPosEx をつくったことにより、SearchAndPos
から、ポインタをあらわにつかうコードが完全になくすることができたことに注目してください。

次の課題は少し難易度が上がります。

このスレの1−38までのテキストのうち、半角の数字がでてきた数を数える関数をつくってください。

いままで、テキスト内の走査は、AnsiPos や AnsiStrPos をつかったのであらわに
コードを書かなかった。この課題では、一バイト文字、二バイト文字を判別しながら
数字かどうかを判定する必要があります。自分のコードでテキストを走査してください。
出来れば、前回のように、文字列の途中から検索して、最初の数字を見つける関数を
つくり、それを使って出現数を数えてください。
72デフォルトの名無しさん:2005/12/09(金) 22:25:23
ヒント >>60 さんのコメントが参考になります。
73デフォルトの名無しさん:2005/12/10(土) 00:15:52
数字は全角文字の二バイト目に出てこないよ。
74デフォルトの名無しさん:2005/12/10(土) 02:07:03
>>73
ありがとう。
ほんとうですね。いま shift-jis のコード表を見ましたら、二バイト文字の二バイト目は
$40 からなんですね。一方 0-9 は $30-$39 ですから、重複しませんね。

うーむ、それでは課題が破綻するので変えることにします。

このスレの1−38までのテキストのうち、半角のアルファベット( a-z と A-Z )文字がでてきた数を数える関数をつくってください。

とします。すみませんでした。
75デフォルトの名無しさん:2005/12/11(日) 22:32:44
嘘か真かわからんが、QualityCentralにQC#21940で、「Delphi2006 ハング」との事です。時々、ハングアップするとの事です。んー。今まで、Qualityを無視しつづけたツケだな。 -- 2005-12-07 05:54:52 (水) New

2005なんか 最初 吹っ飛んで消滅していたじゃん。 消滅からハングに 大差ないしおどろくことではないかと  先行バグ取り隊の情報引き続きよろしく  -- 2005-12-07 09:14:09 (水) New

>「消滅からハングに 大差ないしおどろくことではない」 どっちにしろ、真面目につかうものではなさそうですね。

「どっちにしろ、真面目につかうものではなさそうですね」 しらずに2005のときせっかく数時間かけて書いたコードが消滅して悲しい思いしたよ -- 2005-12-07 15:22:52 (水) New
76デフォルトの名無しさん:2005/12/15(木) 07:29:16
>>74
function CountAlpha(var str:    AnsiString):    Integer;
var
    i:    Integer;
    cnt:    Integer;
begin
    cnt:=0;
    i:=0;

    while (i <= Length(str)) do
    begin
        if ( (str[i] in LeadBytes)) then
        begin
            Inc(i,2);
        end
        else
        begin
            if (str[i] in ['a'..'z']) or (str[i] in ['A'..'Z']) then
            begin
                Inc(cnt);
            end;
            Inc(i);
        end;

    end;
    result:=cnt;
end;
//ここまで
よろしくお願いします
77デフォルトの名無しさん:2005/12/15(木) 10:26:25
>>76
すばらしい! 94点

減点は
CountAlpha(var str: AnsiString): → CountAlpha(const str: AnsiString):

const にして、関数内で変更しない(コピーされない)ことを保証し、
IntToStr(CountAlpha(Memo1.Text)) などと、変数を確保しなくても使えるように
することは重要です。var だと str := Memo1.Text; IntToStr(CountAlpha(str))
などとしなければ使えませんね。

減点ではないけど

if (str[i] in ['a'..'z']) or (str[i] in ['A'..'Z']) then

の部分は

if (str[i] in ['A'..'Z','a'..'z']) then

とすることもできます。

文字列のインデックスは1から始まります。ですから

i:=0; ではなく、 i:=1;

で初期化してください。次の課題は少し事前に検証してから出します。


78デフォルトの名無しさん:2005/12/15(木) 10:42:34
>>76

つぎの課題は、もうちょっと難易度が上がります。
前回同様、アルファベットの文字を見つけるのは同じですが、塊として数えてください。

例えば

This is a pen.

の場合は4を返すような関数をつくってください。アルファベット以外の文字(空白も含む)で
区切られたアルファベットだけで出来ている語句の数を数えます。

「...ことを保証し、IntToStr(CountAlpha(Memo1.Text)) などと、変数を確保しなくても使えるように」

の場合は、「IntToStr」「CountAlpha」「Memo」「Text」の4つです。
79デフォルトの名無しさん:2005/12/15(木) 11:52:06
ヒント
新幹線で東京から名古屋まで行くときのトンネルの数を数えるのと同等です。
トンネルの入り口を数えるといいですね。でも入り口を認識するためには
出口を認識する必要があります。出口を認識するためには、「いまトンネルの
なかにいる」という<状態>を変数に保存しておかなければなりません。また、
トンネルの中にも駅があることを考慮しなければなりません。ですから、名古屋
は違いますが終点がトンネルの中の場合もありえます。
80デフォルトの名無しさん:2005/12/15(木) 12:22:11
すみません(こればっかり)、ヒントの最後の2行は、見つかった語句の長さを
記録するときのものです。今回は無視してください。入り口の数だけで十分です。
81デフォルトの名無しさん:2005/12/16(金) 13:56:59
●問題2
エディットボックス(Edit1)に入力した数字までの合計値を、ボタン(Button1)を押したら、表示(Label1に表示)させよ。
なお変数は、エディットボックスの入力値(a)、合計値(Sum)、ループのカウンタ(i)とする。

procedure TForm1.Button1Click(Sender: TObject);
var
i,Sum:□□□□□□□;
a:integer;
begin
a:=StrToInt(Edit1.text);
Sum:=0;

for i:= □ to □ do
begin
Sum:= □□□+□
end;

Label1.Caption:=IntToStr(Sum);
end;

教えて!↑
82デフォルトの名無しさん:2005/12/16(金) 15:44:01
Integer
0
a
Sum
i
83デフォルトの名無しさん:2005/12/18(日) 04:51:49
すんません、教えてください。

TPopupMenuに動的にメニューを追加する方法なんですが、サブメニューも追加したくて・・・
例えば

A
 -SubA
 -SubB
B
 -SubA
 -SubB
 -SubC

こんな感じでサブメニュー含めて動的に追加するにはどうしたらいいですかね?
84デフォルトの名無しさん:2005/12/18(日) 09:33:06
85デフォルトの名無しさん:2005/12/20(火) 06:50:34
>>78-80
function CountAlphaWord(const str:    AnsiString):    Integer;
var
    i:    Integer;
    cnt:    Integer;
    isAlphaNow:    Boolean;
    isAlphaPrev:    Boolean;
begin
    isAlphaPrev:=False;

    cnt:=0;
    i:=1;

    while (i <= Length(str)) do
    begin
        isAlphaNow:=False;

        if ( (str[i] in LeadBytes)) then
        begin
            Inc(i,2);
        end
        else
        begin
            if (str[i] in ['a'..'z', 'A'..'Z']) then
            begin
                isAlphaNow:=True;
            end;
            Inc(i);
        end;
86デフォルトの名無しさん:2005/12/20(火) 06:54:35
        if (not isAlphaPrev) and isAlphaNow then
        begin
            Inc(cnt);
        end;
        isAlphaPrev:=isAlphaNow;

    end;

    result:=cnt;
end;

//ここまで
よろしくお願いします
87デフォルトの名無しさん:2005/12/20(火) 14:36:57
>>85-86

100点。

キモは、

if (not isAlphaPrev) and isAlphaNow then

ですね。これでトンネルの入り口を認識しているのだね。Boolean の変数を二つ
つかって、論理が分かりやすくなっています。わたしの実装だと、IsTunnel という
Boolean の変数をひとつだけ使っているので、今回の実装より簡単ですが、コードは
読みにくいです。他人の実装をみると、自分との違いが分かって勉強になります。

さて、次の課題は、多分予想できていると思いますが、トンネルの出口も認識して
数だけでなく、位置と長さも返すような関数を作ってください。

type
TPosLength = record
Position: integer;
Length : integer;
end;

TPosLenArr = array of TPosLength;

function SearchAlphaWord(const str: string; var pl: TPosLenArr): integer;

>>79 の全文をヒントとしてください。
88デフォルトの名無しさん:2005/12/23(金) 05:34:45
>>87
function SearchAlphaWord(const str: string; var pl: TPosLenArr): integer;
var
    i:    Integer;
    cnt:    Integer;
    isAlphaPrev:    Boolean;
    isAlphaNow :    Boolean;
    iPrev:    Integer;
begin
    isAlphaPrev:=False;

    cnt:=0;
    i:=1;

    while (i <= Length(str)) do
    begin
        isAlphaNow:=False;
        iPrev:=i;

        if ( (str[i] in LeadBytes)) then
        begin
            Inc(i,2);
        end
        else
        begin
            if (str[i] in ['a'..'z', 'A'..'Z']) then
            begin
                isAlphaNow:=True;
            end;
            Inc(i);
        end;
89デフォルトの名無しさん:2005/12/23(金) 05:35:25
        if (not isAlphaPrev) and isAlphaNow then
        begin
            Inc(cnt);

            if cnt>Length(pl) then
            begin
                SetLength(pl, cnt+10);
            end;
            pl[cnt-1].Position:=iPrev;
        end
        else    if isAlphaPrev and (not isAlphaNow) then
        begin
            pl[cnt-1].Length:=iPrev-pl[cnt-1].Position;
        end;

        isAlphaPrev:=isAlphaNow;
    end;

    SetLength(pl, cnt);
    result:=cnt;
end;
//ここまで
よろしくお願いします
90デフォルトの名無しさん:2005/12/23(金) 11:51:19
>>88-89

90点。

ヒントの

> トンネルの中にも駅があることを考慮しなければなりません。ですから、名古屋
> は違いますが終点がトンネルの中の場合もありえます。

を忘れています。アルファベットでテキストが終わる場合を考慮してください。

...
isAlphaPrev:=isAlphaNow;
end;

if isAlphaNow then pl[cnt-1].Length:=iPrev+1-pl[cnt-1].Position; // これを追加

SetLength(pl, cnt);
result:=cnt;
end;

あと、一つも見つからない場合もありますので、while の前に

isAlphaNow := false;
iPrev := 1;

で初期化しておくとコンパイラの警告が出ませんね。

文字列操作は列挙や置換、抽出、パースなどいろいろありますが、少々当方も飽きてきた
ので次はリストクラスから出題します。すこし時間をください。
91デフォルトの名無しさん:2005/12/23(金) 12:10:18
>>88-89

リストクラスはもっとも簡単そうな文字列のリスト TStringList から始めます。
最初はソートの練習です。

procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStringList;
  i: integer;
begin
  Randomize;
  sl := TStringList.Create;
  try
    for i := 1 to 20 do sl.Add(IntToStr(Random(1000)));
    Memo1.Lines.Assign(sl);
  finally
    sl.Free;
  end;
end;

にすると、0-999 のランダムな数値に対応する文字列が sl に20個保持され、その内容が Memo1 に
表示されます。コードを継ぎ足して、数値の小さい方から(昇順)並べ直して見てください。

TStringList.CustomSort を使います。
92ささ ◆6KVcpBNXy. :2006/01/26(木) 15:45:51
みなさん。こんにちゎ。経済学部のささと申します。
パスカル(Delphi)の授業での課題がわかりません。。教えてください!
3科目、10人分のデータを入力して各人の合計点と科目毎の平均点を作れ!
という課題が出ました。。。

先生に下記を改変するとやりやすいといわれました。repeatとwhileとforまでしか習っていません。
Score :array[0..1000] of integer; 
begin
writeln('入力得点の平均と偏差値を計算します'); writeln('入力後、負の数を入力すると…終了します。');
kazu :=0;
repeat
write('点数は?'); readln(data);
if data >= 0 then
begin 
kazu := kazu + 1;
score[kazu] := data
end
until data < 0;
goukei := 0;  for i := 1 to kazu do goukei := goukei + score[i];  heikin :=goukei / kazu;
goukei :=0;  for i := 1 to kazu do  goukei := goukei + Sqr(score[i]); hensa := sqrt(goukei /kazu - sqr(heikin));
writeln('点数  偏差値');
for i := 1 to kazu do  writeln(score[i]:4, 50 +10 * (score[i]-heikin)/ hensa:10:1);
writeln(' 平 均 =',heikin:5:1);  writeln('標準偏差=',hensa:5:1);
readln;
end.
93棄民党党首 ◆8slekwWKD6 :2006/01/26(木) 17:00:39
やひゃひゃひゃ。おまいら。

AssignFile(f, s); Reset(f);

で s にアクセント記号と漢字交じりのファイル名をWideStringでぶちこんでみたら
開かんぞ。

TntのUnicode Componentsをいぢってみたが、AssignFileのUnicode版がみつからん。

でしかたないから
WideRenameFileで名前を'safe.bin'とかに変更しちゃって。
フツ〜にAssignFileで開いて処理してからまた
WideRenameFileで名前をUnicodeの名前へもどしますた。

わたしってなんて天才♪
94デフォルトの名無しさん:2006/02/10(金) 02:28:56
Delphiってなくなるの?
Turbo Pascal時代からずっと使って来ただけに、
手に馴染んだ開発環境がなくなると困る。
95デフォルトの名無しさん:2006/02/10(金) 04:04:10
>>94
ボーランドが手放すだけでDelphiがなくなるわけじゃないから安心しる。
96デフォルトの名無しさん:2006/02/10(金) 08:15:16
買い手が無ければなくなるんじゃね?
97デフォルトの名無しさん:2006/02/10(金) 14:45:48
で、MDIでWM_COPYDATAを子フォームで受け取るにはどーすんの?
98デフォルトの名無しさん:2006/02/10(金) 16:58:38
受け取るのは簡単だろ
99デフォルトの名無しさん:2006/02/10(金) 17:29:53
>>98
え?マジすか?kwsk!
とあるスレッドからMDI子フォームにSendMessageしたいんです。
そのスレッドでは、MDI子フォームのウィンドウハンドルを取得する事は
出来るのですが、SendMessageしてもMDI子フォームにメッセージが来ないです。
もう泣きそうです。
もちろん、MDI子フォームではメッセージを受け取れるようにしているのですけども・・・。
100デフォルトの名無しさん:2006/02/10(金) 17:49:34
どうやってハンドルをみつけたの?
101デフォルトの名無しさん:2006/02/10(金) 18:13:45
改行が多いと怒られたので、かなりハショってます。
メッセージを送る側では
procedure Thread.SendMsg(sClassName: String; nKind: Cardinal; pInfo: Pointer; nInfoSize: Integer);
var
begin
Wnd := FindWindow(PChar(sClassName), nil);
if (Wnd <> 0) then begin
:
SendMessage(Wnd, WM_COPYDATA, WPARAM(Wnd), LPARAM(@Cd));
end;

とし、SendMsg('TForm', ....); と、使っています。で、
受け取る側(MDI子フォーム)では
procedure WMCopyData( var sMsg: TWMCopyData ); message WM_COPYDATA;
を、privateに宣言して
procedure TForm.WMCopyData(var sMsg: TWMCopyData);
:
begin
pMessage := nil;
if (sMsg.CopyDataStruct.dwData = ID_TEST) then begin
:
:
:
end;
としています。
102デフォルトの名無しさん:2006/02/10(金) 19:22:04
それでほんとに、目的 MDI 子ウィンドウが見つかってる?
一度 Spy++ か WinInsight で確かめたら?
103デフォルトの名無しさん:2006/02/10(金) 19:45:00
取れてるようですが・・・ダメなんでしょうか?
通常どうやるのかわからないもので・・・。
とりあえず実行させて、FindWindowの戻り値を見たら0x604A6でした。
Spy++の検索ウィンドウで0x604A6を検索したら、目的のウィンドウが
検索されました。一応ウィンドウハンドルは取れているようでした。
うーん・・・困りました・・・。
104デフォルトの名無しさん:2006/02/14(火) 02:57:20
部分範囲型って、実際バリバリ使ってる人います?
便利なようでいまいち、使いどころが…。
動作中チェックありにして、速度とか問題ないですか?
105デフォルトの名無しさん:2006/02/14(火) 15:13:33
そもそも Delphi を実際バリバリ使ってる人なんか、そんなにいないからね
106デフォルトの名無しさん:2006/02/14(火) 21:37:45
バリバリじゃない。さり気なく使うんだ。
107デフォルトの名無しさん:2006/02/15(水) 10:29:36
さりげなく、こっそりと、ひそかに・・・な。
108デフォルトの名無しさん:2006/02/15(水) 11:11:39
いや、ペタペタと使う。
109デフォルトの名無しさん:2006/02/21(火) 23:53:44
>>101
ヘルプに有るように、FindWindowは子ウィンドウは探してくれないよ。
同じクラス名を持つ別のウィンドウのハンドルを返していると思われ。
110デフォルトの名無しさん:2006/02/22(水) 23:07:35
質問です。色付きのボタンを作ることはできますか?
パネルを色つきにしてOnClickという事もできますが
それだとクリックされたときにボタンのように
凹んだりしないのでわかりづらいし・・・
なにかいい方法はありますでしょうか?
どなたか、よろしくお願いします。
111デフォルトの名無しさん:2006/02/22(水) 23:14:06
>>110
まさか本当に凹んでるとか思ってないよな?
112デフォルトの名無しさん:2006/02/23(木) 00:27:17
Paintメソッドをoverrideして自分で描画するとか。
113Delフサギコ ◆A6VzDeLphI :2006/02/23(木) 00:51:33

           (´⌒;;
;⌒`)   ∧,,∧   そういうのだいたい
 ;; `)./ミ,,゚Д゚彡  誰か作ってるよ。
   //\ ̄ ̄旦~   (´(´⌒)
  // ※.\___\
 \\※ ※ ※ ※ ※ヽ
   \`ー──────ヽ
    ────────

http://homepage1.nifty.com/cosmic/delphi/vcl.html#cutebtn

http://homepage2.nifty.com/Mr_XRAY/Delphi/plButton/index.htm
114デフォルトの名無しさん:2006/03/02(木) 22:41:07
152 :  :2006/03/01(水) 06:16:00 HOST:ed251.opt2.point.ne.jp
削除対象アドレス:
 http://pc8.2ch.net/test/read.cgi/tech/1138370150/
 http://pc8.2ch.net/test/read.cgi/tech/1132756268/
 http://pc8.2ch.net/test/read.cgi/tech/1132013685/
削除理由・詳細・その他:
 6. 連続投稿・重複
115デフォルトの名無しさん:2006/03/03(金) 01:13:30
Dr.Dのマシン語寺子屋
116デフォルトの名無しさん:2006/03/31(金) 11:14:10
TBitmap→TJpegImage→Jpegファイル、とやってますが、
DDBからDIBにするとメモリ減りますか?

コーディングも簡単でつか?
117デフォルトの名無しさん:2006/03/31(金) 12:06:28
やってることと、質問の内容が噛み合ってない
118116:2006/03/31(金) 13:30:05
いやだから、

TBitmap(DDB)→TJpegImage→Jpegファイル
から
TBitmap(DIB)→TJpegImage→Jpegファイル
に変更。

今は意識してないけど、TBitmapってデフォはDDBだおね?
119デフォルトの名無しさん:2006/03/31(金) 13:50:09
大差ないよ。
120デフォルトの名無しさん:2006/05/29(月) 00:58:17
feeddemonってRSSリーダーがあるんですが
v1のときにhtaのような使い方をしている
部分(左のチャンネルリスト)をどう実装してるのか
わからないんですが、誰か教えてください詳しい人
121デフォルトの名無しさん:2006/05/29(月) 13:16:35
> Delphi初心者が問題をコツコツと解きながらレベルアップするためのスレです。

すれ違い
122デフォルトの名無しさん:2006/06/09(金) 17:59:34
マウスカーソルをアルファベット文字、もしくは単語にしたいのですが、
簡単にできますか?

アルファベット毎にカーソルファイルを作るのでなく、
コーディングでやりたいです。
123デフォルトの名無しさん:2006/06/09(金) 18:47:12
簡単にはできないでしょ。すなくとも動的にアルファベットの画像をつくらなきゃならないし。
124デフォルトの名無しさん:2006/06/09(金) 19:15:11
>>122
http://forum.nifty.com/fdelphi/samples/00368.html

TBitmapを作成して そこに文字を書いて、
それからCreateCursor
125122:2006/06/12(月) 08:41:29
>>123 >>124

サンクス。
ちょっとひねればコーディングできそうですね。
126デフォルトの名無しさん:2006/09/03(日) 09:14:12
どうぞよろしくお願いします

Delphi7.0上で、3層の情報系の業務アプリケーションを構築しています
データベースはOracle9iです
UIでは、ADOレコードセットを入力データソースするMicrosoftのActiveXコンポーネント
を使用しています
BDE、DBExpressやBizSnapを利用すれば3層のデータアプリケーションは作成できる
ことは分かりました
データセットプロバイダ経由でデータを取得しようとすると、クライアント側はClientDataSet
として受け取ることになるのですが、どこかでADOレコードセット形式に変換しなければなりません

試しにClientDataSetをまわしながらADOレコードセットにフィールド定義とデータ値をコピーする
方法を試してみましたが、処理時間とCPU負荷が半端ではなく、とても採用できませんでした
他には、BizSoapを利用した形式では、サーバー側でADOレコードセットとしてデータ取得後に
Saveメソッドを利用してXML形式で一旦データ出力し、Soap経由でテキスト送信し、クライアント
側では受信内容をファイルとして出力しADOレコードセットのLoadメソッドをCallしてXMLファイル
から復元する方法を試したみましたが、これも採用できるものではありませんでした
素直にクライアント側でADOレコードセットとして取得可能な方法としては、リモートデータセット
(Microsoft RDS)を利用したDComアプリケーションとして構築する方法もあるので試してみました
これは、非常に高速で20万件程度のデータもほぼ一瞬でクライアント処理でき驚いたものですが、
MicrosoftのサポートページではRDS自体が今後は非推奨の技術として明記されており、その点
が引っかかっております

どうしてもクライアント側で扱うデータ量が数十万件程度あることでパフォーマンスが重要になって
しまいます。
オーバーヘッドがなるべく最小の形でClientDataSetからADOレコードセット形式に変換する方法は
ないものでしょうか
もしくは、素直にADOレコードセットとしてクライアント側で一発でデータ取得できれば嬉しいです

長文になってしまい申し訳ありません
どうぞよろしくお願いいたします
127126:2006/09/03(日) 09:22:44
126です
大変失礼しました
[ くだすれdELPHI(超初心者用) ] のスレの方に移動します
128デフォルトの名無しさん:2006/09/11(月) 00:03:00
>>1
問題だしておくれ
初心者でも10分ぐらいで解けて、面白味のあるものがいい
129デフォルトの名無しさん:2006/09/11(月) 08:47:19
じゃ、俺から問題

ボタンを二つ用意し、片方を非表示とする。
表示されているボタンを押すと、非表示だったボタンを表示し、押されたボタンを非表示に。
これを交互に繰り返せるものを作れ。
130デフォルトの名無しさん:2006/09/11(月) 10:14:48
くだらね┐(´〜`;)┌
131デフォルトの名無しさん:2006/09/11(月) 11:34:13
>>130
ならおまえがだせ。
と、いいたいところだが、これはどうだ?
コントロールのオーナーをTForm1からTForm2に変える。
132デフォルトの名無しさん:2006/09/11(月) 12:30:13
他のスレでTPrinterの話題が出てたんで。

用紙の左上から右に5cm、下に5cmの位置に
「はろーわーるど」と印字せよ
フォントは何でもいい
133デフォルトの名無しさん:2006/09/11(月) 15:51:09
初心者の基準を考えよ
134デフォルトの名無しさん:2006/09/12(火) 16:57:18
iniファイル作って
初期データ読み込み書き込みはどうだ?
135デフォルトの名無しさん:2006/09/12(火) 17:10:37
初心者の基準を考えよ
136デフォルトの名無しさん:2006/09/12(火) 20:17:27
procedure TForm2.Button1Click(Sender: TObject);
begin
  Button1.Visible:=not Button1.Visible;
  Button2.Visible:=not Button2.Visible;

end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  Button2.OnEnter:=Button1Click;
  Button2.Visible:=False;
end;
137デフォルトの名無しさん:2006/09/12(火) 20:18:58
あ、途中で書き込み押しちゃった
>>136>>129への回答です
短くなるように工夫しました
採点お願いします
138デフォルトの名無しさん:2006/09/12(火) 20:25:08
わざわざコードで
  Button2.OnEnter:=Button1Click;
  Button2.Visible:=False;
をする必要が無い。
0点。
139デフォルトの名無しさん:2006/09/12(火) 20:30:07
そりゃプロパティでも出来るけどあえて明示してるんでしょうが。
140デフォルトの名無しさん:2006/09/12(火) 20:42:49
ほかにもフォームの位置とかサイズとか、明示しろよ。
141デフォルトの名無しさん:2006/09/12(火) 20:54:32
こりゃいかん。
142デフォルトの名無しさん:2006/09/12(火) 21:10:23
てゆうか先生!なんでOnEnterやねん!Clickや!!
と突っ込むところではないの?
143デフォルトの名無しさん:2006/09/12(火) 21:12:52
ほんとだwwww
144デフォルトの名無しさん:2006/09/12(火) 22:23:37
TD2006ってコンポにフォーカスさせてF1押してもヘルプでないよね
145デフォルトの名無しさん:2006/09/12(火) 23:28:50
しらねぇよ。Del6per の方がましだし、そんなの使うヤツの気が知れん
146デフォルトの名無しさん:2006/09/13(水) 03:30:32
procedure TForm1.Button1Click(Sender: TObject);
const
FILE_URL = 'http://203.131.199.131:8060/koreiina';
FILE_PATH = 'test.mp3';
var
fs: TFileStream;
begin
fs := TFileStream.Create(FILE_PATH, fmCreate);
try
with IdHTTP1 do begin
Get(FILE_URL, fs);
end;
finally
fs.Free;
end;
end;
147デフォルトの名無しさん:2006/09/13(水) 08:14:13
>>145
可哀そうに
148デフォルトの名無しさん:2006/09/13(水) 11:33:34
TDって略すとTurbo Debuggerかと思ってしまう俺。
(さすがにTokyo Disnylandとは思わないが)
149デフォルトの名無しさん:2006/09/13(水) 19:35:33
>>144
可哀そうに
150デフォルトの名無しさん:2006/09/13(水) 21:21:06
>>134
iniファイル読み書きの習作をつくってみました
普通にファイルの読み書きするより簡単かもしれない
ちょっと感動!!
procedure TForm1.Button1Click(Sender: TObject);
var
  iniFile:  TInifile;
begin
  iniFile:=TIniFile.Create('ook.ini');
  try
    count:=iniFile.ReadInteger('CounterApp', 'Count', 0);
    Inc(count);
    iniFile.WriteInteger('CounterApp', 'Count', count);
  finally
    iniFile.Free;
  end;
  ShowMessage(IntToStr(count));
end;

151デフォルトの名無しさん:2006/09/13(水) 21:30:06
フルパスつかっとけ
152デフォルトの名無しさん:2006/09/13(水) 22:06:31
EXEファイルと同じフォルダが前提ならそのままがいいと思うが。
153デフォルトの名無しさん:2006/09/13(水) 22:39:21
>>152
お前はそのままでいいよw
154デフォルトの名無しさん:2006/09/13(水) 23:24:42
>>152 は、今後大変だな・・・
155デフォルトの名無しさん:2006/09/14(木) 00:35:54
>>150
お主、俺を超えたな!?
156デフォルトの名無しさん:2006/09/14(木) 04:04:15
カレントディレクトリが変わるたびに、あちこちにいっぱい ini をつくるけどね
157デフォルトの名無しさん:2006/09/14(木) 05:19:24
TIniFile って相対パス渡すとプロファイルフォルダに作られなかったっけ?
158デフォルトの名無しさん:2006/09/14(木) 07:56:03
なんにせよそういう不安定要素は削除しないとな
159デフォルトの名無しさん:2006/09/14(木) 10:09:08
>Delphiで無料でプログラミングしてみるお
ttp://pc8.2ch.net/test/read.cgi/tech/1139675970/239
>ソースと実行ファイル
http://vipperup.orz.hm/miniup/src/viup0403.zip

これって、もう手に入らないの?
160デフォルトの名無しさん:2006/09/14(木) 16:02:35
 
161デフォルトの名無しさん:2006/09/29(金) 18:21:31
授業を受けに来たのに先生がいませんよ。有給ですか?
162デフォルトの名無しさん:2006/09/29(金) 18:37:24
163デフォルトの名無しさん:2006/10/06(金) 22:25:29
別のアプリケーションにエンターキーを送りたいのですが、アプリケーション側でなにか
対策をしているらしく、keybd_event ではエンターキーだけが認識されません。
(そのアプリ上でエンターキーを直接押せば認識される)

こういった場合、どのようにすればいいのでしょうか?
164163:2006/10/06(金) 22:49:19
>>163
すみません、、、スレ間違えました。別スレに行ってきます。
165デフォルトの名無しさん:2006/10/16(月) 03:02:58
Delphiで
Vbでいうところの Validate イベントを実現したい。
どうすればいい?

Procedure TXXXXX.OnValidate(Sender : TObject;Cancel : Boolean);

Cancel := True;

とすれば、フォーカスが抜けないようにする。
どうやったらできるんだろう?

TEdit を継承して、
WndProc を オーバーライドして
CM_EXIT をフックしてみた。

TEdit ではうまくいったが
TComboBox ではうまくいかなかった(DropDownList では おk で DropDown ではNg だった)。

誰か経験者か、うまいやり方知ってるひと教えてください。
166デフォルトの名無しさん:2006/10/16(月) 09:10:19
やったことないけどOnEnterでValidateすべきかどうか(どこかで)設定しといて
WM_KILLFOCUS受け取ったときに上記状態なら指定されたところにチェックしにいくとか
167デフォルトの名無しさん:2006/10/16(月) 09:25:28
OnChangeかOnExitの時に、
Cancel=Falseなら、Combobox.setfocus
168デフォルトの名無しさん:2006/10/16(月) 10:42:34
procedure TForm1.hogeExit(Sender: TObject);
begin
  チェック処理
  if エラー then
  begin
    Enabled := False;
    Application.ProcessMessages;
    Enabled := True;
    hoge.SetFocus;
  end;
end;
169デフォルトの名無しさん:2006/10/16(月) 16:57:31
TPrinterで印刷の集約指定等の設定変更できますか?
170デフォルトの名無しさん:2006/10/16(月) 17:36:53
印刷設定ダイアログ結果をWindowsに反映する方法教えて下さいでつ。
171デフォルトの名無しさん:2006/10/17(火) 01:33:57
>>166
ありがとうございます。
WM_KILLFOCUSでも同じでした。

>>167,168
ありがとうございます。

TComboBox の派生クラスに OnValidate イベントを実装したいのです。
172デフォルトの名無しさん:2006/10/19(木) 10:09:05
DoExitをオーバーライドするのはどうですか?

procedure TMyCombo.DoExit;
var
  Cancel: Boolean;
begin
  if Assigned(FOnValidate) then begin
    Cancel := False;
    FOnValidate(Self, Cancel);
    if Cancel then begin
      SetFocus;
      Exit;
    end;
  end;

  inherited;
end;
173デフォルトの名無しさん:2006/10/19(木) 10:47:13
Delphi7
SQLServer2000 使用です。

exceptにて、EDatabaseErrorが発生した場合に、
そのエラーNoを取得したいのですが、どのように書けばよいのでしょうか?
現時点では下のように書くところまでやりました。

except
on E: EDatabaseError do
begin
Result := False;
end;
end;
174デフォルトの名無しさん:2006/10/19(木) 11:09:58
>>173
いろいろ考えられるね。
・E.MessageにエラーNoが入ってるならそこから抽出する。
・E.ErrorNoみたいのがあるならそれを使う。
・SQLServer2000にGetLastDBError見たいな関数があるならそれを利用する。
175デフォルトの名無しさん:2006/10/19(木) 11:19:34
>>173
BDE使ってるならEDBEngineErrorでcatchすれば
エラーの詳細が取れるけど。
どうやって接続してるの?
176173:2006/10/19(木) 11:24:15
>>174
すみません、もっと根本的な問題だったようです。
やりたいことは、レコードロックによるタイムアウトエラーを取得したいのですが、
タイムアウトはEDatabaseErrorではないようです。

タイムアウトはEDatabaseError以外のどのExxxErrorでとれるのでしょうか?
177173:2006/10/19(木) 11:25:55
>>175
データモジュールにADOConnectionを貼り、ADOQueryで実行しています。
178デフォルトの名無しさん:2006/10/19(木) 11:35:44
>>176
そこまで細かいことは自分で調べちゃった方が早くね?
179デフォルトの名無しさん:2006/10/19(木) 11:46:42
>>176
on E: Exception で捕まえて、E.ClassNameを調べる
180173:2006/10/19(木) 15:30:24
>>178、179
ありがとうございました。
調べたところ、EOleExceptionと出ました。

181デフォルトの名無しさん:2006/11/04(土) 19:10:27
SyncObjsの中にあるTCriticalSectionですが、
EnterとAcquire、LeaveとReleaseの違いは何ですか?
いろいろ試した限りでは同じ処理に見えるのですが・・・
182デフォルトの名無しさん:2006/11/04(土) 22:59:27
>>181
ヘルプ見た?
その上で動作が同じだと判断するなら同じなんです
深く考えすぎないほうが良いかと
183デフォルトの名無しさん:2006/11/06(月) 22:23:11
>>182
TCriticalSectionのページに行こうとしても、
リンクがみつかりません って出るんですよ
無料のDelphi6だからかな? まぁ気にしないことにします
184デフォルトの名無しさん:2006/11/07(火) 11:13:41
QuickReport印刷内容をビットマップ(Jpegでもおk)に落とす方法教えて下さい。
185デフォルトの名無しさん:2006/11/07(火) 18:24:07
そういうプリンタドライバがあるよ
186デフォルトの名無しさん:2006/11/23(木) 13:53:16
リレー動作のプログラムなんですが64個のリレーを
チェックボックスに分けて選んでリレーを
ON/OFFしたいんですが

procedure TForm1.Button1Click(Sender: TObject);
begin
Relay[Time]:=True;
Time:=Time+1;

RelayChange;
end;

これからどう増やせばいいでしょうか?
どうかよろしくお願いいたします。
187デフォルトの名無しさん:2006/11/23(木) 20:25:23
>>186
日本語でおk
188デフォルトの名無しさん:2006/11/25(土) 17:27:49
IsDelphiで、このソフトが、Delphi製とでるのですが、
http://www.highdots.com/css-tab-designer/
オフィスっぽいGUIは、どんなコンポーネントを使っているんでしょうか?
189188:2006/11/25(土) 17:28:27
すみません。超初心者スレと間違えました(汗
190デフォルトの名無しさん:2006/12/25(月) 17:35:38
コンストラクタ内で例外を発生させるのってまずい?

自作クラスのコンストラクタの引数で作業フォルダのパスを指定して
フォルダが存在しなければ作成ってのをやろうと思うんだけど、
try〜finallyの手前でCreateすると例外が発生したときに例外を捕まえられないし
try内の先頭でCreateするとコンパイルで「初期化されていない可能性があります」と警告が出る。

コンストラクタは内部変数の初期化だけにしておいて
作業フォルダのパス指定は別メソッドにしておいたほうがいいのだろうか・・・
191デフォルトの名無しさん:2006/12/25(月) 19:14:46
>>190

try
 Create
 try
  hoge
 finally
  hoge
 end;
finally
 hoge
end;
192デフォルトの名無しさん:2006/12/29(金) 14:20:58
>190
Delphiにおいてはコンストラクタ内で発生して捕捉されない例外は
コンストラクタの失敗を意味する。
193デフォルトの名無しさん:2007/01/06(土) 19:54:05
hosyu
194デフォルトの名無しさん:2007/01/27(土) 03:40:04
2chブラウザのJaneみたいな動かせるメニューバーってどうやって作ったらよいのでしょうか。
195デフォルトの名無しさん:2007/01/27(土) 03:58:26
>>194
TCoolBar のバンドの .Control に TToolBar 設定して、
TToolBar.Menu に TMainMenu 設定。
196デフォルトの名無しさん:2007/01/31(水) 17:58:13
Bitmap画像をレイアウト部分はコーディングでなくてポトペタで作成したいのですが、
良い方法はありますか?

QuickReportで良いのですがQuickReportは汎用画像出力が出来ないので...
197196:2007/01/31(水) 19:05:07
そういう機能をレポーティング コンポーネントって言うらしいですね。
でもWin32用が無いお。
198デフォルトの名無しさん:2007/01/31(水) 23:11:14
>196
日本語でおk
199デフォルトの名無しさん:2007/01/31(水) 23:15:30
グラフィックソフトとか、ワープロでつくるようなをDelphiでやりたいんじゃないの?
で、最終的に、印刷じゃなくて、画像にしたいと。
200デフォルトの名無しさん:2007/03/02(金) 07:58:21
.netを普及させる方法を思いついた!
win32に、WCaption: WideString みたいなメンバを追加して
さらにくそでかく遅いバイナリしか生成できなくする。
これなら.netでいいや、ってなりwin32死滅。
201デフォルトの名無しさん:2007/03/02(金) 16:54:35
日本語でおk
202入門きぼん:2007/03/18(日) 23:52:34
 すみません。教えて下さい。
DelphiTurboExplorerを、サイトからDLして使用したいと考えているのですが、
ユーザー登録をすませても、DLページに行けずに困っています。

それと、フリーのデーターベースであるFirebirdと
繋げられるのでしょうか?
やはり製品版でないと無理なのでしょうか?

自分は、単純に初心者向けプログラムである。
CDやDVDの在庫管理アプリを作りたいだけなんですが、
自分の労力以外は、極力フリーで作りたいと思っています。
可能でしょうか?

宜しくお願いします。
203デフォルトの名無しさん:2007/03/19(月) 00:54:43
204デフォルトの名無しさん:2007/03/19(月) 01:06:50
>>203
The page cannot be found
205デフォルトの名無しさん:2007/03/19(月) 06:01:06
206デフォルトの名無しさん:2007/03/19(月) 11:33:22
>>204,205

HTTP Error 404 - File or directory not found.
207デフォルトの名無しさん:2007/03/19(月) 20:46:50
208202:2007/03/19(月) 21:55:11
>>207

すみません。
やはりHTTP Error 404 - File or directory not found.になります。

みなさん、ありがとうございました。
残念で、悲しいですが、すみませんがDelphiあきらめます。
209デフォルトの名無しさん:2007/03/19(月) 22:07:23
210デフォルトの名無しさん:2007/03/20(火) 00:22:27
>203 >205 >209は普通に繋がるね。
211デフォルトの名無しさん:2007/03/21(水) 07:19:26
普通につながるけど?
212デフォルトの名無しさん:2007/03/21(水) 23:56:26
条件文がたくさんあって、それらを同じ処理するときはどうしたらいいですか?
ifのあとに条件をズラーッとandでくっつけるしかないのでしょうか?
例えばxが1 3 5 6 7 10・・100と不規則なときに、一定の動作をさせたいです。
213デフォルトの名無しさん:2007/03/22(木) 00:14:26
case x of
1,3,5,6,7,10,100: 〜〜';
else
〜〜;
end;
214デフォルトの名無しさん:2007/03/22(木) 07:13:44
if x in [1,3,5,6,7,10..100] then XX;
ってのもあるよ
215デフォルトの名無しさん:2007/03/22(木) 14:14:54

二次元配列があり地図のようになってるとします。

その時に●から一番近い5(複数ある)への経路を求める問題。
マスは30*30
●は(16、16)
0は通れる、1は通れない、4はいやな人
で、5の周りに4がいた場合それは目的の5にはなりません。

000000000000000000000000000000
000000000000000000000000000000
000000111100000000050000000000
000000001100000000000000000000
000000000100541110000000000000
000000000000111111000000000000
000000000000000000000000000000
001100000000000000000000000000
00000000000000●000000000000000
000100000000000000000000000000
000100000000000111111110000000
000000000000000000000000000000
000000500000000000050000000000
000000000000000000000000000000
000000000000000000000000000000
216デフォルトの名無しさん:2007/03/23(金) 12:23:28
>>215
2chのレス数じゃ無理w
試しに幅優先探索して書こうとしたら、600行超えたからやめたw
217デフォルトの名無しさん:2007/03/23(金) 17:39:42
>>215
たけしのコマ大かと思った・・・。

斜め移動はあり?
地形は固定?
障害物1等のオブジェクトは、定数?

つっこむ所が多々ありそうだなぁ。
218デフォルトの名無しさん:2007/03/24(土) 19:35:42
>>215
普通にA*でいいんじゃないの?

>>216
600行はありえん。
219デフォルトの名無しさん:2007/03/25(日) 00:12:27
>>217
俺は斜め移動無し、固定でMAPはファイルからそのまんま読み込んだ状態としたよ
んで、今の箇所から上下左右で自分の関数を呼び出して、再起関数にして探してった。
でもこれじゃ全数検索になってしまう。
こういうアルゴリズム習ったけどやり方有ってるか不明

>>218
A*って何?
220デフォルトの名無しさん:2007/03/25(日) 04:42:33
工場勤務でブルーワーカなのだが、明日から夜勤なので睡眠時間調整の
暇つぶしに >>215 をやってみた。5時間かかったお。

再帰呼び出しとかは使えないし分からんので、長めになっちゃった。
キュー(FIFO)をやってみようと思って、ポインタとか使ってみたけど訳分からん。

ttp://strawberry.web-sv.com/cgi/up/iuy/nm4383.zip.html
(フォームにボタン1個要)

だって、MC工作機械マクロ言語に再帰呼び出しとかポインタなんて無いよ orz
あ、でも、なんちゃってポインタは出来るかな? #(#10) な感じで。
221デフォルトの名無しさん:2007/03/25(日) 07:25:37
A Starでやれ
222デフォルトの名無しさん:2007/03/27(火) 02:25:05
昔Delphi6触ったときにはたしか標準でフォルダ選択ダイアログってなかったような気がするんですが

TurboExplorerにもなかったりします?
223デフォルトの名無しさん:2007/03/27(火) 06:53:37
SelectDirectoryなら昔からあったと思うが?
名前がセレクトフォルダじゃないからダメなの?
224デフォルトの名無しさん:2007/03/28(水) 09:12:04
Delphi6のSelectDirectoryはダイアログの表示位置がずれるバグがあるんだよな
225デフォルトの名無しさん:2007/03/28(水) 09:45:16
バグじゃないよ、たんに場所指定してないだけ。ML の過去ログやら、コンポ
で解決したのがわんさかあったけど、いまは知らない
226デフォルトの名無しさん:2007/03/28(水) 09:54:17
まあ、フォルダのD&Dに対応しとけば、みんなソレ使うから
SelectDirectoryはとりあえずあればいいやみたいなもんだし
227デフォルトの名無しさん:2007/03/28(水) 21:40:15
uses
FileCtrl;

procedure TForm1.Button1Click(Sender: TObject);
var
dir: string;
begin
MoveWindow(Application.Handle , Left ,Top ,0 ,0 ,False);
SelectDirectory('表題', '', dir);
Label1.Caption := dir;
end;
228215:2007/03/29(木) 09:06:36
>>220
遅くなったがサンクス!
ただ、速度おっそいなぁw
229デフォルトの名無しさん:2007/03/31(土) 10:40:58
保守
230デフォルトの名無しさん:2007/04/07(土) 19:52:37
現在BDEで作成されているものをFirebirdに簡単に変更できるものでしょうか
Firebirdはまだ触ったこともないし、BDEもそのとき玉々作ってみただけの
データベース素人ですが。
231デフォルトの名無しさん:2007/04/08(日) 13:26:52
>>230
どういう作りになっているのかにも寄るけど
簡単には無理じゃね。
232デフォルトの名無しさん:2007/04/08(日) 20:33:05
>>231
ありがとうございますm(_ _)m
やっぱ作り直しですか。
233デフォルトの名無しさん:2007/04/08(日) 20:57:31
いや、普通にコンポーネント貼り付けて作ってるなら
InterBase Data Access に変えるだけで問題ないだろし
そうでないなら、それなりに大変だろうってだけさ
234デフォルトの名無しさん:2007/04/08(日) 21:59:34
やってみまふ。
235デフォルトの名無しさん:2007/04/10(火) 13:29:14
ヒント: Firebird ODBCドライバ
236デフォルトの名無しさん:2007/04/10(火) 20:04:01
今しばらくは生きていけそうです
237疑問:2007/04/16(月) 02:52:02
なんでIntegerとかが予約語になっていないのでしょうか

var
Integer: string;
begin
Integer := 'Double';
Writeln(Integer);
end.
238デフォルトの名無しさん:2007/04/16(月) 08:03:01
Integerは予約語ではないけど定義済の型名だから
変数として使うと、
使った後整数型の定義とか、型変換とかで困ってしまうよ

他の型名とか自分で定義する型名も同じ事情があるよ。
239デフォルトの名無しさん:2007/04/16(月) 16:19:27
回答になってねぇw
240デフォルトの名無しさん:2007/04/16(月) 23:21:03
>>237
なんでだろ。
Windows.hとかのCからコンバートしたときのための兼ね合い?
似たようなので、引数でも例外あったような
241名無し@沢村:2007/04/17(火) 00:10:20
おみゃーらー♪
Delphiはつまらんぞー!
おみゃーたー、『肥えた語』つー言語があるの知ってる?
おりは知ってるよ。
おりがつくった言語よ。これからh『肥えた語』の時代よ。
URLはここよ↓
http://www.geocities.jp/hontamagod/
感想を頼むなー♪
242デフォルトの名無しさん:2007/04/23(月) 22:52:08
JEDI がDelphi2005にインストールできません。
以前入れたときは確か、すんなり入ったのですが。
..\JEDI\jvcl\run\JvJVCLUtils.pas(7359) エラー: E2010 'Char' と 'string' には互換性がありません
..\JEDI\jvcl\run\JvJVCLAboutForm.pas(115) 致命的エラー: F2063 '..\..\run\JvJVCLUtils.pas' ユニットはコンパイルできませんでした
ほかにも出てきます。
pas は秀丸では欧文フォントで文字化けなしに読めたんですが「TM」とかの特殊文字が
○株みたいに扱われているんでしょうか、Shift-Jis ではChar扱いしてもらえないようです。

OSは Vista
D5 にはインストールされています。
m(_ _)m
243デフォルトの名無しさん:2007/04/23(月) 23:02:28
せめてバージョンくらい書こうよ・・・
244デフォルトの名無しさん:2007/04/23(月) 23:05:38
すんません、JVCL320CompleteJCL197-Build2172.zip でした。
245デフォルトの名無しさん:2007/04/23(月) 23:07:22
なんでそんなに古いのを入れようとしてるの?
246デフォルトの名無しさん:2007/04/23(月) 23:17:26

そんなに古いのー?
247デフォルトの名無しさん:2007/04/23(月) 23:18:12
すみまそん。
しばらくD5で使ってたのでそれをそのままフォルダからインストールしようとしてました。
248デフォルトの名無しさん:2007/04/23(月) 23:19:48
それだとD5でコンパイルされたファイルと混じっておかしくなるんじゃない?
249デフォルトの名無しさん:2007/04/23(月) 23:28:30
やっぱそうですか。
はき出す場所が違うからOKだと思っていたのですが、
とりあえず2005には最新版を入れてみます。
250デフォルトの名無しさん:2007/04/24(火) 20:28:58
JVCL331CompleteJCL199-Build2551.zip
入れてみましたが状況は変わりませんでした(x.x)
251デフォルトの名無しさん:2007/04/24(火) 21:14:09
前にインストールしたときのゴミが残ってるんじゃないかね。
とりあえずJcl*.bplとJv*.bplを削除してみたら?
252デフォルトの名無しさん:2007/04/24(火) 21:28:50
ってことは皆さん問題なく入れていたということなんでしょうね。
結局使わない部分っぽかったので修正して無理矢理入れてしまいました。

JvgUtils.pas
function Transliterate(const Str: string; RusToLat: Boolean): string;
コメントアウトで Result := Str;

JvDBGrid.pas
FCharList :=
['A'..'Z', 'a'..'z', ' ', '-', '+', '0'..'9', '.', ',', Backspace{,
'e', 'e', 'e', 'e', 'o', 'o', 'u', 'u', 'a', 'a', 'a', 'i', 'i', 'c'}];
下半分をコメントアウト

JvJVCLUtils.pas
// Text: Char;
Text: string[2];
Char を string に変更

JvStrToHtml.pas
特殊文字 27 個コメントアウト

ありがとうございましたm(_ _)m
253デフォルトの名無しさん:2007/04/24(火) 21:35:10
Delphi5って、サポートされてたっけ?
254デフォルトの名無しさん:2007/04/24(火) 22:06:55
されてる。
255デフォルトの名無しさん:2007/04/24(火) 22:44:22
JCL/JVCLって昔試したときマルチバイト文字に対応してなかったような記憶が
あったようななかったような・・・
256デフォルトの名無しさん:2007/04/24(火) 23:15:42
コンポーネントによってされてたりされてなかったりだね。
257デフォルトの名無しさん:2007/06/18(月) 23:36:07
コンポーネントがDesignideを使っててコンパイルできなくなるとかの
問題でずっと悩まされてます・・・
古いIDE組み込み型のコンポーネントって
新しくなるとコンパイルが通らなくなる・・(泣

Designideで悩まない方法はありますか?
258デフォルトの名無しさん:2007/06/19(火) 05:33:00
D6パーではHelpに書いてある。互換性の問題
259ミ,,゚Д゚ミノ ◆A6VzDeLphI :2007/06/19(火) 14:05:42
こんなんでよい?

-- DsgnIntfが見つからない場合 --

コンポーネントをインストールするときに
DsgnIntfが無いといってエラーになる場合があります。

Delphi5からDsgnIntf.dcuのコンパイル済みユニットが
無くなったからこのような現象が起きるそうです。

Delphi6からはDesignIntfという名前に変更されています。

DsgnIntf Unit はおもに、コンポーネントエディタやプロパティエ
ディタを作るときに利用するものです。

「環境オプション/ライブラリパス」に
$(DELPHI)\Source\Toolsapi
を追加してみましょう。

解決するはずです。

本当は、この方法を用いるとプロパティエディタのコードが
実行ファイルに含まれてしまうので、そういう書き方をしている
コンポーネントが悪いので、自分の作る物ではこういう問題が発生しないように
気をつけましょう。

参照────────────────────
[Delphi:42979] Delphi5 変更点
http://www2.big.or.jp/~osamu/Delphi/browse.cgi?index=42979
260デフォルトの名無しさん:2007/06/21(木) 20:49:16
Delphi7を使ってます。
designide.dcuが見つからないという
エラーが出てしまいます・・orz
261デフォルトの名無しさん:2007/06/21(木) 22:17:40
そうですか
262デフォルトの名無しさん:2007/06/28(木) 07:12:16
TUIWebBrowserで読み込んだFlash上の入力ボックスで
BackSpaceキーは効くものの
Enterキーがきかないのですが
効くようにすることは可能でしょうか?

263デフォルトの名無しさん:2007/06/30(土) 08:58:54
>>259
ありがとうございます。
いろいろいじっていて
実行時パッケージでない方でビルドできました。
264デフォルトの名無しさん:2007/06/30(土) 22:34:43
ナッキーのdelphi奮戦記面白い
間違いなくナッキーは淫乱

ペイントソフト楽に作れ杉
265デフォルトの名無しさん:2007/07/04(水) 09:36:13
TShapeじゃなくて、ラインをペタペタ貼るコンポーネントありましたっけ?
266デフォルトの名無しさん:2007/07/04(水) 09:44:58
直線だけなら OnPaintに Canvas.MoveTo Canvas.LineToで簡単に引けるから需要無いかと
267デフォルトの名無しさん:2007/07/04(水) 09:49:35
Delアメ猫だったかの人がフサギコと絡んで、マウスで直線を動かせるようなコンポーネントの原型を作って
どっかにアップしてたように思うのだけど、今検索してもみつからないな
268265:2007/07/04(水) 09:55:01
>>266
やっぱ、そうですか。

>>267
>マウスで直線を動かせるようなコンポーネントの原型を作って
欲しいもの、これですorz
269ミ,,゚Д゚ミノ ◆A6VzDeLphI :2007/07/04(水) 10:54:14
HDDに、原型のやつがあったよ。
検索に1時間ほどかかってしまた。
270265:2007/07/04(水) 11:00:48
>>269
デルフサギコ様、うpをお願いしますorz

コンポーネントのソースは読めるので、
手直しとか派生くらいできますし、
使いこなせると思いまつ。
271ミ,,゚Д゚ミノ ◆A6VzDeLphI :2007/07/04(水) 11:00:59
実行時にマウスで動かせた矢印コンポもあったような気がするんだけど
手元にあるのはShapeの矢印版っすね。

majunarrowexとか、viArrow.pas
って名前だけど、googleではでないみたいだ。

とりあえずうpろうか。午後くらいでよい?

272265:2007/07/04(水) 11:03:42
>午後くらいでよい?

ずっと待ってまつ。

希望では、以下の機能も欲しかったり。。。
・マウスで動かせる
・マウスで長さが変えられる
・移動や長さが変ったときに、Changeイベント
・矢印をオフにして単なるライン化
273ミ,,゚Д゚ミノ ◆A6VzDeLphI :2007/07/04(水) 11:09:05
http://delfusa.main.jp/compo/majunarrowex.zip

いや、はようpっとくよ。

もっといいものをつくってくれた人もいたきがするんだが...

あの時期てきにホットゾヌの作者の中の人だった気がするが
確証無しで。

このコンポ、いったい誰作なんだろう...中国の方かしら。
274ミ,,゚Д゚ミノ ◆A6VzDeLphI :2007/07/04(水) 11:11:48
設計時なら
>・マウスで動かせる
>・マウスで長さが変えられる


>・移動や長さが変ったときに、Changeイベント
わからない。というか、Resizeイベントはなさそうだから
どっちにしても自作だね。

>・矢印をオフにして単なるライン化
なぜか出来ないみたいだ。
改造すれば簡単でしょう。

275デフォルトの名無しさん:2007/07/04(水) 11:20:24
276265:2007/07/04(水) 11:27:46
>>274
>>275

サンクス!

両方ダウソしました。
どっち使うか決めなきゃ。。。
277デフォルトの名無しさん:2007/07/04(水) 11:53:46
>>273
・1個だけ
・設計中のみ変更可能
・コードはシンプル

>>275
・複数のラインやオブジェクトが1コントロールに入る
・フォームにフックさせて最下面に無理やり描画するのも出来る
・実行中に移動等も可能
・出来る事が大きいだけに、けっこう複雑
278265:2007/07/04(水) 11:56:32
>>277
サンクス

どっちもクセ多杉orz

やりたいことは275なんだけどメッセージフック&インライン汗と、
何かあったとき対処できるかなとドンビキ。

273に275のコード混ぜるかなぁ。。。
279デフォルトの名無しさん:2007/07/04(水) 12:06:35
>>275 には コンポが2つ入っていて、片方は TGraphicControl でメッセージフックは使ってない。
インラインアセンブラの部分はたぶん変更しなくていいいだろう。

ただ、文字を回転させるのに端ではなくて 真中というのは、チョットとまどった

あと、DesignProcでマウス応答全部やってるので
右ボタンメニューに対応させるとか、ココでやらんとあかんのかも
280デフォルトの名無しさん:2007/07/04(水) 12:50:49
アセンブラの部分は 浮動小数点に置き換えたらいいんじゃないの?
iHypot -> math.Hypot で代用
MulSubDiv はコメント通りに浮動小数点で計算させる
281265:2007/07/04(水) 13:02:06
汗は汗のままでも良いです。

>あと、DesignProcでマウス応答全部やってるので

この作り、拡張性大丈夫かなぁ。
282デフォルトの名無しさん:2007/07/04(水) 13:11:00
WndProc で inherited してるから大丈夫じゃないの?
気になるなら、それぞれ分けたらいいだけで

ひとつはデザイン中だけ処理させる判定を1箇所にまとめたかったのと、
TMyFormDraw と TMyDraw の両方で使いたくてコピペが楽だからそうしたんだろな
283265:2007/07/04(水) 13:19:59
>WndProc で inherited してるから大丈夫じゃないの?

了解でつ。

このコンポってStringsの中身をLines1つにすれば1本の線になるんですね。
動きも面白いし、機能は完璧。

最期の悩みは、このまま使うか、Linesプロパティを削除して、1本の線のコントロールとサブセットコントロール化するか。。。
284Delフサギコ ◆A6VzDeLphI :2007/07/04(水) 13:21:48
 ∩ ∩
 ミ ゙''゙〜     ________
 ミ∧,,∧   /
 ミ,,゚Д゚彡 < おお。あったですかぁ。
 U U    \あっててよかったDelWiki新
           ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
こういうのって、コンポインストールしないとサンプルプログラムが
コンパイルできない形になってて、非常に面倒よね〜
コンパイルしたsample.exeを是非に付けて欲しいもので。
まあ、漏れも付けてないんだけど。

それにしても、MyDraw....すごすぎだな。
(って何年も前にも言った感じがとてもデジャブー)

>>283さん
贅沢な悩みだな。(w

みつかってよかったね。
285265:2007/07/04(水) 13:25:23
>>284
有難う。

デルフサさんて、一時期見かけなかったような。。。
286デフォルトの名無しさん:2007/07/04(水) 13:27:30
MyDraw1.Lines.Add('LINE');
で実行中に、線を増やせるね。
287|Д゚彡 ◆A6VzDeLphI :2007/07/04(水) 13:30:56
いつもひっそりと
草葉の陰から見つめているんですよ。
288デフォルトの名無しさん:2007/07/04(水) 15:13:17
>>コンパイルしたsample.exeを是非に付けて欲しいもので。
そんな物、ダウソして実行する馬鹿がいたら是非お目にかかりたい物でwwww

289デフォルトの名無しさん:2007/07/04(水) 18:28:34
たくさんいますよ
290デフォルトの名無しさん:2007/07/04(水) 19:37:14
何か呼ばれた気がしたので来ました。
291デフォルトの名無しさん:2007/07/04(水) 20:00:09
デモには、実行ファイルをつけようよ・・・
292デフォルトの名無しさん:2007/07/04(水) 21:15:30
http://delwiki.info/?%A5%B3%A1%BC%A5%C9%C1%D2%B8%CB%2FDraw%A5%B3%A5%F3%A5%DD%A4%CE%B8%B6%B7%BF
ココに、サンプル書いてみた。

右ボタンで削除出来るようにコンポ側に少し追加もした

でも、コレ、誰がItemのオブジェクト削除してくれてるんだろ?
テキストを変更してもメモリリークしないんだろか?
293初心者++:2007/07/05(木) 00:11:28
いきなり割り込んで書き込みます、すいません。 
初心者です。データベースの接続で困ってます。
TTableのDataBaseNameで
サンプルのDBDEMOSでは無事接続できるんですが、
ほかのアリエス名(MSAccess,Excel...)では
ログインダイアログでユーザー名 パスワードをきかれ、
先へ進めません。どなたか教えてください。

  Turbo Delphi for wind32
OS : wind2000です。
294初心者++:2007/07/05(木) 00:15:55
いきなり割り込んで書き込みます、すいません。 
初心者です。データベースの接続で困ってます。
TTableのDataBaseNameで
サンプルのDBDEMOSでは無事接続できるんですが、
ほかのアリエス名(MSAccess,Excel...)では
ログインダイアログでユーザー名 パスワードをきかれ、
先へ進めません。どなたか教えてください。

  Turbo Delphi for wind32
OS : wind2000です。
295デフォルトの名無しさん:2007/07/05(木) 16:25:33
296デフォルトの名無しさん:2007/07/05(木) 16:38:53
こんにちは。Delphi製ブラウザコンポーネント
(TUIWebBrowser)のFlash上の
テキスト入力コントロールでEnter入力が
できない問題について質問した者です。

RADながらWin32APIとの親和性,
カスタマイズ性が高くアセンブラも使え、
デフォルトコントロールの綺麗さなど、
色々優れた点がある中で、生産コストを下げる目的で
Delphiを選ぶときについて意見をお伺いしたいです。

ブラウザを作る際に、
まずTWebBrowserを使ってみて、入力に関する
致命的なバグがあったために、そのバグを修正した
TUIWebBrowserを使ったのですが、
そこでまた入力バグに出会ってしまい、
これらの問題が、VC++での開発でははじめから起きない
問題であったために、VC++で作り直すべきか考えています。

流通しているDelphi製のブラウザ系ソフトにも同じバグが見れました。
しかし、作りやすいので本当はDelphiを使いたいです。

Delphiで、資料やバグフィクス情報が無く、
節約できるはずの時間が、逆に冗長になるケースを考慮したとき、
そういった面を考えても、Delphiの生産性を活用するためには
どういったことが必要になりますでしょうか。
Delphi開発の先輩である皆さんに
お考えをお聞かせ願いたいです。

297デフォルトの名無しさん:2007/07/05(木) 17:19:12
>そういった面を考えても、Delphiの生産性を活用するためには
>どういったことが必要になりますでしょうか。

VCLコードを読んで理解する事。
298デフォルトの名無しさん:2007/07/05(木) 17:46:02
VC++で解決出来るんなら、 それを見て自分で修正すればいいんじゃないの?
でも、たぶん VC++でも色々拡張しようとすると、いろんな問題が出ると思うよ。
他人の作ったコードをソース無しに使おうってんだから当然だ。

TWebBrowser ならともかく TUIWebBrowser は使ってる人が少ないだろうし
さらに Flash となると、問題に答えてくれる人は少ないと思うよ。

>>262 の問題は メッセージポンプの所で流れてるメッセージ
を(Application.OnMessage とかで)見て、なんとか出来ないか考えてみたら?
299デフォルトの名無しさん:2007/07/05(木) 17:47:05
ActiveX や OLEControl の制御は VCL のソースを読んでも、個人レベルでは
解決は難しい。TWebBrowser やその派生コントロールは、Delphi で簡単に
使えるように見えるが、Delphi での細かい制御が一番面倒なもののひとつ。
VC++ でできるなら、そっちでやればいいでしょう。
300デフォルトの名無しさん:2007/07/05(木) 17:49:23
いまさらだがMLに投げてみりゃよかったのに。
301デフォルトの名無しさん:2007/07/05(木) 17:54:18
まぁなんでもMLに投げてみりゃいいんだよな。
302デフォルトの名無しさん:2007/07/05(木) 18:45:41
Delphi TWebbrowser Enter ぐぐれかす
303デフォルトの名無しさん:2007/07/05(木) 19:02:10
>>302
TWebBrowserのバグを回避した
TUIWebBrowserでFlashActiveX上のコントロールを経由した
ときだけ起こるって言ってるし
TWebBrowserの有名な入力バグは普通もう回避してるだろう。
304デフォルトの名無しさん:2007/07/05(木) 22:25:45
コード量が短いので>>273を参考にして勉強中のものです。

そこで質問です。>>273
.dfm に記述されたコードを .pas側で実行時に自動生成する
形に書き直すと、どういう風になりますか?じぶんはテキスト
エディタ派なのでコードの編集はできればテキストエディタで
やりたいとです。。。

プロジェクトを立ち上げると、

フォーム作成中にエラーが発生しました。(中略)
クラス TviArrowが見つかりません
とか出て上手くゆかなかったとです。

viArrow.pas をプロジェクトに追加して
プロジェクトを再構築。でコンパイルしたら実行
ファイルのほうは簡単にできてちょっと感動したとです。ひろしですひろしですひろしです
305デフォルトの名無しさん:2007/07/05(木) 22:39:05
306304:2007/07/05(木) 23:07:33
>>305
1000行越えのコードの解読は厳しかったとです orz
307デフォルトの名無しさん:2007/07/06(金) 07:39:12
>>304
.dfm にはコンポーネントのプロパティが入っている。
実行中に位置やサイズを変更したいなら、 Left, Top, Right, Bottom をコードで弄る必要がある

>>305のは、コンポーネントを登録しなくてもいいように作られている
位置やサイズは文字列で与えてるようだ
308Delフサギコ ◆A6VzDeLphI :2007/07/06(金) 09:35:55
    ∧,,∧  オハヨ
   ミ,,゚Д゚彡
    ミ つ旦)~~
  〜と,,,~),,~)  旦~~
]]]]]]]]]]]]]]]]]]]]]]]]]]]]

自動生成する形になってて、いいっすね
>>305さん

どうせなら、バイナリも含んじゃえばいいのに。(w
IDE起動するのメンド(い人もいるかもね。)

>>307さん
MyDrawコンポーネントは単体で
たくさんの矢印や
矩形を処理するようになっていて
その位置を元々TStrings系でもっているのですよ。

309デフォルトの名無しさん:2007/07/09(月) 18:36:58
TFormとかTImageってCanvasプロパティがありますよね。

TScrollBoxみたいにCanvasプロパティの無いコンポーネントにお絵かきするには、
どうすれば良いですか?
310デフォルトの名無しさん:2007/07/09(月) 22:34:16
1.Canvasがある他のコンポーネント(TImageとか)を貼る。
2.TWinControlから派生したものであれば、さらに派生させてCanvasプロパティをpublicにする。
ん〜これしか思いつかなかった。もう少し具体的にやりたいことを書けば、もう少しまともな
回答がつくと思うよ。
311デフォルトの名無しさん:2007/07/09(月) 22:42:34
var
 Canvas: TCanvas;
begin
 Canvas := TCanvas.Create;
 try
  Canvas.Handle := GetDC(hoge.Handle);
  try
   Canvas.TextOut(0, 0, 'HOGE');
  finally
   ReleaseDC(hoge.Handle, Canvas.Handle);
  end;
 finally
  Canvas.Free;
 end;
end;
312309:2007/07/10(火) 08:56:46
サンクス>>310 >>311

具体的には、
TScrollBoxの上にTImage、その上にMyDrawを乗せています。

それで、MyDrawの図形をマウスでいじると、
TImageが物凄くチラツクんですよね。

それで、TScrollBoxにもTImageの図形描いておいてやろうかな、と。
313309:2007/07/10(火) 09:35:54
TScrollBoxをやめて、TPanelにしてDoubleBufferdをtrueにしたらチラツキなくなりました。
314デフォルトの名無しさん:2007/07/10(火) 22:26:17
現在おされているキーをセンスする関数みたいなのはないのでしょうか?
315デフォルトの名無しさん:2007/07/10(火) 22:41:54
windows.getkeystate
316デフォルトの名無しさん:2007/07/10(火) 23:14:11
>314
つ GetAsyncKeyState
ttp://msdn.microsoft.com/library/ja/jpwinui/html/_win32_getasynckeystate.asp

>315
現在押されている、ということであればGetKeyStateは不適切。
317デフォルトの名無しさん:2007/07/11(水) 22:17:05
ありがとうございます。

windowsの世界だと int 21h(AH=8) みたいなのはないんでしょうか。
シーラカンスですんません。
318デフォルトの名無しさん:2007/07/12(木) 00:08:04
意味不明。何をしたいのかを具体的に。
たとえばOnKeyPressとかTForm.KeyPreviewあたりは幸せになれるかも?
319デフォルトの名無しさん:2007/07/12(木) 06:53:33
ごめんどうおかけします。

やりたいのは、コンソールアプリケションで、
enter (1-9 or q):
みたいなプロンプトをだして、一文字キーボードから入力してもらい、
入力された文字で処理を分岐させようというだけです。
つまりread(c); でreturn を入れなくても一文字読み込みたいというだけです。
320デフォルトの名無しさん:2007/07/12(木) 08:00:06
コンソール入力はwindows側でバッファされてるから、イベント入力を使う必要がある
GUIアプリの例だと、ボタンとメモと、タイマーを貼り付けて
procedure TForm1.Button1Click(Sender: TObject);
begin
 AllocConsole;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
 pirBuffer: INPUT_RECORD;
 hdl: THandle;
 lpcRead: DWORD;
begin
 hdl := GetStdHandle(STD_INPUT_HANDLE);
 if integer(hdl) < 0 then
 exit;
 while ReadConsoleInput(hdl, pirBuffer, 1, lpcRead) do
  with pirBuffer do case EventType of
    KEY_EVENT: //Event.KeyEvent
     if Event.KeyEvent.bKeyDown then
      Memo1.Lines.Add('KEY=' + Event.KeyEvent.AsciiChar);
    _MOUSE_EVENT: //Event.MOUSE_EVENT
     with Event.MouseEvent do
      Memo1.Lines.Add(format('%5d %5d ', [dwMousePosition.x, dwMousePosition.y]));
    WINDOW_BUFFER_SIZE_EVENT, //Event. WindowBufferSizeEvent
     MENU_EVENT, // Event. MenuEvent
     FOCUS_EVENT: //Event.FocusEvent
   end;
end;

コンソールアプリだと、このタイマーの部分でキー入力があるまで無限ループする関数を書く事になるだろな
321デフォルトの名無しさん:2007/07/13(金) 07:16:47
ありがとうございます。
これを参考にコンソール用に書き直してみます。
322296:2007/07/13(金) 17:53:11
お世話になります。
ブラウザコンポーネント上の
FlashActiveX上の入力問題で質問した>>296です。
みなさんありがとうございました。
時間がかかりましたが、
なんとか解析して自己解決できました。
これでDelphiのままいけそうです。
323デフォルトの名無しさん:2007/07/16(月) 03:42:15
>>322
解析結果を書いてくれるとみんなが幸せになれるかもよ
324デフォルトの名無しさん:2007/07/28(土) 20:12:22
>>323
スクリプトによって書かれて配置される
FlashActiveXが、1ページに2つ以上あるときに、
従来の方法で
2つ目のものにメッセージを送れていない場合があるようです。
ウィンドウを細かく検索することで回避しました。
325デフォルトの名無しさん:2007/09/17(月) 21:48:04
前スレうp頼む
326デフォルトの名無しさん:2007/09/17(月) 21:56:24
っ 前スレうp
327デフォルトの名無しさん:2007/09/17(月) 22:06:24
神キタ━━━━━━(゚∀゚)━━━━━━ !!
楽しみに待ってます。本当にありがとう!!
前スレの字句解析から意味解析のログ本当に勉強になったので
328デフォルトの名無しさん:2007/09/19(水) 19:02:18
EditのPopupMenuに自作PopupMenu1をセットしたら、
元々EditにあったPopupMenuが無くなりますよね。

そうじゃなくて、EditのデフォのPopupMenuに自作PopupMenu1を足すには、
どうしたら良いでしょうか?
329デフォルトの名無しさん:2007/09/19(水) 19:27:16
DPAPI(データ保護 API) を 使って パスワードを
OSに記憶してもらう方法とか有ったら知りたいのですがなかなか見つかりません。
マイクロソフトのページには

DPAPI は、以下の項目を保護するのに役立ちます。
• Web ページの資格情報 (たとえば、パスワード)
• ファイル共有の資格情報
• EFS (暗号化ファイル システム)、S/MIME、および他の証明書に関連付けられた秘密キー
• CryptProtectData() 関数を使用して保護されているプログラム データ
とあるのですが このDPAPIは単純に任意のパスワード等保護してもらえる機能として
捕らえていいのでしょうか 。 delphi7を利用しています。 どなたか情報いただけませんか。
330デフォルトの名無しさん:2007/09/20(木) 08:37:27
>>328 もヨロ!
331デフォルトの名無しさん:2007/09/20(木) 12:07:54
>>328
たぶん出来ない。
右ボタンメニュを出すには TrackPopupMenu を呼び出すわけで
エディットコントロールにはデフォルトのWM_RBUTTONUP内部でコレを呼び出してる部分があるのだろう

TrackPopupMenuを呼び出すにはhMenuが必要だけど、EDITでコレを入手する方法が見つからない。
親窓なら、GetMenuでhMenuを呼び出せるけど、小窓ではそれが出来ないから。
332デフォルトの名無しさん:2007/09/20(木) 12:38:35
そうですか(´・ω・`)ショボーン

>親窓なら、GetMenuでhMenuを呼び出せるけど、小窓ではそれが出来ないから。

親窓を取得したりできないですかね。

差し替えたPopupMenu1のイベントハンドラを実行すると、
EditのデフォルトのPopupMenuを開きなおしたり、
とかでも良いのですが。

333デフォルトの名無しさん:2007/09/20(木) 12:53:09
>>332 後半なら
var SaveMenu:TPopupMenu;
begin
 SaveMenu:=Edit1.PopupMenu;
 Edit1.PopupMenu:=nil;
  SendMessage(Edit1.Handle,WM_RBUTTONDOWN,Edit1.Left,Edit1.Height);
  SendMessage(Edit1.Handle,WM_RBUTTONUP,Edit1.Left,Edit1.Height);
 Edit1.PopupMenu:=SaveMenu;
end;

と、いったんメニューを外して、右ボタンを押して離してを送りつければ出るよ
334デフォルトの名無しさん:2007/09/20(木) 12:57:32
有難うございます。それでやってみます。(*`∀´*)
335デフォルトの名無しさん:2007/09/20(木) 13:28:00
メニューを外さなくても、直接小窓にメッセージを送ると出るみたい

var pt:TPoint;
begin
pt:=ClientToScreen(Point(Edit1.Left,Edit1.Height));
PostMessage(Edit1.Handle,WM_CONTEXTMENU,Edit1.Handle,pt.x+(pt.y shl 16));
end;
336デフォルトの名無しさん:2007/09/20(木) 13:49:46
thx! >>333 >>335

両方おk、でした。

TPointを指定するのメンドウだから、333でやるかも。

PopupMenu1のメニューの一つに編集っていうメニューを用意して、それだとデフォメニューをオープン、
という動作でカコヨクできました。
337デフォルトの名無しさん:2007/09/21(金) 20:03:36
>>326
ひょっとしてあたしを騙したの?
338デフォルトの名無しさん:2007/09/21(金) 20:47:23
勝手な思いこみ
339デフォルトの名無しさん:2007/09/22(土) 02:55:26
今からでるふぁい
340デフォルトの名無しさん:2007/09/22(土) 18:11:26
もう死んデルファイ
341デフォルトの名無しさん:2007/09/24(月) 00:52:44
みなさん
多言語化(日本語/英語)
をするときはどうしてますか?おしえてください
342デフォルトの名無しさん:2007/09/24(月) 00:58:53
>>341
TNT+dxgettext
343デフォルトの名無しさん:2007/09/24(月) 03:36:29
素直にリソースDLLウィザード。日本語/英語以外の言語サポートが必要ならTNTも併用。
344デフォルトの名無しさん:2007/09/24(月) 04:17:57
標準VCLって役立たずだな
345デフォルトの名無しさん:2007/09/24(月) 12:17:20
>>341
Delphiに国際化対応のツールが付属してるでしょ、
346デフォルトの名無しさん:2007/09/25(火) 07:52:39
61 名前:34[] 投稿日:2007/09/24(月) 19:13:21
お久しぶりです。TThreadでボヤいてた者です。
TThreadをプールして使い回してみたところ問題なさそうなのでこれで行くことにしました。
あとスレッドで処理中にフォームを操作するとCPU100%のまま帰ってこなくなる現象が出ましたが、
TThreadの方にpublicで作ったAnsiStringに渡した文字列が原因だったようで、
スレッドの変数をAnsiString.Unique()して参照を切り離してやったら問題無くなりました。
これから先に嵌る人が居るかもしれないので書いておきます。

改めてありがとうございましたorz

347デフォルトの名無しさん:2007/09/27(木) 14:25:29
みなさんありがとうございます。
>国際化、リソースDLL

こちらに書いてあることでしょうか?
http://www.wwlnk.com/boheme/delphi/tips/tec1550.htm
最後に書いてある、一度設定したらもう変更できないみたいな
ことが気になるのですが、
修正が入ったり、言語が変わると文字列の幅が変わるので
画面の調整も必要に思うんですが
みなさんどうしているのでしょうか?

何度も修正する場合
TNT+dxgettextが使われるのでしょうか。
348デフォルトの名無しさん:2007/10/04(木) 12:21:13
アプリ全体のフォントサイズを大きくするって簡単ですか?
349デフォルトの名無しさん:2007/10/04(木) 15:10:25
Formのフォントサイズをでかくすれば
その上に貼り付けたコントロールも一緒にでかくなる。
ParentFont参照。
ウィンドウキャプションとかはWindowsが描いてるものだから無理。
350348:2007/10/04(木) 15:20:04
サンクス>>349
351デフォルトの名無しさん:2007/10/04(木) 16:38:18
JPEG2000を表示する方法を教えて頂けないでしょうか?
352デフォルトの名無しさん:2007/10/04(木) 22:53:42
>>351
Susie Plug-in + SPIS
353デフォルトの名無しさん:2007/10/10(水) 11:38:53
実行中のexeのリストを取得するコンポはありまつか?
354デフォルトの名無しさん:2007/10/10(水) 14:59:41
すれ違い

>Delphi初心者が問題をコツコツと解きながらレベルアップするためのスレです。
355デフォルトの名無しさん:2007/10/10(水) 16:31:39
>>353
マジレスするとDelphiでは無理
356デフォルトの名無しさん:2007/10/10(水) 18:38:07
>>353
コンポは知らないけど
NtQuerySystemInformation
を googleさんに begin とか pas と and で聞いたら 教えてくれるんじゃないかな
357デフォルトの名無しさん:2007/10/10(水) 19:06:35
>>353
コンボはないけど、
多分、TookHelp関数を使えば割と簡単にできると思う。
具体的にはTHelp32.pasに宣言されている、
Process32FirstとProcess32Nextを使えばいいんじゃない。
358デフォルトの名無しさん:2007/10/10(水) 23:55:39
>>355
お前の持ってるでるふゃいではな。
359デフォルトの名無しさん:2007/10/11(木) 00:26:35
API使える言語ならどれでも出来る
逆にこれをライブラリ化してる製品ってないんじゃないかな
360Delフサギコ ◆A6VzDeLphI :2007/10/11(木) 01:04:52
   ∧,,∧   これつかってちょ。
  ミ,,゚Д゚彡 
   U  つ   
 @ミ  ミ    
   ∪''∪ 

DelFusa Library - Delphi OpenSource - DelFusa Floor
http://delfusa.main.jp/delfusafloor/opensource/delfusa_library_f.html

GetProcExeNameList
361デフォルトの名無しさん:2007/10/11(木) 05:28:29
おまいら、すれ違い

>Delphi初心者が問題をコツコツと解きながらレベルアップするためのスレです。
362デフォルトの名無しさん:2007/10/11(木) 06:37:28
問題
インチをセンチメートルに変換するプログラムを作って
細かい仕様は自由
ヒント:1in = 2.540cm 、StrToFloat
363デフォルトの名無しさん:2007/10/11(木) 07:36:26
program Project1;
{$APPTYPE CONSOLE}

function InchToMetre(Value:Double):Double;
const
  INCH_UNIT=0.0254;
begin
  Result := Value * INCH_UNIT;
end;

begin
  writeln(InchToMetre(0.050)); //12.7
  writeln(InchToMetre(0.045)); //7.62
  writeln(InchToMetre(0.030)); //5.56
end.
364デフォルトの名無しさん:2007/10/11(木) 07:36:56
嘘が書いてあるorz
365デフォルトの名無しさん:2007/10/11(木) 09:15:41
DelphiでJpeg2000を表示する方法を教えて下さいでつ。
366デフォルトの名無しさん:2007/10/11(木) 09:48:48
しつこい
367デフォルトの名無しさん:2007/10/11(木) 09:53:58
368デフォルトの名無しさん:2007/10/11(木) 11:44:07
DelphiでJpeg2000を表示する方法を教えて下さいでつ。
369365:2007/10/11(木) 11:51:18
368はニセモノでつ。









でも、実は未だに解決してなくて知りたかったりして。
370デフォルトの名無しさん:2007/10/11(木) 13:22:13
普通に>>367ので表示できたけど?
371365:2007/10/11(木) 14:23:02
サンクス>>370

実は自分もDel7出来ました。

が、実際の環境である、














C++ Builder 6だと上手くコンパイルできないんでつ><
372デフォルトの名無しさん:2007/10/11(木) 16:41:56
Delphiアプリのメインフォームのウィンドウクラスって、TApplication固定でしたっけ?
373デフォルトの名無しさん:2007/10/11(木) 19:19:37
でつでつ言うなよ
374デフォルトの名無しさん:2007/10/11(木) 22:14:07
でつな
375デフォルトの名無しさん:2007/10/12(金) 15:44:09
(a+3)^
ってある^はどういう意味?
376デフォルトの名無しさん:2007/10/12(金) 16:43:45
ObjectPascalの場合 後ろの^は ポインタの参照
C言語の *(a+3) と同じ
377デフォルトの名無しさん:2007/10/12(金) 17:52:24
なるほどサンクス
378デフォルトの名無しさん:2007/10/12(金) 18:39:09
よく見かける、
エディットボックスにファイルをD&Dしてそのパスを取得
はどのようにやればよいですか?
379デフォルトの名無しさん:2007/10/12(金) 19:29:56
質問はこちらにどうぞ
くだすれDelphi(超初心者用)その44
http://pc11.2ch.net/test/read.cgi/tech/1191657968/l50
380デフォルトの名無しさん:2007/10/13(土) 05:15:36
答えられんからって誘導とは酷いな!
381デフォルトの名無しさん:2007/10/17(水) 17:21:40
vb.netでそこそこは作れるレベルだけど、delphi始めようと思ったら最初に買うべき
本は何がいい?
それかどぼんみたく、そこだけ見ればそこそこのものは作れるようになるサイトか
382デフォルトの名無しさん:2007/10/17(水) 23:12:41
何を作りたいかだろ
ファイラ作りたいとか、MMO作りたいとか(スレがあっったりするが)
383デフォルトの名無しさん:2007/10/18(木) 08:44:22
ドトネトみたく環境設定も要らないし、コンポーネントも要るものはあるし。
いきなり始めて、躓いてから質問してみたら?
384デフォルトの名無しさん:2007/10/18(木) 15:17:32
VB2005はヘルプがすごく使いやすい
385デフォルトの名無しさん:2007/10/18(木) 15:30:47
ヘルプだけかよw

ネイティブアプリが作れるようになったら試しに触ってやるよ。
386デフォルトの名無しさん:2007/10/18(木) 23:24:20
ま、C#からやったらいいよ。DelphiもIDEは.NETが必要だし。
C#は良い本もヘルプもMSDNもWEBサイトも腐るほどあるし。
387デフォルトの名無しさん:2007/11/09(金) 01:23:20
Del5。XPで、

Ctrl+Alt+Delを無効にする方法。
右クリックを無効にする方法。

教えて。
388デフォルトの名無しさん:2007/11/09(金) 01:40:40
>Ctrl+Alt+Delを無効にする方法。
マルウェアでも作るつもりですか?
389デフォルトの名無しさん:2007/11/09(金) 05:38:41
そーゆーことしたいなら自分で調べろww
390デフォルトの名無しさん:2007/11/09(金) 06:47:53
>>387
いちばん簡単なのは、DirectXのフルスクリーンモードで、そういうモードがある。
やり方は自分で調べろ
391387:2007/11/09(金) 06:48:48
いや、調べてもわからないから聞いてるんで。

ちなみに、会社のIT担当委員ってのをやってて、社員にサイバーテロの対処について教育するんだが、
本物のウィルスを使うわけにはいかないんで、ジョークウェアを作ろうと思っている。
392387:2007/11/09(金) 06:49:39
書き忘れた。

一定の時間が経過したら自動的に終了させるつもりだ。
393デフォルトの名無しさん:2007/11/09(金) 23:31:11
Ctrl-Alt-Deleteのキーストロークは最優先でシステムが捕捉するので、これを
無効にすることはできない。無理。不可能。Deleteキーの軸を折っちゃえ。
右クリックはマウスの右クリックのスイッチを(ry
394デフォルトの名無しさん:2007/11/10(土) 06:56:12
無理ではない。教えたいところだけど、>>391が本当か分からないし
教える立場だったら自分で調べて欲しいところ。

ヒント:海外
395デフォルトの名無しさん:2007/11/10(土) 07:35:04
ソフトウェア板の各所でも、キーロガーとか、スパウウェア用途に使われるものは紹介しないというルールだしな
おしえる側も、最低限のことは守らないと
396デフォルトの名無しさん:2007/11/10(土) 08:46:07
391だけど、不正ソフトばらまくのは犯罪だってことくらい知ってるよ。
けどまぁ、信用してもらえないのも仕方がないからなんとかするわ。
397デフォルトの名無しさん:2007/11/12(月) 07:10:16
2chで信用しろといわれても・・・
398delphi初心者:2007/11/12(月) 13:48:03
ご質問いたします。

1.コンマ区切りの文字列をばらして配列にセットしてくれる関数はありませんか?
2.functionで配列は返せないのですか?





追伸: 「そんなこと自分で調べろ!」 と云う罵倒はおことわり。
399デフォルトの名無しさん:2007/11/12(月) 13:50:46
TStringList.CommaText
400デフォルトの名無しさん:2007/11/12(月) 13:51:22
それかTStringList.Textに入れれば、バラしてくれたかも
401デフォルトの名無しさん:2007/11/12(月) 22:10:08
>398
配列の型を宣言してそれを戻り値の型にすればおk
402デフォルトの名無しさん:2007/11/13(火) 14:33:42
>>401
それ、何てTStringList?
403デフォルトの名無しさん:2007/11/13(火) 18:48:49
【Borland Delphi 6 Personal日本語版 入手先】
http://www.vector.co.jp/soft/dl/win95/prog/se205882.html
【Delphi 6 導入手順 】
http://www.wikihouse.com/DelphiVIP/index.php?%C6%B3%C6%FE%BC%EA%BD%E7
【インターネットダイレクト(Indy)コンポーネント導入手順 】
http://homepage3.nifty.com/KENCH/open/indy/delphi_indy.htm

動作確認は、メモとIdHttpコンポーネントを貼り付けて以下のコードを書いて実行してみる。
うまくいくとこのスレがメモにダウンロードされる。
Memo1.Lines.Text := IdHttp1.Get('http://live19.2ch.net/test/read.cgi/stock/1144395454/l50');

【デルファイの質問所】
http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi
http://leed.t.u-tokyo.ac.jp/~takeuchi/delphi/search.cgi
http://groups.google.com/groups/search?hl=ja&q=delphi+
404デフォルトの名無しさん:2007/11/13(火) 20:01:32
上げ荒らしうぜえ
405初心者++:2007/11/18(日) 11:09:49
UpdateSQLがうまくいきません。以下のようなコードで実行すると、例外エラー'アップデート失敗'がでます。
propertyの設定は
cachedupdate true /requestlive true /updateobject updatesql

updatesqlのsql設定文もできてると思うんですが、、、


begin
database1.open;
database1.StartTransaction;
query1.Open;
end;

procedure TSDIAppForm.Button1Click(Sender: TObject);
begin

if query1.UpdatesPending then begin
query1.ApplyUpdates;
end;
database1.Commit;
query1.CommitUpdates;
query1.Close;
database1.Close;

end;

どこが間違ってるのでしょうか?教えてください
Turbo Delphi for wind32
OS : wind2000です。
406デフォルトの名無しさん:2007/11/18(日) 15:36:44
残念、スレちがいです。

>Delphi初心者が問題をコツコツと解きながらレベルアップするためのスレです。
407デフォルトの名無しさん:2007/11/18(日) 17:54:22
糞なテンプレでスレ立てて必死に粘着交通整理してる奴ってなんなの?
408デフォルトの名無しさん:2007/11/18(日) 18:45:04
自分の居場所なんだから、そりゃ必死だろう。

自分の居場所をキチンとメインテナンスするのは、それは当然ではあるまいか?
409デフォルトの名無しさん:2007/11/20(火) 17:32:32
自分の居場所ならグダグダ「スレ違い」とか言ってないで、問題を出題すべきだと思うんだな。
問題と解答、それに議論が無いから、過疎ってスレ違いと基地外の巣窟と化してるんだな。
問題:おみくじ
randomを使って大吉、吉、凶のいずれかを表示するプログラムを作れ
410デフォルトの名無しさん:2007/11/20(火) 17:36:13
>>409

あまりにも簡単すぎるプログラム出題でワロタw

せめて、n回凶が出る確率を計算するプログラムとかにすればいいのに。
411デフォルトの名無しさん:2007/11/20(火) 17:47:39
>>405

Queryの更新エラーは、
query1.RequestLiveのtrue/falseが
結構関係している。
412デフォルトの名無しさん:2007/11/20(火) 22:53:35
Gandomを使って大吉、吉、凶のいずれかを表示するプログラムを作れ
413デフォルトの名無しさん:2007/11/20(火) 23:05:26
>>412
CGは専門外なんで無理ですw
414デフォルトの名無しさん:2007/11/20(火) 23:21:52
Gandom はすれ違い。
415デフォルトの名無しさん:2007/11/21(水) 01:02:34
問題:呼び出すたびに1と0を交互に返す関数を書け。グローバル変数を使っても良い。
416初心者++:2007/11/21(水) 02:06:06
UpdateSQLのエラーが解決しました。レスを下さった方ありがとうございました。
SQL文のキー違反でした。
 SQLの勉強をもっとしないと阿寒と思いました。
 Accessのビューで作ったSQL文を貼り付けたりしておったのですが、、、。
 エラー続出でした。
417デフォルトの名無しさん:2007/11/21(水) 23:30:12
問題:マウスクリックすると、クリックしたマス目とその上下左右のマスが反転する。
    マス目を全て塗りつぶしたらクリアとなるゲームを作る

□□□□□             □□□□□            ■■□□□
□□□□□             □□■□□            ■□■□□
□□□□□             □■■■□            □■■■□
□□□□□             □□■□□            □□■□□
□□□□□の真ん中を押すと  □□□□□左上クリックで   .□□□□□

■■□□□           ■□□□□
■○■□□           □■□□□
□■■■□           □□■■□
□□■□□           □□■□□
□□□□□ ○を押したら  □□□□□


全部塗りつぶしたらゲームクリア
■■■■■
■■■■■
■■■■■
■■■■■
■■■■■
418デフォルトの名無しさん:2007/11/21(水) 23:43:16
>>417
ライツアウト懐かしいな
419デフォルトの名無しさん:2007/11/22(木) 00:58:06
俺には作れねぇ
420デフォルトの名無しさん:2007/11/22(木) 01:03:28
頑張れば作れなくもなさそうだけど、とてつもなく無駄が多くなりそう・・。
4211/2:2007/11/22(木) 01:33:44
  TForm1 = class(TForm)
    procedure FormPaint(Sender: TObject);
    procedure FormClick(Sender: TObject);
  private
    FTable: array[0..4, 0..4] of Boolean;
  end;

procedure TForm1.FormPaint(Sender: TObject);
const
  B2S: array[Boolean] of String = ('□', '■');
var
  x, y: Integer;
begin
  for x := 0 to 4 do
    for y := 0 to 4 do
      Canvas.TextOut(x*12, y*12, B2S[FTable[x, y]]);
end;
4222/2:2007/11/22(木) 01:34:15
procedure TForm1.FormClick(Sender: TObject);
var
  pt: TPoint;
begin
  pt := Self.ScreenToClient(Mouse.CursorPos);
  pt.X := pt.X div 12;
  pt.Y := pt.Y div 12;

  if (0 <= pt.X) and (pt.X <= 4) and (0 <= pt.Y) and (pt.Y <= 4) then
  begin
    FTable[pt.X, pt.Y] := not FTable[pt.X, pt.Y];

    if 1 <= pt.X then FTable[pt.X-1, pt.Y] := not FTable[pt.X-1, pt.Y];
    if pt.X <= 3 then FTable[pt.X+1, pt.Y] := not FTable[pt.X+1, pt.Y];
    if 1 <= pt.Y then FTable[pt.X, pt.Y-1] := not FTable[pt.X, pt.Y-1];
    if pt.Y <= 3 then FTable[pt.X, pt.Y+1] := not FTable[pt.X, pt.Y+1];
  end;
    
  Invalidate;
end;
4232/2 ver.2:2007/11/22(木) 01:40:47
クリア判定忘れてた。

procedure TForm1.FormClick(Sender: TObject);
var
  pt: TPoint;
  x, y: Integer;
  Clear: Boolean;
begin
  pt := Self.ScreenToClient(Mouse.CursorPos);
  x := pt.X div 12;
  y := pt.Y div 12;

  if (0 <= x) and (x <= 4) and (0 <= y) and (y <= 4) then
  begin
    FTable[x, y] := not FTable[x, y];

    if 1 <= x then FTable[x-1, y] := not FTable[x-1, y];
    if x <= 3 then FTable[x+1, y] := not FTable[x+1, y];
    if 1 <= y then FTable[x, y-1] := not FTable[x, y-1];
    if y <= 3 then FTable[x, y+1] := not FTable[x, y+1];
  end;
4243/2:2007/11/22(木) 01:41:18
  Clear := True;
  for x := 0 to 4 do
  begin
    for y := 0 to 4 do
      if not FTable[x, y] then
      begin
        Clear := False;
        Break;
      end;

    if not Clear then
      Break;
  end;

  if Clear then
    ShowMessage('おめ');

  Invalidate;
end;
425デフォルトの名無しさん:2007/11/22(木) 02:02:47
すげー!参考にさせて頂きますm(_ _)m
426デフォルトの名無しさん:2007/11/23(金) 11:33:40
implementation
{$R *.dfm}

//スペースの都合上ここに記述本当ならTForm1のprivateが望ましい
var
BTable:array of array of Boolean; 

procedure CheckComplete();
var
X,Y:Integer;
begin
for X:=1 to High(BTable)-1 do
for Y:= 1 to High(BTable[X])-1 do
if Not BTable[X,Y] then Exit;

ShowMessage('Mission Complete!');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
SetLength(BTable,DrawGrid1.ColCount+1,DrawGrid1.RowCount+1);
end;
427修正1/2 (426は放置推奨 ):2007/11/23(金) 11:43:25

//●最初にDrawGridを貼り付け、プロパティを以下のようにセット
  Align = alClient
  DefaultDrawing = False
  ColCount = 6
  RowCount = 6

//●FormのPrivateに以下のフィールドとメソッドを追加
  BTable:array of array of Boolean; //動的二次元配列
  procedure CheckComplete();
  
//●CheckComplete関数を書く
procedure TForm1.CheckComplete();
var
  X,Y:Integer;
begin
  for X:=1 to High(BTable)-1 do
    for Y:= 1 to High(BTable[X])-1 do
      if Not BTable[X,Y] then Exit;

  ShowMessage('Mission Complete!');
end;

//●FormCreateを書く
procedure TForm1.FormCreate(Sender: TObject);
begin
  SetLength(BTable,DrawGrid1.ColCount+1,DrawGrid1.RowCount+1);
end;
428修正(2/2):2007/11/23(金) 11:43:59
//●DrawGrid1DrawCellを書く
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
const
  COLORPALS:array[Boolean] of array[Boolean] of TColor = ((clWhite,clBlack),(clSilver,clSilver));
begin
  DrawGrid1.Canvas.Brush.Color := COLORPALS[(gdFixed in State) , BTable[ACol,ARow] ];
  DrawGrid1.Canvas.FillRect(Rect);
end;

//●DrawGrid1SelectCellを書く
procedure TForm1.DrawGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;var CanSelect: Boolean);
begin
  BTable[ACol-1,ARow] := Not BTable[ACol-1,ARow];
  BTable[ACol ,ARow] := Not BTable[ACol ,ARow];
  BTable[ACol+1,ARow] := Not BTable[ACol+1,ARow];
  BTable[ACol,ARow-1] := Not BTable[ACol,ARow-1];
  BTable[ACol,ARow+1] := Not BTable[ACol,ARow+1];
  DrawGrid1.Invalidate;
  CheckComplete();
end;
429デフォルトの名無しさん:2007/11/23(金) 18:34:16
>>417
7行スレで盛り上がりそうな内容だなw
430デフォルトの名無しさん:2007/11/28(水) 17:46:32
25ボタンの処理を全部書くことで初心者でも作れてしまうが、まじめにやれば7行に・・・・なるな多分
431デフォルトの名無しさん:2007/11/28(水) 23:00:38
>>157
D6からそうなったのか?
パスなしだとWINDOWSフォルダにつくられるんじゃなかった?
432デフォルトの名無しさん:2007/11/28(水) 23:01:27
未読位置を間違えてロングパスを放ってしまったorz
433デフォルトの名無しさん:2007/12/08(土) 01:31:13
>>417
作れたは良いんだがクリアできない
なんかコツとかある?勿論クリアするね
434デフォルトの名無しさん:2007/12/13(木) 23:00:31
TMEMOの任意の行を削除するにはどうしたらいいの?
435デフォルトの名無しさん:2007/12/13(木) 23:09:52
>>434
TMemo.Lines.Delete
436434:2007/12/14(金) 06:52:10
>>435

ありがとう。

ごめん、質問間違えた。
あるデータと一致する行を削除 だった。
listboxだったらitems.indexとかで簡単にできるけど
437デフォルトの名無しさん:2007/12/14(金) 22:58:42
>>436
TMemo.Lines.IndexOf
438デフォルトの名無しさん:2007/12/22(土) 19:30:52
BDS2007を使っているんですが、コード補完機能って、すごーく
時間がかかるものなのでしょうか?
HDアクセスしまくりで、VS2005のそれとは比較にならない程遅いのですが。
それとも何か設定等が悪いのでしょうか?

OSはWinXP, メモリは2Gです。よろしくお願い致します。
439デフォルトの名無しさん:2007/12/23(日) 18:36:32
コンポを大量インスコしてるとか
440デフォルトの名無しさん:2007/12/24(月) 09:47:31
普段使わないコンポはチェック外しておくとロード時間が劇的に短くなる。
441デフォルトの名無しさん:2007/12/26(水) 21:13:59
普段使うコンポはチェック外さないでおくとロード時間がものすごく長い。
442デフォルトの名無しさん:2007/12/26(水) 22:06:02
最新式マシンに変えるとロード時間が劇的に短くなる。
443デフォルトの名無しさん:2007/12/27(木) 01:49:05
ちょっと前のマシンだとロード時間がはげしく長い。
444デフォルトの名無しさん:2007/12/27(木) 02:11:10
BDS2006で、PenD(3.0GHz) メモリ2G WinXPマシンでつこーてるが、
コード補完は、特に遅くないな。
ちなみに、起動時は、起動オプションで、Delphiのプロファイルのみ読み込み、
あと余計なDB周りのコンポなどもはずしてる。

しかしメモリ2Gで、ハードディスクカリカリは感がられんな
BDS2007が遅いということあるのかね
445デフォルトの名無しさん:2007/12/28(金) 23:14:45
D7En Pen3(966) MEM384MB
コード補完滅茶苦茶遅い。
数年前は大丈夫だったから多分原因はHDDだろうと勝手に思ってる。
446デフォルトの名無しさん:2007/12/29(土) 03:44:18
>>445
そのくらいのスペックで、Del6Pro つかってだけど、問題なかったぞ?

BDSの世代になって、死ぬほど重くて、マシン買い換えたが
447デフォルトの名無しさん:2007/12/31(月) 07:28:11
職場のD7ENTでこちょこちょ書いてますがひたすらコピペしまくりでクラスも作った事がありません。
どこかのサイトにオプジェクト志向学ぶならC#やJavaで書かれた出来の良いコードをDelphiに移植するのが面倒だけど理解が早くなる、と言う意味の事が書かれてました。
とは言え、自分にオプジェクト志向の良いコードなのかどうか判別が出来るくらいならわざわざ移植には及ばない訳でして、適当なサンプル選びで途方に暮れています。
簡単なもの、ちょい重たいかなレベルで適当そうなコードを紹介して頂けませんか?
448デフォルトの名無しさん:2007/12/31(月) 07:30:10
スミマセン
ageてしまいました。
449デフォルトの名無しさん:2007/12/31(月) 11:10:07
どこまでもコピペするつもりですか。

*頭をたたくと「いてぇ」、わきの下をくすぐると「わははは」と笑うクラスをつくて

まじめな課題です。
450デフォルトの名無しさん:2007/12/31(月) 11:59:29
自分用のコンポーネントを自作するのが近道だよ。
451デフォルトの名無しさん:2007/12/31(月) 12:06:15
>>447
何度も同じコード書いてるならそこを共通化するクラスなりライブラリなりを作ってみたら。
重複部分で呼び出しているAPIなり関数なりをJediVCLでGrepかけてどうラップしてあるかを見てみればいいと思う。
あのライブラリ郡の設計が美しいかどうかは微妙なところだけど。

一番手っ取り早いのはC#をやること。
C#、Delphi両面の利点と欠点が見えてくると思う。
もちろんよりリッチなクラスライブラリの使い方も習得できるしね。
452デフォルトの名無しさん:2007/12/31(月) 19:50:50
JCLのコンテナ使いにくすぎる。おすすめせん。

俺も、C#のライブラリを参考にするのがお勧め。
標準のでいい。
インターフェスだけならMSDNで見たい放題、クラス設計の参考になる。

中のぞきたかったら、Reflectorででも、使えばソース見られる。
Reflectorなら、Delphiでも見られるしなw


あとは、OOPなら、動的型言語のRubyもお勧め。
ほとんどが、オブジェクトなので、それを前提として、
どういった便利な使い方ができるか?というのがよくわかる。
ただ、ガーベジコレクション前提でオブジェクトを使い捨てまくるので、
そのままは使えないのだが、
勉強にはなる。
453デフォルトの名無しさん:2008/01/02(水) 23:14:08
2005を今更再インスコしようとして、鬱になる。

#さぽきれかあ
454デフォルトの名無しさん:2008/01/03(木) 15:25:42
あー、今頃出来やがんのorz
455デフォルトの名無しさん:2008/01/18(金) 16:05:07
ASMならジャンプテーブルを用意すれば簡単化と思いますがDelphiなら
以下の条件ならどんなコーディングをすればいいのでしょうか?
type
TSomeInts = 0..9;
IntSet1, IntSet2 = set of TSomeInts
の条件下で
if (0 in IntSet1) and (0 in IntSet2) then ...
if (0 in IntSet1) and (1 in IntSet2) then ...
...
if (9 in IntSet1) and (9 in IntSet2) then ...
のように、IntSet1且つIntSet2の組み合わせでcase文を使用したい場合です
456デフォルトの名無しさん:2008/01/18(金) 16:08:54
すみません
問題を単純化するのにミスしました
type
Int1, Int2 = 0..9;
の条件下で
if (Int1 = 0) and (Int2 = 0) then ...
if (Int1 = 0) and (Int2 = 1) then ...
...
if (Int1 = 9) and (Int2 = 9) then ...
でお願いします
457デフォルトの名無しさん:2008/01/18(金) 16:15:33
case を2重にして全部を列挙するか
0〜9と決まってるんなら単純に

case Int1*10+Int2 of
00:
01
...
とやったら?
458デフォルトの名無しさん:2008/01/18(金) 16:29:47
>>457
ども
実際ご指摘のとおり
type
Suit = (Club, Diamond, Heart, Spade);
var
card1, card2: Suit;
cardbits: BYTE
とあれば
cardbits := ($01 shl Integer(card1) + ($10 shl Integer(card2));
case cardbits of
$00, $01, $02: ...
$10, $11, $03: ...
end
みたいなことで実現しているのですが、実際は条件がもっと複雑で
単純にcase文でネストする場合三重になります
この場合可視性が悪いですし
Suit = (Null, Club, Diamond, Heart, Spade, Joker);
みたいに列挙型を変更する場合も困難を極めます
459デフォルトの名無しさん:2008/01/18(金) 17:04:39
var jumptable: array[0..9, 0..9, club..spade] of tjumpproc;
なジャンプテーブル用意したら。
460デフォルトの名無しさん:2008/01/18(金) 17:16:45
>>459
どもw
ジャンプテーブルが使えたんですね・・・

何やってんだ俺orz
461デフォルトの名無しさん:2008/01/19(土) 17:54:22
×可視性
○可読性
462デフォルトの名無しさん:2008/01/28(月) 14:54:47
Delphi6のFileSeekは多重定義されてますが
function FileSeek(Handle, Offset, Origin: Integer): Integer; overload;
function FileSeek(Handle: Integer; const Offset: Int64; Origin: Integer): Int64; overload;

OffsetにInt64をあたえても上が呼ばれてるみたいなんですが
どうなんでしょう
463デフォルトの名無しさん:2008/01/28(月) 18:45:19
気のせいです
464デフォルトの名無しさん:2008/02/01(金) 22:18:42
Threadを使用してバックグラウンドで処理を行い、進行状況をForm1で表示する処理を行っています

Form1のLabelに表示するたびにSynchronize関数を呼び出すとそのオーバーヘッド
が凄まじく処理時間が数倍に跳ね上がってしまいます
VCLを使用する場合にはSync関数を使用して呼び出すべきとの話ですが
全てが全てSyncを使用しなければならないのでしょうか?
例えばInvalidate関数等はどのタイミングで呼び出すべきなのでしょうか
465デフォルトの名無しさん:2008/02/01(金) 22:31:43
スレッドセーフで無いコードはSynchronizeを使いVCLにスレッドセーフであることを保証してもらう必要がある。
初めからスレッドセーフなコードならばわざわざそんな事はしなくても良い。
466デフォルトの名無しさん:2008/02/01(金) 22:33:02
いろいろやり方はあるけどLabelの更新頻度を下げるのが手っ取り早い。
データがどれだけ変更されようが画面の更新は1秒に一回未満にするならこんな感じ

lastupdateview := GetTickCount;
while true do
begin
 処理
 if GetTickCount - lastupdateview > 1000 then
 begin
  lastupdateview := GetTickCount;
  Synchronize;
 end;
end;
467デフォルトの名無しさん:2008/02/01(金) 23:05:17
>>466
ども。
Invalidateの呼び出しはそれでやってます。

その方法では、例えば処理中のファイル名を表示しようとした場合
重い処理を行っている時は表示されているファイル名と処理している
ファイルが異なるような場面が発生しませんか?
かと言って”処理が長くなるようだったら強制的に表示する”って方法
を実現しようとするとタイマーを使用するなり手間がかかる気がするのですが・・・
468デフォルトの名無しさん:2008/02/01(金) 23:30:48
ファイルを処理する最初にlabel更新をしようとしたが、
全部のファイルを処理すると処理に時間がかかったということですよね?


> 重い処理を行っている時は表示されているファイル名と処理している
> ファイルが異なるような場面が発生しませんか?

それは仕方がないかと。
>>466では、1秒になってるけど、100m秒くらいにすればわからなくないかな?


ところで、VCLのスレッドセーフ周りはよく知らないのだが、
Labelの書き換え(Caption?Text?)は、メインスレッドから弄ってない場合でも、
他のスレッドどから書き替えたらダメなのものかね。
469デフォルトの名無しさん:2008/02/01(金) 23:48:28
>>468
ども。

>>466の例で言うならば、”処理”が重たい場合はLabelが書き換えられませんし
”処理”の前にLabelを書き換えようとした場合はLabelの書き換えがスキップ
された直後に重い処理が着ちゃうと対応できません

メインフォームにメッセージを投げて知らん振りしたほうが健全かな?とは
思いますが、Delphiっぽくなくなっちゃうんですよね
470デフォルトの名無しさん:2008/02/02(土) 00:37:08
>>469
処理するスレッドが重くてメインスレッドに反映されにくい場合なら、
スレッドの優先度変えればいけないかな・・・(未確認だが)

> メインフォームにメッセージを投げて知らん振りしたほうが健全かな?とは

いや、それもありかと思います。Delphiスレでもよく聞く話です。
VCL Formだとメッセージとりやすいですしね。

ただ、スレッドが重くてうんぬんの場合、この方法でも一緒かな?という気が
471デフォルトの名無しさん:2008/02/02(土) 07:37:18
Invalidate なら、ラベルの親ハンドルと、Rectをメインスレッドから用意しておいて
IntersectRectをスレッド側で発行すればいいでしょ。
472デフォルトの名無しさん:2008/02/02(土) 07:39:04
×IntersectRect
○InvalidateRect
473デフォルトの名無しさん:2008/02/02(土) 22:21:03
にゃあ
474デフォルトの名無しさん:2008/02/09(土) 04:23:31
if i < 0 then i := 0;
といったコードがあるとします
i := Max(0, i);
と書いたほうがスマートな気がしますし
i := Max(0, Min(i, count-1));
と書くと簡単に範囲を限定できます

しかし、冗長に思えるif分の繰り返しのほうがいいコードが生成されます
この場合どちらを使用すべきなんでしょうか・・・
475デフォルトの名無しさん:2008/02/09(土) 05:20:29
> しかし、冗長に思えるif分の繰り返しのほうがいいコードが生成されます

マシンスペックが高い今、そんなことはいまどき考える必要はない
わかりやすい方にしる
476デフォルトの名無しさん:2008/02/09(土) 12:29:24
Abs()なら組み込み関数で、マクロ的に展開されるんだけど
Maxはmathユニットの実関数だから仕方ない。

どうしてもというならアセンブラ使え

procedure TForm1.Button2Click(Sender: TObject);
 function LimitZero(d:Integer):Integer;
 asm
  CDQ ;//eaxが負数ならedx=-1
  not edx;
  and eax,edx ;//
 end;
var i:Integer;
begin
  AllocConsole;
  for i:=-10 to 10 do begin
   WriteLn( LimitZero(i));
  end;
end;
477デフォルトの名無しさん:2008/02/09(土) 18:13:05
くだらん。
どうしても転化したければ、inline使え
478デフォルトの名無しさん:2008/02/24(日) 05:53:01
TImage に 上から半透明のセロファンがかかってるような
フィルタをかけたかったらどうすりゃいいですかね?

俺が思いつくのは同じ大きさのBitmapを用意して
それを一色で塗りつぶした上で半透明化とかなんですけど
これってすんげえ無駄にメモリ食いますよね?

もっといい方法ってあります?
479デフォルトの名無しさん:2008/02/24(日) 06:02:23
>>478
DIBにして、ScanLineでBITMAPのデータを直でいじくる
480デフォルトの名無しさん:2008/02/24(日) 06:18:28
>>479
うわ、検索してみたけど難しそうだこれは
1時間ほど挑戦してムリポだったら>>478の方法使うことにします
481デフォルトの名無しさん:2008/02/24(日) 06:37:09
そんなに難しく考えるなよ

srcが元の色
colorがセロファンの色
destが書きこむ色
αが半透明のアルファの度合いだとしたら、

dest = color * α + src * (1 - α)
これをrgb各それぞれで計算してやるだけだぞ

こういうのは「αブレンド 計算式」ででてくればすぐにでてくるよ
482デフォルトの名無しさん:2008/02/26(火) 14:47:50
符号無し64bit、いわゆるulonglongを使用したいのですが何か良い方法
は無いのでしょうか?

483デフォルトの名無しさん:2008/02/26(火) 16:55:55
符号無し64bitで何がやりたいの? 加減算の結果は同じだよ
掛け算の場合も
(Amsb + A63)*(Bmsb + B63) = Amsb*Bmsb + Amsb*B63 + Bmsb*A63 + A63*B63

で、Amsb が符号付きだろうが符号無しだろうが、下位64bitの結果には影響しない。
484デフォルトの名無しさん:2008/02/26(火) 17:52:05
>>483
ulonglongを使用している構造体があったんでどう実装しようかと・・・
現状では下位32bitしか使用していないのでDWORDでも問題無いとは
思うのですが、手を抜いて将来トラブルと嫌だなぁ・・・と思った次第です
485デフォルトの名無しさん:2008/02/26(火) 19:37:38
単にInt64にしたらいいんじゃないの? 除算や右シフトをやらない限り問題ない
486デフォルトの名無しさん:2008/02/27(水) 11:47:31
ゴメン 算術右シフトってのがソモソモ無かった。
だから  SHR 演算は 符号無し右シフトと等価だった
487デフォルトの名無しさん:2008/02/27(水) 19:01:28
UInt64使えばいいだろ。
488デフォルトの名無しさん:2008/02/27(水) 20:44:10
>>481
ありがとうございます
何をすればアルファブレンドできるかは理解できたんだけども

見つかったページがそれをシフト演算で行ってて
それの意味がわかんなくて困ってます

ページを貼らせてもらうと
http://www.sm.rim.or.jp/~shishido/delmono.html
> r:=cl and $ff; // RGB成分に分解
> g:=cl and $ff00 shr 8;
> b:=cl and $ff0000 shr 16;
必要な色成分以外を $ff なんちゃらでマスクして消しちゃってるんでしょうが
$の記号が何をするのかわからないのがひとつめ

> cl:=Round(r*0.3+g*0.59+b*0.11); // 明るさを計算
cl って RGB値じゃなかったでしたっけ? なんで明るさだけを入力できるかさっぱりなのが2つめ

> pp^:=cl+cl shl 8+cl shl 16; // (j,i)に明るさを書き戻す
さっきRGB値を明るさに変えたのになんでこんな処理ができるのか意味不明なのが3つめ

とわからないことだらけです。助けて
489デフォルトの名無しさん:2008/02/27(水) 21:55:42
>488
$は16進数のプレフィクス。C/C++の0xに相当。
明るさは人間の目のRGBに対する感度の違いを考慮して計算している。昔の白黒テレビで
カラー画像を見ているのと同じ。
その明るさを持つグレーの値を計算している。
490デフォルトの名無しさん:2008/02/29(金) 04:03:23
>>488
下の二つは輝度を計算するときの公式みたいなものでアルファブレンドとは全然関係ないよ
491478:2008/03/01(土) 05:18:35
ヤターできたよー!
もっともほんとにやりたい事は
フィルタの範囲指定したり戻したりなんで
これからもうひと頑張りいるけど、あとはなんとかなるでしょ。

ところでRGB値ってbgrの順で保存されてるんだね。変なの
>>489-490
dです
492749:2008/03/01(土) 20:27:17
>>491
BGRの順番で格納されているのはTColor

実際には速度の面からPixelでは無くScanLineでBMPに直接アクセスする
ことになるが、その場合の格納方法はまた違う
493デフォルトの名無しさん:2008/03/01(土) 21:25:24
バイト単位でアクセスしたら32bit色の場合、bgrだわな
494デフォルトの名無しさん:2008/03/02(日) 13:12:38
>>493
32bit DWORDだとrgbだな

>>478はメモリの格納順では無くて上位ビット->下位ビットで話してるからな
495デフォルトの名無しさん:2008/03/04(火) 03:36:32
>>494
何をわけの分からないこと言ってるんだ
同じことだろ
496デフォルトの名無しさん:2008/03/04(火) 04:23:57
サーセンw
497デフォルトの名無しさん:2008/03/04(火) 15:49:44
こんにちは。
WriteProcessMemoryのAPIを使って値を書き込んだのですが、
おもう値が書き込まれません。以下がコードです。

GetMem(buf, 1);
buf^ := Chr($3D);
WriteProcessMemory(WindowHandle, ptr(Address), buf, NumberOfBytes, Write);

これを行うと、値が35901というのが書き込まれてしまいます。61という値を書き込みたいのですが、どのようにすればよろしいのでしょうか?
498デフォルトの名無しさん:2008/03/04(火) 16:18:08
>>497
35901 = $8C3D

正常に動いてるじゃないか
499デフォルトの名無しさん:2008/03/04(火) 16:40:25
>>498

いえ、普通に$3D(61)という値を書き込みたかったんですが、その場合はどうすればよろしいでしょうか?
500デフォルトの名無しさん:2008/03/04(火) 17:35:44
>>499
そりゃ1Byteしか書き込んでいないから。
501デフォルトの名無しさん:2008/03/04(火) 18:29:49
>>500
NumberOfBytes

を2という値に設定はしたのですが、これでは設定不足でしょうか?
502デフォルトの名無しさん:2008/03/04(火) 20:08:37
何で1バイトしか書き込んでいないのに読み込むときは2バイトになってるんだよ
503デフォルトの名無しさん:2008/03/04(火) 21:04:31
>>502
すいません、私のレベルが低くていまいちよくわかりません・・・。

WriteProcessMemory(WindowHandle, ptr(Address), buf, Sizeof(buf), Write);

上のようにすればいいという事でしょうか?
読み込む時というのがわかりません・・・。
504デフォルトの名無しさん:2008/03/04(火) 21:47:00
>>503
>値が35901というのが書き込まれてしまいます。
これが確認できたってことはその書き込んだアドレスから読み込んだんだろ?
その時35901だったってことは、少なくとも2bytes読み込んでいるということ。
505デフォルトの名無しさん:2008/03/04(火) 21:55:22
>>504
いえ書き込んだアドレスから読んだんではなくて、
表示されている値が変化したので確認できたという事です。

えとつまりは61という値にはできないという事でしょうか?
506デフォルトの名無しさん:2008/03/04(火) 22:55:41
>表示されている値が変化したので確認できたという事です。

意味不明なんだよ、質問が。なにをどうしたらなんの表示が変化したの?

WriteProcessMemory() の第一引数が WindowHandle って時点でどうかしてる。
507デフォルトの名無しさん:2008/03/04(火) 23:48:37
508デフォルトの名無しさん:2008/03/05(水) 07:13:00
>>506
>>507

すいません、書き忘れていました。

OpenProcessでもってきたハンドルを第一引数に入れています。
HandleWindow := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);

質問をまとめると、
var
buf: PChar;
WindowHandle: Integer;
Write: Cardinal;

WindowHandle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
GetMem(buf, 1);
buf^ := Chr($3D);
WriteProcessMemory(WindowHandle, ptr(Address), buf, Sizeof(buf), Write);

で対象のプロセスの31という値を61に書き換えようとしたところ、35901という値に誤って(?)表示されてしまった。
というわけです。わかりにくくてすいません・・・。
たぶんbufの値に問題があると思いますが・・・。
509デフォルトの名無しさん:2008/03/05(水) 08:04:08
ヒント:bufのサイズをコンパイラが知れるわけがない
510デフォルトの名無しさん:2008/03/05(水) 08:06:03
初心者向けだからもう少しいえば
動的に確保されたバッファーのサイズをコンパイラが知ってるはずない
511デフォルトの名無しさん:2008/03/05(水) 08:58:03
>>509
>>510

bufのサイズを指定すればよろしいのでしょうか?
Sizeof(buf)
で行っている作業でサイズは取得できてると思うのですが、これとはまた別の話でしょうか?
512デフォルトの名無しさん:2008/03/05(水) 09:29:57
var buf:PChar つまりポインタなのだから、
Sizeof(buf)  は、ポインタのサイズを取得してるので、作業領域のサイズを得ているわけじゃない
513デフォルトの名無しさん:2008/03/05(水) 09:39:40
1、WindowHandleは適切な名前ではない。 hProces 等にする事
2、Writeも適切な名前でない。WriteSize とか cbWriteとか
3、Sizeof(buf)はポインタサイズで現在は4を返してる筈。

よって、
var
buf: string;
hProces : THandle;
WriteSize:DWORD;

WindowHandle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
SetLength(buf,1);
buf[1] := Chr($3D);
WriteProcessMemory(WindowHandle, ptr(Address), PChar(buf), length(buf), Write);

ただし、35901が表示されたという事は、ホントは書きたい値は1バイトではなく2バイトか4バイト
の可能性が大。
514デフォルトの名無しさん:2008/03/05(水) 11:00:22
>>495
TColorと32bitRGBじゃRGBの順序が逆だよ?
そのまんまキャストは不可

ごっちゃにしてない?
515デフォルトの名無しさん:2008/03/05(水) 11:36:40
?
メモリ上の並びとしては R,G,B で、それを32bitの変数に読むと
エンディアンの関係で [xx ,RR , GG , BB] となるだけで、同じだろ?
516デフォルトの名無しさん:2008/03/05(水) 13:53:56
>>512
>>513

こんにちは。
ご教授感謝致します。以下が修正コードです。
var
buf: string;
hProces : THandle;
WriteSize:DWORD;

hProces := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
SetLength(buf,1);
buf[1] := Chr($29A);
WriteProcessMemory(hProces, ptr(Address), PChar(buf), length(buf), WriteSize);
CloseHandle(hProces);

これで望む結果を出すことができました。ありがとうございます。
SetLength はメモリを再確保してくれる関数らしいですね、てっきりSizeOfで領域まで確保してくれているとばかり思っていました。
このような初心者に手を差し伸べてくださり本当にありがとうございます。
またこれでひとつ勉強になりました。それではm(_ _)m
517デフォルトの名無しさん:2008/03/05(水) 19:02:16
Delphiヘルプより
> TColor を Graphics ユニットに定義された定数で指定せずに,4 バイトの 16 進数で指定した場合,
> 下位の 3 バイトはそれぞれ青,緑,赤の RGB カラーの輝度を表します。
> $00FF0000 という値は最高の輝度,つまり純粋の青を示し,$0000FF00 は純粋の緑を示し,
> $000000FF は純粋の赤を示します。$00000000 は黒,$00FFFFFF は白です。

>>514
これ以上に何か意見があるなら聞こうか?(笑)
518デフォルトの名無しさん:2008/03/05(水) 20:01:01
>>517
痛いヤツだな
>>493=>>495=>>517なのか?

DIB32はメモリ上はBB GG RR 00って順番で並んでいる
コレをDWORDでアクセスすると$00RRGGBBになるだろ?
TColorの$00BBGGRRとは逆になるんだよ

初心者スレで無知を晒すのは恥じゃ無いが、学ぶ能力が無いのは恥るべき
519デフォルトの名無しさん:2008/03/06(木) 00:55:23
BSWAPして8だけRORして…
520デフォルトの名無しさん:2008/03/06(木) 02:29:10
>>518
なんか必死だけどちゃんと仕様見てきて言えよ
521デフォルトの名無しさん:2008/03/06(木) 05:12:31
>TColorの$00BBGGRRとは逆になるんだよ

????
522デフォルトの名無しさん:2008/03/06(木) 09:27:41
>>513

昨日メモリについて質問した者です。
気になる事がありましたので、お聞き致します。
仮に

SetLength(buf,1);
buf[1] := Chr($29A);
WriteProcessMemory(hProces, ptr(Address), PChar(buf), length(buf), WriteSize);
CloseHandle(hProces);

をbuf[1] := Chr($29A);としたい場合は、
function StrToByte(const s: string): byte;
var
i, n : integer;
begin
result := 0;

n := 1;
i := Length(s);
while (i > 0) and (n <= 128) do begin
if s[i] = '1' then
Inc(result, n);

n := n *2;
Dec(i);
end;
end;

を使ってbuf[1] := Chr(StrToByte('$29A'));を使って同様の結果がでないのはなぜでしょうか?
523522:2008/03/06(木) 10:13:29
質問間違えました、FF(250)以上の値を書くときは、
SetLength(buf,1);
buf[1] := Chr($29A);
WriteProcessMemory(hProces, ptr(Address), PChar(buf), 3, WriteSize);
CloseHandle(hProces);

こう書いたのですが、うまくいきませんでした。上の質問意味不明ですねOrz

524デフォルトの名無しさん:2008/03/06(木) 10:40:08
ええと、255=$FF 以上は1バイトで表現出来ません。
2バイトを書きたいなら $29A なら $02 と $9Aに分けて

SetLength(buf,2);
buf[1] := Chr($9A);
buf[2] := Chr($02);
WriteProcessMemory(hProces, ptr(Address), PChar(buf), length(buf), WriteSize);

または、
var
 SendInt:WORD;

として
SendInt := $029A

WriteProcessMemory(hProces, ptr(Address), @SendInt , SizeOf(SendInt), WriteSize);
525デフォルトの名無しさん:2008/03/06(木) 12:17:08
色んな理解が足りない。

どうして PCharではなくて string を使ってるかというと、
PCharだとメモリ確保した後、開放しなければいけないけど
stringなら自動開放されるからtry〜finally を使わなくてもいいから便利だから。

PCharやstringを使うのは、可変サイズに対応する為。
3バイトでも4バイトでも同じコードで対応出来るからね。

でも固定サイズなら、ポインタで処理する必要はない。
渡す時にポインタを渡せばいい。
byte,WORD,DWORDのそれぞれの引数用の関数3つを作る方がスマートだよ
526デフォルトの名無しさん:2008/03/06(木) 15:50:39
>>524
>>525

ご回答ありがとうございます。
必要な事はできたのですが、純粋に疑問になったので思い切って質問してみた所存です。
二つに分けてやるのは知りませんでした。

Stringは自動開放されるのを知っていましたが、Pcharも自動で開放されるかと思ってました(汗

私はbyte,WORD,DWORDとかの三つの関数作るなんて思わないでがつがつ書いていましたOrz
あとこれは余談ですが、GetMEMとSetLengthとは同じなんですかね?
私がGETMEMで確保してましたが、回答してくださった方はSetLengthでやっていました。
これはアセンブラのCMPとTESTみたいな感じで好みによってでしょうか?
別にこれには答えてくださらなくても構いません。

回答者のお二人ありがとうございました、目からウロコです><

527デフォルトの名無しさん:2008/03/06(木) 17:38:22
>>526
ヘルプを読めばGetMemとSetLengthの違いがわかります
528デフォルトの名無しさん:2008/03/06(木) 21:07:30
>>527
ほんとだ・・・いつもメモリ扱う時はPchar使ってたから、意識しないで使ってたけど、
違いあったんですね・・・。
どうもでした。
529デフォルトの名無しさん:2008/03/07(金) 11:01:59
Fizz-Buzz 問題:
ttp://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm
 1から100までの数をプリントするプログラムを書け。
 ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、
 3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

ヒント
 GUIアプリでも AllocConsole; を入れておけばコンソールを出して write/wrilteln を使う事が出来ます
 TMemoを貼ってLines.Add をプリント代わりとしてもいいです。
530デフォルトの名無しさん:2008/03/07(金) 13:51:19
>>517-521
結局どっちなんだよw
531デフォルトの名無しさん:2008/03/07(金) 14:04:56
bitmap.PixelFormat := pf32bit;
bitmap.Canvas.Pixels[0,0] := TColor($0000FF);
PDWORD(bitmap.ScanLine[1])^ := DWORD(TColor($0000FF));
PDWORD(bitmap.ScanLine[2])^ := DWORD($0000FF);
で試してみた
結果




嘘つきばっかだなw
532デフォルトの名無しさん:2008/03/07(金) 22:39:54
もう放置したら?
533デフォルトの名無しさん:2008/03/08(土) 17:40:34
>DWORD(TColor($0000FF));
>DWORD($0000FF);

意味ねぇーー
534デフォルトの名無しさん:2008/03/12(水) 12:35:55
>>533
「意味が無い」ことを説明してるんでは?

TColorが上位、下位逆なのを説明されても理解できていない&認めようと
しないのが多数居たのが驚き。
いや、それだけ初心者向けの言語ってことなんだろうな。
535デフォルトの名無しさん:2008/03/12(水) 18:38:44
多数じゃなくて、一人だけだろw
536デフォルトの名無しさん:2008/03/15(土) 15:15:36
DLLを1つだけ LoadLibrary で読んでGetProcAddressして動かしてるプログラムがあります
このDLLをリソースには入れれたのですが実行時にDLLをHDDに書き込まずに動かす方法があれば教えてください
環境は、WinXP,Delphi6です。。。ファイルをEXE1つだけにしたいだけなのですがお願いします
537536:2008/03/15(土) 16:18:06
わざわざファイルに書き込まなくてもそのままでいけました。。。
538デフォルトの名無しさん:2008/03/15(土) 20:09:45
GPL逃れですか?
539デフォルトの名無しさん:2008/03/27(木) 17:33:47
ほしゅ
540デフォルトの名無しさん:2008/04/11(金) 06:48:24
>>534
間違っています。
以上。
↓次どうぞ
541デフォルトの名無しさん:2008/04/16(水) 15:44:57
ビルドした日付を埋め込むにはどうしたらいいですか?
BCBの__DATE__みたいな奴です。
542デフォルトの名無しさん:2008/04/16(水) 22:47:59
できないので手動で埋め込んでください。
543デフォルトの名無しさん:2008/04/17(木) 10:01:18
$Iで埋め込んだらどうかな。
実験コード
procedure TForm1.FormCreate(Sender: TObject);
begin
with TStringList.Create do try
Add(''''+formatDateTime('yyyy/mm/dd',now)+'''');
SaveToFile('Test.dat');
finally free end;
Caption:={$I test.dat};
end;

名前付きパイプで、日付データを返すようなのを作って走らせて
{$I \\.\pipe\DatePipe } とか
544デフォルトの名無しさん:2008/04/17(木) 11:30:32
名前付きパイプは上手くゆかなかった。
APIで読めば読めるけど、LoadFromFileでは読めない。
たぶんLoadFromFileではサイズを先に読んでから処理するからなんだろう。

だから $Iでも読めないかも
545デフォルトの名無しさん:2008/04/17(木) 18:58:18
フォームに並べた10個のラベル
(名前が label1,label2..label10 とかだとして)
それぞれのラベルのCaptionにループを使ってアクセスするにはどうしたらいいんでしょう。
546デフォルトの名無しさん:2008/04/17(木) 21:02:21
(FindComponent('Label'+IntToStr(LabelNum))as TLabel).Caption
547545:2008/04/17(木) 21:33:34
助かりました、ありがとうございました!
548デフォルトの名無しさん:2008/04/24(木) 20:51:42
>>543
それを埋め込んだデルファイを起動するアプリを作っていいかんじになりました、どうも。
549デフォルトの名無しさん:2008/05/14(水) 16:04:58
TDrawGridのColやRowプロパティが変更する場合の、
イベントハンドラを教えてくださいorz
550549:2008/05/14(水) 16:16:32
OnClickでできますた。
551デフォルトの名無しさん:2008/05/17(土) 13:45:07
Delphianが行方不明なのでこちらに質問させてください;;
Stringでなく数値で操作できるGridコンポ探しています。
どなたかご存じないですか?
552デフォルトの名無しさん:2008/05/18(日) 02:03:35
>数値で操作できる

いみふめ

数値と文字列は相互可変なんだから TStringGrid でなにが不足なんだ?
553デフォルトの名無しさん:2008/05/18(日) 10:57:12
セルの値を直接数値で入れたり出したりしたいんだろう。素人がしたがりたそうなことだ。
554デフォルトの名無しさん:2008/05/18(日) 11:09:12
'0'..'9'のみ入れさせたいなら
StringGridKeyPressイベントで

if not (Key in ['0'..'9']) then Key := #0;
とかやって入力を潰してしまえばいい。

ペーストも含めて対策したいならSetEditTextでゴミを取り除いてCells[]にセットしてやればいい。
他にもなんか対策すべきだったと思うが忘れた。

まあそこらへんのノウハウ込みのコンポを探してるんだろうが。
555デフォルトの名無しさん:2008/05/20(火) 12:02:23
はい、日曜ど素人でございます(T_T)
StringGridKeyPressとSetEditTextで新しいコンポを作れそうです。
ありがとうございました。
556デフォルトの名無しさん:2008/05/28(水) 18:57:24
TFileStreamでファイルをオープンして、
別のストリーム、たとえば、TContentStreamにファイルの中身を設定しようとすると、
どういった記述となりますか?
557デフォルトの名無しさん:2008/05/28(水) 19:55:36
Assignを使う。どちらもTStream派生だから。
558デフォルトの名無しさん:2008/05/28(水) 19:59:25
LoadFromStream はないの?
559デフォルトの名無しさん:2008/05/31(土) 02:17:47
グーグルマップに自分のブックマーク(っての?)残せるやん?

ローカルの地図画像であんな感じのアプリを、db連動で作ってみたいんだけど、何を参考にすればいい? グラフィック関係かと思って、ゲーム関係見たけど、あまり参考になりそうにない。
560デフォルトの名無しさん:2008/06/11(水) 11:48:36
超初心者ですまん。

juni := member_suu + 1;

for t := 0 to member_suu - 1 do
begin
for k := 0 to member_suu - 1 do
begin
if StrToInt(ListBox1.Items[t]) >= StrToInt(ListBox1.Items[k]) then
juni := juni - 1;
end;
ListBox2.Items[t] := IntToStr(juni);
juni := member_suu + 1;
end;

上の関数で整数の特典に対して順位をつけたのだが、同点がおおくて1位等が重複してしまうので、
重複しないようにしたい。1位と2位の差はあまりこだわっていなく、名前順でいいしランダム(条件なし)でもいい。
アドバイスください。
561デフォルトの名無しさん:2008/06/11(水) 14:38:25
・名前順なら得点と名前をソートのキーとする
・ランダムなら、得点とランダム値をソートのキーとする
562デフォルトの名無しさん:2008/06/22(日) 03:10:21
Jane Doe Styleのスレッド本文の表示には何のコンポーネントを使っているのでしょうか?
563デフォルトの名無しさん:2008/06/22(日) 03:11:13
すみません、他で聞きます。
564デフォルトの名無しさん:2008/07/23(水) 17:05:00
Form に Formを貼り付けると、MainMenuが表示されませんねorz

表示させる方法はあるのでしょうか?
無ければ、Menuライクなコンポーネント?
565デフォルトの名無しさん:2008/07/23(水) 19:25:23
何がやりたいの?
566デフォルトの名無しさん:2008/08/08(金) 13:42:48
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet***\Enum以下の
レジストリを操作(キー・値の変更・削除)したいんですが
SYSTEMユーザーしか操作権限がない状態です

これらを操作する方法などありますか?
567デフォルトの名無しさん:2008/08/08(金) 22:03:58
いやそれ操作したら駄目だろ。
568デフォルトの名無しさん:2008/08/10(日) 11:06:01
やっぱりタブーなのね(´・ω・`)サーセンでした
569デフォルトの名無しさん:2008/08/10(日) 14:37:09
なにしたいのよ?
570デフォルトの名無しさん:2008/08/10(日) 14:57:37
テスト環境で設定したソフトの登録情報を
本番環境とごっそり置き換える作業をプログラム化したいんです。

今、それをするのに手作業(設定時なのでAdministrato)で
レジストリのアクセス権つけて不必要な登録を消したりとかしてます。
571デフォルトの名無しさん:2008/08/10(日) 15:14:04
それにしてもHKLM\System以下を書き換えるなんてのはありえないと思うが?
572デフォルトの名無しさん:2008/08/10(日) 16:17:13
Enum\LEGACY*のいくつかにマシン名やコンピュータの設定が
刻まれているので消しているということらしいんですが
(この辺がテスト環境と本番環境で変わってくるので変更したい)

実際には、その環境の情報を見てはいないんですが
消す必要がないのかな・・・
573デフォルトの名無しさん:2008/08/29(金) 00:44:34
画像ファイル(bmp、jpg)をテキストデータとして扱うことはできませんか。
MIMEとか、ishのような感じで、当然、可逆変換で。
574デフォルトの名無しさん:2008/08/29(金) 08:19:15
そのMIMEとかいshで変換すりゃあいいやん。意味不明。
575573:2008/08/29(金) 19:31:44
ん〜と、簡易データベースみたいなのをつくろうとしてて、テキストフィールドに画像を「テキストデータとして格納」したいってことなんだけど、意味不明?
576デフォルトの名無しさん:2008/08/29(金) 21:25:36
やっぱり意味不明かも。
まともなRDBMSならBLOB使うべきだし、
BLOB使えないなら別の名前を与えてファイルのまま保存、使うときは逆参照汁。
577デフォルトの名無しさん:2008/08/29(金) 21:29:26
まあどうしてもやりたいなら止めない。

ttp://www.google.com/codesearch?q=BASE64+lang%3Apas

この辺りでも参考にしてくれ。
578デフォルトの名無しさん:2008/08/31(日) 01:49:12
あ、俺は逆のパターンを知りたい。
文字列フィールドに入りきれない文字列を画像に変換してBLOBに保存する、って無理?
579デフォルトの名無しさん:2008/08/31(日) 11:22:22
>>578
使用してるDBが分からないけど、Delphiからということを考慮するとFirebirdか?

もしそうなら、難しいこと考えず、サブタイプが1(テキスト)のBLOG作ればいいんじゃないのかな?

ほかのDBだと、
PostgreSQLはTEXT型があるから、意識する必要なし
SQL Serverも、2005からVARCHAR(MAX)があるから、意識する必要なし
MYSQLもTEXT型があるみたいだ
ORCLE, DB2はシラネ
580デフォルトの名無しさん:2008/08/31(日) 11:37:40
>>579

ローカルで火鳥かMSQLか何かの組み込みエンジン(まぁ、これは何でもよい。)、相手先はOracle。

Oracleにはあらかじめ定義された文字・数値項目と画像の入力ができる。
しかし、設計が追いついていないため、利用者で必要な情報を入力する文字項目が足りない。
画像なら何十枚でも追加可能。

そこで、ローカル情報を画像に変換してオラクル側に画像として保存すれば、当面は事足りるってこと。
もちろん取り出したら、ローカル側では文字情報に戻す。

その時の変換作業用っていうか、状態確認用みたいなので、ローカルでも同じものを保存しておきたい。

と言うことなんだけど。
581デフォルトの名無しさん:2008/09/01(月) 07:15:35
EditでIMEがOn/Offで背景色を変えたいんだけど
そういったサンプルコードないですか?
582デフォルトの名無しさん:2008/09/01(月) 19:27:39
無いな。だがヒントだけ教えてやろう。
IMEの状態が変わるときのメッセージ(WM_IME_NOTIFY)を受けたら
IMEの状態を取得して、ONの時はColorプロパティを適当な色に変えれば良いんだ。
583デフォルトの名無しさん:2008/09/02(火) 01:05:42
処理が大まかに2つあってタイマーを使って繰り返したい(Intervalはどちらも同じで問題ない)場合
タイマーを一つだけ使うのと、処理それぞれでタイマーを作るのでどっちが一般的なんでしょうか?
また、どっちが軽くなるんでしょうか?
よろしくお願いします。
584デフォルトの名無しさん:2008/09/02(火) 03:24:52
Intervalが同じならとりあえず一つで十分だろう。
タイマー二つまわすよりも一つの方が理屈としては軽い。
ただタイマーごときで重くなるようなPCは今時存在しない。
585デフォルトの名無しさん:2008/09/02(火) 03:31:58
>>584
ありがとうございます!
助かりました
586デフォルトの名無しさん:2008/09/08(月) 08:07:01
あの・・単純な質問なのですが、TChartコンポーネントを使って
凡例を表示させると、凡例がグラフの裏側へと隠れてしまいます。
(枠の端っこのちょっとだけ見えている状態です)

これをグラフよりも手前に表示させる方法を教えてください・・
587デフォルトの名無しさん:2008/09/08(月) 20:01:27
ソフト公開所
http://namidame.2ch.net/test/read.cgi/mitemite/1220869722/
こういうスレつくってみた。
588デフォルトの名無しさん:2008/09/09(火) 06:27:01
アップローダもなしに何をどう公開しろと・・・
589デフォルトの名無しさん:2008/09/10(水) 14:49:55
板違いで失礼します。
Linux環境にてDelphi互換のLazarusをインストールして使いたいと思い
freePascal本体、Freepascalのソース、Lazarus本体をインストール致しました。
Lazarusは立ち上がり、ソース入力後
いざ実行というときに、コンパイラに弾かれてしまいます。

以下エラーメッセージです。
/usr/bin/ld: cannot find -lX11
project1.lpr(17,1) Error: Error while linking
project1.lpr(17,1) Fatal: There were 1 errors compiling module, stopping

リンク関係の設定を何かはじめに行なわないといけないのでしょうか?
もし、ご存じの方いらっしゃいましたらご教授ください。
よろしくおねがいします。
590デフォルトの名無しさん:2008/09/10(水) 18:39:03
>>589
とりあえずこういうスレがあるからそちらで聞くとよいと思われ。

【Delphi互換!?】FreePascal【GPL】
http://pc11.2ch.net/test/read.cgi/tech/1137051510/l50

591589:2008/09/11(木) 09:58:00
>>590
ありがとうございました。
教えていただいた、スレを拝見致しまして
無事解決することができました!
592デフォルトの名無しさん:2008/09/12(金) 13:51:14
ウィンドウっとか、オブジェクトってフォームデザイナで作っておかないとだめなんでしょうか?
ユーザーの処理にあわせて、新しいフォームを作り、そこに画像を表示させたいんです。
元々用意しとくんじゃなくて、いくらでも増やせていけるように。

たとえばフォトショップでいくらでも画像ひらいて、どんどんウィンドウ増えるじゃないですか。
あーいう感じです。
593デフォルトの名無しさん:2008/09/12(金) 13:59:37
インスタンスをどんどん作ればいいじゃね?

TForm1=class(TForm)
end;

forms: array of TForm1

SetLenght( forms, 10 );
for i := 0 to 9 do
  forms[i] := TForm1.Create( Self );

って感じで。

これだったら、デザイナで1つ作って、実行時は10個フォームが出きるが。
594デフォルトの名無しさん:2008/09/12(金) 15:03:51
ありがとうございます。
このフォームの上につくるオブジェクトもこれでOKですかね。
いわゆる動的生成をやるってことですよね?
595デフォルトの名無しさん:2008/09/12(金) 15:13:38
そうです。

フォーム上のObjectが同じなら最初にデザイナで作っておく。
フォームごとに変わるなら、それぞれ、動的作成するんだけど、
動的作成しなければいけないObjectが多数ある場合は、
デザイナで作った方が簡単だと思う。

596デフォルトの名無しさん:2008/09/12(金) 15:49:30
ありがとうございました!
597デフォルトの名無しさん:2008/09/17(水) 18:27:00
>>588
アップローダー作ったら公開してくれるの?
598デフォルトの名無しさん:2008/09/18(木) 00:30:44
>>597
半年ROMれ
599デフォルトの名無しさん:2008/09/18(木) 00:35:40
---------半年後----------
600デフォルトの名無しさん:2008/09/18(木) 00:47:11
最終回か…。
601デフォルトの名無しさん:2008/09/20(土) 21:18:10
602デフォルトの名無しさん:2008/10/11(土) 15:50:00
>>529 3の倍数はアホになれ
603デフォルトの名無しさん:2008/11/18(火) 23:02:01
十年ほど初心者やってるんですが、先ほどFastCodeを知り試してみました
D5にFastCode.Libraries-0.6.4入れたらStrUtils.pasなど新しいものが入っていないので断念して
某所さんの古い記事にあった「詰め合わせセット RTL Replacement Pkg v0.3」を入れました
>Delphi 4 以降に対応しています。私はまだ試していないのですが、Delphi 7 以前では特にお勧めだと思います。
とあったのですがやはりエラーの嵐でサンプルすらコンパイル出来ませんでした

どなたかD5で使っておられる方は居ませんでしょうか?
D2007も持ってはいるんですが起動時間や手軽さからD5は手放せないのです
604デフォルトの名無しさん:2008/11/18(火) 23:27:22
すなおにD2007
605デフォルトの名無しさん:2008/11/18(火) 23:29:02
>>603
D5持ってたらなんなの?
606デフォルトの名無しさん:2008/11/18(火) 23:35:15
>>604
D2007ではFastCodeの効果ありますでしょうか?
607デフォルトの名無しさん:2008/11/18(火) 23:35:47
>>605
いえ、FastCodeの話です
608デフォルトの名無しさん:2008/11/19(水) 00:44:33
D2007はFastCodeもFastMoveもFastMMも採用済みじゃなかったっけ?
609デフォルトの名無しさん:2008/11/19(水) 02:09:08
FastCodeのAnsiStringReplaceは「Ansi」って付いてるけど
マルチバイト非対応なんで気を付けてね
610デフォルトの名無しさん:2008/11/19(水) 09:14:53
FastMMは使ってるから何か分かるが、
FastCodeとかFastMoveって何?
611デフォルトの名無しさん:2008/11/19(水) 10:24:37
グーグレ
612デフォルトの名無しさん:2008/11/19(水) 14:31:52
>>610
標準のシステムの関数を速いのにおきかえたものただし>>609の問題があったはず
613デフォルトの名無しさん:2008/11/22(土) 11:32:01
バグ恐いからFastMMしか使ってないな
614デフォルトの名無しさん:2009/02/02(月) 18:23:00
ちょうどCompareMemがネックになってたんでちょっと使ってみるかな。
615デフォルトの名無しさん:2009/02/05(木) 13:17:57
>CompareMem
kwsk
616デフォルトの名無しさん:2009/02/19(木) 15:08:18
TMemoryStreamの先頭3バイト削除したりできますか?
617デフォルトの名無しさん:2009/02/20(金) 00:23:17
だめです
先頭3バイト以降を別のStreamにコピーするとか
MemoryをPCharにキャストして[3]とか
618デフォルトの名無しさん:2009/02/20(金) 07:53:17
そもそもメモリを削除ってなによ
619デフォルトの名無しさん:2009/02/21(土) 10:04:30
cのscanf相当の関数教えて
620デフォルトの名無しさん:2009/02/21(土) 10:27:00
>>619
その前にそのscanfとやらが、Delphiでどの関数にあたるのかを説明してくれ。
621デフォルトの名無しさん:2009/02/21(土) 15:21:45
>>619
ないはず
622デフォルトの名無しさん:2009/02/27(金) 16:36:03
>>619 stdioはいまさらイランと仮定して、いっかい文字列に入れてから
strtoint strtofloat strtocurr他で一個づつ変換
623デフォルトの名無しさん:2009/03/24(火) 14:32:45
TMemoryStreamでSizeを大きくしたら、大きくなった部分NULL埋めされるんでしたっけ?
624デフォルトの名無しさん:2009/03/24(火) 15:18:41
>>623
試すのに1分もかからないと思うが、どうよ?
625デフォルトの名無しさん:2009/06/18(木) 20:49:46
Delphi2009 を使っています。

VCLコンポーネントから派生したコンポーネントを
作るにはどうすればいいでしょうか?
626デフォルトの名無しさん:2009/06/18(木) 21:05:12
ウィザード一発じゃねぇの?ファイル→新規作成→その他あたり。
627デフォルトの名無しさん:2009/06/18(木) 21:10:00
>>626
ありがとうございます。
派生したコンポーネントを使いたいのですが
どうすればいいでしょうか?

フォームに派生クラスのコントロールをどうやって置いたら
よいのかわからなくて、適当なコントロールを置いた後に
dfm ファイルを直接書き換えてみたのですが、見つからない
と言われた挙げ句、関連している pasファイルを破壊されて
しまいました。

628デフォルトの名無しさん:2009/06/18(木) 21:14:31
コンポーネント開発は開発者ドキュメントと適当な解説書買って読まないと辛いよ。
OOPの知識なんかも結構必要になるし。
629デフォルトの名無しさん:2009/06/18(木) 21:17:15
>>628
ありがとうございます。

ただ単純に TRadioButton の CreateParams を
オーバライドしたいだけなのです。
630デフォルトの名無しさん:2009/06/18(木) 21:26:52
以下のようなユニットを通常の手順で作ってあとはIDEからコンポーネント|インストールで登録。
2009は持ってないから変わってるかもしれないが。

unit cMyRadioButtonEx;

uses // todo:必要なユニットを列挙

type
    TRadioButtonEx = class(TRadioButton) // or TCustomRadioButton;
        ...
    end;
   
procedure Register;

implementation

procedure Register;
begin
    RegisterComponents('Samples', [TRadioButtonEx]);
end;

// todo: TRadioButtonExの実装

end.
631デフォルトの名無しさん:2009/06/18(木) 21:31:53
>>630
メニューには、コンポーネント|インポートと
コンポーネント|新規VCLコンポーネントの
2種類しかなく、インポートはタイプライブラリと
ActiveXコントロール、.NETアセンブリの取り込み
の3種類しかありませんでした。

新規VCLコンポーネントで派生クラスを作れるような
雰囲気でしたが、実際に操作してみると内部エラー
らしきエラーが出て処理が進まないのです。

Delphi2009はバグだらけという事で諦めるしかないの
でしょうか?
632デフォルトの名無しさん:2009/06/18(木) 21:36:29
いまさらデルピィやる意味あんのか?
gui作るならpythonで十分だろ
633デフォルトの名無しさん:2009/06/18(木) 21:37:49
>>632
6万もしたのに、この有様です。
泣けてきます。
634デフォルトの名無しさん:2009/06/18(木) 21:43:29
一人で舞い上がってないで操作手順とエラーメッセージくらい書けばいいのに。
CreateParamで具体的に何指定したいかとかさ。
635デフォルトの名無しさん:2009/06/18(木) 21:45:56
>>634
ありがとうございます。

BS_PUSHLIKEスタイルを付けたいだけなのです。
636デフォルトの名無しさん:2009/06/18(木) 21:52:31
モジュール 'coreide120.bpl'のアドレス 206B39D7で
アドレス 00000018 に対する読み込み違反がおきました。

というエラーです。
637デフォルトの名無しさん:2009/06/18(木) 22:28:28
ウィザード使わなくたって手で書けばいいじゃん
できたユニットをパッケージにつっこんで
右のプロジェクトマネージャからパッケージを右クリック→
インストールを選択で終わりだろ
638デフォルトの名無しさん:2009/06/18(木) 22:32:54
>>637
それを試してみたら 636 に書いた例外が
発生して止まってしまいました。

フォームの dfm を手で編集してみると、
その フォームに関係する Pascalのソースファイルが
破壊されます。
639デフォルトの名無しさん:2009/06/18(木) 23:36:41
unit RadioButton1;

interface

uses
 SysUtils, Classes, Controls, StdCtrls;

type
 TRadioButtonEx = class(TRadioButton)
 end;
640デフォルトの名無しさん:2009/06/18(木) 23:37:07
procedure Register;

implementation

procedure Register;
begin
 RegisterComponents('Samples', [TRadioButtonEx]);
end;

end.
641デフォルトの名無しさん:2009/06/18(木) 23:38:09
↑にCreateParamsを実装、パッケージに入れて>>637
642デフォルトの名無しさん:2009/06/19(金) 01:06:47
>>638
暇だから作ってみた
ttp://swfup.info/view.php/11076.swf
サイズ情報が間違ってるっぽいので"保存用リンク"を
クリックして見てくれ
643デフォルトの名無しさん:2009/06/19(金) 03:57:52
update 3/4は適用した?
644デフォルトの名無しさん:2009/06/19(金) 04:53:37
>>643
エラーが出るとか言っているから入れてなさそうだよな
645デフォルトの名無しさん:2009/06/19(金) 11:41:58
>>642
そのまま見れるように直してみた。URLはそのまま
646ミ,,゚Д゚彡 ◆A6VzDeLphI :2009/06/19(金) 12:27:46
親切ですね
647デフォルトの名無しさん:2009/06/19(金) 13:32:54
>>638
ここからUpdate3を落としてインスコしてね
ttp://cc.embarcadero.com/item/26921
日本語Readme ttp://edn.embarcadero.com/article/39592/

>>646 暇は世界を救う
648デフォルトの名無しさん:2009/06/22(月) 16:23:41
楽しい。

type
 TRecHoge = record
  X: Integer;
  Answer: string;
 end;

function Hoge(value: Integer): TRecHoge;
var
 returnValue: TRecHoge;
begin
 if value = 1 then begin
  returnValue.Answer := '戻り値をセットしました。';
  Result := returnValue;
 end;
end;

procedure HogeCall;
var
 buf: TRecHoge;
begin
 buf := Hoge(0);
 ShowMessage(buf.Answer);
 buf := Hoge(1);
 ShowMessage(buf.Answer);
 buf := Hoge(0);
 ShowMessage(buf.Answer);
end;
649デフォルトの名無しさん:2009/06/22(月) 16:33:49
Result または関数名に値を代入せずに関数の実行が終了した場合,関数の戻り値は未定義になります。
650デフォルトの名無しさん:2009/06/22(月) 16:46:58
>>649
その通りなんだけど、レコード型を戻り値にした場合はコンパイラが警告出さないんだよね。
651デフォルトの名無しさん:2009/06/22(月) 16:57:06
value=0のときの記述をするかローカル変数は前もってクリアしておく
このクセを付ければどの言語に移ってもおk
652デフォルトの名無しさん:2009/06/22(月) 16:58:06
日本語がおかしいやw
ローカル変数を前もってクリアしておくというクセを付けとけばいいよと
653デフォルトの名無しさん:2009/06/22(月) 17:50:33
>>652
この場合、ローカル変数をクリアするのは解決にならないと思われ
654デフォルトの名無しさん:2009/06/23(火) 17:32:25
Windowsのフォルダ選択ダイアログって開けましたっけ?
655デフォルトの名無しさん:2009/06/23(火) 18:31:00
> SGet: String;
> if WinExec( PChar( SGet), SW_SHOW) < 31 then

>[DCC エラー] main.pas(1314): E2010 'Char' と 'AnsiChar' には互換性がありません

D2009だと何でエラーになるのですか?
656デフォルトの名無しさん:2009/06/23(火) 19:49:14
>>664
SelectDirectory?

>>655
http://edn.embarcadero.com/jp/print/38791

って、ここは質問スレじゃない気がする
657デフォルトの名無しさん:2009/06/23(火) 21:32:38
ここは未来の質問に答えるスレですか?
658654:2009/06/25(木) 08:58:33
>>656
SelectDirectoryってWin標準じゃないですよね?
659デフォルトの名無しさん:2009/06/25(木) 09:04:54
Delphiの関数でしょ。
660デフォルトの名無しさん:2009/06/25(木) 09:20:05
661デフォルトの名無しさん:2009/06/25(木) 12:47:10
>>648
しばらく触ってなかったが、俺のDel7では
 TRecHoge = record
ですらエラーで受け付けん・・・?何が不正な文字列だ?
662デフォルトの名無しさん:2009/06/25(木) 12:48:02
全角スペースが混ざってるとかじゃないの
663デフォルトの名無しさん:2009/06/25(木) 15:27:32
うわ、インデントの前のスペースだった・・・
こんなだったっけ?
コピペでそのまま使えた気がするけどな
664デフォルトの名無しさん:2009/06/25(木) 18:26:52
全角スペースでインデントすると手っ取り早いからね。
&nbsp;にすればコピペだけでちゃんと動く。

>>650
構造体にはフィールドの内容によってゴミのままの部分も出てくるから
全部代入するのを強制するのは無駄って話だね。

type // Win32APIでまれによくある構造体
    TMyRec = record
        flags: byte; // foo, bar, bazを使うかどうかを指定するビットフラグ;
        foo: Integer;
        bar: Char;
        baz: String;
    end;
     
665デフォルトの名無しさん:2009/07/10(金) 21:28:27
久しぶりに Delphi2009 使ってみたけど、
Update3/4 適用済でもダメだわこれ。
666デフォルトの名無しさん:2009/07/11(土) 10:09:37
Delphi2.0使えば?
667デフォルトの名無しさん:2009/07/11(土) 15:59:56
>>665
どこがどうだめなの?updateしようと思ってるんだけど
668デフォルトの名無しさん:2009/07/11(土) 21:51:37
お勧めは Delphi8
669デフォルトの名無しさん:2009/07/11(土) 22:18:04
>>668
Del7だろ常考
670デフォルトの名無しさん:2009/07/12(日) 13:03:31
結局、どうダメなのかよ。generics周りですかね
671デフォルトの名無しさん:2009/07/16(木) 08:56:16
F1キーを押したときの処理を書きたいのですが、
フォーム毎に書くと大変なので、
TApplicationにやらせたいと思っていますが、
できますか?
672デフォルトの名無しさん:2009/07/16(木) 11:15:06
TAppじゃなくTMyForm/TFormEx=class(TForm)でやったら。
これに共通の処理足しまくるとめっちゃ快適になる。
で、使うときはTForm1 = class(TFormEx)とかに書き換えるだけ。

自分ならTAction継承した独自のアクションに
F1のショートカット設定してそっちに振るけどな。
673デフォルトの名無しさん:2009/07/16(木) 11:17:29
なるほど、TFormExも検討してみまつ
674foi.americanprogress.org:2009/08/17(月) 17:49:50
自動焼人 ★ = 自動保守 ◆KAWORUKOFI = 自動保守#K9K?_D[L

名言集 その1
『アパッチ砲はワシが作った』

http://jbbs.livedoor.jp/bbs/read.cgi/internet/134/1229674638/5062
自分の管理するしたらばで借りた掲示板にて

> 5062 :自動保守 ◆AOIMAD.NZM [] :2009/08/16(日) 00:46:29 ID:nQYgq9jg0
> そもそも、アパッチ砲っていうのは、私が指揮官になった時代に私の先輩たちが導入して
> 先輩たちが命名したもの、っていうかまぁ、そういう砲は今まで存在してないから
> 名前つけなくちゃいけないしw
>
> ってことで、使っているうちに広まった名前なので、それが正式名称になるんじゃないかと。
>
> http://www.paradisearmy.com/doujin/pasok_apache.htm(俺の先輩が命名)
> http://www.paradisearmy.com/doujin/pasok_hping.htm(俺が命名?)

※注 「アパッチ砲」の正式名称は「Apache Jmeter」で、もちろん自動焼人の先輩が作ったものではありません


----------------------------------------------
この自動焼人 ★メールマガジンの配信停止をご希望される方は
http://qb5.2ch.net/test/read.cgi/sec2chd/1250169591/
にて自動焼人 ★までご連絡ください
675デフォルトの名無しさん:2009/08/21(金) 00:58:10
動的配列どころかIntegerですら危険だよ。
threadvar以外のものは全部保護すべき。
676デフォルトの名無しさん:2009/09/09(水) 10:00:19
Del5で作ったアプリをDel2007に移行してるんだけど、
ボタンを貼り付けても、今風の角が取れたボタンになるFormと、
昔ながらの角張ったボタンになってしまうFormに分かれてしまう。
ボタンのプロパティいじっても今風にならないんだが、なぜなんだ?
677デフォルトの名無しさん:2009/09/09(水) 10:59:57
同じように貼ってみて
両方コピーしてメモ帳とかに張ってみたら異なるプロパティ判るんじゃないかな?
678676:2009/09/09(水) 11:28:42
>>677
なるほど!
早速やってみます。
679デフォルトの名無しさん:2009/09/09(水) 11:32:21
ALT+F12使えよ。
680デフォルトの名無しさん:2009/09/10(木) 23:39:57
is演算子、as演算子は
C++でいうdynamic_castとほぼ同じような物ですか?
681デフォルトの名無しさん:2009/09/12(土) 03:25:53
未だにD6使いのバカ野郎です。
次の環境を模索してます。

.Net ですか? Win32ですか?

Delphi(Object Pascal)は生き残りますか?

D6から成長してない45歳、会社で唯一人のプログラマっす。
682デフォルトの名無しさん:2009/09/12(土) 09:03:21
BCB++で両方やればいいじゃん
683デフォルトの名無しさん:2009/09/12(土) 09:11:13
>会社で唯一 人のプログラマ
他のヤツは人じゃないのか
684デフォルトの名無しさん:2009/09/12(土) 10:09:25
ただひとりw
685デフォルトの名無しさん:2009/09/12(土) 16:51:07
Delphiが生き残ってると言える状況かどうかは別にして
45歳ならDelphiより自分の職業プログラマ人生の方が先に終(ry
686デフォルトの名無しさん:2009/09/12(土) 17:43:54
でも、プログラマただ一人ってよくないか?そういうところは開発メインじゃないだろうし。
いわゆる、近所のPCの便利屋さんみたいな立場。
すごい重宝がられているはずだが。
687デフォルトの名無しさん:2009/09/12(土) 17:44:37
>>681
マジレスすると.NET(C#)だろ。
688デフォルトの名無しさん:2009/09/13(日) 17:02:36
D6で事足りるならD6でいいんじゃない?
Win32で事足りるなら・・・

自営や零細相手に細々とやってるがまだまだD7でいけそう。
用途次第、客ありきなら相手次第やね。維持>発展ならw
689デフォルトの名無しさん:2009/09/15(火) 03:12:17
これだけ普及したWin32がそうそう無くなるわけないし、
Win32上でWin16がエミュレーションで動いているようにWin64上にもWin32のエミュレーションがあるから、
仮にWin64がメインストリームになったとしてもWin32で事足りる場面が多いと思う
現実的に考えるとWin64がメインになるのはまだまだ先のことだろうしWin32は安泰
690デフォルトの名無しさん:2009/09/16(水) 13:49:53
D6からD2010にすれば、ドトネト、Win32/64、カバーになるんじゃね?
さらにDelがARMプロセッサも将来サポートするとか逝ってるし、って組み込み不要なんだろw
なら、ドトネト系なんか捨てといて、スクリプト系のウェブアプリ作れるようになった方がプラスかも。
691デフォルトの名無しさん:2009/09/16(水) 14:25:47
そこまでDelに頼ってやる必要も時間もねーなw
692デフォルトの名無しさん:2009/09/16(水) 15:04:34
その前に質問者はすでにDel厨wwwww
693デフォルトの名無しさん:2009/09/19(土) 22:20:34
言語がひとつしかできないやつって終わってるね
694デフォルトの名無しさん:2009/09/19(土) 22:26:34
Delphi程度なら片手間で習得できないとお話にならない
695デフォルトの名無しさん:2009/09/20(日) 01:29:39
>>693
日本語しかまともに喋れない大半の日本人終わったな
696デフォルトの名無しさん:2009/09/20(日) 10:15:11
日本語すらもまともに書けないねらー達はどうなる?
697デフォルトの名無しさん:2009/09/20(日) 17:31:27
Del厨になる
698デフォルトの名無しさん:2009/09/24(木) 16:50:32
メインフォームじゃないウィンドウで最小化ボタンを押すと、
タスクバーに入らずデスクトップ左下にアイコン化してしまう(ためタスクバーから復帰できない)のですが、
対処方法はありますか?
699デフォルトの名無しさん:2009/09/24(木) 17:40:20
700デフォルトの名無しさん:2009/09/24(木) 17:55:27
d>>699

しかし、ビミョにやりたいことと違う。。。
701デフォルトの名無しさん:2009/09/24(木) 18:30:41
>>698
子窓を最小化したときにタスクバーに入れたいなら
ttp://www2.big.or.jp/~osamu/Delphi/Tips/edit.cgi?file=0232.txt&rev=1.3

アプリケーションごと仕舞いたいなら
ttp://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/samples/01178.html
702デフォルトの名無しさん:2009/10/17(土) 23:35:42
delphi5の初心者です。コンボボックスで「3」を選択した際に、
グリットを可変させて、変数ABCを
1,1にA 1,2にB 1,3にCを
グリット内に書き出したいのですが、わかりません。
どなたか、お知恵を拝借したく思います。
突然の乱入すみません。よろしくお願いします。

procedure TForm1.ComboBox1Change(Sender: TObject);
var
x :integer ;
y :string ;
lp:integer;
z :string;

begin
z:='ABC';
x:=combobox1.ItemIndex ;
y:=combobox1.Items[x];

StringGrid1.RowCount:=StrToInt(y)+1;

// 項目部設定
StringGrid1.Cells[1,0] := '東京';
StringGrid1.Cells[2,0] := '大阪';
StringGrid1.Cells[3,0] := '沖縄';

for lp:=1 to strtoint(y) do begin
StringGrid1.Cells[0,lp] := inttostr(lp);

703デフォルトの名無しさん:2009/10/20(火) 00:26:33
変数ABCなんて無いじゃん
704デフォルトの名無しさん:2009/10/28(水) 14:19:49
Delphi6のプロジェクトをDelphi2010に移行してとりあえずコンパイルできるようにしようと思って
Char→AnsiChar string→AnsiStringで置換掛けてコンパイルしてみました。
ところが実行時にStrToIntでエラーが出ます。
処理するレコードは固定長レコードなのですがある項目が全角日本語だったり半角だったりするために
Ansiにしたことで変換対象のロケーションが以前と違っていることが判りました。
StrToIntの引数は固定長だしと直値で指定している箇所がたくさんあり、
全角半角を判定してとかはやりたくないのですがいい方法は無いでしょうか?
705デフォルトの名無しさん:2009/10/28(水) 15:39:11
何気に2005以前のユーザーは年末までに買えばアップグレード料金でとか
いう戦略でアップグレードしてる奴多そうだな。
706704:2009/10/28(水) 18:35:39
すいません、他スレで聞いてみるので質問を取り消します。
707デフォルトの名無しさん:2009/11/14(土) 15:36:17
delphi5と6(フリー版)、TURBODELPHIを使っています。
次のようなプログラムを考えています。

プログラムを起動

ファイル(群)を選択

選択したファイル(群)をプログラムに取り込み(一つのファイルにする)パスワードをかける。

取り込み処理終わり


復元処理

プログラムを実行、パスワードを入力

一定回数パスワードを間違えたら、プログラムごとファイルを消去。

こういう事って可能ですか?
取り込み処理では圧縮をしてもしなくても構いませんが、最終的に一つのファイルになるのが必須です。
708デフォルトの名無しさん:2009/11/14(土) 16:31:36
そりゃできるのは当たり前だけど、そういう動作はいかがなものかと思うが
709デフォルトの名無しさん:2009/11/14(土) 16:33:13
第一自身を消去したところであらかじめコピーをされてたら何の意味もない
710707:2009/11/14(土) 19:38:02
>>708、709

>>あらかじめコピーをされてたら何の意味もない
それについては次のステップの課題なんだけど、コピーをされたら内部で「パスワード」を変更するようにする。
つまり、永久に開く事が不可能となる、というのを考えている。

>>そういう動作はいかがなものかと思うが
これは、セキュリティ対策の一環としてアイデアが出たモノで、これで決定というわけではない。
ただ、試行して結果が好ましかったら本採用になる。
というわけで、いくつかある仕様の一つなので、今の段階では善し悪しが判定できない。


という事情があります。
711デフォルトの名無しさん:2009/11/14(土) 19:48:14
>>710
コピーされたかどうかが分かるぐらいなら、ソフトの不法コピー問題なんて起こらないよ
712デフォルトの名無しさん:2009/11/14(土) 22:09:53
>710
なんか根本的なところが間違ってる、とまではいわないまでも、考え違いをしているような気がする。
もういちどスタートラインに戻って考え直してみてはいかが?
713デフォルトの名無しさん:2009/11/15(日) 02:54:06
>>710
それが可能かどうか判断が付かないレベルでは、作るのは到底無理だと思うよ
714デフォルトの名無しさん:2009/11/15(日) 02:56:31
>>711
ファイルシステムから作れば可能ではあると思うよw
715デフォルトの名無しさん:2009/11/15(日) 08:45:08
>>710
まず先に、OSのファイルコピーなどをフックするrootkitをインストールか動作させる必要があるなw
716デフォルトの名無しさん:2009/11/15(日) 08:47:03
ああでも、あらかじめコピーしたら意味ないかw他のOSでブートしてコピーとか、ファイル共有越しにコピーとかいくらでも方法あるな
717デフォルトの名無しさん:2009/11/15(日) 09:42:22
すべてのOSに常駐してコピーを監視するウィルスのようなソフトを作るとかw
718デフォルトの名無しさん:2009/11/15(日) 18:04:25
6なんですが、本体が手に入ったとして、インストール番号とかは現在も取得できるのでしょうか?
以下のURLを見ると、インストール番号などがないと使用許諾コードを取得できないようなのですが。
http://edn.embarcadero.com/article/33580
719デフォルトの名無しさん:2009/11/15(日) 18:16:41
電話すればいいんだっけ?
720デフォルトの名無しさん:2009/11/18(水) 22:29:21
http://www.eurus.dti.ne.jp/~yoneyama/Word/art/w_art-33.gif
delphiで画像の一番上左から4番目のワードアートと似たような文字を表示したいのですが、
可能でしょうか?
win32apiのパスを使えばできそうだけど、分からないですorz
721デフォルトの名無しさん:2009/11/18(水) 23:36:43
ok
722デフォルトの名無しさん:2009/11/20(金) 11:01:05
>>720
Officeのワードアート機能を使うサンプルは見たことがあるけど
直接表示するのは知らないなあ。
723デフォルトの名無しさん:2009/11/20(金) 20:42:25
724デフォルトの名無しさん:2009/11/21(土) 20:56:27
>>723
そんな感じです!文字を変形させるのに使う計算が理解できなくて苦しんでます。

http://www.geocities.jp/asumaroyuumaro/program/winapi/path/flattenpath.html
これを元にやってみてはいるんですが、うまくいかないorz
725デフォルトの名無しさん:2009/11/26(木) 17:43:14
までも無料版のdelfaiってあるのですか?
726デフォルトの名無しさん:2009/12/01(火) 19:06:18
誰かくだすれ建てないのかな
俺のホストじゃ無理だった
727デフォルトの名無しさん:2009/12/02(水) 00:20:06
728デフォルトの名無しさん:2009/12/03(木) 17:30:13
デルフォイ デルフォイ
729デフォルトの名無しさん:2009/12/05(土) 00:23:18
TMemorystreamの基本的な使い方を教えて下さい。
・整数値を書き込む、読み出す
・文字列を書き込む、読み出す
・あるアドレスからあるサイズだけ読み出すってのがわかりません。
730デフォルトの名無しさん:2009/12/05(土) 01:53:26
マルチ乙
731デフォルトの名無しさん:2009/12/05(土) 09:00:01
>729
その前に派生元であるTStreamの使い方を調べるべきだ。

>730
またお前か。さっさと吊れ。
732デフォルトの名無しさん:2009/12/05(土) 16:02:24
さっさと吊れ(キリッ

だってw
くっさww
733デフォルトの名無しさん:2009/12/05(土) 19:53:23
キモイ
734デフォルトの名無しさん:2009/12/05(土) 23:01:04
>>732
       _, ._   んもー / NMO
     ( ・ω・)
     ○={=}〇,
      |:::::::::\, ', ´
   .wwし w`(.@)wwwwwwww
735デフォルトの名無しさん:2009/12/05(土) 23:57:36
さっさと吊れ(キリッ

だってv
くっさvv
736デフォルトの名無しさん:2009/12/07(月) 22:09:28
case文なんてelseifがあればいらねんじゃね
737デフォルトの名無しさん:2009/12/07(月) 23:14:26
     /: : : : : __: :/: : ::/: : ://: : :/l::|: : :i: :l: : :ヽ: : :丶: : 丶ヾ    ___
     /;,, : : : //::/: : 7l,;:≠-::/: : / .l::|: : :l: :|;,,;!: : :!l: : :i: : : :|: : ::、  /     ヽ
    /ヽヽ: ://: :!:,X~::|: /;,,;,/: :/  リ!: ::/ノ  l`ヽl !: : |: : : :l: :l: リ / そ そ お \
   /: : ヽヾ/: : l/::l |/|||llllヾ,、  / |: :/ , -==、 l\:::|: : : :|i: | /   う う  前  |
.   /: : : //ヾ ; :|!: イ、||ll|||||::||    ノノ  イ|||||||ヾ、 |: ::|!: : イ: ::|/   な 思 が
   /: : ://: : :ヽソ::ヽl |{ i||ll"ン    ´   i| l|||l"l `|: /|: : /'!/l     ん う
 ∠: : : ~: : : : : : : :丶ゝ-―-      ,  ー=z_ソ   |/ ハメ;, :: ::|.   だ ん
   i|::ハ: : : : : : : : : : : 、ヘヘヘヘ     、  ヘヘヘヘヘ /: : : : : \,|.   ろ な
   |!l |: : : : : : : : :、: ::\    、-―-,      / : : :丶;,,;,:ミヽ   う  ら
     丶: :ハ、lヽ: :ヽ: : ::\__  `~ "      /: : ト; lヽ)   ゝ
       レ `| `、l`、>=ニ´        ,  _´ : :} `   /
         ,,、r"^~´"''''"t-`r、 _  -、 ´ヽノ \ノ   /    お ・
       ,;'~  _r-- 、__     ~f、_>'、_         |  で  前 ・
      f~  ,;"     ~"t___    ミ、 ^'t         |  は  ん ・
      ,"  ,~         ヾ~'-、__ ミ_ξ丶     |  な  中 ・
     ;'  ,イ ..          ヽ_   ヾ、0ヽ丶    l         /
     ( ;":: |: :: ..          .`,   ヾ 丶 !    \____/
     ;;;; :: 入:: :: ::      l`ー-、   )l   ヾ 丶
     "~、ソ:: :い:: :     \_  ノ ,    ヾ 丶
738デフォルトの名無しさん:2009/12/07(月) 23:23:22
まあ、10年ぶりにプログラム組もうとしたら、すっかり
頭の中がリセットされていたことに笑いが止まらなかった。
739デフォルトの名無しさん:2009/12/08(火) 08:17:29
ならデルヒなんてやめとけ
740デフォルトの名無しさん:2009/12/08(火) 14:12:11
>>739
      ____
     /      \
    /|   _ =    ミ
   彡  -、 , 、 _,-  ミ _
   { `| ,=・ァ = ,r・=、, |´ }
   ヽ{!  '" , ',:、 '" ,' |}ノ   黙れ小僧!
    |  /`'ー'"ヽ- ト、
__,.-ヽ ノー=-' } /:: \_
: : : : : :/`ー、__ノ-'/ : : : |: :`ー
: : : : く: /:| \_,.-"/:: : : : |: : :
: : : : /: : :|/|:::∧ /:: : : /: : :
: : : :|: : : : :| /:く /:: : : ;\: : : :
: : : :|: : : : :|'::::::::/: : :◎: :/: : : :
741デフォルトの名無しさん:2009/12/11(金) 16:05:26
TStringGridを継承したコンポーネントを作ってるんですが、設計の都合でVCLのGrid.pasを
改造する必要が出てきました。

今作ってるコンポーネント以外にはGrid.pasの変更を波及させたくないので、コンポーネントの
プロジェクトからだけ改造したGrid.pasを参照するようにしたいんですが、うまく行きません。
ソースコード上はAlt+↑で継承元を辿っていくとちゃんと改造したGrid.pasに辿り着くんですが、
いざコンパイルを掛けるとTCustmoGridに追加した変数が認識されずエラーとなります。

こういう場合はどうしたら良いでしょうか?

 A.諦めて継承先のコンポーネントで何とかする
 B.DELPHIが参照しているVCL本体を置き換える。
 C.改造したGrid.pasをGrid2.pasのように別名保存し、コンポーネントのプロジェクト内では
  Grid.pasの代わりにGrid2.pasを参照する。

のような案を考えましたが、他に何か良い案が有れば宜しくお願いします。
742デフォルトの名無しさん:2009/12/11(金) 16:14:00
修正部分だけコーディングしてあとは元のコードを使うようにできるんじゃなかったっけ?
それくらいじゃ対処できないってんならC案だろうけど。
743デフォルトの名無しさん:2009/12/11(金) 16:43:05
>>741
プロジェクトのフォルダに改造したGrid.pasを入れればそっちを参照するんじゃない?
その方法が開発チーム内で許されていればだけど。
744デフォルトの名無しさん:2009/12/12(土) 00:33:54
そもそもGrid.pasを改造する必要が本当にあったのか
745741:2009/12/14(月) 03:56:07
今作ってるプロジェクトはパッケージなんですが、通常のプロジェクトとは違って>>743の方法が使えないみたいです。
containsにGrids.pasを書くと、
「パッケージ 'vcl' はすでにユニット 'Grids' を含んでいます」
というエラーが発生してコンパイルできません。
containsに書かずにプロジェクトのソースディレクトリにGrids.pasを置くとvclパッケージ内部のGrids.pasが優先して参照されてしまいます。

継承先でどうにかする方法も模索中ですが、TCustomGridがprivateで持っているメンバーにたくさんアクセスする必要があるため難航しています。
746デフォルトの名無しさん:2009/12/14(月) 10:30:49
ひょっとして「実行時パッケージを使って構築」にチェック入れてる?
vclを外す事は許されないんだろうか。
747デフォルトの名無しさん:2009/12/14(月) 13:53:58
>>745
対象バージョンが固定ならprivateメンバーにアクセスする方法はいくらでもある
まあ別にバージョン固定じゃなくてもその分分岐すればいいんだけど
748741:2009/12/17(木) 19:21:57
>>746

チェックは入れていません。
というかチェックボックスが触れない状態です。

>>747

例えばどんな方法が有るでしょうか?
749デフォルトの名無しさん:2009/12/17(木) 22:12:16
すみません。教えて下さい。

TClientDataSet が保っているデータセットを
結合して1つのDBGridに表示したいのですが、
どうすればいいでしょうか?

宜しくお願いします。
750デフォルトの名無しさん:2009/12/17(木) 23:15:32
>>749
一方のDataSetにFieldKindがfkLookupの
TFieldを用意し、他方のDataSetを参照すればいけそう。な気
がする。

やり方
ttp://docwiki.embarcadero.com/RADStudio/ja/参照項目を
定義する
751デフォルトの名無しさん:2009/12/17(木) 23:25:32
>>748
最初に確認すべきだったけど、Delphiのバージョンとエディションは?
752デフォルトの名無しさん:2009/12/17(木) 23:45:34
>>750
的確なアドバイスありがとうございました。

これで眠れそうです。
753デフォルトの名無しさん:2009/12/18(金) 00:05:15
>>748
TObjectからTCustomGridまでに宣言されてるすべてのメンバー変数を抽出して、
それをレコードか何かとして宣言して、インスタンスをそのレコードでキャストすれば直接アクセスできる
それぞれの変数間に詰め物もあるけど、その辺はデバッガでメモリ覗く等して一度調べればOK
多少語弊があるかもしれないけど、簡単に言えばクラスってのは継承できるレコードに過ぎないからね

他にもprivate変数をpublicにしただけのクローンクラスを作ってキャストしても同じ効果が得られる
もちろん目的のprivate変数自体のオフセットが分かってればインスタンスアドレスから直接取り出した方が早いけど
ただしこの説明で何やってるかピンと来なければ危険なのでやらない方がいい
754デフォルトの名無しさん:2009/12/19(土) 03:15:07
オブジェクト指向における継承の概念をしっかり理解しない人が
コンポーネント改造しようだなんて10年早い
755デフォルトの名無しさん:2009/12/19(土) 04:03:16
こういうことを書いてる人が本当に理解できてた例を見た試しがない
756デフォルトの名無しさん:2009/12/19(土) 04:49:30
ftTimestamp型が使えなくて泣いてみたりして
757デフォルトの名無しさん:2010/01/13(水) 14:25:34
フォルダ作成機能付きのフォルダ選択ダイアログありますか?
758デフォルトの名無しさん:2010/01/13(水) 14:33:43
>>757
SelectDirectory(Delphi2009で確認)
759デフォルトの名無しさん:2010/01/13(水) 16:19:00
BDEを使わずにODBCアクセスってどうやれば良いですか?
760デフォルトの名無しさん:2010/01/13(水) 20:57:58
がんばる
761デフォルトの名無しさん:2010/01/14(木) 00:03:06
つActiveX
762デフォルトの名無しさん:2010/01/14(木) 14:09:31
ActiveXでODBCアクセスって出来ましたっけ?
763デフォルトの名無しさん:2010/01/15(金) 10:30:36
ADOがあるじゃない
764デフォルトの名無しさん:2010/03/24(水) 23:33:45
765デフォルトの名無しさん:2010/03/27(土) 18:22:08
Delphi の購入で、Pro版かEnt版かで悩んでいます。
開発ターゲットは、SQLServerを使うDBアプリです。

Ent版ならSQLServerのNativeDriverが付いてきますよね。
でも、Pro版でもADOやODBC経由でSQLserverを使えるはず。

ADOやODBC経由と比較し、NativeDriveerが使えるメリットって、
何があるのでしょうか?
766デフォルトの名無しさん:2010/03/27(土) 18:31:43
・Delphi付属のDBコンポーネントが使える
・SQLServerの全機能をDelphiから扱える
767デフォルトの名無しさん:2010/03/27(土) 21:07:41
リモートでDBXを使える(ProはDBXをリモートで使えない)。
768デフォルトの名無しさん:2010/04/03(土) 18:51:03
>>767が、とっても重要で見落としてはいけないことを言った
769デフォルトの名無しさん:2010/04/07(水) 18:11:25
フォームのクライアント領域の一部に長方形や円を描きたいと思い、フォームのOnPaintで

Self.Canvas.Brush.Color := clBlack;
Self.Canvas.Rectangle(10, 10, 200, 100);

のようにしました。
この描画結果をデザイン時でもに見えるようにするにはどうしたら良いでしょうか?
フォーム自体のコードではデザイン時に無反応なので無理だと判断しています。

そこで、試しにカスタムコンポーネントTDrawTestを作って

constructor TDrawTest.Create(AOwner: TComponent);
begin
 inherited;
 if AOwner is TForm then begin
  FParent := TForm(AOwner);
  FParent.OnPaint := Self.ParentDraw;
  FParent.OnResize := Self.ParentDraw;
 end;
end;

procedure TDrawTest.ParentDraw(Sender: TObject);
begin
 FParent.Canvas.Brush.Color := clBlack;
 FParent.Canvas.Rectangle(10, 10, 200, 100);
end;

のようにしてやり、このコンポーネントを対象のフォームに配置しました。
すると、デザイン時にフォームをリサイズした時に長方形が描画されたのですが、フォームを他の画面の後ろに隠して再び前に出した時など、サイズ変更が伴わない再描画処理では長方形が描画されませんでした。
処理対象のイベントを増やしていけば一応は動作するのでしょうが、根本的に方法がおかしいような気もします。
何か良い方法は無いでしょうか?
770デフォルトの名無しさん:2010/04/07(水) 20:03:16
新規作成→ダイアログで作ったダイアログでOKを押しても
条件によって、そのダイアログを表示し続けるにはどうしたらいいですか?
771デフォルトの名無しさん:2010/04/07(水) 22:21:30
フォーム(ダイアログ)のOnCloseQueryでCanCloseにFalseを設定する。
772770:2010/04/08(木) 10:10:55
トンです。
773デフォルトの名無しさん:2010/04/13(火) 17:59:42
IdHTTPでgetメソッド行うときってtimeout設定出来ましたっけ?

timeoutでググルと下が出てきましたがエラー一覧だった:

ttp://mrxray.on.coocan.jp/Delphi/plSamples/772_Indy_HTTPGet.htm
774デフォルトの名無しさん:2010/04/14(水) 00:28:13
Indy10ならTIdHTTP.ReadTimeoutはどう?
775773:2010/04/14(水) 11:42:49
C++ Builder 6なので、TIdHTTP.ReadTimeoutが無いみたいです。

実際に発生しているエラーは、
Getメソッドを繰り返し行って4回目くらいに、Connection Closed Gracefully、が発生です。
どうもPCのスペックが悪いのか(Win7のネットブック)、時間がかかってるのが目に見えるようなのでやっぱタイムアウトかな、と思います。
776デフォルトの名無しさん:2010/04/14(水) 13:54:12
Gracefullyの意味を辞書で調べてくるといいと思うよ^^
777773:2010/04/14(水) 13:58:30

ttp://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200512/05120092.txt
(FTPですが)にも書いてあるように、
VCLコントロールが内部から投げてる例外って意味ですが、
やっぱ、その場合にもエラー処理を行うのが対処みたいで、
正常終了ということでは無さそうです。

実際、
>Connection Closed Gracefully
が発生しているのは、
何十〜何百台あるPCの1、2台だけっぽいです。
778デフォルトの名無しさん:2010/04/14(水) 20:08:50
ネットワークものは素人の推測でどうこうするのではなく、まずはWiresharkでパケットをキャプれ。
話はそれからだ。

TIdHTTP.ReadTimeoutはIndy9にもある。というかあんまり古いバージョンはお勧めしない。
C++Builder6ならIndy9まではあげたほうがいい。
779デフォルトの名無しさん:2010/04/14(水) 21:32:31
>>775
Connection Closed Gracefullyがでるときは大抵POSTミスやら通信ミスってるだけだろ
780デフォルトの名無しさん:2010/04/14(水) 22:24:20
Connection Closed Gracefully自体には悪い意味はなくGracefull shutdown(ttp://msdn.microsoft.com/en-us/library/ms738547%28VS.85%29.aspx)
のことだろ?たぶん。Gracefullな手順踏んで正常にコネクションが切断されただけだろ。
タイムアウトじゃねぇかな。
781デフォルトの名無しさん:2010/04/14(水) 22:33:06
うそ書いた。正常にコネクション切断されたなら、タイムアウトすると矛盾するな。
すまそ。
782デフォルトの名無しさん:2010/04/15(木) 14:24:25
HTTP 1.0と1.1の違い知ってる? 前者はコネクションをいちいち切る 後者はつなげたまま
783デフォルトの名無しさん:2010/04/16(金) 16:25:23
Delphi 2010に、TurboPower SysToolsをインストールしようとしています。
EDN(エンバカデロデベロッパーネットワーク)のWebページの通りにインストールしたのですが、
コンパイルエラーになってしまいます。
エラーメッセージとエラー箇所のコードを下記に示します。
対処方法を教えていただけないでしょうか?


■エラーメッセージは次の通りです。
 [DCC エラー] StBarC.pas(1751): E2030 case 文のラベルが重複して定義されています
 [DCC 警告] StBarC.pas(1752): W1063 指定された AnsiChar 定数 (#$84) を WideChar に
   拡大変換した結果、情報が失われました

■エラー箇所のコードは次の通りです。
 > procedure GetACode128CDigit (c : Char; var Index : Integer;
 > var bcDigitPos : Integer);
 > var
 > J : Integer;
 >
 > begin
 > case (c) of
 > #130 : bcDigits[bcDigitPos + 1] := 98; {rest are manufactured characters}
 > #131 : bcDigits[bcDigitPos + 1] := 97;  <− ★ここで上記のコンパイルエラーになります★

784デフォルトの名無しさん:2010/04/16(金) 19:05:28
AnsiChar(c)
785デフォルトの名無しさん:2010/04/16(金) 21:21:42
>>784
ありがとう。やってみます。

Delphi2010+TurboPowerSysToolsのインストール解説ページにソースコードの
変更が必要など書いてなかったです。
必要なら書いてほしいなぁ・・・
786デフォルトの名無しさん:2010/04/24(土) 06:25:15
>>783
Delphi 2010に、TurboPower SysToolsをインストールするHPって、
 http://edn.embarcadero.com/article/40498
だよな。
公式ページに掲載されてる情報なんだから、コード修正なんて不要だと思うのだが。
787デフォルトの名無しさん:2010/04/24(土) 13:21:27
やってみてから言えよ屑
788デフォルトの名無しさん:2010/04/25(日) 04:57:24
やってみました。

確かに StBarC.pas の数箇所で変更が必要です。
修正箇所は、こんな感じ。

修正前: Case c :
修正後: Case AnsiChar(c) :

修正前: if c in [...]
修正後:if CharInSet(c, [...])


>>787
批判するだけで建設的な意見を書き込めない「無能者」は、
どんな社会でも受け入れられないでしょう。
幸いにも受け入れられる社会を見つけても、そこはキミと同じ無能者
の巣窟だろうね。
789デフォルトの名無しさん:2010/04/25(日) 07:31:19
マジになんなよ
790デフォルトの名無しさん:2010/04/26(月) 03:45:29
>>788
公式だからと鵜呑みにしたのは無能じゃないの?
馬鹿なの?
791デフォルトの名無しさん:2010/04/26(月) 15:14:30
>>788
見当違いの>>786みたいなレスも社会では受け入れられないよね、無能の屑さん^^
792デフォルトの名無しさん:2010/04/27(火) 20:09:24
デルフィアン!
793デフォルトの名無しさん:2010/04/28(水) 21:01:59
スペル・デルフィン
794デフォルトの名無しさん:2010/05/10(月) 19:51:14
delphi使っている人って、
独法などで研究やっている人が多いんだよね?ちがう?
795デフォルトの名無しさん:2010/05/11(火) 00:03:18
ちがうね
796デフォルトの名無しさん:2010/05/14(金) 12:00:40
おじゃまします、IDE上で、コード上の大文字/小文字の区別をさせる、何かしらの設定みたいなものって無いんでしょうか
とりあえずヘルプなど当たってみましたが、見つけることができませんでした

例えばMessageBoxとmessageBoxを区別したい(表記が統一されていなければわかるようにしたい)のですが…
797デフォルトの名無しさん:2010/05/14(金) 12:04:26
>>796
何したいのかよくわかんないけど、検索のオプションには大小区別のオプションはあるよ。
798デフォルトの名無しさん:2010/05/14(金) 15:36:56
なるほど、レスありがとうございます

いえ、色々な人間がコーディングしていると、人によってはMessageBoxだったり、またある人はmessageboxだったり、messageBOXだったり、まちまちになるとソースが読みにくくなるんです。
まぁ一括置換をしてやれば良いんですが、できればコーディングしている段階で、その人がわかるようにコンパイルで弾いてやれないかなと思ったんです

神経質といえば神経質ですね
799デフォルトの名無しさん:2010/05/15(土) 13:46:44
Canvasにアルミのヘアライン仕上げみたいな描画をしたいのですが、
やり方載ってるページとか無いですかね?

検索してもPhotoshopでのやり方とかは出てくるんですがねぇ・・・
Bitmapに保存しておいて、それを貼り付ける方法も考えたのですが、
出来れば、コードで描きたいんですけど。

800デフォルトの名無しさん:2010/05/15(土) 18:39:30
>799
漏れはプログラムは組めるが絵心が無いんで
Illustratorでヘアライン仕上げみたいな描画をする方法を教えてくれ。
そうしたら実現コード考えてもいい。
801デフォルトの名無しさん:2010/05/17(月) 11:34:05
タイマーをいくつも使ってイベントで処理するのと、
マルチスレッドってやつ使うのとは何が違うの?
タイマー使った方がお手軽に並列処理出来ると思ったけど
違うっぽいんで教えてくだしゃぁ
802デフォルトの名無しさん:2010/05/17(月) 15:24:36
>>800

すみません、規制で書き込みませんでした。


ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1225706387?fr=shopping_search

こんな感じですが。
よろしくお願いします。

803デフォルトの名無しさん:2010/05/17(月) 15:46:02
>>801

タイマーのインターバルを50msec位にして、タイマーのイベントで100msec位かかる処理を行うとどうなりますか?
また、スレッドを50msec毎に作成して100msec位かかる処理を行うとどうなりますか?

804デフォルトの名無しさん:2010/05/17(月) 22:31:38
>801
タイマを使うってのはメインスレッドの中で処理が順次行われていくってこと。例えていうなら
中の人が5分おきに電話で起こされて仕事をしてまた寝るってのを繰り返す感じ。だから
処理は並行には行われない。それに対してスレッドのほうは中の人を5人用意してそれぞれに
仕事を割り振って一斉に(でなくてもいいけど)平行して仕事をしてもらう。でも1つしかない
資源は排他的に扱う(一度に一人だけが使用する)ようにしなければならない。

勘違いしやすいのは、タイマはタイマ割り込みではなく、指定した時間が経過したことを
示すフラグでしかない(WM_TIMERはフラグが立ったことの通知)というあたり。
805デフォルトの名無しさん:2010/05/17(月) 23:45:33
>>803,804
ありがとうございました。
すっきりしますた。
806デフォルトの名無しさん:2010/05/18(火) 01:06:28
>>802
なんかオレにも出来そうだな。
ちょっと書いてみるか。
807デフォルトの名無しさん:2010/05/21(金) 12:26:43
複数のスレッドが並列処理されることは保証されるの? 片方のスレッドが停滞することは
ありえないの?
808デフォルトの名無しさん:2010/05/21(金) 12:48:02
>>803の答えはどうなるの? タイマは呼び出しスタックが積み上がるイメージだけど
809デフォルトの名無しさん:2010/05/21(金) 13:35:27
>>807
マルチタスクで片方のタスクが停滞することはありえないの?
810806:2010/05/22(土) 21:35:02
挫折
811デフォルトの名無しさん:2010/05/24(月) 14:48:48
Exeのアイコンをタスクバーでは非表示にして、
タスクバーのツールバー(?)に表示するには、
どうしたら良いのでしょう?
812デフォルトの名無しさん:2010/05/24(月) 15:15:45
タスクトレイ?
813デフォルトの名無しさん:2010/05/24(月) 15:51:40
その通りです!!!

タスクバーのアイコンを非表示にして、タスクトレイにアイコンを表示したいでつ。
814デフォルトの名無しさん:2010/05/24(月) 16:10:48
そうか。わかった。
815デフォルトの名無しさん:2010/05/24(月) 16:12:33
教えて下さいorz
816デフォルトの名無しさん:2010/05/24(月) 16:23:18
>>815
えっと、質問何だったっけ?
817デフォルトの名無しさん:2010/05/24(月) 17:19:24
818デフォルトの名無しさん:2010/05/27(木) 11:18:13
Delphi 6 を最近始めました。
 シリアル通信で マイクロソフトのActiveX MSCOMM32.OCX を使った場合
 処理の途中でポートが開いているか判別するのに

if MSComm1.PortOpen = False then // クローズ状態
begin
{ ポートがクローズしていた場合の処理 }
end else
begin
{ ポートがオープンしていた場合の処理 }
end;

とやるところを、CommX で
http://www.moriq.com/apollo/ext/comm/Phi/CommX.html
ttp://www.moriq.com/delphi/CommX106.lzh

TCommX.Handleプロパティ
>property Handle: THandle;
>通信ハンドルの値を示します。
819デフォルトの名無しさん:2010/05/27(木) 11:19:16
-続き-

>このプロパティは、拡張のために用意されています。
>また、オープンされていない状態のときは、
>必ず -1 となるので通信コンポーネントの状態を知ることもできます。
とあるので

if CommX1.Handle = -1 then // クローズ状態?
begin
{ ポートがクローズしていた場合の処理 }
end else
begin
{ ポートがオープンしていた場合の処理 }
end;

とやってもポートopen/close 関わらず片一方の処理しかできません。
ポートの開閉状態を知るのに何かコツでもあるのでしょうか?
検索を掛けても、手動でボタンなどを操作するソースばかりでわかりません。
壮絶な勘違いをしているかもしれませんが、教えてください。
820818-819 です:2010/05/27(木) 17:43:42
半分 自己解決です。
この場合の if CommX1.Handle = -1 then
−1は
Integer型「符号あり整数値」= −1
 じゃなくて
Cardinal(UINT)型 = 4294967295
 になるんですね・・・

又は 16進数で = FFFFFFFF

if CommX1.Handle = 4294967295 then
if CommX1.Handle = $FFFFFFFF then

で逝けました・・・
821デフォルトの名無しさん:2010/05/27(木) 21:00:45
つ INVALID_HANDLE_VALUE
822818-819 です:2010/05/27(木) 22:47:47
>>821 (〃▽〃) おぉそのような文字列があったのですね・・・

しかし、MSCOMM32.OCX から CommX に変えると、シリアル経由で
1秒間隔毎にだらだらと送られてくる文字を足していって #13#10 で区切って文字列にし、
必用な部分を抜いて、別に送ると
これまでの約5倍ほどの遅延が発生するようになってしまいました。

ttp://sourceforge.net/projects/comport/files/
TComPort に切り替えて読み込みの遅延は押さえ込めそうなのですが、
今度は>>818 の処理をさせる書式が見当たりません。
どなたか判る方、教えていただけませんでしょうか?
823デフォルトの名無しさん:2010/05/27(木) 22:56:05
遅延はやり方が悪いだけだろ
824デフォルトの名無しさん:2010/05/27(木) 23:55:38
>822
つ Connected
825824:2010/05/28(金) 00:00:45
>822
あ、OnRxCharのようなデータの受信イベントで処理するのが常道だから。
826818-819 です:2010/05/28(金) 01:56:16
>>824
行けました・・とサクっと書きたかったのですが、
最初入れていたのが TComPort component version 1.50 で、その書式だとエラー
なんとか比較的新しいコンポーネントに入れなおして突破できました。
ありがとうございました。
>>825 地道に理解していきます m(_ _)m
827デフォルトの名無しさん:2010/06/18(金) 14:29:38
BDE無しでODBC使いたいです。
828デフォルトの名無しさん:2010/06/18(金) 16:33:12
ADOは?
829827:2010/06/18(金) 17:01:15
d

実は、C++ Builder 6 なんですが、ADO経由でODBC出来るんでしたっけ?
830デフォルトの名無しさん:2010/06/18(金) 17:07:22
831827:2010/06/18(金) 17:09:14
d

とりあえず、ADOアクセス検討してみまつ。
832827:2010/06/21(月) 11:25:39
BCB6を見たところ、ふつーに"ADO"タブがあって、TADOQueryがありました。

ランタイムとか居るのでしょうか?

もしくはADOQuery初心者サイトがあれば教えて下さいorz
833デフォルトの名無しさん:2010/06/25(金) 09:13:47
ところで、ADO使うときって、MDACも要るんでしょうか?
834デフォルトの名無しさん:2010/06/26(土) 11:24:06
delphiってjavaより遅いんだよね?
835デフォルトの名無しさん:2010/06/26(土) 12:10:04
誰から聞いたのかしら?
836デフォルトの名無しさん:2010/06/26(土) 12:43:55
Javaより遅い言語はこの世に存在しない
837デフォルトの名無しさん:2010/06/26(土) 19:22:26
仮想マシン上で走る言語を他と比べるような頭の悪い人って存在するんだね
びっくりした
838デフォルトの名無しさん:2010/06/27(日) 16:59:21
おまえら釣られまくり
839デフォルトの名無しさん:2010/06/28(月) 02:02:35
恥ずかしい後釣り宣言来ました
840デフォルトの名無しさん:2010/06/28(月) 14:45:47
仮想マシンって単語を覚えた直後なので使ってみますタ
841デフォルトの名無しさん:2010/06/29(火) 01:32:53
>>840が?知識が増えて良かったね
842デフォルトの名無しさん:2010/06/30(水) 17:53:29
えへへへ
843名無しさん@そうだ選挙に行こう:2010/07/11(日) 22:27:11
Delphiのコンポーネントで
.flvファイルを再生できるのってないでしょうか?
シェアウェアのは海外にあるんですが
フリーのはないでしょうか?
844デフォルトの名無しさん:2010/07/12(月) 02:27:36
色々言いたいことはあるけど、全部ひっくるめるとお前には無理
845デフォルトの名無しさん:2010/07/16(金) 09:39:07
色々言いたいことあるけど、全部ひっくるめると答えるのは俺には無理
846デフォルトの名無しさん:2010/07/19(月) 00:42:41
>843
COMでFlashそのものを使えばいいじゃん
847デフォルトの名無しさん:2010/07/29(木) 23:21:58
2011版で64bit対応するって聞いた気がするんですが
どうなったんでしょうか?
848デフォルトの名無しさん:2010/07/30(金) 02:28:24
なにが?
849デフォルトの名無しさん:2010/07/30(金) 13:30:19
セガの次世代機
850デフォルトの名無しさん:2010/08/05(木) 15:35:10
質問させて下さい。集合型/列挙型の定義数を取得する方法ってあるんでしょうか。

具体的には、

THoge = (
ahoge1,
ahoge2,
ahoge3,
);

とした時、3という結果を得たいのです。
配列なんかだと、Length( hoge ); で取得できたりもしますが、これと同じことをしたいのです。
が、型に対してLength( THoge ); などとはできません…。

何か良い方法があるでしょうか。
851デフォルトの名無しさん:2010/08/05(木) 16:26:02
Ord(High(THoge)) + 1
852850:2010/08/05(木) 18:26:37
>>851
ありがとうございます、すごくたすかりました
853デフォルトの名無しさん:2010/08/06(金) 16:10:13
TAdoQueryを使うとき、Windows(XP以降)にランタイムのインスコは要りますか?
854デフォルトの名無しさん:2010/08/06(金) 20:37:04
静的変数/グローバル領域に宣言できる変数って限界があるんだろうか、と思い、
試しにグローバル変数に、

a:array[0..$10000000-1] of Integer;
b:array[0..$10000000-1] of Integer;
c:array[0..$10000000-1] of Integer;

と宣言し、実行してみました。
コンパイルは通り、a[]に関しては全領域にアクセスできました。
しかしb[]にアクセスすると、途中でアドレス違反をはき、停止しました。

グローバル変数->.bss、const->.dataに配置されるんですよね確か
exeを起動したらその定義が読み込まれると思うのですが、メモリに展開した時点でアドレス違反になる=起動すらできないと踏んでいたのですが、何か根本的に間違っているんでしょうか…?
855デフォルトの名無しさん:2010/08/06(金) 23:46:11
はい
856デフォルトの名無しさん:2010/09/15(水) 00:17:03
>>836
JRuby…
857デフォルトの名無しさん:2010/09/18(土) 16:51:47
文字列データを他のソフトに送信するのですが、
strA:= '文字列 n1 ,文字列 n2 ,文字列 n3 , 〜文字列 n';

送信先ではこの区切りカンマ含む文字列と一緒に Hex2桁の(00〜FF) CK_A+CK_B
http://www.synopsys.co.jp/today_tomorrow/67/tt67_dw_1.html
チェックサム (Check Sum)誤り検出符号を付けなくてはならず、無かったり違うとチャックサムエラーで受け付けてくれません。

種類と計算式は
TCP スタンダードRFC1145 のチェックサムアルゴリズム

CHECKSUM CK_A CK_B

CK_A=0;
CK_B=0;
for(i = 0;i < N;i ++)
{
CK_A += buffer[i];
CK_B += CK_A;
}

という式だそうですが、Delphi 式に置き換えが判りません
どう書くのでしょう?
858デフォルトの名無しさん:2010/09/18(土) 17:12:26
TCPレベルで実装されてるものをなんでその上のレイヤでも再実装しないといけないの?
859デフォルトの名無しさん:2010/09/18(土) 17:16:51
たまたまTCPのチェックサムと計算方法が同じってだけで
アプリケーション層でも独自プロトコルでチェックサム付けないといけないってだけの話だろ
860デフォルトの名無しさん:2010/09/18(土) 20:39:53
違います
861857:2010/09/18(土) 21:07:00
>>858 ネット通信でTCPに乗せて送る訳ではありません。 >>859氏の指摘通りです。

データを渡さなければいけないホストプログラムが誤データ排除に
>>857 の式でのチェックサムを使っているそうで、生データだけでは拒否されます。
862デフォルトの名無しさん:2010/09/18(土) 21:27:06
じゃあまずCかなんかでコンパイル通るもの用意してもらえます?
863デフォルトの名無しさん:2010/09/19(日) 15:25:40
CK_A := CK_A + buffer[i];
CK_B := CK_B + CK_A;

できますタ
864デフォルトの名無しさん:2010/09/19(日) 16:39:41
できてません
勝手に騙らないでもらえますか?
865デフォルトの名無しさん:2010/09/19(日) 16:50:54
ばかにしないでください
できますた
866デフォルトの名無しさん:2010/09/19(日) 17:12:37
もういいです
こんなところで聞いた私が間違いでした
867デフォルトの名無しさん:2010/09/19(日) 17:18:36
よくありません
868857:2010/09/20(月) 05:16:44
>>862
これかな
void sum(FILE *out,char *buf)
{
unsigned char sum = 0;
char *p;
p = buf;
for (;;) {
putc(*p++,out);
if( *p == '*') break;
sum ^= *p;
}
fprintf(out,"*%02X\n",sum);
}

まったく違う気もしますがすみません、作った方と大半の資料とその製作環境は火事で....仕様書と残った一部ノートから発掘
「君プログラム組めるんだってね?」と事務方に押し付けられても ねぇ
せめて同じ系列の製作環境整えてそれで組める人を探してほしい。
869デフォルトの名無しさん:2010/09/20(月) 05:24:06
ネタじゃないことを証明してほしい
870デフォルトの名無しさん:2010/09/20(月) 06:40:54
上の方にあるのと違って*p == '*'でちょん切ってるし・・
まったく違う気もしますが、って・・・
871デフォルトの名無しさん:2010/09/21(火) 04:56:32
DelphiじゃなくてCな時点でネタだと思う
872デフォルトの名無しさん:2010/09/29(水) 22:04:59
const A = 1.00;
ShowMessage( IntToStr( SizeOf( A ) ) );
ShowMessage( IntToStr( SizeOf( 1.00 ) ) );

こんな実験をしてみたんですが、
SizeOf( A )のほうは8、SizeOf( 1.00 )のほうは10と表示されます。
これはなぜなんでしょうか?同じ1.00という値を渡しているので、同じ値が表示されることを期待していたのですが…。

CPUエディタでみても、直接$00000008と$0000000aの値がそれぞれセットされているだけで詳細がわかりません。
873デフォルトの名無しさん:2010/09/29(水) 22:14:29
天使の分け前って奴かな
874デフォルトの名無しさん:2010/09/29(水) 23:30:52
DoubleとExtendedの違いだとは思うが、それ以上の説明は俺には無理。
875デフォルトの名無しさん:2010/10/01(金) 12:46:55
データ型が明示的じゃないじゃん 何のサイズを取得せぇっつんだ
876デフォルトの名無しさん:2010/10/01(金) 20:10:07
定数は全て暗黙的に型付けされていますけど
877デフォルトの名無しさん:2010/10/01(金) 22:58:18
age
878デフォルトの名無しさん:2010/11/04(木) 02:18:12
>>327で言われている字句解析、意味解析のログが読みたいです
前スレのログをください(なければアドレスorスレタイトルを教えてください)
879デフォルトの名無しさん:2010/11/04(木) 02:46:10
検索もできないのですか?
880デフォルトの名無しさん:2010/11/04(木) 02:47:45
できませんけど?
881デフォルトの名無しさん:2010/11/04(木) 12:50:51
それは残念ですね
882デフォルトの名無しさん:2010/11/07(日) 00:14:36
mciSendString() で vob ファイルは再生できる?
http://www2.tbb.t-com.ne.jp/kob/DelphiTips/mciSendString.htm
ここにはそう書いてあるけど音声しかでません。

なお、Media Player Classic Version 6.4.8.3 日本語版では再生できています。
Del6Personal on XP sp2です。
883デフォルトの名無しさん:2010/11/07(日) 15:03:56
MCIが何なのか勉強すれば分かるよ
884882:2010/11/07(日) 20:05:41
>>883
ありがとう。
ffdshowの設定を見直したら再生できました。
885デフォルトの名無しさん:2010/11/08(月) 17:30:06
今delphiでSTGゲーム作ってるんだが
自機の作成、キーボード操作まではできたんだ。
だが、弾の発射が、Timerで座標の変化をしているせいか
画面上にひとつしか存在できない。
弾を連続して出すにはどんな方法が必要なんでしょうか?
初心者なので、馬鹿らしい質問かもしれませんが、回答お願いします
886デフォルトの名無しさん:2010/11/08(月) 17:36:03
マルチ死ね
887デフォルトの名無しさん:2010/11/08(月) 17:45:28
回答1
タイマーインスタンスを複数生成する。

回答2
タイマーイベント発生時に複数の弾処理を行う。

ゲームの作り方の解説サイトってゲ製作の奴が作ってなかったか?
俺が見たのは何年も前の話だけど
888デフォルトの名無しさん:2010/11/08(月) 17:49:36
ゲームでTTimerはやめとけ
889デフォルトの名無しさん:2010/11/09(火) 17:15:51
Delphi2010を使用しています。
TPanelを継承して例えばTSuperPanelコンポーネントを作成しているのですが、
そのクラスでWMSizeプロシージャを定義し、inheritedを書きました。

で、inherited WMSize( msg );と書くと、プライベートメンバにアクセスできませんと怒られたので、
見てみると、実際TWinControlのWMSizeプロシージャはprivateセクションに定義されていました。

おかしいなと思い、TSuperPanelコンポーネントのinheritedにブレークを置いてみると、
procedure TWinControl.WMSize(var Message: TWMSize);
に入って来ていました。protectedなりpublicに定義されているならそれもわかるんですが、privateなのに
なぜここに突入して来るのでしょうか。
また、TSuperPanelのWMSizeから、inherited WMSize( msg );みたいに、親クラスのプロシージャ名を
まじえて定義することはできないんですかね?
WMSizeに限っては、ただinherited;、と書かなければならないものなんでしょうか。
890デフォルトの名無しさん:2010/11/09(火) 22:46:22
派生した方の名前がSuperだなんて・・・
891デフォルトの名無しさん:2010/11/10(水) 11:46:42
いかにもJava厨っぽい考え。
892デフォルトの名無しさん:2010/11/10(水) 12:49:46
>>890
恥ずかしいね
893デフォルトの名無しさん:2010/11/10(水) 13:32:48
せめてUltraくらいにしないとな。
894デフォルトの名無しさん:2010/11/10(水) 14:17:15
UltraよりSuperの方が良いよ
895デフォルトの名無しさん:2010/11/10(水) 16:36:34
urutoraかsuupaaの方がわかりやすいよ
896デフォルトの名無しさん:2010/11/10(水) 18:30:02
super ultra DQN
897デフォルトの名無しさん:2010/11/13(土) 14:25:13
もういいってばおめーら しつこい!スーパーしつこい!
898デフォルトの名無しさん:2010/11/15(月) 12:14:31
Delphi2010 / XP sp3 を使用しています。

8枚ありるJpeg画像を横4枚×縦2枚に合成して、
1つのJpegファイルを生成するソフトを作りたいです。

TBitmapには、指定した座標にファイルから読み込む機能は無さそうです。
どういう方法がありますでしょうか?
899デフォルトの名無しさん:2010/11/15(月) 13:52:43
Scanlineして合成する
900デフォルトの名無しさん:2010/11/15(月) 15:26:19
BitBlt
901デフォルトの名無しさん:2010/11/15(月) 17:19:36
CopyRect
902デフォルトの名無しさん:2010/11/15(月) 22:12:35
>>898
TBitmap に直接ファイルから読み込むのではなく、TJPEGImage なり TPicture なりで
別に読み込んで新規の TBitmap に貼っ付ける
貼り付け方法は >>899-901 のいずれか
903898:2010/11/15(月) 22:41:58
できました
ありがとうございます(v^-゚)
904デフォルトの名無しさん:2010/11/26(金) 13:54:00
最近Windows7を弄り始めたんだけど。。。。

Formに
Left := 0;
Top := 0;
と位置を指定すると、Formの左と上がサイズ5位隠れてしまいます。

Left := 5;
Top := 5;

とすると、希望通りFormの左上が画面の左上に合います。

この5って何ですかね?

905デフォルトの名無しさん:2010/11/26(金) 13:55:03
あ、そのFormはbsSingleです。
906デフォルトの名無しさん:2010/11/26(金) 14:17:35
バージョン書かないって答えてもらう気が無いんすかね
907デフォルトの名無しさん:2010/11/26(金) 15:15:56
バージョン毎に解決策が違うなんて安定しない開発環境なんですね
908デフォルトの名無しさん:2010/11/26(金) 17:08:48
Visual Stuioをdisってんのかこのやろう
909デフォルトの名無しさん:2010/11/26(金) 17:12:03
あ、すみませんね。
Delphi2010 です。
910デフォルトの名無しさん:2010/11/27(土) 01:10:09
>>907
Delphiはバージョン間互換だけ見ればトップレベルなんだけど
911デフォルトの名無しさん:2010/11/27(土) 01:19:18
D6 で質問です
メモリに配置したデータ : TempTarget:TMemoryStream
を範囲指定して : TargetBeginningPos,TargetHerePos:String

コピー(退避)させたい : TempFile:TMemoryStream
コピー後はデータの開始位置を先頭に戻しておく

と試しにセーブしてみるとコピー元先頭から保存されてしまいます。
どう直せば範囲指定で抜き出せるのでしょうか?

MS_Base:TMemoryStream
01 02 03 04 05 06 07 08 09 〜〜

Temp_Hex:TMemoryStream
03 04 05 06 07 08
になって欲しい
912デフォルトの名無しさん:2010/11/27(土) 01:22:34
-------------
TempHexFileMS(Temp_Hex,MS_Base,'02','08');
Temp_Hex.SaveToFile(SaveFileName);

function TForm1.TempHexFileMS(TempFile,TempTarget:TMemoryStream;TargetBeginningPos,TargetHerePos:String):Boolean;
var
TempSize : Integer;
begin
Result := False;
TempSize := StrToInt('$'+ TargetHerePos) - StrToInt('$'+ TargetBeginningPos);

if ((TempSize *2) > TempTarget.Size) then exit;
try
TempTarget.Position := StrToInt('$'+ TargetBeginningPos); // 先頭位置を0x0002 に移動
TempFile.Write(TempTarget.Memory^,TempSize +1); // 0x0008 - 0x0002 の範囲サイズ を格納

TempFile.Position := 0;
TempTarget.Position := 0; // 先頭位置を戻す
Result := True;
except
Result := False;
end;
end;
-------------

Temp_Hex
01 02 03 04 05 06
先頭から保存されてしまう
913デフォルトの名無しさん:2010/11/27(土) 01:29:21
ささいなミス→ TempHexFileMS(Temp_Hex,MS_Base,'02','07');

TempTarget.Position := StrToInt('$'+ TargetBeginningPos);
 を
TempTarget.Seek(StrToInt('$'+ TargetBeginningPos),0);
 に変えても結果が同じでした。
914デフォルトの名無しさん:2010/11/27(土) 03:52:42
すみません自己解決しました
ついでにアドレス指定をInt にして元を $00n で来させるように減らしました

function TForm1.TempHexFileMS(TempFile,TempTarget:TMemoryStream;TargetBeginningPos,TargetHerePos:Integer):Boolean;
var
TempSize : Integer;
begin
Result := False;
TempSize := TargetHerePos - TargetBeginningPos;

if ((TempSize *2) > TempTarget.Size) then exit;
try
TempTarget.Position := TargetBeginningPos;
TempFile.CopyFrom(TempTarget,TempSize +1); // TempFile.Write.Memory^

TempFile.Position := 0;
TempTarget.Position := 0;
Result := True;
except
Result := False;
end;
end;
915デフォルトの名無しさん:2010/11/27(土) 21:30:49
なんでCopyFrom使わないんですかっと
916904:2010/11/27(土) 23:32:57
おまいらが答えてくれないから、しょうがなく
WM_NCHITTESTを捕まえて、0,0にしましたよ。

917デフォルトの名無しさん:2010/11/28(日) 12:43:59
CopyFrom使ってんじゃん。メクラ?
918デフォルトの名無しさん:2010/11/29(月) 13:14:40
>>917
お前の勇気は無駄にしない
919904:2010/12/17(金) 19:02:33
Delphi2010です。

ジュスチャーを組み込んだアプリを長時間動かしていると、突然
IRealtimeStylus 有効または無効に出来ません。みたいなエラーで落ちちゃうんですけど・・・

何か情報もっている方居ませんか?

920デフォルトの名無しさん:2010/12/17(金) 21:27:57
デバッグしなさい
921904:2010/12/18(土) 14:49:47
はい、判りました。
デバッグします。
922デフォルトの名無しさん:2010/12/19(日) 12:36:42
メモリリーク
923デフォルトの名無しさん:2010/12/20(月) 18:21:14
ウィキリークス
924デフォルトの名無しさん:2011/01/05(水) 11:25:24
コンポーネントのプロパティをオブジェクトインスペクタに表示させない、うまい方法がありましたら、教えて頂きたいです。
Boolean型などのプロパティは、↓のように定義すると隠れるんですが、Marginsプロパティのようにクラス参照になっているもので同じことをやると、エラーになります。

private
procedure SetAlignWithMargins( const setBool : Boolean );
published
property AlignWithMargins: Boolean write SetAlignWithMargins;

中略

procedure TSamples.SetAlignWithMargins( const setBool : Boolean );
begin
inherited AlignWithMargins := setBool;
end;

だいたいのサイトで読み専プロパティにすれば良いと書いていて、実際そうするとエラーにはならないんですが、設定はできないものの項目としてはオブジェクトインスペクタにグレー表示されてしまいます。
925デフォルトの名無しさん:2011/01/05(水) 13:12:50
オブジェクトインスペクタに表示したくないならpublicじゃないの?
926デフォルトの名無しさん:2011/01/24(月) 11:53:34
Delphiでキネクトのソフトを作りたいです
 ↓例
http://www.youtube.com/watch?v=3KKWVPpFJXw

情報が見つからないのでいったいどこから手を付けて良いのかわからないのですが
できれば日本で参考になるサイトなどありませんか?
927デフォルトの名無しさん:2011/01/24(月) 14:06:46
思いっきりその動画のページに作者のURLが貼ってあるんですけど
それすら分からない人に作れるんでしょうかね
928デフォルトの名無しさん:2011/01/24(月) 15:18:40
>>927
黙れカス
929デフォルトの名無しさん:2011/01/24(月) 16:00:16
じゃあまず>>928が黙るべきでしょうね^^
930デフォルトの名無しさん:2011/01/24(月) 16:15:33
931デフォルトの名無しさん:2011/01/24(月) 17:49:15
確かにこんなやり取りしてる時点で作るのは無理そうだなw
932デフォルトの名無しさん:2011/01/24(月) 17:57:16
私女だけど、>>926-933は自演だと思うの
933デフォルトの名無しさん:2011/01/24(月) 20:07:46
動画見てたら眠くなった
934デフォルトの名無しさん:2011/01/24(月) 20:24:55
ここまで俺と>>932の共同作業
935デフォルトの名無しさん:2011/01/25(火) 00:54:44
>926
ttp://codelaboratories.com/nui/
からCL NUI SDKをインストールして、
ttp://www.lakraven.com/delphi-stuff/tkinect/
のTKinectコンポーネントを入れる。日本語の情報はほとんどないので
IT Security Labの内容を読むのが一番。
936デフォルトの名無しさん:2011/01/25(火) 02:42:44
日本語情報無いなら書いてくださいね
937デフォルトの名無しさん:2011/01/25(火) 06:21:12
自作自演で会話する人って頭大丈夫なのかな
938937:2011/01/25(火) 13:10:19
自己解決しました
939926:2011/01/26(水) 03:49:09
>>935
有益な情報どうもありがとう!
コンポがあったんですね
まずはそこから始めてみます!

※926以外は書き込んでません
940926:2011/01/26(水) 13:40:50
やっぱり日本語情報無いと難しいと思う
935は紹介するなら責任をもって説明も書いてくれないと
941926:2011/01/26(水) 13:41:56
誤爆です^^;
942926:2011/01/26(水) 20:56:20
お前ら氏ね(・∀・)
943デフォルトの名無しさん:2011/01/26(水) 21:17:20
>940
自分で書け
944デフォルトの名無しさん:2011/02/01(火) 08:48:59
すごくしょぼい質問なのですが、疑問が生じたので教えて下さい。
Delphi2010ですが、コンポーネントのソースを除くと、例えば,
TComboBoxのようにpublished節しかなく、read/write指定がない、
ただproperty <名前>となっているものが多くあるように思います。
で、TComboBoxはTCustomComboBoxを継承しているのですが、それだったら、
最初からTCustomComboBoxを利用すれば良いじゃないかと思うのです。

このような構造にするメリットって何かあるのでしょうか?
945デフォルトの名無しさん:2011/02/01(火) 10:10:03
TCustomXXXから直接継承することでTXXXのpublishに制約されることなくpublishに
するプロパティを決めることができる。アクセス制限は狭めることができないので、
継承ツリーのどこかでpublishとするとpublishではなくすることができない。
946904:2011/02/01(火) 12:09:49
一度Publishedに設定すると、それを継承するコンポーネントで
ProtectedとかPrivateに格下げできないから。
Publishedにするpropertyを自分で決められるようにするために
TCustomXXXXが存在するんじゃないの?
947デフォルトの名無しさん:2011/02/01(火) 12:58:39
>>944
しょぼすぎて自分でコンポーネントを作成できない人にはメリットないので安心して下さい
948デフォルトの名無しさん:2011/02/01(火) 13:25:33
「格下げ」なんて初めて聞いた。
949デフォルトの名無しさん:2011/02/01(火) 14:57:43
いや普通にある日本語だが
950デフォルトの名無しさん:2011/02/02(水) 01:53:59
こないだ日本国債が「格下げ」されたってニュースがあったばかりなのにね
家にずっと引きこもっていたら経済情報なんて不必要なのは分かるけどさ・・・・
951デフォルトの名無しさん:2011/02/02(水) 23:54:51
そんなことよりもこの場で格下げという言葉を
使うことが適切かどうかを論議した方が良い

952デフォルトの名無しさん:2011/02/03(木) 00:06:10
却下します
953デフォルトの名無しさん:2011/02/09(水) 13:46:22
自前の TCustomControl から派生した THogeControl に既定のジェスチャー機能を実装したいと考えてます。
以下、ソースの抜粋。必要な変数は定義済みです。

constructor THogeControl.Create(AOwner: TComponent);
begin
FActionList:=TActionListEx.Create(nil);
FLeftAction:=TAction.Create(FActionList);
FRightAction:=TAction.Create(FActionList);
FActionList.AddAction(FLeftAction);
FActionList.AddAction(FRightAction);
FActionList.Actions[0].OnExecute := actLeftExecute;
FActionList.Actions[1].OnExecute := actRightExecute;

FGestureManager := TGestureManager.Create(nil);
Touch.GestureManager := FGestureManager;

 // ここから先アクションとジェスチャーの紐付けがわからない。
end;

そもそも、TFormとかTPanelとかのTouchプロパティの下にはGestures.Standardみたいなプロパティが
ありそうなのですが、TTouchManagerをみるとGesturesプロパティが見当たりません。

何かヒントでもいいので、教えていただけないでしょうか。
954953:2011/02/09(水) 13:50:09
あ、忘れてました。
環境はD2010です。
955デフォルトの名無しさん:2011/02/09(水) 15:06:56
そもそも既定のジェスチャー機能って何?
956904:2011/02/09(水) 16:05:28
そのコンポーネントを貼り付けたら、ジェスチャ機能が働くって事です。

自己解決。

Touch.GestureManagerに必要なジェスチャを登録して、
そのジェスチャーにアクションを割り付ければいいという事が判りました。

 // 必要なジェスチャーを登録する(今回はLeft)
 Touch.GestureManager.SelectGesture( Self, sgiLeft );
 // 登録したジェスチャーにアクションを紐付ける
 Touch.GestureManager.FindGesture( Self, sgiLeft ).Action := FActionList.Actions[0];

以上で、無事ジェスチャ機能が働きました。

どのようにして、FormとかPanelのTouchプロパティの下にGesturesが表示されるかは
判りませんでした。
957デフォルトの名無しさん:2011/02/09(水) 17:58:25
別にコード書かなくても動くだろ
つーかTActionListとTGestureManager貼りつけて、あとは各コンポでアクション選ぶだけだぞ
これの何が難しいの
958904:2011/02/09(水) 18:16:26
だから、それをコンポーネントに内蔵するって事。

ただ、動かすだけなら簡単なのは判ってるって。

959デフォルトの名無しさん:2011/02/10(木) 00:32:23
>>957

まぁ、質問者の書き方も問題あるかもしれんが・・・
ちょっと読めば、動的に作成する方法を聞いてるくらいは判るやろ?

そこで、ポトペタやれば出来るだろってのはどうかなぁ。


960デフォルトの名無しさん:2011/02/10(木) 03:42:54
TCustomControlを継承してるならポトペタでいけるよ
もしかして方法を本当に知らない・・・・?ネタではなくて?
961デフォルトの名無しさん:2011/02/10(木) 09:10:52
いや、違うだろ?

その自作コンポーネントを一つ配置しただけで、
ジェスチャーとかアクションコンポーネントをポトペタしなくても
すぐにジェスチャーが使えるようにしたいって話でしょ?

962デフォルトの名無しさん:2011/02/10(木) 17:25:26
だからそのTHogeControlの設計時でもポトペタでできるじゃん。
もしかして一行リソースを読む処理を書かなくちゃいけないのを指して違うって言ってる?
どんだけ厳しいんだよ
963デフォルトの名無しさん:2011/02/19(土) 13:48:15
ロジクールの多機能(多ボタン)マウスにDelphiIDEのキーを割り当ててる方いらっしゃいます?
2010までは、たとえばあるボタンに「フォーム/ユニットの切替」F12を割り当てて使えていたのですが、
XEに変えてから、この割り当てが効きません
かなり不便なのでなんとかしたいのですが、なにが悪いのでしょう?
964963:2011/02/19(土) 15:38:58
連投スミマセン

プログラム実行→IDE最小化→プログラム終了→IDE元のサイズに戻る
ができずに、プログラムを終了してもIDEが最小化されたままです
環境オプションの実行中の所を色々変更してるんですがダメです
元のサイズに戻すことは出来ないのでしょうか?
965デフォルトの名無しさん:2011/03/11(金) 22:07:49.83
こんにちは。

知り合いがDelphiで作ったモジュールから、C++のDLLを呼び出そうとしています。
ただ、DLL関数の引数が、vector<string> a のようなstringの配列になってるんだけど、
これってそう簡単に呼び出せるものなのでしょうか。

Delphi側で、C++のSTLの定義に従ったものを作ろうと思えば作れるのだろうけど、
こういう場合って、C++のほうを単純な配列にするとか変えたほうがいいのでしょうか。
966デフォルトの名無しさん:2011/03/12(土) 00:30:09.16
C++のクラスでインタフェースしているようなものは基本的に同一バージョンのコンパイラでしか
動作を保障できない。可能なら普通のCのインタフェースに変更してもらうべし。
967デフォルトの名無しさん:2011/03/12(土) 01:40:51.32
>>966
まったくその通りです。char*の配列char**にすべきでしょうね。

ありがとうございます
968デフォルトの名無しさん:2011/03/12(土) 17:04:23.69
C++側を変更出来るんなら、文字列を渡すのは WindowsAPI を真似るべきだと思う
969デフォルトの名無しさん:2011/03/15(火) 18:42:24.90
>>968
思うね
970デフォルトの名無しさん:2011/03/15(火) 20:15:48.94
>>968
思うわー
971デフォルトの名無しさん:2011/03/15(火) 21:30:00.74
べきだ厨の言うことは信じない
972デフォルトの名無しさん:2011/03/16(水) 02:39:05.73
>>968
思う思う
973デフォルトの名無しさん:2011/03/16(水) 09:52:41.44
思うべきだ
974デフォルトの名無しさん:2011/03/16(水) 13:07:36.59
べきを使うべき
975デフォルトの名無しさん:2011/03/16(水) 13:24:03.73
976デフォルトの名無しさん:2011/03/16(水) 15:09:53.00
>>971の発言を受け入れるべきだ
977デフォルトの名無しさん:2011/03/16(水) 18:52:56.80
ベッキーが可愛く見え始めたらオッサンになってきた証拠
978デフォルトの名無しさん:2011/03/16(水) 19:22:09.48
中川家弟と区別がつかない
979デフォルトの名無しさん:2011/03/17(木) 07:45:23.34
ビューティーンは秀逸
980デフォルトの名無しさん:2011/03/18(金) 12:06:11.59
XEってwinsight32みたいなツールって無いですか?
981デフォルトの名無しさん:2011/03/18(金) 12:07:10.13
X XEってwinsight32みたいなツールって無いですか?
○ XEってwinsight32みたいなツールってありますか?
982デフォルトの名無しさん:2011/03/18(金) 14:49:20.99
がんばって揚げ足取った割には大して変わってないね
983デフォルトの名無しさん
エンバカの製品は所詮はMSのサブセットなので、ないないだらけ。