Форум: "Начинающим";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];
ВнизКак видимые компоненты на проге перемещать? Найти похожие ветки
← →
vodvorezlaya (2006-09-25 08:18) [0]Всем доброго времень суток.
Как сделать чтоб во время выполнения программы компоненты(все) можно было перемещать, и их позиции сохранялись до следующего запуска?
Спасибо.
← →
@!!ex © (2006-09-25 08:37) [1]Перемещать мышкой?
Или програмно?
← →
@!!ex © (2006-09-25 08:45) [2]Вот код для сохранения/загрузки позиций компонентов.
var
Config:TStringList;
CurrentPosition:integer;
Path:string;
begin
Path:=ExtractFilePath(ParamStr(0));
Config:=TStringList.Create;
//Загрузка позиций
if FileExists(Path+"config.pos") then
begin
CurrentPosition:=0;
Config.LoadFromFile(Path+"config.pos");
Component1.Left:=StrToInt(Config.Strings[CurrentPosition]);
inc(CurrentPosition);
Component1.Top:=StrToInt(Config.Strings[CurrentPosition]);
inc(CurrentPosition);
Component2.Left:=StrToInt(Config.Strings[CurrentPosition]);
inc(CurrentPosition);
Component2.Top:=StrToInt(Config.Strings[CurrentPosition]);
inc(CurrentPosition);
...
ComponentN.Left:=StrToInt(Config.Strings[CurrentPosition]);
inc(CurrentPosition);
ComponentN.Top:=StrToInt(Config.Strings[CurrentPosition]);
inc(CurrentPosition);
end;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
//Сохранение позиций
Config.Clear;
Config.Add(IntToStr(Component1.Left));
Config.Add(IntToStr(Component1.Top));
Config.Add(IntToStr(Component2.Left));
Config.Add(IntToStr(Component2.Top));
...
Config.Add(IntToStr(ComponentN.Left));
Config.Add(IntToStr(ComponentN.Top));
Config.SaveToFile(Path+"config.pos");
end.
Можно тоже самое реализовать без использования TStringList, но я не стал это писать, т.к. кода побольше.
ИМХО так проще всего.
P.S.
Сорри, если есть ошибки, код писал прямо здесь, а не в IDE.
← →
@!!ex © (2006-09-25 08:46) [3]P.P.S.
А почему топик в WinAPI форуме????
← →
vodvorezlaya (2006-09-25 08:49) [4]
> Перемещать мышкой?
> Или програмно?
Мышкой.
← →
Сивый © (2006-09-25 08:53) [5]Например так: на форму кидай кнопку и в обработчиках событий пиши следующее:
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button=mbLeft then
begin
ReleaseCapture;
SendMessage((Sender as TButton).Handle, WM_SYSCOMMAND, 61458, 0);
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var FileStream: TFileStream;
begin
FileStream := TFileStream.Create("Formstate.dat", fmCreate);
FileStream.WriteComponent(self);
FileStream.Free;
end;
procedure TForm1.FormCreate(Sender: TObject);
var FileStream: TFileStream;
i: integer;
begin
if (FileExists("Formstate.dat")) then
begin
for i:= 0 to ComponentCount-1 do self.Components[0].Free;
FileStream := TFileStream.Create("Formstate.dat", fmOpenRead);
FileStream.ReadComponent(self);
FileStream.Free;
end;
end;
Тока не понятно зачем это нужно? :-)))
← →
Весь в делах (2006-09-25 08:58) [6]Вот самый примитивный
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const
Sc_dragmove = $F012;
begin
ReleaseCapture;
Button1.Perform(WM_SYSCOMMAND, Sc_dragmove, 0);
end;
← →
Сивый © (2006-09-25 09:01) [7]Прошу прощения в обработчике FormCreate строку поправь для общего случая:
for i:= 0 to ComponentCount-1 do self.Components[i].Free
Проверял на одной кнопке :-))
← →
@!!ex © (2006-09-25 09:03) [8]Про сохранение уже привели примеров.
По перемещению - тоже.
Только не большое исправление:
procedure TForm1.MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
const
Sc_dragmove = $F012;
begin
ReleaseCapture;
with Sender as TWinControl do
Perform(WM_SYSCOMMAND, Sc_dragmove, 0);
end;
Всем компонентам, которые двигшать надо - ставиш в обработчик движения мыши эту функцию.
← →
vodvorezlaya (2006-09-25 09:22) [9]Ну спасибо, откуда вы это всё знаете?
:))
← →
@!!ex © (2006-09-25 09:26) [10]vodvorezlaya (25.09.06 09:22) [9]
Теперь и вы знаете. :))
Сталкиваешся с задачей, в процессе узнаеш как ее решать.
Работает все нормально?
← →
Сивый © (2006-09-25 09:30) [11]Единственное, что осталось без ответа: зачем это нужно и почему дискуссия идет в ветке по API? :-)))
← →
@!!ex © (2006-09-25 09:34) [12]Сивый © (25.09.06 09:30) [11]
>> ...зачем это нужно ...
А это зачем нужнО? :))
http://delphimaster.net/view/5-1159157473/
← →
Сивый © (2006-09-25 09:43) [13]@!!ex © (25.09.06 09:34) [12]
>А это зачем нужнО? :))
Ты меня озадачил на полдня как минимум. :-))
vodvorezlaya
Это ж в каком иституте надо учиться, что бы перед тобой такие задачи ставили :-)))
← →
vodvorezlaya (2006-09-25 09:44) [14]
> Работает все нормально?
Конечно, с вами все пока работает.
> Единственное, что осталось без ответа: зачем это нужно и
> почему дискуссия идет в ветке по API? :-)))
Ну, так получилось.
> А это зачем нужнО? :))
Перемещать научился, осталось научиться создавать.
← →
Плохиш © (2006-09-25 11:56) [15]
> Перемещать научился, осталось научиться создавать.
О, это круто - перемещать не созданные компоненты...
← →
gdaujk © (2006-09-26 16:05) [16]
> @!!ex © (25.09.06 08:45) [2]
А зачем вы строки сохраняете. Не легче заполнить динамический Integer-массив и его кинуть в файл? Потом доставать из файла одно удовольствие...без всяких там StrToInt...
← →
@!!ex © (2006-09-26 18:37) [17]gdaujk © (26.09.06 16:05) [16]
Привычка из программирования под *nix.
Все конфиги должны редактировать в текстовом редаткоре. :))
Вообще то согласен с вами. Но так нагляднее. Плюс всегда исправить можно легко.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.046 c