Форум: "Начинающим";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.051 c