Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.24;
Скачать: CL | DM;

Вниз

left top Timage   Найти похожие ветки 

 
Sele ©   (2006-09-05 12:36) [0]

Хай олл.
Динамически создаем многа Timage.
Среди них имеются с именами  i1,i2,i3...i40 так вот как
мне сохранить в файл координаты (left,top) только у этих картинок.
Т.е. имя которых имеет вид  i + порядковый номер.


 
zdm ©   (2006-09-05 12:40) [1]

если правильно понял, то проще всего INIFiles


 
zdm ©   (2006-09-05 12:43) [2]

Работа с Ini-файлами в Delphi

Раньше, когда не было ещё славных файлов систем.dat и юзверь.dat, жили - были на винчестерах персо-
нальных компьютеров одни очень славные файлы. Назывались они INI-файлы и имели соответствующее рас-
ширение - "ini". Внешне они очень напоминали текстовые файлы и всегда с ними дружили. Даже
могли быть прочитаны и изменены одинаковыми программами - текстовыми редакторами. Но однажды на
INI-файлы обратили внимание другие - EXE-файлы. Им очень приглянулась структура INI-файлов. Послед-
ние были очень удобно, по мнению программ, поделены на разделы. Каждый раздел INI-файла начинался с
новой строки и имел свое имя. Имя раздела записывалось в квадратных скобках и было уникальным для
одного ини-файла. Разделы, в свою очередь, состояли из идентификаторов. Каждый идентификатор имел
свое имя, значение и записывался в ини-файле с новой строки. Имя и значение идентификатора разделя-
лось знаком "=". Злобные программы оккупировали ини-файлы и стали хранить в них свою информацию.
Так продолжалось довольно долго, пока на помощь ини-файлам не пришел добрый дядя по имени Билл.
К сожалению, фамилия этого героя как-то случайно стерлась из памяти винчестеров. Поговаривают, что
его стерли программы в отместку за освобожденные им ини-файлы. Так вот этот добрый дядя взял и соз-
дал непонятную штуку, которую назвал реестром. Программы могли использовать реестр для хранения
своих данных, однако текстовые редакторы не могли прочитать содержимое реестра: слишком уж там все
было запутано. Это обстоятельство порадовало программы, и почти все они освободили ини-файлы в
пользу реестра. Таким образом, ини-файлы снова стали свободны. Однако, почему-то они не смогли вер-
нуться к самостоятельной жизни и стали вымирать. И последней надеждой ини-файлов стал дядя Борман,
создатель "Дельфи" - программы для создания программ. Он включил в "Дельфи" модуль INIFILES, позво-
ляющий программам снова использовать ини-файлы для хранения данных. Это стало взаимовыгодным сот-
рудничеством: программы не дали исчезнуть ини-файлам, а те, в свою очередь, надежно хранили инфор-
мацию программ, поскольку реестр дяди Билла постоянно ее куда-то девал и не хотел отдавать обратно.
Так что давайте возрадуемся благородному поступку дяди Бормана и воспользуемся модулем INIFILES
для спасения популяции INI-файлов!

Почему иногда лучше использовать INI-файлы, а не реестр?
1. INI-файлы можно просмотреть и отредактировать в обычном блокноте.
2. Если INI-файл хранить в папке с программой, то при переносе папки на другой компьютер настройки сохраняются.
3. Новичку в реестре можно запросто запутаться или (боже упаси), чего-нибудь не то изменить.
Поэтому для хранения параметров настройки программы удобно использовать стандартные INI файлы Windows.
Работа с INI файлами ведется при помощи объекта TIniFiles модуля IniFiles. Краткое описание методов объекта TIniFiles дано ниже.
Constructor Create("d:\test.INI");
Создать экземпляр объекта и связать его с файлом. Если такого файла нет, то он создается, но только тогда, когда произведете в него запись информации.
WriteBool(const Section, Ident: string; Value: Boolean);
Присвоить элементу с именем Ident раздела Section значение типа boolean
WriteInteger(const Section, Ident: string; Value: Longint);
Присвоить элементу с именем Ident раздела Section значение типа Longint
WriteString(const Section, Ident, Value: string);
Присвоить элементу с именем Ident раздела Section значение типа String
ReadSection (const Section: string; Strings: TStrings);
Прочитать имена всех корректно описанных переменных раздела Section (некорректно описанные опускаются)
ReadSectionValues(const Section: string; Strings: TStrings);
Прочитать имена и значения всех корректно описанных переменных раздела Section. Формат : имя_переменной = значение
EraseSection(const Section: string);
Удалить раздел Section со всем содержимым
ReadBool(const Section, Ident: string; Default: Boolean): Boolean;
Прочитать значение переменной типа Boolean раздела Section с именем Ident, и если его нет, то вместо него подставить значение Default.
ReadInteger(const Section, Ident: string; Default: Longint): Longint;
Прочитать значение переменной типа Longint раздела Section с именем Ident, и если его нет, то вместо него подставить значение Default.
ReadString(const Section, Ident, Default: string): string;
Прочитать значение переменной типа String раздела Section с именем Ident, и если его нет, то вместо него подставить значение Default.
Free;
Закрыть и освободить ресурс. Необходимо вызвать при завершении работы с INI файлом
Property Values[const Name: string]: string;
Доступ к существующему параметру по имени Name

Пример :
Procedure TForm1.FormClose(Sender: TObject);
var
IniFile:TIniFile;
begin
 IniFile := TIniFile.Create("d:\test.INI");                { Создали экземпляр объекта }
 IniFile.WriteBool("Options", "Sound", True);              { Секция Options: Sound:=true }
 IniFile.WriteInteger("Options", "Level", 3);              { Секция Options: Level:=3 }
 IniFile.WriteString("Options" , "Secret password", Pass);
                   { Секция Options: в Secret password записать значение переменной Pass }
 IniFile.ReadSection("Options ", memo1.lines);             { Читаем имена переменных}
 IniFile.ReadSectionValues("Options ", memo2.lines);       { Читаем имена и значения }
 IniFile.Free;                     { Закрыли файл, уничтожили объект и освободили память }
end;


 
zdm ©   (2006-09-05 12:48) [3]

ну а прочесть данные соответсвенно IniFile.ReadInteger....ReadString и т.д. и т.п.


 
Sele ©   (2006-09-05 12:52) [4]

Меня именно интерисует как отделить Timage с именами i + порядковый номер     от других , а потом сохранить их
left и top в ини
Чтоб выглядело примерно так  i(left,top)
i2 (250,25);
i23 (555,254);
i2 (634,11);


 
default ©   (2006-09-05 12:57) [5]

Sele ©   (05.09.06 12:36)  
да по-разному можно делать...к тому же всё зависит, что там за код у тебя...
например, если ты сохраняешь созданные TImage в массиве TImage-ов почему бы, например, первыми не создать и не сохранить в массиве элементы с указанными номерами, количество ты их знаешь(обозначим его n) ибо сам создаёшь
потом в нужный момент записываешь в файл инфу о первых n TImage-ах


 
Sele ©   (2006-09-05 13:31) [6]

Пишу собсно очень простую игрульку, а сейчас именно редактор карт к ней.
И в нем создаются динамически Timage с различными именами (например i - деревья , n -нпц и так далее).

вот код создания дерева :
var
im:Timage;
idimg:integer;
begin
im:=  timage.Create(form1);
with im do begin
parent:=form1;
idimg:=idimg +1;
im.Name:="i"+inttostr(idimg) ;
autosize:=true;
picture:=form2.derevo.Picture;
left:=form1.Width div 2;
top:= form1.Height div 2;
onDblClick:=Image1DblClick;
onmousedown:= Image1MouseDown;
onmousemove:= Image1MouseMove;
onmouseup:= Image1MouseUp;
popupmenu:=image1.PopupMenu;
tag:=1;
parent.DoubleBuffered:=true;
end;

допустим мы создали так штук 5. помогите плз кодом как оформить в файл координаты всех деревьев.
если не сложно то плз кодом.


 
default ©   (2006-09-05 14:07) [7]

Sele ©   (05.09.06 13:31) [6]
код полный приведи
где создаются и деревья и кусты и даже верблюжьи колючки


 
Loginov Dmitry ©   (2006-09-05 14:10) [8]

> zdm ©   (05.09.06 12:43) [2]


Это что. Развернутый ответ на экзаменационный билет?


 
default ©   (2006-09-05 14:36) [9]

Sele ©   (05.09.06 13:31) [6]
например, можешь закидать свои деревья в массив Array of TImage, потом по нему пробежаться...
можно Form1.Components задействовать, но думаю не стоит
(хотя тоже можно при некоторых допущениях)


 
zdm ©   (2006-09-05 15:00) [10]


> Это что. Развернутый ответ на экзаменационный билет?

Просто попутно работаю, и заглядываю в форум, а когда-то что-то уже искал, ну естественно есть ссылки на "штатные" вопросы


 
Sele ©   (2006-09-05 15:06) [11]

вот все что пока есть :

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   PopupMenu1: TPopupMenu;
   N1: TMenuItem;
   N2: TMenuItem;
   N3: TMenuItem;
   N4: TMenuItem;
   N5: TMenuItem;
   N6: TMenuItem;
   SO1: TMenuItem;
   Build1541: TMenuItem;
   Build1571: TMenuItem;
   N7: TMenuItem;
   N8: TMenuItem;
   N9: TMenuItem;
   N10: TMenuItem;
   N11: TMenuItem;
   mob11: TMenuItem;
   N12: TMenuItem;
   N13: TMenuItem;
   N14: TMenuItem;
   N15: TMenuItem;
   N16: TMenuItem;
   N17: TMenuItem;
   N18: TMenuItem;
   N19: TMenuItem;
   N20: TMenuItem;
   Button1: TButton;
   Mob21: TMenuItem;
   Mob31: TMenuItem;
   Button2: TButton;
   Button3: TButton;
   Button4: TButton;
   MainMenu1: TMainMenu;
   N21: TMenuItem;
   N22: TMenuItem;
   N23: TMenuItem;
   N24: TMenuItem;
   N25: TMenuItem;
   N26: TMenuItem;
   N27: TMenuItem;
   N28: TMenuItem;
   N29: TMenuItem;
   N30: TMenuItem;
   N110: TMenuItem;
   N31: TMenuItem;
   N32: TMenuItem;
   N33: TMenuItem;
   N34: TMenuItem;
   terra: TImage;
   pers: TImage;
   Image1: TImage;
   procedure Button1Click(Sender: TObject);
   procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
     Y: Integer);
   procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   procedure Button2Click(Sender: TObject);
   procedure Image1DblClick(Sender: TObject);
   procedure N10Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure Button3Click(Sender: TObject);
   procedure mob11Click(Sender: TObject);
   procedure N21Click(Sender: TObject);
   procedure N25Click(Sender: TObject);
   procedure N28Click(Sender: TObject);
   procedure N30Click(Sender: TObject);
   procedure N110Click(Sender: TObject);
   procedure N34Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
der,mb,tr:Timage;  
d,mbk,trk:integer;  
s,t,m:string;
 x0, y0: integer;
 move: boolean;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

der:=  timage.Create(form1);
with der do begin
parent:=form1;

autosize:=true;
picture:=form2.derevo.Picture;
left:=form1.Width div 2;
top:= form1.Height div 2;
onDblClick:=Image1DblClick;
onmousedown:= Image1MouseDown;
onmousemove:= Image1MouseMove;
onmouseup:= Image1MouseUp;
popupmenu:=image1.PopupMenu;
tag:=1;

der.Name:="i" + s;
parent.DoubleBuffered:=true;
show;
end;  end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
if button <> mbLeft then
   move:=false
 else
 begin
   move:=true;
   x0:=x;
   y0:=y;
 end;

end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
if move then
 begin
  (sender as timage).Left:=(sender as timage).Left+x-x0;
  (sender as timage).Top:=(sender as timage).Top+y-y0;

end;

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

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
tr:=  timage.Create(form1);
with tr.Create(form1)do begin
parent:=form1;
autosize:=true;
picture:=form2.trava.Picture;
left:=form1.Width div 2;
top:= form1.Height div 2;
tag:=2;
onmousedown:= Image1MouseDown;
onmousemove:= Image1MouseMove;
onmouseup:= Image1MouseUp;
onDblClick:=Image1DblClick;
tr.Name:="travka" + t;
parent.DoubleBuffered:=true;
show;
end;
end;

procedure TForm1.N10Click(Sender: TObject);
begin
button2.Click;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
pers.Parent.DoubleBuffered:=true;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
mb:=  timage.Create(form1);
with mb.Create(form1)do begin
parent:=form1;
autosize:=true;
picture:=form2.mob1.Picture;
left:=form1.Width div 2;
top:= form1.Height div 2;
tag:=3;
onmousedown:= Image1MouseDown;
onmousemove:= Image1MouseMove;
onmouseup:= Image1MouseUp;
onDblClick:=Image1DblClick;
mb.Name:="mob" + m;
parent.DoubleBuffered:=true;
show;
end;
end;

procedure TForm1.mob11Click(Sender: TObject);
begin
button3.Click;
end;

procedure TForm1.N21Click(Sender: TObject);
begin
(sender as timage).Free;
end;

procedure TForm1.N25Click(Sender: TObject);
begin

d:=d+1;
s:=inttostr(d);
button1.Click;
end;

procedure TForm1.N28Click(Sender: TObject);
begin
trk:=trk+1;
t:=inttostr(trk);
button2.Click;
end;

procedure TForm1.N30Click(Sender: TObject);
begin
if not pers.visible then pers.Show else
showmessage("Игрок уже есть");
end;

procedure TForm1.N110Click(Sender: TObject);
begin
mbk:=mbk+1;
m:=inttostr(mbk);
button3.Click;
end;

procedure TForm1.N34Click(Sender: TObject);
begin
application.Terminate;
end;

end.

помогите плз кусочком кода с  Array of TImage  . А то я ниче не понял .


 
default ©   (2006-09-05 16:57) [12]


var
Form1: TForm1;
der,mb,tr:Timage;  
d,mbk,trk:integer;  
s,t,m:string;
x0, y0: integer;
move: boolean;
SkladDerevyshek: Array of TImage;
implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

der:=  timage.Create(form1);
SetLength(SkladDerevyshek, Length(SkladDerevyshek)+1);
SkladDerevyshek[High(SkladDerevyshek)] := der;
with der do begin
parent:=form1;

autosize:=true;
picture:=form2.derevo.Picture;
left:=form1.Width div 2;
top:= form1.Height div 2;
onDblClick:=Image1DblClick;
onmousedown:= Image1MouseDown;
onmousemove:= Image1MouseMove;
onmouseup:= Image1MouseUp;
popupmenu:=image1.PopupMenu;
tag:=1;

der.Name:="i" + s;
parent.DoubleBuffered:=true;
show;
end;  end;

procedure PomestitDerevyashkiNaPolyanyToEstVFile;
var
 i: Integer;
begin
 for i := 0 to High(SkladDerevyshek) do begin
   // помещаем древесину в файл
 end;
end;



код, откровенно говоря, ... его надо переписать, лучше с нуля
я кое-что добавил в него, посмотри
"tr.Name:="travka" + t;"
ну ты юмарной перец:)


 
Sele ©   (2006-09-05 17:18) [13]

спс



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

Текущий архив: 2006.09.24;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.032 c
1-1155649301
apic
2006-08-15 17:41
2006.09.24
Сервисы.


1-1155530573
karton
2006-08-14 08:42
2006.09.24
Компоненты для экспорта из FastReport


15-1157694446
ilya39
2006-09-08 09:47
2006.09.24
Windows Server 2003 R2 пакет предустановки


2-1157266560
Itoixxx
2006-09-03 10:56
2006.09.24
Работа с филдами в ибКвнри


2-1157571270
redlord
2006-09-06 23:34
2006.09.24
моргание Timage при refresh