• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:StringGrid1で画面におさまりきらない行をForm2から遠隔スクロールするには?)

StringGrid1で画面におさまりきらない行を遠隔スクロールする方法

kenzo-2000の回答

  • ベストアンサー
回答No.2

WindowsAPIを解説している本やサイトですが、私もあまり見たことがありません。 何せAPIはたくさんあり紹介しきれないからではないかと思います。 私が勉強したのも、昔のことではっきりとしたタイトルは覚えていませんが、 確か「Windows98 API何とかかんとか」といった10cmくらいの厚さの本の2セット本だったような・・・。 あれを見ればAPIについて結構勉強できると思います。(かなり値段は張りますが価値はあると思います。) 回答になっていなくてごめんなさい。

tonka729
質問者

お礼

10cm位の厚さの本ですか。すごいですね。タイトルをマメに探してみることにします。ありがとうございました。

関連するQ&A

  • Delphiプログラミングについて

    この内容ではいけないのでしょか? また、代わりの方法なども教えていただけると嬉しいです ボタン ラベル がフォーム1の上に1つずつあるだけです お願いいたします unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Button1: TButton; procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; i:integer; implementation {$R *.dfm} procedure hyouji; begin repeat form1.label1.caption:= 'strike'; until i = 10; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (KEY = VK_RIGHT) then i:=i+1; end; procedure TForm1.Button1Click(Sender: TObject); begin hyouji end; end.

  • delphi paintbox.invalidate

    ターボdeliphiのPaintBoxです procedure TForm1.Button1Click(Sender: TObject); begin PaintBox1.Invalidate; PaintBox1.Canvas.MoveTo(0,0); PaintBox1.Canvas.lineTo(100,100); end; procedure TForm1.Button2Click(Sender: TObject); begin PaintBox1.Canvas.MoveTo(0,0); PaintBox1.Canvas.lineTo(100,100); end; procedure TForm1.PaintBox1Paint(~~~~~ ボタン1でlineTo(100,100)は描画されず、ボタン2では描画されます。 つまりPaintBox1.Invalidateで再描画させている微妙なタイミングのせいでしょうか? 再描画が終了してからlineTo(100,100)を描画したいのですが、それを知るコマンド?関数?はありますか?

  • Delphiに関して  「このプログラム解読できません!」

    こんにちは。このプログラムが解読不可です。StringGridの1列目と2列目の各セルの内容を右寄せにする ということで、実行させると確かにそうなるのですが、どういう構造かいまいち分かりません。特に 'Rect.Top:=Rect.Top+2;' のところなんて"なんで+2なの~?"ってホントに謎です。gdFixedとかFillRectとかヘルプに書いてあることとなんか違う気がして....DT_RIGHTもわかりません。 このプログラムの解説お願いします! procedure TForm1.StringGrid1DrawCell(Sender:TObject;ACol,ARow:Integer;Rect: TRect; State: TGridDrawState); begin If Not (gdFixed In State) And (ACol In [1,2]) Then Begin StringGrid1.Canvas.FillRect(Rect); Rect.Top := Rect.Top + 2; If (ACol = 1)or(ACol = 2) Then DrawText(StringGrid1.Canvas.Handle, PChar(StringGrid1.Cells                 [ACol,ARow]),Lengthend(StringGrid1.Cells                [ACol,ARow]),Rect,DT_RIGHT) end; end;

  • StringGridの中身をCSV形式で保存するには、保存の際に、ファイル拡張子を自動で「.csv」を付与するには?

    こんにちは。 StringGridの中身をCSVデータとして保存したいのですが、 その際に、『自分の好きな名前』で『デスクトップ』に保存できるようにしたいと考えています。 ソース1では、CSV形式での保存は行えるのですが、 名前をつけるやり方とデスクトップの指定方法が分かりません。 opendialog,savedialogを使うと思うのですが、 上手く組み合わせることが出来ずに困っています。 ソース2では、理想どおりの結果を出力できるはずなんですが、 実行すると空の結果が出力されます。どこが間違っているか分からず、困り果てています。 ・間違っている部分がどこか? ・保存する際に自動で端子に.csvを付与するにはどうすれば良いか? アドバイス頂けると助かります。 宜しくお願いしします。 -----------ソース1:------------------------------------------ procedure TForm2.GridSaveCSV(SGrid:TStringGrid; fName: String); var stList :TStringList; ARow :Integer; begin stList:=TStringList.Create; try for ARow:=0 to SGrid.RowCount-1 do stList.Add(SGrid.Rows[ARow].CommaText); stList.SaveToFile(fName); finally stList.Free; end; end; //CSVFileからStringGridへ読込み1 procedure TForm2.GridLoadCSV(SGrid:TStringGrid; fName:string); var stList: TStringList; ARow: Integer; begin stList:=TStringList.Create; try stList.LoadFromFile(fName); SGrid.RowCount:= stList.Count; for ARow:=0 to stList.Count-1 do SGrid.Rows[ARow].CommaText:= stList[ARow]; finally stList.Free; end; end; procedure TForm2.Button3Click(Sender: TObject); var fName: String; begin fName := 'csvtest.csv'; GridSaveCSV(StringGrid1,fName); end; -------------------------------------------------------------- -----------ソース2:------------------------------------------ procedure TForm2.Button8Click(Sender: TObject); var F : TextFile; Str : String; CellA,CellB,CellC,CellD,CellE : String; RowCNT : Integer; begin if not SaveDialog1.Execute then exit; if FileExists(SaveDialog1.FileName) then //↑ここのFileNameの使い方が良く分かりません>< //保存するときに、自動で.csvが付与されるようにしたいと思っています。 if Application.MessageBox('上書きしますか','注意',MB_YESNO ) = 7 then exit; //_ AssignFile(F,SaveDialog1.FileName); Rewrite(F); RowCNT := 0; try while not (StringGrid1.Cells[0,RowCnt] = '') do begin CellA := StringGrid1.Cells[0,RowCnt]; CellB := StringGrid1.Cells[1,RowCnt]; CellC := StringGrid1.Cells[2,RowCnt]; CellD := StringGrid1.Cells[3,RowCnt]; CellE := StringGrid1.Cells[4,RowCnt]; Str := Format('%s,%s,%s,%s,%s'[CellA,CellB,CellC,CellD,CellE]); // ↑この辺りが怪しいと思っています。 WriteLn (F,Str); Inc(RowCNT); end; finally CloseFile(F); end; end;

  • delphiで検索機能を作成したいのですが・・・

    Edit1に数字を打ち込むとMemo1に表示されている同じ数字にカーソルが向かうようにしたいのですが procedure TForm1.Button1Click(Sender: TObject); begin FindAndSel(Edit1.Text,Memo1); end; としてしまうと、同じ数字があった場合でも下の行に移らずに同じ行を参照し続けてしまいます。 検索で表示されたそこから先を更に検索するにはどのようにすれば良いのでしょうか? また、001と打ってしまうと001 0012の両方が検索に引っ掛かってしまいますが完全に一致した場合のみ表示されるようにするにはどうすれば宜しいのでしょうか? ご存じの方がいらっしゃればご教授お願いします。また、このHPが分かりやすいなどありましたらお教えください。

  • DLLサンプルプログラムが動きません

    Delphi XE5 starter で、 http://www39.atwiki.jp/kgh07155/pages/28.html を参考にして以下のようなプログラムを作りました。 コンパイルはできたのですが、Button1をクリックすると「TDllFormリソースが見つかりません」というエラーメッセージが出ます。 どういう風に修正すればいいのでしょうか? //***************************** //SamoleUnit2.pasの内容 unit Unit_Sample2; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} function ShowDLLForm(hOwner: HWND): TModalResult; stdcall; external 'DLLSample.dll'; procedure ShowDLLForm2; external 'DLLSample.dll'; // ここまで、DLLを呼び出すための記述。 procedure TForm1.Button1Click(Sender: TObject); begin ShowDLLForm(Application.Handle); // DLL側でフォームを作成した後、 // 通常のフォームのShowModalメソッドと同じ動作をして // 作成したフォームを破棄。 end; procedure TForm1.Button2Click(Sender: TObject); begin ShowDLLForm2; // DLL側でフォームを作成した後、 // 作成したフォームを表示。 end; end. //******************************** //DllSample.dprの内容 library DLLSample; uses System.SysUtils, System.Classes, Windows, Forms, Controls, Unit_DLLForm in 'Unit_DLLForm.pas' {Form1}, Unit_Sample2 in 'Unit_Sample2.pas' {Form2}; type TDllForm = class(TForm) end; {$R *.res} function ShowDLLForm(hOwner: HWND): TModalResult; stdcall; var DllForm:TDllForm; begin Application.Handle := hOwner; // 呼び出し元の情報をDLL側が受け取る。 DllForm := TDllForm.Create(Application); // DLL側でフォームを作成する。 // フォームに配置された各オブジェクトも、自動で作成される。 Result := DllForm.ShowModal; // 返し値を設定。 DllForm.Free; // DLL側で作成したフォームを破棄。 Application.Handle := 0; // 呼び出し元の情報を破棄。 end; procedure ShowDLLForm2; var DllForm:TDllForm; begin DllForm := TDllForm.Create(Application); // DLL側でフォームを作成する。 DllForm.Show; // 作成したフォームを表示。 end; exports ShowDLLForm, ShowDLLForm2; begin end. //******************************** //unit_DLLForm.pasの内容 unit Unit_DLLForm; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton; private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} end.

  • delphi try文の使い方

    下記コードのようにエラーを回避したいのですが、try文が機能せずエラーになります。 procedure TForm1.Button1Click(Sender: TObject); var p:integer; begin edit1.text:='abc'; try p:=strtoint(edit1.Text); except p:=-1; end; label1.Caption:=inttostr(p); end; try文の使い方がわかりません。

  • vb.net web 動的に作成したTableが消える

    よろしくお願いします 現在、vs.net 2005 で web ページを作成しています そこで質問があるので、ご教授の程よろしくお願いします。 test.aspx Table コントロール配置:Table1 Button コントロール配置:Button1 Label コントロール配置:Label1 Label コントロール配置:Label2 test.aspx.vb Partial Class test Inherits System.Web.UI.Page Protected Sub form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles form1.Load Dim row As TableRow Dim col As TableCell If (Page.IsPostBack = False) Then Label2.Text = "aaa" row = New TableRow col = New TableCell : col.Text = "行0:列0" : row.Cells.Add(col) : col = Nothing col = New TableCell : col.Text = "行0:列1" : row.Cells.Add(col) : col = Nothing Table1.Rows.Add(row) row = New TableRow col = New TableCell : col.Text = "行0:列0" : row.Cells.Add(col) : col = Nothing col = New TableCell : col.Text = "行0:列1" : row.Cells.Add(col) : col = Nothing Table1.Rows.Add(row) End If End Sub Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Label1.Text = "Rows.Count" & Table1.Rows.Count End Sub End Class ボタンを押すと、 Label2の "aaa" は保持されていて Table1が保持されないのはなぜなのでしょうか? Table1 の内容を保持させたいのですが その場合、どのようにすればよいのでしょうか

  • Delphiのフォーカスのデータの取得。

     嬉しくって、質問を締めちゃいました。 ごめんなさい、書き込んでくれる予定だった、ご主人様ぁ~♪。 数字のフォーマットは、 procedure TForm1.TextFormat(Sender: TObject); var i : Integer; begin  i := StrToInt( TEdit(Sender).text );  TEdit(Sender).Text := Format('%.2d',[i]); end; こんな感じにできました。 数行でこんなすごい事ができるなんて、信じられません! まだまだ、例外処理がありますが、がんばります!! ここまでは私の成長の報告で、次が本題です。^w^えへへぇ。 細かい用法や単語の説明ではなく、全体的なソフトの作り方を説明しているHPや、ソースが見られる簡単なソフトはないでしょうか? Delphiのソース付きのソフトもいくつか見ましたが、やはり初心者には敷居が高くって、もっとシンプルなものでいいのですが。 これからもがんばれるために、ご主人様よろしくおねがいますぅ。

  • 選んだ行の削除

    VB6.0 SPREAD3.0 SPREADで何行か表示している時に削除したい行をクリックし、その行に色(黄色)をつけ、その色のついた行を削除ボタンを押したら削除する・・・という仕様にしたいと思っております。 そして以下のように書いてみたのですが、問題があり、 (1)クリックした行の色が変わると同時に何故だか最終行の文字の色が黄色に変わってしまう。 (2)例えば一行目をクリックしてから3行目をクリックすると一行目の文字の色が黄色になってしまい、もとに戻らない。 (3)行を選択しないまま削除ボタンを押すと下から順に行が削除されてしまう。 という3つの問題があり、解決できないでいます。 なにかアドバイスがありましたらよろしくお願いします。 '---クリックした行の色を反転--- Private Sub spread_Click(ByVal Col As Long, ByVal Row As Long) With oSpmain .ReDraw = False .Row = .Row: .Col = -1: .BackColor = vbWhite .ForeColor = RGB(255, 300, 0) .BlockMode = True .Row = Row: .Row2 = Row .Col = 1: .Col2 = .MaxCols .BackColor = .ForeColor .ForeColor = vbWhite Xor .ForeColor .BlockMode = False .ReDraw = True End With End Sub '---削除ボタン--- Private Sub sakujyo_Click() With spread .BlockMode = True .Action = ActionDeleteRow .BlockMode = False .MaxRows = .MaxRows - 1 End With End Sub