Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
3-1153354723
VitalikS
2006-07-20 04:18
2006.09.24
Из FireBird в PostgreSQL


15-1157621569
Delphi basic
2006-09-07 13:32
2006.09.24
Кто как придумывает названия разрабатываемым программам?


6-1137340395
WebSQLNeeder
2006-01-15 18:53
2006.09.24
Как програмно отключить текущее соединение с интернетом??


4-1146608062
vidiv
2006-05-03 02:14
2006.09.24
"Виртуальный" файл


2-1157611302
Dr. Genius
2006-09-07 10:41
2006.09.24
Шифрование строк





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