Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2009, 16:17   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию Запоминание координат при перемещении формы

Есть процедура запоминания координат программы при перемещении.
Код:
var programposition: boolean;

procedure TForm1.FormCreate(Sender: TObject);
...
programposition:=True;
...

procedure TForm1.OnMove(var Msg: TWMMove);
begin
if programposition=True then
begin
Form1.SetFocus;
Form1.Left:=StrToInt(px);
Form1.Top:=StrToInt(py);
programposition:=False;
end else
begin
px:=IntToStr(Form1.Left);
py:=IntToStr(Form1.Top);
end;
end;
Всё работает нормально, но если программу запустить и сразу же закрыть, то появляется ошибка на строке
Код:
Form1.Left:=StrToInt(px);
Программа после запуска не показывает главную форму (сидит в трее) и очевидно после того как она была запущена и тут же закрыта, то не успевает получить координаты. Как исправить создавшееся положение?
Shouldercannon вне форума Ответить с цитированием
Старый 21.06.2009, 16:22   #2
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Раз ошибка появилась на строке
Код:
Form1.Left:=StrToInt(px);
то на самом деле ошибка произошла на строке:
Код:
Form1.SetFocus;
Проверяйте, видима ли форма или сидит ли приложение в трее (или что-нибудь подобное) перед установкой фокуса.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 21.06.2009, 16:32   #3
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

А зачем вобще тут Form1.SetFocus ?
И просто совет: вместо OnMove используй :
Код:
procedure WMEXITSIZEMOVE(var Message: TMessage); message WM_EXITSIZEMOVE;
Отличие в том, что WMEXITSIZEMOVE выполняется уже после перемещения или изменение размеров - это может оградить от многих непонятных ошибок.
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 21.06.2009, 16:53   #4
-HunteR-
Форумчанин
 
Аватар для -HunteR-
 
Регистрация: 04.11.2007
Сообщений: 117
По умолчанию

Shouldercannon
Могу предложить вам сохранение координат в ini-файл. Подойдет такой вариант?
Перед тем, как выложить код, я его всегда проверяю.
Если помог - тыкни на на весы слева, под аватарой.
-HunteR- вне форума Ответить с цитированием
Старый 21.06.2009, 20:53   #5
postal2
Форумчанин
 
Аватар для postal2
 
Регистрация: 31.10.2008
Сообщений: 215
Счастье

Возможен следующий вариант - использование ini-файлов. Быстро. Компактно. Экономично.

Код:
uses ... inifiles

var ...  sfile:tinifile;

implementation

...

procedure TForm1.FormCreate(Sender: TObject);
begin
if fileexists(extractfilepath(application.exename)+'myfile.ini') then
begin
sfile:=tinifile.Create(ExtractFilePath(Application.Exename) + 'myfile.ini');
form1.Top:=sfile.ReadInteger('params','top',0);
form1.Left:=sfile.ReadInteger('params','left',0);
sfile.Free;
end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
sfile:=tinifile.Create(ExtractFilePath(Application.Exename) + 'myfile.ini');
sfile.WriteInteger('params','top',form1.Top);
sfile.WriteInteger('params','left',form1.Left);
sfile.Free;
end;
[Ferox]
postal2 вне форума Ответить с цитированием
Старый 21.06.2009, 23:11   #6
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Я и использовал ini только проблема была с присвоением координат. Действительно мешался SetFocus.
Shouldercannon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TСhart, клик мыши и координаты XY, Определение координат оси при клике мыши Aravild Компоненты Delphi 1 31.01.2009 16:28
Как осуществить запоминание объектов? Djem1991 Общие вопросы Delphi 4 06.01.2009 14:09
Запоминание цифр romul87 Общие вопросы Delphi 3 10.10.2008 18:54
При создании формы! Anton Помощь студентам 4 08.08.2007 08:20
Определение X и Y координат PaintBox при перемещении курсора мыши Vladimir K. Общие вопросы Delphi 3 04.01.2007 10:45