私はこの解決策の助けが必要です。 いくつかの形式のアプリケーションがあります。このフォームの1つは、選択したモニターで開く必要があります。例: 解決策1.複数のモニターが使用されている場合は、フォーム作成を行い、最後のモニターを開く場合はフォームを作成します。私はこのコードを試してみたが、運と:デルファイ - 第2のモニタのオープンフォーム
Application.CreateForm(TfrmDashboard, frmDashboard);
for I := 0 to Screen.MonitorCount -1 do
begin
// Checking Screen Position
ShowMessageFmt('%d, %d, %d, %d',
[Screen.Monitors[i].BoundsRect.Left,
Screen.Monitors[i].BoundsRect.Top,
Screen.Monitors[i].BoundsRect.Right,
Screen.Monitors[i].BoundsRect.Bottom]);
end;
if Screen.MonitorCount > 1 then
begin
frmDashboard.Top:= Screen.Monitors[i].BoundsRect.Top;
frmDashboard.Top:= Screen.Monitors[i].BoundsRect.Left;
end;
ソリューション2.フォームを選択したモニタおよびOnDestroyイベントトップと左の位置にドラッグされていないINIファイルに書き込まれます。次回は同じモニターと同じ位置にフォームが開きます。私はこのコードを試してみてください、だけでなく、運がないと:
procedure TfrmDashboard.FormCreate(Sender: TObject);
var
ini: TIniFile;
begin
ini:= TIniFile.Create(extractfilepath(paramstr(0))+'Dashboard.ini');
Left:= StrToInt(ini.ReadString('Left', 'Form_Left', '0'));
Top:= StrToInt(ini.ReadString('Top', 'Form_Top', '0'));
ini.Free;
end;
procedure TfrmDashboard.FormDestroy(Sender: TObject);
var
ini: TIniFile;
begin
ini:= TIniFile.Create(extractfilepath(paramstr(0))+'Dashboard.ini');
ini.WriteString('Left', 'Form_Left', IntToStr(Left));
ini.WriteString('Top', 'Form_Top', IntToStr(Top));
ini.Free;
end;
INIファイルをアプリケーションと同じディレクトリに作成するときは注意が必要です。たとえば、アプリケーションが\ programファイル内にある場合、Windowsの一部のバージョンでは、iniファイルを保存する一時ディレクトリが作成され、プログラムの終了時に削除されます。つまり、毎回バージンの実装のように見えます。たとえば、レジストリを使用したり、データを格納したり、ドキュメントディレクトリを使用する方がよいでしょう。技術的な詳細が間違っているかもしれませんが、これが効果です。 – Dsm
'if'ステートメント内のコードの最初のセクションでは、スクリーン[1]がスクリーン[i]でないことを意味します。あなたが使用している時点では、私は定義されておらず、ごみが入っている可能性があります。 – Dsm