IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

3 страниц V  1 2 3 >  
 Ответить  Открыть новую тему 
> Нарисовать карту
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 75
Пол: Мужской

Репутация: -  0  +


Проблема такова: В прикрепленном файле находятся файлы KRD-карты районов. Каждый из них содержит название района, координаты точек, макс. и мин. значения "х" и "у". Помогите вывести на экран хотя бы одну карту
Код


interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  x,y,h:real;
  I1,I2,J1,J2:integer;
  x1,x2,y1,y2:real;
implementation

{$R *.dfm}
{------------------------------------------------------------------------------}
function II(x:real):Integer;
begin
  II:=I1 + Trunc ((x-x1)*(I2-I1)/(x2-x1))
end;
{------------------------------------------------------------------------------}
function JJ(y:real):Integer;
begin
  JJ:=J1 + Trunc ((y-y1)*(J2-J1)/(y2-y1))
end;
{------------------------------------------------------------------------------}
procedure TForm1.Button1Click(Sender: TObject);
begin
with Image1

end;

end.


Прикрепленные файлы
Прикрепленный файл  KRD.rar ( 17.13 килобайт ) Кол-во скачиваний: 231


--------------------
Ну, а почему бы в свободное время не позаниматься программированием?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 75
Пол: Мужской

Репутация: -  0  +


Смотрю по коду, вроде должно работать, но все равно карту не рисует из файла:
1.Название района
2.Название райцентра
3.Координаты
4.,5.Макс по Х и мин по Х, соотевтсвенно макс по у и мин по у... Остальные просто координаты!
В качестве примера взял один файл с название "район1"
Код

var
  Form1: TForm1;
  x1,y1,x2,y2,h:real;
  x,y,col:integer;
  I1,J1,I2,J2,n,j,k:integer;
  s1,s2:string;
  f:TextFile;
implementation

{$R *.dfm}
{------------------------------------------------------------------------------}
function II(x:real):integer;
begin
II:=I1+Trunc((x-x1)*(I2-I1)/(x2-x1))
end;
{------------------------------------------------------------------------------}
function JJ(x:real):integer;
begin
JJ:=J1+Trunc((y-y1)*(J2-J1)/(y2-y1))
end;
{------------------------------------------------------------------------------}
procedure DrawGraphic;
begin
reset(f);
k:=0;
   with Form1.Image1,Form1.Image1.Canvas do
    begin
    x:=1413;y:=1294;
    MoveTo(II(x),JJ(-y));
     while not eof(f) do
      begin
       k:=k+1;
       while not eoln(f) do
        begin
        Rectangle(0,0,Width,Height);
        if (k=1)or(k=2) then

          read(f,s1)

        else if k=4 then read(f,n)
        else if k=7 then read(f,col)
        else
         begin
          read(f,x,y);
          LineTo(II(x),JJ(-y))
         end
       end;
      readln(f)
     end;
    close(f);
   end;
end;
{------------------------------------------------------------------------------}
procedure TForm1.FormCreate(Sender: TObject);
begin
AssignFile(f, 'D:\Documents and Settings\Administrator\My Documents\Delfi_files\Map\RAION1.KRD');

   n:=200;
  x1:=-6; y1:=-6;
  x2:=6;y2:=6;

    I1:=0;J1:=0;
    I2:=Image1.Width;J2:=Image1.Height;

  DrawGraphic;
end;


Сообщение отредактировано: }0pa -


Прикрепленные файлы
Прикрепленный файл  RAION1.rar ( 603 байт ) Кол-во скачиваний: 218


--------------------
Ну, а почему бы в свободное время не позаниматься программированием?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Что значит вывести?
Что должно получиться на экране? Название района и куча точек?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 75
Пол: Мужской

Репутация: -  0  +


Да, куча точек - карта района с его названием и названиеи райцентра!


--------------------
Ну, а почему бы в свободное время не позаниматься программированием?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Что означает 7 в 7-ой строке файла данных о районе?


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Вроде что-то получилось smile.gif
Прикрепленный файл  Region.rar ( 6.81 килобайт ) Кол-во скачиваний: 430

Вот как выглядит:
Прикрепленное изображение
ЗЫ: Если хочешь несколько районов, то используй массив из TRegion. Но не забудь, что пересчитывать Delta (относительное смещение координат карты и формы на экране) придется для каждого региона по другому.


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 75
Пол: Мужской

Репутация: -  0  +


Большой респект. Нашел свои ошибки!!!Спасибо!


--------------------
Ну, а почему бы в свободное время не позаниматься программированием?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Пионер
**

Группа: Пользователи
Сообщений: 75
Пол: Мужской

Репутация: -  0  +


Цитата
Если хочешь несколько районов, то используй массив из TRegion

Не мог ты написать пример хотя бы для 2 карт.


--------------------
Ну, а почему бы в свободное время не позаниматься программированием?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 75
Пол: Мужской

Репутация: -  0  +


Код
Canvas.Ellipse(Region.CenterX-Region.Delta.X-th div 2 - 1,Region.CenterY-Region.Delta.Y-th div 2 - 1,Region.CenterX-Region.Delta.X+ th div 2,Region.CenterY-Region.Delta.Y+ th div 2);

Помогите разобраться в строчке

Понятно,что это эллипс, но каким же образом мы выбираем эти коордниты?


--------------------
Ну, а почему бы в свободное время не позаниматься программированием?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Цитата(}0pa @ 23.11.2006 2:30) *
Понятно,что это эллипс, но каким же образом мы выбираем эти коордниты?


(Region.CenterX,Region.CenterY) - центр окружности
th - ее диаметр (берется размером с высоту шрифта которым подписывать будем)
th div 2 - ее радиус (деление нацело)
Region.Delta - смещение координат по X и Y
Геометрию то помнишь?

Вместо Region :TRegion;
пишешь Region :array of TRegion;
Перед добавлением региона не забывай увеличить размер динамического массива:
setlength(Region,length(Region)+1);

Сообщение отредактировано: hiv -


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Пионер
**

Группа: Пользователи
Сообщений: 75
Пол: Мужской

Репутация: -  0  +


Цитата(hiv @ 21.11.2006 12:19) *

Но не забудь, что пересчитывать Delta (относительное смещение координат карты и формы на экране) придется для каждого региона по другому.

1.Наверное, придется заносить сещение в массив?
2.К тому же, нужно нарисовать карту региона,т.е.этот район не обязательно должен находиться в левом углу формы?
3.А нельзя ли не изменять в файле имя района и райцентра, вывести на экран при считывания из файла, эти имена в норм. "русской форме"?


--------------------
Ну, а почему бы в свободное время не позаниматься программированием?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Цитата(}0pa @ 23.11.2006 12:37) *

1.Наверное, придется заносить сещение в массив?
2.К тому же, нужно нарисовать карту региона,т.е.этот район не обязательно должен находиться в левом углу формы?
3.А нельзя ли не изменять в файле имя района и райцентра, вывести на экран при считывания из файла, эти имена в норм. "русской форме"?

1. Смещение находится в объекте, поэтому заносить его в массив не надо, т.к. сами объекты уже в массиве. Возможно нужно убрать смещение из регионов, если они у тебя относительно друг друга правильно расположены, и ввести общее смещение. Его вычислять как минимальное значение из Region[i].Rect.Left по X и минимальное значение из Region[i].Rect.Top по Y.
2. см. ответ на вопрос 1.
3. Можно, тогда ищи функцию перекодировки cp866 в кодировку cp1251. На форуме точно есть. Начни с FAQ smile.gif


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Пионер
**

Группа: Пользователи
Сообщений: 75
Пол: Мужской

Репутация: -  0  +


Масштаб не получается реализовать, т.е. на форме вся карта не умещаетя...Смещение для каждого района убрал и поставил для всей карты


--------------------
Ну, а почему бы в свободное время не позаниматься программированием?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Пионер
**

Группа: Пользователи
Сообщений: 75
Пол: Мужской

Репутация: -  0  +


Вот этот проэкт. Вся карта не помещается на форму. Помогите организовать масштаб


Прикрепленные файлы
Прикрепленный файл  Region.rar ( 184.18 килобайт ) Кол-во скачиваний: 217


--------------------
Ну, а почему бы в свободное время не позаниматься программированием?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Цитата(}0pa @ 27.11.2006 0:07) *

Вот этот проэкт. Вся карта не помещается на форму. Помогите организовать масштаб

Добавил масштаб (чего нет проще - подели итоговые координаты на масштаб и все!)
Исправил кучу нелепостей особенно с OnPaint (он должен быть связан с формой) и поиском файлов.
Прикрепленный файл  region.rar ( 24.88 килобайт ) Кол-во скачиваний: 406


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Пионер
**

Группа: Пользователи
Сообщений: 75
Пол: Мужской

Репутация: -  0  +


С маштабом я потом сам догадался, вспомнив про сжатие и растяжение. А вот, конечно, за поиск очередного файла с раширение КРД и за оптимизацию событийных процедур огромное спасибо!
Р.С. Помнится, вы спрашивали про 7 строчку в файле: это есть не что иное, как цвет района
Region.Cvet - содержит цвет, но при его подстановки в
Код
Canvas.Brush.Color:=clWhite;  (Canvas.Brush.Color:=Region[i].cvet;)

Происходит неурядица. И вот насчет кодировки у меня ничего в голову не лезет

Сообщение отредактировано: }0pa -


--------------------
Ну, а почему бы в свободное время не позаниматься программированием?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Посмотри описание объекта TColor;
Из него можно создать палитру (массив цветов), номер в которой и будет твоим номером цвета.


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Пионер
**

Группа: Пользователи
Сообщений: 75
Пол: Мужской

Репутация: -  0  +


Sorry, сам разобрался...
Код
Function MyColor(c:integer):TColor;
begin
case c of
  0:MyColor:=clBlack;
  1:MyColor:=clBlue;
  2:MyColor:=clGreen;
  3:MyColor:=clLime;
  4:MyColor:=clRed;
  5:MyColor:=clSilver;
  6:MyColor:=clMaroon;
  7:MyColor:=clOlive;
  8:MyColor:=clNavy;
  9:MyColor:=clAqua;
  10:MyColor:=clYellow;
  11:MyColor:=clPurple;
  12:MyColor:=clTeal;
  13:MyColor:=clWhite;
end;
end;

Может, немного нерациорально, но тем не менее...
Тогда еще последний вопрос остается:
Кодировка - считывание из файла и вывод на экран русских букв без изменения самого файла...

Сообщение отредактировано: }0pa -


--------------------
Ну, а почему бы в свободное время не позаниматься программированием?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Цитата(}0pa @ 27.11.2006 14:41) *

Может, немного нерациорально, но тем не менее...

Не менее, надо делать так:
const MyColor:array[0..13] of TColor = (clBlack, clBlue, clGreen, clLime,
clRed, clSilver, clMaroon, clOlive, clNavy, clAqua, clYellow, clPurple, clTeal, clWhite);

Цитата(}0pa @ 27.11.2006 14:41) *

Тогда еще последний вопрос остается:
Кодировка - считывание из файла и вывод на экран русских букв без изменения самого файла...

Это уж сам в инете найдешь - вещь распространенная. Но я бы просто все файлы данных перекодировал, чтоб не заниматься постоянной перекодировкой при их чтении, тем более что cp1251 стандартная кодировка windows с 1995 года.

ЗЫ: Можно заменить номер цвета в файле данных на сам цвет в формате RGB (красный синий голубой), а потом определяй цвет для каждого региона так Region[i].color:=RGB(r,g,b); Компоненты цвета r,b,b - байты (0..255).

Сообщение отредактировано: hiv -


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Пионер
**

Группа: Пользователи
Сообщений: 75
Пол: Мужской

Репутация: -  0  +


Не могу найти в инете ничего стоящего, Возможно это АПИ фукнции, а с ними я еще не сталкивался...
Код
CharToOEM/OEMToChar

Может что-нибудь это? Тогда что за тим PAnsiChar???


--------------------
Ну, а почему бы в свободное время не позаниматься программированием?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

3 страниц V  1 2 3 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.03.2024 14:22
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name