Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1159176559
mfender
2006-09-25 13:29
2006.10.15
AccesViolation в XML


2-1159548385
ArtemESC
2006-09-29 20:46
2006.10.15
Массивы и передача параметров...


1-1157442128
speaker_avi
2006-09-05 11:42
2006.10.15
вопрос о monthcalendar


15-1158354038
developer2006
2006-09-16 01:00
2006.10.15
расделить OnClick и неведение для MenuItem


2-1159198949
ников
2006-09-25 19:42
2006.10.15
точка или запятая в десятичной дроби?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский