くだすれDelphi(超初心者用)その13

このエントリーをはてなブックマークに追加
>>904
それでやってみます!
Demoってなんか新種の生き物みたいだな
924880:04/05/21 18:41
どうも。ありがとうございました。
おかげさまでTagプロパティを用いて太さ設定、消しゴム大きさ設定とかもできました。
ところで……

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); //ボタンを押したとき
begin
 Image1.Canvas.MoveTo(X,Y); //ボタン押下位置取得
 pen := True; //変数penをtrueに
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
//マウス移動時に
begin
  if pen then //変数penがtrue(=ボタン押下時)のとき
  Image1.Canvas.LineTo(X,Y); //線を引く
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); //ボタンを離したとき
begin
  pen := False; //変数penをfalseに
end;

このように描画しているのですが、クリックして(ドラッグせずに)離すと点が打てないという問題に直面しております。
クリックした地点に点を打つ、という処理はLineToでは無理なのでしょうか?
>>924
普通のお絵かきソフトの場合、
先を引くという機能を選択する→クリックしたままドラッグさせると
点線が表示される。クリックを止めると点線が線になって確定させる。
ということになるので、普通は点を打つか、線を引くかユーザに
選択させるもんだと思うぞ。
926880:04/05/21 18:48
>>925
いや、"直線ツール"の話ではなく、ペイントソフトの言い方をすれば、"鉛筆ツール"のつもりです。

直線ツールはまた追々付けていってみようかなと……
>>926
ぢゃあ、クリック時のTPointとクリックを止めた時のTPointが同じだったら、
その場所に点を打つという処理にすれば?
つーか、LineToは最後の点を描かない仕様だったと思うので
LineToを使ったあと、X,Yに点を描けばええと思います。
929880:04/05/21 20:38
色々試行錯誤してみた結果、Canvas.Pixelを使えば良いという事になりました
自分の頭の中にはLineToしか思い浮かばなかったです。

名無しに戻って頑張ってみます。アドバイスありがとうございました
htmlを1タグずつ解釈していって目当ての情報を得る関数を作ったのですが
一般的にこういった関数の関数名はどういう名前が付くのでしょうか?
今は
function KaisekiTextMode(html : String ):Boolean;
という名前をつけていますが、「Kaiseki」の部分にものすごく違和感があります。

多少スレ違いな感がありますが、他に適切なスレも見つからずに困っています。
> Canvas.Pixelを使えば良いという事になりました

えっ、これ知らなかったの? お絵かきプログラムつくるんだったら、TCanvas の
メソッドをすべて試すことくらいしておけよな
およ、Pixels[] はプロパティーだな
飛行機のJPGを左から右へ移動させ、あたかもとんでいるように
見せるにはどうすればよいでしょうか。
>>933
そのJPGを見ている奴の顔を右から左へ動かす。
>>933
そんなに頻繁にアニメーション使わないならImageListを使うと楽
>>930
「Kaiseki」も英語にすればよし
>>934
見せたい相手が近くにいない場合を想定しているので、
ちょっと難しいです。できればプログラムでできたらうれしいです。

>>935
ありがとうございます。調べてみます。

>>936
ありがとうございます。試してみます。
>>938
ImageListに画像読み込んでImageList.Draw(0, 0, 0);ってすると
勝手にマスク処理(描画する画像と背景画像を合わせる)してくれるよ
これからもよく使うようなら自分でandだのxorだのしたほうがいいけど
DirectX使え
プログラムを打ち込んで実行したら、Runtime error 6とか出て、全く次に進めません
教えてください、お願いします _no
ちなみに、コンソールアプリケーションでやっています
ソースはこんな感じです

program ps1(input,output);
var m,n:rear;
begin
readln(m);
n:=m+1
writeln(n);
end.

超初心者でゴメンナサイ _no
ちなみにDelphi6 Personalを使用しています
program OneCoolDelphiProgram1;

{$APPTYPE CONSOLE} //This tells the compiler that the program is a console type

uses
 SysUtils;

begin
 //Insert super cool Delphi Code here
end.
program ps1(input,output);

これはおかしい。こんな感じ。

program Project1;

{$APPTYPE CONSOLE}

uses SysUtils;

var m,n:real;
begin
readln(m);
n:=m+1;
writeln(n);
end.
>program ps1(input,output);
無茶苦茶クラシックなPascalだな。

とりあえずここだけ
>program ps1;
に変えとけばいいよ。
program Project1;

{$APPTYPE CONSOLE}

uses SysUtils;

var m,n:real;
begin
readln(m);
n:=m+1;
writeln(n);

readln;// これ付けるとみやすいかも
end.
947941:04/05/21 22:51
すみません、学校でLinuxでPascalやってるのを家に持って帰ってやり始めたんです
いまからまたやってみます、ありがとうございます
[新規作成] から [コンソールアプリケーション] を選ぶといいよ
949デフォルトの名無しさん:04/05/21 23:34
文章ファイルをMEMOやRichEditに読み込まずに行数と文字数を
知る方法はなにかないでしょうか?
>>949
TStringList
>>949
TStringListに読み込んだらどうよ?
もしくはStreamに落として改行コードの数を数えるとか
952949:04/05/21 23:50
>>950
>>951
ありがとうございます。やってみます
Delphiしたいんですけど
やっぱり英語読めないとだめですよね。
たとえば>>946の英語って読めますか?
>>953
読めね
でもDelphi起動
そしてあなたも今日からDelphi起動
>>953
英語が読めなくてもプログラミングはできる。
英語ができないと困るのは日本語訳されてない資料を読むときぐらい。
956953:04/05/22 00:21
>>954-955
ありがとうございます。
>>950-951
100Mのファイルを全部一度に読み込むのはメモリの無駄だろ。
AssignFile, Reset, Eof, Readln使っとけ。
TFileStreamを使え。
>>957

100Mってどこに出てきた? 何メガならメモリの無駄じゃないの?
実行スピードはどうなの?
960デフォルトの名無しさん:04/05/22 02:13
最近テキスト処理にstream使うアホが増えてるのは
環境ホルモンの影響なんだろうか??
>>960
stream使うとどうなるのでつか?
テキスト処理に TStream 系を使うことが何でアホなのか、アホに説明できるわけない
if str = 'いち' then result := 1 else
if str = 'にい' then result := 2 else
if str = 'さん' then result := 3 else
・・(略)
if str = 'じゅう' then result := 10;

をもっとうまく書く方法ってありますか?
テキストから
1文字をだして
数値にかえるにはどうしたらいいでしょうか?

n:=Ord(Copy(FileList[0],1,1));

「互換性のない型です」とエラーがでるのですが・・・
>>963
面倒だから「さん」まで

function HiraToNum(s:string):integer;
const
numstr : array[0..2] of string = ('いち','にい','さん');
var
i:integer;
begin
i := -1;
repeat
inc(i)
until (i>High(numstr)) or (numstr[i] = s);
if (i>High(numstr)) then result := -1 else result := i+1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := IntToStr(HiraToNum('にい'));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := IntToStr(HiraToNum('にい'));
end;
Ord(s[i])
Copy() の返値はstring型だから Ord は取れない
文字列は文字の配列だよ

s := '123';

なら s[2] は '2' の Char 型と互換

>>964
>>963とは同一?
別人ならOrdをStrToIntに。
ええー、文字コードじゃなくて StrToInt() かよ。 Ord() だからてっきり・・・・・
こんなのはどうかな。

function HiraToNum(const Hira: string): Integer;
var
 HiraStrings: TStringList;
begin
 HiraStrings := TStringList.Create;
 try
  HiraStrings.Text := 'いち'#13#10'にい'#13#10'さん';
  Result := HiraStrings.IndexOf(Hira);
  if Result >= 0 then Inc(Result);
 finally
  HiraStrings.Free;
 end;
end;