Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.08.19;
Скачать: [xml.tar.bz2];

Вниз

Надоел ящик с песком. Помогите!   Найти похожие ветки 

 
иван61   (2002-08-04 13:06) [0]

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


 
Rous   (2002-08-04 13:11) [1]

Очень просто. Я делал редактор шахмат для отца (он статьи в журнал с картинками пишет). По щелчку вычисляешь координаты мышки и на ее месте создаешь TImage с картинкой, заранее все TImage ы сохраняй в массиве для простоты - с перемещением думаю сам додумаешь.


 
Юрий Зотов   (2002-08-04 13:23) [2]

А для прокрутки можно, например, поместить все это в TScrollBox.


 
Rous   (2002-08-04 13:36) [3]

Кстати действительно, почему сам не додумался?


 
иван61   (2002-08-04 14:27) [4]

Делаю так:

unit UKarta;

interface

uses
Windows, Messages, jpeg, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, Buttons;

type
TForm1 = class(TForm)
Panel1: TPanel;
Image1: TImage;
ScrollBarHor: TScrollBar;
ScrollBarVert: TScrollBar;
SpeedButton1: TSpeedButton;
procedure FormCreate(Sender: TObject);
procedure ScrollBarHorChange(Sender: TObject);
procedure ScrollBarVertChange(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.BorderStyle:=bsSingle;
Panel1.Left:=0;
Panel1.Top:=0;
Image1.Picture.LoadFromFile("C:\Delphi5\Projects\NewKarta\Karta.jpg");
Image1.Left:=0;
Image1.Top:=0;
Image1.AutoSize:=true;
Panel1.Width:=800;
Panel1.Height:=500;
ScrollBarHor.Min:=0;
ScrollBarVert.Min:=0;
ScrollBarHor.Max:=Image1.Picture.Width-Panel1.Width;
ScrollBarVert.Max:=Image1.Picture.Height-Panel1.Height;
SpeedButton1.AllowAllUp:=true;
SpeedButton1.GroupIndex:=1;
end;

procedure TForm1.ScrollBarHorChange(Sender: TObject);
begin
Image1.Left:=-ScrollBarHor.Position;
end;


procedure TForm1.ScrollBarVertChange(Sender: TObject);
begin
Image1.Top:=-ScrollBarVert.Position;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var z:TPanel;
begin
if SpeedButton1.Down=true then
if Button=mbLeft then
begin
z:=TPanel.create(Form1);// создаем экземпляр компонента
z.parent:=self;// появится на форме
z.left:=(x-ScrollBarHor.Position);
z.top:=(y-ScrollBarVert.Position);
z.Width:=70;
z.Height:=15;
end;
end;

end.


Но вот только в позицию курсора могу вставить только панель, а картинку с рисунком сообразить не могу. Подскажите.


 
Юрий Зотов   (2002-08-04 15:30) [5]

Пример - ScrollBox со вставкой и прокруткой картинок. Проверено.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
ScrollBox1: TScrollBox;
procedure ScrollBox1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.ScrollBox1Click(Sender: TObject);
var
P: TPoint;
begin
GetCursorPos(P);
P := ScrollBox1.ScreenToClient(P);
with TImage.Create(Self) do
begin
Parent := ScrollBox1;
Picture.LoadFromFile("...");
SetBounds(P.X, P.Y, Picture.Width, Picture.Height)
end
end;

end.


 
vserd   (2002-08-08 14:23) [6]

Ну на самом деле, мое имхо, Image тебе слабо поможет.
1. Карты скорей всего будут цифровом ввиде (у которых свой формат). Найди компонент который будет отрисовывать эти карты.
2. Для нормальной работы с программой необходимо будет создать свой движок, который буде отрабатывать перерисовку, добавление и удаление знаков, и других символов. (т.е. работа со слоями)

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


 
Kudatsky   (2002-08-08 17:07) [7]

Посмотри на сайте
http://webua.net/usep
Там программа для энергетики, но идеи
можно заимствовать


 
Леон   (2002-08-08 19:34) [8]

Есть готовые компоненты для подобных вещей:
http://www.cartoworld.com - eng
http://www.vkasoft.narod.ru - rus



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.08.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.01 c
4-60908
SPeller
2002-06-16 15:43
2002.08.19
GlobalAlloc


1-60595
Explorer
2002-08-08 09:51
2002.08.19
Цвет выделения в DBGrid


3-60479
awaken
2002-07-28 18:45
2002.08.19
ADO Recordset и Delphi DataSet


4-60911
PSERG
2002-06-15 10:15
2002.08.19
Путь к загруженой DLL


6-60790
SerVS
2002-06-08 14:55
2002.08.19
UDP client-ы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский