Пятница, 29 Марта 2024, 14:26

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Форум игроделов » Программирование » Delphi/Pascal/Object Pascal » Delphi:Вопрос-Ответ (Спросил - получил ответ)
Delphi:Вопрос-Ответ
TimKruzДата: Понедельник, 05 Ноября 2012, 14:28 | Сообщение # 261
старожил
Сейчас нет на сайте
Quote (Destroy)
чтобы при при перетаскивании одного изображения на другое

Ты перетаскиваешь TImage'ы что ли?
Quote (Destroy)
процесс столкновения

Просто сравниваешь относительные координаты и размеры TImage'в. Как-то так:
Code
if ((image1.top<image2.top-image1.height) //Сравниваем координаты компонентов
   and (image1.top>image2.top+image2.height)) //по вертикали (top - расстояние от верхнего края формы)
   and ((image1.left<image2.left-image1.width) //и по горизонтали (left - расстояние от левого края формы)
   and (image1.left>image2.left+image2.width)) //с учётом их размеров (height - высота, width - ширина)
then showmessage('блаблабла');

Ну код из головы написал, может не работать, а проверять лень, так что поэкспериментируй с этими переменными и их сравнением сам, если вдруг что-то не получится. smile


DestroyДата: Понедельник, 05 Ноября 2012, 15:54 | Сообщение # 262
постоянный участник
Сейчас нет на сайте
Quote (TimKruz)
Ты перетаскиваешь TImage'ы что ли?

да
при перетаскивании 1 на 2, 1 застревает и никак его не взять. а сообщение все так же не вылазиет.

Добавлено (05.11.2012, 15:54)
---------------------------------------------
может как нибудь через координаты х,у?

TimKruzДата: Понедельник, 05 Ноября 2012, 20:51 | Сообщение # 263
старожил
Сейчас нет на сайте
Quote (Destroy)
при перетаскивании 1 на 2, 1 застревает и никак его не взять. а сообщение все так же не вылазиет.

Покажи, что ли, код, что ты там такого понаписал... Наверное, у тебя обработка перемещения работает только до столкновения.
Quote (Destroy)
может как нибудь через координаты х,у?

Какие X и Y? У визуальных (отображаемых на форме) компонентов Delphi координата X (относительно левого верхнего угла формы) - это переменная left компонента, а Y - это top.




Сообщение отредактировал TimKruz - Понедельник, 05 Ноября 2012, 20:52
DestroyДата: Понедельник, 05 Ноября 2012, 21:02 | Сообщение # 264
постоянный участник
Сейчас нет на сайте
все тоже самое что и ты написал
AnifestДата: Понедельник, 05 Ноября 2012, 21:07 | Сообщение # 265
почетный гость
Сейчас нет на сайте
а как в дельфи открыть содержимое файла в текстовое поле? Или дельфи не может такое?

Почему люди, которые не любят правду, считают ее оффтопом???
TimKruzДата: Понедельник, 05 Ноября 2012, 21:33 | Сообщение # 266
старожил
Сейчас нет на сайте
Quote (Anifest)
а как в дельфи открыть содержимое файла в текстовое поле?

Стандартными функциями компонентов TMemo (простое текстовое поле) или TRichEdit (расширенное текстовое поле):
Code
Memo1.Lines.LoadFromFile('имя_файла');
RichEdit1.Lines.LoadFromFile('имя_файла');

Либо считывай точно так же, как в любом языке:
Code
AssignFile(файловая_переменная, 'имя_файла');
Open(файловая_переменная);
Read(файловая_переменная, текстовая_перменная);
CloseFile(файловая_переменная);


Quote (Destroy)
все тоже самое что и ты написал

Действительно, сейчас проверил - не работает. Просто я перепутал знаки "<" и ">". Вот так работает:
Code
var
   Form1: TForm1;
   img1dragging:boolean; //Флаг перетаскивания 1-ой картинки
   lastpos:tpoint;

implementation

{$R *.dfm}

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
begin
   img1dragging:=true;
   lastpos.x:=mouse.CursorPos.x-image1.left;
   lastpos.y:=mouse.CursorPos.y-image1.Top;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
   Y: Integer);
begin
   if img1dragging then
   begin
     if (image1.top >(image2.top -image1.height)) and
        (image1.top <(image2.top +image2.height)) and
        (image1.left>(image2.left-image1.width))  and
        (image1.left<(image2.left+image2.width))
     then
     begin
       showmessage('текст');
       //Вот тут нужно либо вернуть картинку на предыдущую позицию,
       //либо сместить куда-нибудь, чтобы она снова не задевала вторую картинку
       image1.Top:=10;
       image1.Left:=10;
     end else
     begin
       image1.Top:=mouse.CursorPos.Y-lastpos.Y;
       image1.Left:=mouse.CursorPos.X-lastpos.X;
     end;
   end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
begin
   img1dragging:=false;
end;

Ну это только один из способов решения задачи, самый простой и без дополнительных проверок, просто я не знаю, зачем тебе это нужно. biggrin


AnifestДата: Понедельник, 05 Ноября 2012, 21:35 | Сообщение # 267
почетный гость
Сейчас нет на сайте
Ого, я думал нельзя так. Ну спасибо

Почему люди, которые не любят правду, считают ее оффтопом???
DestroyДата: Пятница, 16 Ноября 2012, 16:48 | Сообщение # 268
постоянный участник
Сейчас нет на сайте
Quote (TimKruz)
Ну это только один из способов решения задачи, самый простой и без дополнительных проверок, просто я не знаю, зачем тебе это нужно. biggrin

игру типа стратегии делаю smile

Quote
//либо сместить куда-нибудь, чтобы она снова не задевала вторую картинку
image1.Top:=10;
image1.Left:=10;


можно сдать так image1.visible:=false
а так спасибо большое, как всегда помог))

Добавлено (16.11.2012, 16:48)
---------------------------------------------
возникла проблема при компиляции delphi: out of memory while expanding memory stream.
из за чего? похоже что дело в памяти.
в проекте использовал 4 формы, после того как добавил 5 вот такое вылезло

Сообщение отредактировал Destroy - Вторник, 06 Ноября 2012, 15:47
TimKruzДата: Пятница, 16 Ноября 2012, 19:05 | Сообщение # 269
старожил
Сейчас нет на сайте
Quote (Destroy)
возникла проблема при компиляции delphi: out of memory while expanding memory stream.
из за чего? похоже что дело в памяти.
в проекте использовал 4 формы, после того как добавил 5 вот такое вылезло

Правильно, Делфи не хватает памяти... Делфи кушает много памяти, особенно если система типа Win7 - баг такой; связано, наверное, с совместимостью старой Делфи с механизмами распределения памяти новых Виндоус...

У меня на Win7 Delphi7 при каждом запуске программы из-под среды (F9) съедает дополнительные мегабайты памяти и почему-то не возвращает обратно, поэтому я теперь все программы сначала компилирую (F9+ctrl) без запуска, а потом запускаю из проводника Windows - так Delphi не тратит память и тестируемая программа запускается быстрее; правда, тут недоступны возможности отладчика, но он обычно не нужен.

Вообще, после запуска Делфи использует где-то 50 МБ оперативной памяти, потом может увеличиваться до бесконечности, если проявляется этот глюк. Помогает перезагрузка Делфи или... или запуск чего-нибудь тяжёленького, типа игры какой-нибудь - новая программа забирает всё необходимое ей пространство, при этом Windows отбирает лишнюю память у других программ (или перемещает в файл подкачки), т.е. после этого у Делфи остаётся 20-30 МБ, которые восполняются до необходимого ей объёма, но не более (ну у меня так много раз было); правда, после этого память снова будет утекать, если запускать программы из-под самой Delphi...
Ещё можно поставить на комп больше оперативной памяти. smile

Наверняка у современных версий Delphi таких проблем нет...


AspireДата: Понедельник, 26 Ноября 2012, 16:38 | Сообщение # 270
был не раз
Сейчас нет на сайте
Есть один вопрос... Но глобальный в моем понимании... Не мог бы ли кто-нибудь подтянуть меня в Delphi... Очень нужны знания по этому языку, но достойного руководства в просторах интернета не нашел... Прошу отписаться в личку тех, кто смог бы мне помочь в этом...

Aspire... LacostaPerson... Lacosta...
karuyДата: Понедельник, 26 Ноября 2012, 18:05 | Сообщение # 271
заслуженный участник
Сейчас нет на сайте
Quote (Aspire)
но достойного руководства в просторах интернета не нашел

Не искал значит или можешь перечислить руководства которые ты зачислил в недостойные и сказать почему?
DestroyДата: Понедельник, 26 Ноября 2012, 18:24 | Сообщение # 272
постоянный участник
Сейчас нет на сайте
Quote (Aspire)
достойного руководства в просторах интернета не нашел

я вот например в программировании вообще ничего толком не мог понять, пока в один день учитель по информатике не начал обучать паскалю.
Тогда все стало предельно понятно, и в дальшейшем помогло начать осваивать дельфи.
может стоит подождать 9 или 10 класс когда будет в программе школы программирование?
а то самому начинать то, о чем понятия не имеешь мне кажется очень тяжело
AspireДата: Понедельник, 26 Ноября 2012, 19:15 | Сообщение # 273
был не раз
Сейчас нет на сайте
Quote (Destroy)
может стоит подождать 9 или 10 класс когда будет в программе школы программирование

Я бы с радостью послушал разъяснения учителя по паскалю, но в нашей школе (я в 10 классе) до сих пор не преподавали программирование - поэтому я и решил начинать сам... Но естественно, что мне будет легче и приятнее изучать программирование с хорошим наставником...

Quote (karuy)
Не искал значит или можешь перечислить руководства которые ты зачислил в недостойные и сказать почему

Возможно я неправильно выразился. Я имел ввиду, что сухое чтение руководств недостаточно полно описывает все возможности применения языка. К тому же можно рассчитывать на опыт обучающего программиста и уточнить у него недостаточно понятные действия.


Aspire... LacostaPerson... Lacosta...

Сообщение отредактировал Aspire - Понедельник, 26 Ноября 2012, 19:16
TimKruzДата: Понедельник, 26 Ноября 2012, 20:15 | Сообщение # 274
старожил
Сейчас нет на сайте
Quote (Aspire)
Я бы с радостью послушал разъяснения учителя по паскалю, но в нашей школе (я в 10 классе) до сих пор не преподавали программирование

Да, в некоторых школах наплевательски относятся к информатике... Зато часто можно найти в городе специальные курсы по программированию, или в интернете видео-курсы... Вещь на любителя, но кому-то ведь помогает...

Возьми какой-нибудь самоучитель "для чайников" по Паскалю или Делфи, там хотя бы основы программирования описаны. Потом можно настоящее руководство взять, но там уже серьёзней. Если совсем нифига о программировании не знаешь - скачай школьный учебник, в котором описываются теоретические основы программирования, алгоритмы и т.д. Потом должно быть проще изучать самоучитель или руководство.
Можно ещё уроки в интернете поискать, но это, на мой взгляд, хуже книги.

Quote (Aspire)
сухое чтение руководств недостаточно полно описывает все возможности применения языка

А зачем тебе ВСЕ возможности применения языка? Большинство современных языков универсальны. Да и потом. Ты же не одно руководство прочитаешь, а несколько, из каждого почерпнёшь новые знания, дополнишь...
Естественно, нужно не сухо читать умные книжки, а пробовать новые знания на практике, закреплять теорию практикой...
Quote (Aspire)
К тому же можно рассчитывать на опыт обучающего программиста и уточнить у него недостаточно понятные действия.

Заходишь на любой форум, где есть программисты - спрашиваешь, что нужно, в теме или в личных сообщениях...

Quote (Aspire)
достойного руководства в просторах интернета не нашел...

Вот, например, поищи: "Стив Тейксейра, Ксавье Пачеко - Delphi 5. Руководство разработчика" (ещё для Delphi 6 обновленная версия есть). Руководство старое, но, на мой взгляд, хорошее. Авторы работали в Borland и, кажется, участвовали в разработке Delphi.




Сообщение отредактировал TimKruz - Понедельник, 26 Ноября 2012, 20:24
AspireДата: Понедельник, 26 Ноября 2012, 22:01 | Сообщение # 275
был не раз
Сейчас нет на сайте
Quote (TimKruz)
А зачем тебе ВСЕ возможности применения языка?

На изучение языков программирование меня сподвигла игра R2Farming. Я хотел бы сделать подобный проект, но другой тематики... Мне кажется для этого проекта не достаточно школьных знаний.

Quote (TimKruz)
Заходишь на любой форум, где есть программисты - спрашиваешь, что нужно, в теме или в личных сообщениях...

Хорошо, что на этом форуме нашлись люди, которые готовы мне помочь.

Quote (TimKruz)
Вот, например, поищи: "Стив Тейксейра, Ксавье Пачеко - Delphi 5. Руководство разработчика" (ещё для Delphi 6 обновленная версия есть).

Спасибо за совет - обязательно найду, прочитаю и попытаюсь понять.


Aspire... LacostaPerson... Lacosta...
BahamamamДата: Воскресенье, 02 Декабря 2012, 22:43 | Сообщение # 276
был не раз
Сейчас нет на сайте
// Проблема решена

Сообщение отредактировал Bahamamam - Воскресенье, 02 Декабря 2012, 23:12
DestroyДата: Среда, 05 Декабря 2012, 20:37 | Сообщение # 277
постоянный участник
Сейчас нет на сайте
есть у кого пример реализации изометрии или хотя бы какие соображения по этому поводу?
karuyДата: Среда, 05 Декабря 2012, 21:14 | Сообщение # 278
заслуженный участник
Сейчас нет на сайте
Quote (Destroy)
или хотя бы какие соображения по этому поводу?

OpenGL если много времени лишнего или любая надстройка над OpenGL, если нет желания свои костыли строчить.
DestroyДата: Четверг, 06 Декабря 2012, 14:08 | Сообщение # 279
постоянный участник
Сейчас нет на сайте
то что тут глсцена нужна это понятно))
а примерный алгоритм или еще какие нибудь действия?
karuyДата: Четверг, 06 Декабря 2012, 17:45 | Сообщение # 280
заслуженный участник
Сейчас нет на сайте
Quote (Destroy)
а примерный алгоритм или еще какие нибудь действия?

Примерный алгоритм изометрии? - Ставишь камеру под углом: вот и изометрия.
Форум игроделов » Программирование » Delphi/Pascal/Object Pascal » Delphi:Вопрос-Ответ (Спросил - получил ответ)
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг