よく考えたら、
これも時間とメモリサイズのトレードオフになるのですね。
仕方ないか。
速さを求めるなら1次元にしろよ
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
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なんかを捕まえてもだめだし、もうよくわかりません。
どうにかしてください。
常にSelTextをある変数に控えておけば?
あなたが問題としてるイベントでこの変数を使えばいい
「例えば」のくだりからすると、
範囲選択したときに保存すればいいんじゃないの?
そういう「動き」じゃなくて、そういう事をなぜしたいのかという、
用途というか目的を書いた方がよい
レスありがとう。。。
>>947 常に控えるやり方も試してみたんですけど、
「常に控えている」だけに、使う時には既にもう空っぽなのです。。。
>>948 なるほど。
複数回アンドゥ/リドゥ機能を実装したいと考えています。
そこで、「テキストに何かしらの変更かあったとき、どの部分が変更されたか」
を控えておく必要があったのです。
>範囲選択したときに保存
これ、よさそうですね。「範囲選択した時」のタイミングを得る方法さえわかれば・・・
ちょっと調べてみます。。
RichText2.0なら複数回Undo/Redoに対応してるけど、
DelphiのTRicheEditは1.0なんだよねー。
2.0用のpasファイルはあるのにね。
952 :
デフォルトの名無しさん:05/02/01 01:53:19
var
lIniFile : TIniFile;
***.pas(***):未定義の識別子 : 'TIniFile'
なんで?
考えうる原因を教えてください。
ここに至るまでのセミコロンとかbegin endがおかしいとかそういうオチ?
指定した場所の色を取得させるにはどうしたらできますか?
>>952 Uses節にIniFiles を追加。
「へりくだれ」とは言わないけど、もう少し大人な質問の仕方が
あると思う…。
>>954 すいません&ありがとうございますです…。気をつけます。
>>953 Canvas.Pixels[x,y]
という話じゃなかったら場所って何か説明しろ
>>956 すいません、えっとデスクトップとか今画面に開いてるものの色です
>>957 GetWindowDC、TCanvas、Pixelsあたりを検索してみてください。
GetWindowDCなら、APIのGetPixelを使った方が良いでしょう。
960 :
デフォルトの名無しさん:05/02/01 07:08:22
実行時にあるフォームのサイズや位置を変更したとき、
それを他のフォームに反映させるにはどうすればいいですか?
同じようなこと勉強中なので参考までに。
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
{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.
procedure TForm1.WMMove(var msg: TWMMove);
begin
FormResize(nil);
end;
でいいんでないの?
procedure TForm1.WMMove(var msg: TWMMove);
begin
Form2.Top := Form1.Top;
Form2.Left := Form1.Left;
end;
か。
>>951 むかし同じ事をしたことがあるけど、確かlinesをいじるとエラーが出ない?
ありがとう、って書くのも面倒なんか?
うざい、って書くのも面倒なんか?
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 あっ…。ありがとうございます。
激しく基本的なことが抜けてました。
>>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;
procedure ForApple;
begin
with Apple do
処理;
end;
end;
こんな感じのprocedureがあって、
そこではAppleに関することだけしか処理しません。
なので「with Apple do」が当たり前すぎるのですが、
どうにかしてさっぱりさせる事はできませんか?
さっぱりの意味がさっぱり分かりません。
こんな風に書ければいいなぁ、という希望例を示さないと。
with Apple, Orange do
begin
処理;
end;
とか?
>>979 えーと、こんな感じにしたいです。
procedure with Apple TForm1.ForApple;
begin
処理;
end;
もしくは、
procedure TForm1.ForApple;
with Apple do
begin
処理;
end;
どうですか?
>>980 いやOrangeは出てこないです。
Appleだけだからこその希望です。
procedure TForm1.ForApple;
begin with Apple do begin
処理;
end end;
このくらいで我慢しといて。
なにがしたいのかわからん
えーと、意味の分からなさは
くだすれならではという事で許してください。
自分には無駄で省略したい事も、
他人にとってはそうではなかったりするんだなって思いました。
レスありがとうございました。
やりたかったことは何となくわかるぞ
そして、それは多分無理
オレも省略好きだが、withはバグを生みやすいから気を付けろ
>>986 最近delwiki?というものを読んだが賛否あるみたいですね
おれもwithは嫌い
見づらくなるしややこしい
たまに
with xx do
begin
for ...... do
begin
....
....
with yy do
begin
....
with zz do
begin
....
超ムカツク
ピリオドやキャストだらけの式では使う。
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);
一時変数を使え? ごもっとも。
with文はvb風味の方が分かりやすいなぁ。
withの中のプロパティには先頭にドット付ける書き方。
withの入れ子は凄いな。
やっぱり、せいぜい二段くらいまでしか使わない。
でも、そこまでするくらいならさっさと一時変数にしてスッキリさせる方向だよね。