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

このエントリーをはてなブックマークに追加
942929, 934:05/01/31 17:45:15
よく考えたら、
これも時間とメモリサイズのトレードオフになるのですね。
仕方ないか。
943デフォルトの名無しさん:05/01/31 18:12:37
速さを求めるなら1次元にしろよ
944デフォルトの名無しさん:05/01/31 18:26:35
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。
945デフォルトの名無しさん:05/01/31 19:46:10
D2005でRAVEを動的クリエイトして動かそうとしています。
んで、DataTextに表示させるTextのことで困っています。
Pageが変わるごとにDataTextに違う値を放り込みたいのですが、どうしてもできません。
DataFiledにReport.CurrentPageを入れれば
ページ数が表示されているので、できるとは思うんですが・・・
1個ずつクリエイトしていては激重なのでどうにかしたいんです。
ヒント下さいお願いします。
946デフォルトの名無しさん:05/01/31 21:15:06
RichEditを継承してコンポーネントを作っています。困ってます。
キー入力を反映させる前にSelTextをある変数に控えておきたいのです。
例えばBackSpaceを押下する場合、OnSelectionChangeなどでは
範囲選択された文字をすべて消してしまってからイベントが発生してしまうので、
当然SelTextの中身は空っぽ。
EN_SELCHANGEなんかを捕まえてもだめだし、もうよくわかりません。
どうにかしてください。
947デフォルトの名無しさん:05/01/31 22:01:43
常にSelTextをある変数に控えておけば?
あなたが問題としてるイベントでこの変数を使えばいい
948デフォルトの名無しさん:05/01/31 22:03:20
「例えば」のくだりからすると、
範囲選択したときに保存すればいいんじゃないの?

そういう「動き」じゃなくて、そういう事をなぜしたいのかという、
用途というか目的を書いた方がよい
949946:05/01/31 22:20:23
レスありがとう。。。

>>947
常に控えるやり方も試してみたんですけど、
「常に控えている」だけに、使う時には既にもう空っぽなのです。。。

>>948
なるほど。
複数回アンドゥ/リドゥ機能を実装したいと考えています。
そこで、「テキストに何かしらの変更かあったとき、どの部分が変更されたか」
を控えておく必要があったのです。

>範囲選択したときに保存
これ、よさそうですね。「範囲選択した時」のタイミングを得る方法さえわかれば・・・
ちょっと調べてみます。。
950デフォルトの名無しさん:05/02/01 00:02:07
RichText2.0なら複数回Undo/Redoに対応してるけど、
DelphiのTRicheEditは1.0なんだよねー。
2.0用のpasファイルはあるのにね。
951デフォルトの名無しさん:05/02/01 00:28:30
昔作ったRichEdit2.0に微妙に対応したUnitを引っ張り出してきた。
http://www.globetown.net/~threadbuilder/RichEdEx.txt

はっきりいってしょぼいので、参考にする程度にしてね。
952デフォルトの名無しさん:05/02/01 01:53:19
var
lIniFile : TIniFile;

***.pas(***):未定義の識別子 : 'TIniFile'


なんで?
考えうる原因を教えてください。
ここに至るまでのセミコロンとかbegin endがおかしいとかそういうオチ?
953デフォルトの名無しさん:05/02/01 01:54:51
指定した場所の色を取得させるにはどうしたらできますか?
954デフォルトの名無しさん:05/02/01 01:59:23
>>952
Uses節にIniFiles を追加。

「へりくだれ」とは言わないけど、もう少し大人な質問の仕方が
あると思う…。
955デフォルトの名無しさん:05/02/01 02:02:29
>>954
すいません&ありがとうございますです…。気をつけます。
956デフォルトの名無しさん:05/02/01 02:12:46
>>953
Canvas.Pixels[x,y]
という話じゃなかったら場所って何か説明しろ
957デフォルトの名無しさん:05/02/01 02:41:22
>>956
すいません、えっとデスクトップとか今画面に開いてるものの色です
958デフォルトの名無しさん:05/02/01 02:47:47
>>957
GetWindowDC、TCanvas、Pixelsあたりを検索してみてください。
959デフォルトの名無しさん:05/02/01 04:53:07
GetWindowDCなら、APIのGetPixelを使った方が良いでしょう。
960デフォルトの名無しさん:05/02/01 07:08:22
実行時にあるフォームのサイズや位置を変更したとき、
それを他のフォームに反映させるにはどうすればいいですか?
961デフォルトの名無しさん:05/02/01 09:38:43
同じようなこと勉強中なので参考までに。
Form1を移動させたりリサイズするとForm2に反映。uses Unit2;
ソース汚くてスマソ。
----------------------------------------------------------------
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type
TForm1 = class(TForm)
procedure FormResize(Sender: TObject);
protected
{WMMoveメッセージの処理}
procedure WMMove(var msg: TWMMove); message WM_MOVE;
private
{ Private 宣言 }
public
{ Public 宣言 }
end;

var
Form1: TForm1;

implementation
962デフォルトの名無しさん:05/02/01 09:39:58
{Form1の位置が移動された時はWMMoveメッセージで}
procedure TForm1.WMMove(var msg: TWMMove);
var
hForm2: HWND;
Rect:TRect;
Form2_Top,Form2_Left,Form2_width,Form2_Height:Integer;
begin
{Form2のハンドルをhForm2へ取得}
hForm2:=FindWindow(nil,'Form2');
{Form2の位置情報をRectへ取得}
GetWindowRect(hForm2,Rect);

{Rect情報からForm2の縦横幅を算出}
Form2_width := Rect.Right - Rect.Left;
Form2_Height:= Rect.Bottom - Rect.Top;
Form2_Top := Form1.Top;
Form2_left:= Form1.Left;

{Form2のハンドル(hForm2)へForm1のウインドウの位置座標(Form1_LeftとForm1_Top)をそっくり送る
縦横幅(Form2_widthとForm2_Height)は現状維持させる}
MoveWindow(hForm2,Form2_left,Form2_Top, Form2_width,Form2_Height,True)
end;

{Form1のサイズが変更された時はonResizeで}
procedure TForm1.FormResize(Sender: TObject);
begin
{Form1の縦横幅(width,Height)をForm2へ反映}
Form2.Width := Form1.Width;
Form2.Height:= Form1.Height
end;

end.
963デフォルトの名無しさん:05/02/01 10:19:43
procedure TForm1.WMMove(var msg: TWMMove);
begin
FormResize(nil);
end;

でいいんでないの?
964デフォルトの名無しさん:05/02/01 10:30:13
procedure TForm1.WMMove(var msg: TWMMove);
begin
Form2.Top := Form1.Top;
Form2.Left := Form1.Left;
end;

か。
965デフォルトの名無しさん:05/02/01 10:53:29
>>951
むかし同じ事をしたことがあるけど、確かlinesをいじるとエラーが出ない?
966デフォルトの名無しさん:05/02/01 17:53:31
>>957
>>958
トン
967デフォルトの名無しさん:05/02/01 17:54:52
>>958
>>959
あり
968デフォルトの名無しさん:05/02/01 19:03:26
ありがとう、って書くのも面倒なんか?
969デフォルトの名無しさん:05/02/01 19:04:56
>>968
うざ
970デフォルトの名無しさん:05/02/01 19:12:36
うざい、って書くのも面倒なんか?
971デフォルトの名無しさん:05/02/01 21:00:56
>>970
972デフォルトの名無しさん:05/02/01 21:06:39
1ヶ月くらいDelphiに粘着してたんですが…ほんとに超初心者です。

procedure TForm1.FormCreate(Sender: TObject);
begin

main_img.Picture.LoadFromFile('title.bmp');

story_lbl.Caption := ('')
name_lbl.Caption := ('')
serihu_lbl.Caption :=('')

end;
この文字列のstory_lblのところは正常に動きますが、name_lblとserihu_lblのところで
“演算しまたはセミコロンが必要です”とエラーが出ます。プロパティはnameのところ
以外変えてません。どうしたらいいでしょうか?
973デフォルトの名無しさん:05/02/01 21:10:15
行末にセミコロン ; 付けろ
974デフォルトの名無しさん:05/02/01 21:17:19
特定のディレクトリ内にあるファイル数を取得するにはどうしたらいいでしょうか?
また、その中で特定の文字列が先頭にあるファイル数を取得するにはどうすればいいんでしょうか?
975デフォルトの名無しさん:05/02/01 21:17:55
>>973
あっ…。ありがとうございます。
激しく基本的なことが抜けてました。
976デフォルトの名無しさん:05/02/01 21:47:28
>>965
出るよ。コメントにも書いてあるよ。
977デフォルトの名無しさん:05/02/01 22:00:55
>>974
ファイル数のカウント方法。
後は何とかなるでしょう。

var
sr:TSearchRec;
I:integer;

begin

I := 0;

if FindFirst('C:\*.*',faDirectory,sr) = 0 then //C\にあるファイルチェック。
begin
repeat

I := I + 1 ; //ファイルを見つけるたびに1づつ足していく。

until findnext(sr) <> 0 ;
end;
FindClose(sr);

end;

978デフォルトの名無しさん:05/02/01 22:02:09
procedure ForApple;
begin

with Apple do
処理;
end;

end;
こんな感じのprocedureがあって、
そこではAppleに関することだけしか処理しません。
なので「with Apple do」が当たり前すぎるのですが、
どうにかしてさっぱりさせる事はできませんか?
979デフォルトの名無しさん:05/02/01 22:14:17
さっぱりの意味がさっぱり分かりません。

こんな風に書ければいいなぁ、という希望例を示さないと。
980デフォルトの名無しさん:05/02/01 22:36:53
with Apple, Orange do
begin
 処理;
end;

とか?
981978:05/02/01 22:37:19
>>979
えーと、こんな感じにしたいです。
procedure with Apple TForm1.ForApple;
begin
処理;
end;

もしくは、
procedure TForm1.ForApple;
with Apple do
begin
処理;
end;

どうですか?
982978:05/02/01 22:39:43
>>980
いやOrangeは出てこないです。
Appleだけだからこその希望です。
983デフォルトの名無しさん:05/02/01 23:07:44
procedure TForm1.ForApple;
begin with Apple do begin
処理;
end end;

このくらいで我慢しといて。
984デフォルトの名無しさん:05/02/01 23:13:31
なにがしたいのかわからん
985978:05/02/01 23:29:19
えーと、意味の分からなさは
くだすれならではという事で許してください。
自分には無駄で省略したい事も、
他人にとってはそうではなかったりするんだなって思いました。

レスありがとうございました。
986デフォルトの名無しさん:05/02/01 23:38:18
やりたかったことは何となくわかるぞ
そして、それは多分無理

オレも省略好きだが、withはバグを生みやすいから気を付けろ
987デフォルトの名無しさん:05/02/01 23:40:54
>>986
最近delwiki?というものを読んだが賛否あるみたいですね
988デフォルトの名無しさん:05/02/01 23:47:38
おれもwithは嫌い
見づらくなるしややこしい
たまに
with xx do
begin
 for ...... do
 begin
 ....
 ....
 with yy do
 begin
  ....
  with zz do
  begin
  ....

超ムカツク
989デフォルトの名無しさん:05/02/01 23:59:09
ピリオドやキャストだらけの式では使う。

with TWinControl(FTmpControl).Controls[i] do
 Caption := Caption + IntToStr(Tag);

TWinControl(FTmpControl).Controls[i].Caption :=
 TWinControl(FTmpControl).Controls[i].Caption
 + IntToStr(TWinControl(FTmpControl).Controls[i].Tag);

一時変数を使え? ごもっとも。
990デフォルトの名無しさん:05/02/02 00:33:41
with文はvb風味の方が分かりやすいなぁ。
withの中のプロパティには先頭にドット付ける書き方。
991デフォルトの名無しさん
withの入れ子は凄いな。
やっぱり、せいぜい二段くらいまでしか使わない。

でも、そこまでするくらいならさっさと一時変数にしてスッキリさせる方向だよね。