|
Вопрос # 1 818/ вопрос решён / |
|
Здравствуйте, уважаемые эксперты!
На этот раз меня интересует слудущее:
- У меня проект состоит из нескольких форм - можно ли сделать так, что бы перемещая одну форму проекта, перемещались все в след за ней?
- Можно ли сделать так, что бы, например, (используя кнопку PNGButton) при наведении на нее курсора - отдельной картинке присавивалась другая - ну, например - при наведении на PNGButton1 присваивалась другая картинка для Image1 - или что-то в этом роде?
Спасибо...
 |
Вопрос задала: Violina (статус: Посетитель)
Вопрос отправлен: 16 августа 2008, 15:17
Состояние вопроса: решён, ответов: 2.
|
Ответ #1. Отвечает эксперт: Аксион
Здравствуйте, Violina!
По поводу 1 вопроса, да такое воможно вот вам пример для синхронногоперемещения 2х форм, посмотрите, есле у вас больше форм то добавите просто тоже амое для них.
(Х1,Y1:integer вписываем в public)
Дальше, это пишем в свойство OnMouseDown для ГЛАВНОЙ формы (т.е. той которую вы будите перемещать):
X1 := X;
Y1 := Y;
Form1.BringToFront;
А это в OnMouseMove тоже для ГЛАВНОЙ формы:
if HiWord(GetAsyncKeyState(VK_LBUTTON)) > 0 then
begin
Form1.Left := Form1.Left + X - X1;
Form1.Top := Form1.Top + Y - Y1;
Form2.Left := Form2.Left + X - X1;
Form2.Top := Form2.Top + Y - Y1;
end;
Должно работать (у меня работает) есле что то пишите на мини-форуме, разберемся ;)
 |
Ответ отправил: Аксион (статус: 4-ый класс)
Время отправки: 16 августа 2008, 16:18
Оценка за ответ: 5
|
Ответ #2. Отвечает эксперт: Dron
Здравствуйте, Violina!
По второму вопросу. Почитал я мини-форум и понял, что у вас вся загвоздка в мерцании.
Чтобы избавиться от мерцания, нужно запретить постоянное обновление второй картинки. Если загружать вторую картинку по событию OnMouseMove, мерцание будет всегда, ведь при любом перемещении курсора (даже на один пиксель) "дёргается" это событие. Решение: использовать события "прихода" и "ухода" мыши. Такие события есть у большинства компонент. Например, у TImage они называются OnMouseEnter и OnMouseLeave. Пример:
procedure TForm1.Image1MouseEnter(Sender: TObject);
begin
Image2.Visible:=True
end;
procedure TForm1.Image1MouseLeave(Sender: TObject);
begin
Image2.Visible:=False
end;
Всё, никакого мерцания. При наведении курсора на Image1 станет видимой Image2, при убирании курсора вторая картинка пропадёт.
Аналогичные события есть у TLabel, TButton и т.д. Обнаружить их несложно - просто прочтите названия всех событий OnMouse*.
Удачи!
 |
Ответ отправил: Dron (статус: Студент)
Время отправки: 17 августа 2008, 15:04
Оценка за ответ: 5
Комментарий к оценке: Огромное спасибо!
|
Мини-форум вопроса
Всего сообщений: 67; последнее сообщение — 17 августа 2008, 23:32; участников в обсуждении: 4.
Страницы: [« Предыдущая] [1] [2] [3] [4] [Следующая »]
|
Аксион (статус: 4-ый класс), 17 августа 2008, 19:49 [#41]:
Задержки нет, просто их СЛИШКОМ много.
Вот теперь когда я узнл что у вас там только картинки...то лучше сделать подругому...так будет намного легче....
просто на форму закидываете все картинки т.е. 70 штук и прячите их за гриницей формы.
Ставите ещё 1 картинку пустую и при нажатии на кнопку просто в этот имадж загружаете слдующую картинку... там примерно все точно также только проще...
|
|
Вадим К (статус: Академик), 17 августа 2008, 20:27 [#42]:
медленно фреймы меняет? а размер exe файла смотрели? удивительно, как он ещё так быстро меняет.
А новое Блазеровое решение - это тоже нечто. В результате форма будет весить просто уйму места. Даже есть припустить, что каждая страница - это сотня килобайт, то уже 7 мегабайт.
Наиболее нормальным решением, как мне кажеться, будет такое.
Все картинки нумеруем так, что бы имя было вида Page1.jpg и так далее.
и складываем в папочку рядом с проектом.
Делаем новый проект.
дальше надо завести одну глобальную переменную. А лучше - как свойство формы. Просто подымается по тексту юнита вверх до слова private и в следующей строке пишем такое
CurrPage:integer;
Теперь кликнув дважды по форме, пишем такой код (это обработчик OnCreate)
CurrPage := 1;
Ставим на форму TImage, растягиваем до нужных размеров. ставим 4 кнопки "первая", "предыдущая", "следующая", "последняя".
теперь сделаем метод, который будет загружать страницы. Это тоже просто. возвращаемся вверх, туда где мы писали CurrPage:integer; и пишем такое
procedure ChangePage;
потом жмём на клавиатуре Ctrl+Shift+C. делфи сделает заготовку метода. В нем пишем где то такое
const
lastpage = 70; //сюда надо вписать номер последней страницы
procedure TForm1.ChangePage;
var
f:string;
begin
//Защита от дурака
if CurrPage > 70 then CurrPage := 70;
if CurrPage < 1 then CurrPage := 1;
//ищем картинку и загружаем
f := ExtractFilePath(Application.exename)+'\ImageFolder\Page'+inttostr(CurrPage)+'.jpg';
if FileExists(f) then
Image1.picture.loadFromFile(f)
else
ShowMessage('файл '+f+'не найден');
//теперь займемся блокировкой кнопок
button1.enabled := CurrPage > 1;
button2.enabled := CurrPage > 1;
button3.enabled := CurrPage < lastpage;
button4.enabled := CurrPage < lastpage;
end;
теперь осталось только четыре наших кнопки оформить.
procedure Form1.Button1Click(sender:TOblect);//первая
begin
CurrPage := 1;
ChangePage;
end;
procedure Form1.Button2Click(sender:TOblect);//предыдущая
begin
CurrPage := CurrPage - 1;
ChangePage;
end;
procedure Form1.Button3Click(sender:TOblect);//следующая
begin
CurrPage := CurrPage + 1;
ChangePage;
end;
procedure Form1.Button4Click(sender:TOblect);//последняя
begin
CurrPage := lastpage;
ChangePage;
end;
вот и всё. Правда может не понравиться, что картинки лежат в открытом доступе в папке рядом с проектом... Но если "наворовали", то зачем ховать?
Этическую часть вопроса "награбила" оставляю Вам на раздумия.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Вадим К (статус: Академик), 17 августа 2008, 21:02 [#43]:
только что прочитал внимательней совет Блазера
Цитата:
и прячите их за гриницей формы
А о свойстве visible не слышал, Блазер? к тому же, как представил весь этот код....
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Violina (статус: Посетитель), 17 августа 2008, 21:02 [#44]:
Да ладно - у меня до этого 50 метров был - но там формы меняла - и быстро, к стати! А на счет того, что медленно - так это я тока 3 штуки сделала! Ну ладно - говорите есть проще решение - хорошо - попробую!
>Ставите ещё 1 картинку пустую и при нажатии на кнопку просто в этот имадж загружаете слдующую картинку... там примерно все точно также только проще...
Ok! как это можно сделать, что бы по очереди загружало от 1 до 70 и наоборот, от 70 до 1?
Вадим К спасибо, я переживу 7 метров - для меня размер не важен - главное что бы все в проекте было - все каринки... ведь те картинки можно просто графическим редактором просмотреть из папки - какой смысл тогда создания программы - такого особого ACDsee для бедных?
Теперь на счет украла - объясняю - я творческий человек! Я хочу, что бы вещи, которые мне по душе были у меня в должном виде - во-первых - у меня нет возможности купить продукт, т. к. его продают в штатах - а во-вторых - у меня получается даже лучше, чем продают - и в-третьих - я не извлекаю из этого никакой выгоду - даже если бы и хотела не думаю, что кто-то в здравом уме ну нас будет покупать гид к игре на английском языке! Так что, как мне кажется, Вы меня как-то переоценили в моих корыстных, по Вашим словам, целях!
|
|
Вадим К (статус: Академик), 17 августа 2008, 21:08 [#45]:
>>что бы загружало по очереди
- ставим таймер, в нем вызываем просто
if CurrPage = 70
Timer1.enabled := false;
CurrPage := CurrPage + 1;
ChangePage.
>>такого особого ACDsee для бедных?
а может просто запаковать в pdf/djvu и не морочить голову?
>>Теперь на счет украла - объясняю - я творческий человек!
это и всё ниженаписанное не оправдывает Вас не сколечки.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Violina (статус: Посетитель), 17 августа 2008, 21:20 [#46]:
> а может просто запаковать в pdf/djvu и не морочить голову?
У меня первоначальный вариант был таким - но эффект не тот!
>> это и всё ниженаписанное не оправдывает Вас не сколечки
просто у нас разные понятия слова "украла" - я бы спросила в ответ - у Вас Delphi лицензионная - или за 10 грн с рынка или с инета - но нет толку - так как я не смотгу опровергнуть Ваших слов - поэтому скажу просто - в описании продукта не сказано - что запрещено скринить страницы и потом обрабатывать их в Delphi - ну так что же я тогда ворую? Это все равно что скриншоты этого сайта сделать и создать книгу в эолектронном виде и назвать -Delphi - мои первые шаги - и что - Вы скажите, что я украла дизаин сайта? Я Вашей настоичивости не понимаю просто!
|
|
Вадим К (статус: Академик), 17 августа 2008, 21:25 [#47]:
у меня туброделфи. проблем с лицензией нет. К тому же последне время я мигрирую под Линукс, где с лицензированием проблем на порядок меньше.
Вы трактуете так "всё что не запрещенно явно, разрешено". Но там где то должно было бы указано, что распространение в любой форме кроме оговоренных в лицензии - нарушение.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Violina (статус: Посетитель), 17 августа 2008, 21:31 [#48]:
Ну вот Вы сами все и сказали
>>что распространение в любой форме кроме оговоренных в лицензии - нарушение
Я уже 100 раз сказала - что я это не распространяю - я это записываю на диск (1 копия!) игру - скачанную из интернета (копия с лицензеонного диска, что попало не качаю), обоями, скаченными из интернета и другими мелочами - но не продаю это, не раздаю - а только создаю диск для домашней коллекции! Ну понимаю, если бы я с этого прибыть получала - так нет - ничего - кроме морального удовлетворения!
|
|
Вадим К (статус: Академик), 17 августа 2008, 21:33 [#49]:
10 грн??? где такие цены??? В Житомире? Пираты работают себе в убыль? вот это конкуренция
Впрочем скоро у меня будет абсолютно законная лицензия на делфи. Она стоит порядка 400 долл. так что не такие большие деньги.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Violina (статус: Посетитель), 17 августа 2008, 21:44 [#51]:
Ну незнаю, я давно диски не покупала! Ну рочем Вы съехали с темы, что я украла - так что считаю этота тема исчерпана! Вот 400$ - вам не жалко? И ради чего? Ради коробки, красивого диска и лицензионной переливающийся наклейки с гербом Украины или где Вы там будете брать? Если это можно скачать в инете бесплатно? Тут я конечно не понимаю! 400 долларов - ну для Вас может и не большие деньги - поэтому Вы тут в меня пальцом тычите и говорите - 6 баксов - ради этого стоит "воровать" и мучать себя и людей - но для меня 6 баксов - тоже деньги - не большие - но деньги!
|
|
Вадим К (статус: Академик), 17 августа 2008, 21:53 [#53]:
если их здесь не продают, это не значит, что использовать их законно. Например может быть, что программа/контент расчитанный исключительно для конкретной страны. Тогда любое использование в других странах - нарушение. Вполне возможно, что у этой компании заключён договор о распределении. тоесть одна компания в одной стране, а другая - в другой производит и продаёт продукт, который очень похож, просто оптимизирован под конкретную страну.
А вот если бы вы ещё и распространяли, то могло и до уголовного дела дойти. А так, скорее всего просто штрафом отделаетесь.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Violina (статус: Посетитель), 17 августа 2008, 22:06 [#54]:
>А вот если бы вы ещё и распространяли, то могло и до уголовного дела дойти. А так, скорее всего просто штрафом отделаетесь.
Не, я не могу... а) от куда узнает америанский производитель игры о том, что я, незаконно скачала продукт? б) оно ему надо? Как буд-то делать людям нечего, как вылавливать, даже если бы и была такая возможность, тех, кто качает незаконно продукты компаний? ну Выреально несете непонятно что!
Ну к чему весь этот спор? Выхотите показать какой Вы правилный, а я нет? ну не понимаю я этого все - сначала критиковать людей начали, которые мне здорово помогли сегодня, за что я им очень благодарен, потом начали обвинять меня в незаконном распространении, а затем смягчили приговор до незаконного копирования... тне понимаю я Вашей политики!
|
|
Вадим К (статус: Академик), 17 августа 2008, 22:11 [#55]:
я Вас не обвиняю. я просто говорю, что есть.
>>от куда узнает америанский производитель игры о том, что я, незаконно скачала продукт
не забивайте голову себе такими вопросами. Надо - узнают.
Все это к тому, что не стоило писать о том, что картинки честно сграбленные.
а "приговор" был смягчён, потому что вы раскрыли цели. А так - по всей строгости закона.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Violina (статус: Посетитель), 17 августа 2008, 22:22 [#56]:
>не забивайте голову себе такими вопросами. Надо - узнают.
да в том то и дело что это никому не надо, кроме Вас, конечно!
>Все это к тому, что не стоило писать о том, что картинки честно сграбленные
ну если на то уж пошло - то писала я это не Вам - так какое это к Вам отнешение имеет? Не понимаю - это раз! 2 - я не говорила, что они честно украденные, то что это чей-то труд - а я его использую в корыстных целях - это одно - а то, что это чей-то труд, которыйя уважаю и ценю, и который я использую в целях морального удовлетворения без какой-либо корысти и выгод - то это другое!
>а "приговор" был смягчён, потому что вы раскрыли цели. А так - по всей строгости закона.
Большое Вам спасибо, что "помиловали"
|
|
Вадим К (статус: Академик), 17 августа 2008, 22:31 [#57]:
Если мы хотим стать европейской страной, то надо начинать жить по европейским законам. А вот почему они такие - это другие вопросы.
Если есть неясности - пишите в асю, разберём.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Вадим К (статус: Академик), 17 августа 2008, 22:49 [#59]:
да вот только ничего там нет...выделял - не видел.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Вадим К (статус: Академик), 17 августа 2008, 22:50 [#60]:
да вот только ничего там нет...выделял - не видел. Хватит оффтопить.
Галочка "подтверждения прочтения" - вселенское зло.
|
Страницы: [« Предыдущая] [1] [2] [3] [4] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|