Delphi初心者のための ..
[2ch|▼Menu]
522:デフォルトの名無しさん
08/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'));を使って同様の結果がでないのはなぜでしょうか?


523:522
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/03/06 12:17:08
色んな理解が足りない。

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

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

でも固定サイズなら、ポインタで処理する必要はない。
渡す時にポインタを渡せばいい。
byte,WORD,DWORDのそれぞれの引数用の関数3つを作る方がスマートだよ


526:デフォルトの名無しさん
08/03/06 15:50:39
>>524
>>525

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

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

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

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



527:デフォルトの名無しさん
08/03/06 17:38:22
>>526
ヘルプを読めばGetMemとSetLengthの違いがわかります

528:デフォルトの名無しさん
08/03/06 21:07:30
>>527
ほんとだ・・・いつもメモリ扱う時はPchar使ってたから、意識しないで使ってたけど、
違いあったんですね・・・。
どうもでした。


529:デフォルトの名無しさん
08/03/07 11:01:59
Fizz-Buzz 問題:
URLリンク(www.aoky.net)
 1から100までの数をプリントするプログラムを書け。
 ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、
 3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

ヒント
 GUIアプリでも AllocConsole; を入れておけばコンソールを出して write/wrilteln を使う事が出来ます
 TMemoを貼ってLines.Add をプリント代わりとしてもいいです。


530:デフォルトの名無しさん
08/03/07 13:51:19
>>517-521
結局どっちなんだよw


531:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/03/07 22:39:54
もう放置したら?

533:デフォルトの名無しさん
08/03/08 17:40:34
>DWORD(TColor($0000FF));
>DWORD($0000FF);

意味ねぇーー

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

TColorが上位、下位逆なのを説明されても理解できていない&認めようと
しないのが多数居たのが驚き。
いや、それだけ初心者向けの言語ってことなんだろうな。

535:デフォルトの名無しさん
08/03/12 18:38:44
多数じゃなくて、一人だけだろw

536:デフォルトの名無しさん
08/03/15 15:15:36
DLLを1つだけ LoadLibrary で読んでGetProcAddressして動かしてるプログラムがあります
このDLLをリソースには入れれたのですが実行時にDLLをHDDに書き込まずに動かす方法があれば教えてください
環境は、WinXP,Delphi6です。。。ファイルをEXE1つだけにしたいだけなのですがお願いします

537:536
08/03/15 16:18:06
わざわざファイルに書き込まなくてもそのままでいけました。。。

538:デフォルトの名無しさん
08/03/15 20:09:45
GPL逃れですか?

539:デフォルトの名無しさん
08/03/27 17:33:47
ほしゅ

540:デフォルトの名無しさん
08/04/11 06:48:24
>>534
間違っています。
以上。
↓次どうぞ

541:デフォルトの名無しさん
08/04/16 15:44:57
ビルドした日付を埋め込むにはどうしたらいいですか?
BCBの__DATE__みたいな奴です。

542:デフォルトの名無しさん
08/04/16 22:47:59
できないので手動で埋め込んでください。

543:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/04/17 11:30:32
名前付きパイプは上手くゆかなかった。
APIで読めば読めるけど、LoadFromFileでは読めない。
たぶんLoadFromFileではサイズを先に読んでから処理するからなんだろう。

だから $Iでも読めないかも

545:デフォルトの名無しさん
08/04/17 18:58:18
フォームに並べた10個のラベル
(名前が label1,label2..label10 とかだとして)
それぞれのラベルのCaptionにループを使ってアクセスするにはどうしたらいいんでしょう。


546:デフォルトの名無しさん
08/04/17 21:02:21
(FindComponent('Label'+IntToStr(LabelNum))as TLabel).Caption

547:545
08/04/17 21:33:34
助かりました、ありがとうございました!

548:デフォルトの名無しさん
08/04/24 20:51:42
>>543
それを埋め込んだデルファイを起動するアプリを作っていいかんじになりました、どうも。

549:デフォルトの名無しさん
08/05/14 16:04:58
TDrawGridのColやRowプロパティが変更する場合の、
イベントハンドラを教えてくださいorz

550:549
08/05/14 16:16:32
OnClickでできますた。

551:デフォルトの名無しさん
08/05/17 13:45:07
Delphianが行方不明なのでこちらに質問させてください;;
Stringでなく数値で操作できるGridコンポ探しています。
どなたかご存じないですか?

552:デフォルトの名無しさん
08/05/18 02:03:35
>数値で操作できる

いみふめ

数値と文字列は相互可変なんだから TStringGrid でなにが不足なんだ?

553:デフォルトの名無しさん
08/05/18 10:57:12
セルの値を直接数値で入れたり出したりしたいんだろう。素人がしたがりたそうなことだ。

554:デフォルトの名無しさん
08/05/18 11:09:12
'0'..'9'のみ入れさせたいなら
StringGridKeyPressイベントで

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

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

まあそこらへんのノウハウ込みのコンポを探してるんだろうが。

555:デフォルトの名無しさん
08/05/20 12:02:23
はい、日曜ど素人でございます(T_T)
StringGridKeyPressとSetEditTextで新しいコンポを作れそうです。
ありがとうございました。

556:デフォルトの名無しさん
08/05/28 18:57:24
TFileStreamでファイルをオープンして、
別のストリーム、たとえば、TContentStreamにファイルの中身を設定しようとすると、
どういった記述となりますか?

557:デフォルトの名無しさん
08/05/28 19:55:36
Assignを使う。どちらもTStream派生だから。

558:デフォルトの名無しさん
08/05/28 19:59:25
LoadFromStream はないの?

559:デフォルトの名無しさん
08/05/31 02:17:47
グーグルマップに自分のブックマーク(っての?)残せるやん?

ローカルの地図画像であんな感じのアプリを、db連動で作ってみたいんだけど、何を参考にすればいい? グラフィック関係かと思って、ゲーム関係見たけど、あまり参考になりそうにない。

560:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/06/11 14:38:25
・名前順なら得点と名前をソートのキーとする
・ランダムなら、得点とランダム値をソートのキーとする

562:デフォルトの名無しさん
08/06/22 03:10:21
Jane Doe Styleのスレッド本文の表示には何のコンポーネントを使っているのでしょうか?

563:デフォルトの名無しさん
08/06/22 03:11:13
すみません、他で聞きます。

564:デフォルトの名無しさん
08/07/23 17:05:00
Form に Formを貼り付けると、MainMenuが表示されませんねorz

表示させる方法はあるのでしょうか?
無ければ、Menuライクなコンポーネント?

565:デフォルトの名無しさん
08/07/23 19:25:23
何がやりたいの?

566:デフォルトの名無しさん
08/08/08 13:42:48
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet***\Enum以下の
レジストリを操作(キー・値の変更・削除)したいんですが
SYSTEMユーザーしか操作権限がない状態です

これらを操作する方法などありますか?

567:デフォルトの名無しさん
08/08/08 22:03:58
いやそれ操作したら駄目だろ。

568:デフォルトの名無しさん
08/08/10 11:06:01
やっぱりタブーなのね(´・ω・`)サーセンでした

569:デフォルトの名無しさん
08/08/10 14:37:09
なにしたいのよ?

570:デフォルトの名無しさん
08/08/10 14:57:37
テスト環境で設定したソフトの登録情報を
本番環境とごっそり置き換える作業をプログラム化したいんです。

今、それをするのに手作業(設定時なのでAdministrato)で
レジストリのアクセス権つけて不必要な登録を消したりとかしてます。

571:デフォルトの名無しさん
08/08/10 15:14:04
それにしてもHKLM\System以下を書き換えるなんてのはありえないと思うが?

572:デフォルトの名無しさん
08/08/10 16:17:13
Enum\LEGACY*のいくつかにマシン名やコンピュータの設定が
刻まれているので消しているということらしいんですが
(この辺がテスト環境と本番環境で変わってくるので変更したい)

実際には、その環境の情報を見てはいないんですが
消す必要がないのかな・・・

573:デフォルトの名無しさん
08/08/29 00:44:34
画像ファイル(bmp、jpg)をテキストデータとして扱うことはできませんか。
MIMEとか、ishのような感じで、当然、可逆変換で。

574:デフォルトの名無しさん
08/08/29 08:19:15
そのMIMEとかいshで変換すりゃあいいやん。意味不明。

575:573
08/08/29 19:31:44
ん〜と、簡易データベースみたいなのをつくろうとしてて、テキストフィールドに画像を「テキストデータとして格納」したいってことなんだけど、意味不明?

576:デフォルトの名無しさん
08/08/29 21:25:36
やっぱり意味不明かも。
まともなRDBMSならBLOB使うべきだし、
BLOB使えないなら別の名前を与えてファイルのまま保存、使うときは逆参照汁。

577:デフォルトの名無しさん
08/08/29 21:29:26
まあどうしてもやりたいなら止めない。

URLリンク(www.google.com)

この辺りでも参考にしてくれ。

578:デフォルトの名無しさん
08/08/31 01:49:12
あ、俺は逆のパターンを知りたい。
文字列フィールドに入りきれない文字列を画像に変換してBLOBに保存する、って無理?

579:デフォルトの名無しさん
08/08/31 11:22:22
>>578
使用してるDBが分からないけど、Delphiからということを考慮するとFirebirdか?

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

ほかのDBだと、
PostgreSQLはTEXT型があるから、意識する必要なし
SQL Serverも、2005からVARCHAR(MAX)があるから、意識する必要なし
MYSQLもTEXT型があるみたいだ
ORCLE, DB2はシラネ


580:デフォルトの名無しさん
08/08/31 11:37:40
>>579

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

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

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

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

と言うことなんだけど。

581:デフォルトの名無しさん
08/09/01 07:15:35
EditでIMEがOn/Offで背景色を変えたいんだけど
そういったサンプルコードないですか?

582:デフォルトの名無しさん
08/09/01 19:27:39
無いな。だがヒントだけ教えてやろう。
IMEの状態が変わるときのメッセージ(WM_IME_NOTIFY)を受けたら
IMEの状態を取得して、ONの時はColorプロパティを適当な色に変えれば良いんだ。

583:デフォルトの名無しさん
08/09/02 01:05:42
処理が大まかに2つあってタイマーを使って繰り返したい(Intervalはどちらも同じで問題ない)場合
タイマーを一つだけ使うのと、処理それぞれでタイマーを作るのでどっちが一般的なんでしょうか?
また、どっちが軽くなるんでしょうか?
よろしくお願いします。

584:デフォルトの名無しさん
08/09/02 03:24:52
Intervalが同じならとりあえず一つで十分だろう。
タイマー二つまわすよりも一つの方が理屈としては軽い。
ただタイマーごときで重くなるようなPCは今時存在しない。

585:デフォルトの名無しさん
08/09/02 03:31:58
>>584
ありがとうございます!
助かりました


586:デフォルトの名無しさん
08/09/08 08:07:01
あの・・単純な質問なのですが、TChartコンポーネントを使って
凡例を表示させると、凡例がグラフの裏側へと隠れてしまいます。
(枠の端っこのちょっとだけ見えている状態です)

これをグラフよりも手前に表示させる方法を教えてください・・

587:デフォルトの名無しさん
08/09/08 20:01:27
ソフト公開所
スレリンク(mitemite板)
こういうスレつくってみた。

588:デフォルトの名無しさん
08/09/09 06:27:01
アップローダもなしに何をどう公開しろと・・・

589:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/09/10 18:39:03
>>589
とりあえずこういうスレがあるからそちらで聞くとよいと思われ。

【Delphi互換!?】FreePascal【GPL】
スレリンク(tech板)l50



591:589
08/09/11 09:58:00
>>590
ありがとうございました。
教えていただいた、スレを拝見致しまして
無事解決することができました!

592:デフォルトの名無しさん
08/09/12 13:51:14
ウィンドウっとか、オブジェクトってフォームデザイナで作っておかないとだめなんでしょうか?
ユーザーの処理にあわせて、新しいフォームを作り、そこに画像を表示させたいんです。
元々用意しとくんじゃなくて、いくらでも増やせていけるように。

たとえばフォトショップでいくらでも画像ひらいて、どんどんウィンドウ増えるじゃないですか。
あーいう感じです。

593:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/09/12 15:03:51
ありがとうございます。
このフォームの上につくるオブジェクトもこれでOKですかね。
いわゆる動的生成をやるってことですよね?

595:デフォルトの名無しさん
08/09/12 15:13:38
そうです。

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



596:デフォルトの名無しさん
08/09/12 15:49:30
ありがとうございました!

597:デフォルトの名無しさん
08/09/17 18:27:00
>>588
アップローダー作ったら公開してくれるの?

598:デフォルトの名無しさん
08/09/18 00:30:44
>>597
半年ROMれ

599:デフォルトの名無しさん
08/09/18 00:35:40
---------半年後----------

600:デフォルトの名無しさん
08/09/18 00:47:11
最終回か…。

601:デフォルトの名無しさん
08/09/20 21:18:10


602:デフォルトの名無しさん
08/10/11 15:50:00
>>529 3の倍数はアホになれ

603:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/18 23:27:22
すなおにD2007

605:デフォルトの名無しさん
08/11/18 23:29:02
>>603
D5持ってたらなんなの?

606:デフォルトの名無しさん
08/11/18 23:35:15
>>604
D2007ではFastCodeの効果ありますでしょうか?

607:デフォルトの名無しさん
08/11/18 23:35:47
>>605
いえ、FastCodeの話です

608:デフォルトの名無しさん
08/11/19 00:44:33
D2007はFastCodeもFastMoveもFastMMも採用済みじゃなかったっけ?

609:デフォルトの名無しさん
08/11/19 02:09:08
FastCodeのAnsiStringReplaceは「Ansi」って付いてるけど
マルチバイト非対応なんで気を付けてね


610:デフォルトの名無しさん
08/11/19 09:14:53
FastMMは使ってるから何か分かるが、
FastCodeとかFastMoveって何?

611:デフォルトの名無しさん
08/11/19 10:24:37
グーグレ

612:デフォルトの名無しさん
08/11/19 14:31:52
>>610
標準のシステムの関数を速いのにおきかえたものただし>>609の問題があったはず

613:デフォルトの名無しさん
08/11/22 11:32:01
バグ恐いからFastMMしか使ってないな

614:デフォルトの名無しさん
09/02/02 18:23:00
ちょうどCompareMemがネックになってたんでちょっと使ってみるかな。

615:デフォルトの名無しさん
09/02/05 13:17:57
>CompareMem
kwsk

616:デフォルトの名無しさん
09/02/19 15:08:18
TMemoryStreamの先頭3バイト削除したりできますか?

617:デフォルトの名無しさん
09/02/20 00:23:17
だめです
先頭3バイト以降を別のStreamにコピーするとか
MemoryをPCharにキャストして[3]とか

618:デフォルトの名無しさん
09/02/20 07:53:17
そもそもメモリを削除ってなによ

619:デフォルトの名無しさん
09/02/21 10:04:30
cのscanf相当の関数教えて

620:デフォルトの名無しさん
09/02/21 10:27:00
>>619
その前にそのscanfとやらが、Delphiでどの関数にあたるのかを説明してくれ。

621:デフォルトの名無しさん
09/02/21 15:21:45
>>619
ないはず

622:デフォルトの名無しさん
09/02/27 16:36:03
>>619 stdioはいまさらイランと仮定して、いっかい文字列に入れてから
strtoint strtofloat strtocurr他で一個づつ変換

623:デフォルトの名無しさん
09/03/24 14:32:45
TMemoryStreamでSizeを大きくしたら、大きくなった部分NULL埋めされるんでしたっけ?

624:デフォルトの名無しさん
09/03/24 15:18:41
>>623
試すのに1分もかからないと思うが、どうよ?


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5118日前に更新/190 KB
担当:undef