Поиск:

Ответ в темуСоздание новой темы Создание опроса
> игра сокобан 
:(
    Опции темы
Platov
Дата 27.11.2009, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 23.7.2009

Репутация: 2
Всего: 2



Лови мега пример рисования image с нужной картинкой в нужном месте.
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

const int rx=50,ry=50;
int n=0;
AnsiString DIR;

//---------------------------------------------------------------------------
void __fastcall TForm1::create(int X, int Y,TObject *Sender,AnsiString pic)
{
n++;
TImage* Im=new TImage(Form1);

Im->Parent=Form1;

Im->Picture->LoadFromFile(pic);
Im->Width=rx;
Im->Height=ry;

Im->Name="Im"+String(n);
Im->Left=X;
Im->Top=Y;

}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
DIR=ParamStr(0);DIR=ExtractFileDir(DIR)+"\\";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
create(100, 100,Sender,DIR+"p1.bmp");
}
//---------------------------------------------------------------------------


PM MAIL   Вверх
ratgunter
Дата 27.11.2009, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 17.11.2008

Репутация: нет
Всего: нет



Подскажите, как сделать так, чтобы текстовый файл file.txt был всегда привязан к папке Sokoban. И как задать путь  Sokoban\file.txt чтобы программа сама его находила, а не пришлось самому его прописывать.
PM MAIL   Вверх
DenWPF
Дата 27.11.2009, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



Directory.GetCurrentDirectory - но это Сшарп =)) что то подобное и у тебя должно быть=)
PM MAIL   Вверх
xvr
Дата 27.11.2009, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(ratgunter @ 27.11.2009,  13:28)
Подскажите, как сделать так, чтобы текстовый файл file.txt был всегда привязан к папке Sokoban. И как задать путь  Sokoban\file.txt чтобы программа сама его находила, а не пришлось самому его прописывать.

Код

ExtractFilePath(Application->ExeName)+"file.txt"

PM MAIL   Вверх
Platov
Дата 27.11.2009, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 23.7.2009

Репутация: 2
Всего: 2



Этот вариант лучше. Поверьте мне. 

Код

DIR=ParamStr(0);DIR=ExtractFileDir(DIR)+"\\";


Как бы вы не запустили прогу, а её место на венике неизменно. А вот все остальные методы не дают 100% гарантии.

хотя
Код

ExtractFilePath(Application->ExeName)+"file.txt"


скорее всего равноценен.

Это сообщение отредактировал(а) Platov - 27.11.2009, 17:47
PM MAIL   Вверх
xvr
Дата 27.11.2009, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Platov @ 27.11.2009,  17:43)
Этот вариант лучше. Поверьте мне. 

Код

DIR=ParamStr(0);DIR=ExtractFileDir(DIR)+"\\";


Как бы вы не запустили прогу, а её место на венике неизменно. 

Очень распространенное заблуждение.  smile Проблема в том, что argv[0] (ParamStr(0)) формируется ЗАПУСКАЮЩЕЙ программой, и она вольна положить туда что угодно  smile 
Пример:
Код

#include <windows.h>
#include <stdio.h>

int main(int argc, char** argv)
{
 if (argc==1)
  {
   STARTUPINFO si = {sizeof(STARTUPINFO)};
   PROCESS_INFORMATION pi = {0};
   CreateProcess("tst.exe","QuqQua Im Not a me",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
   return 0;
  }
 for(int i=0;i<argc;++i)
  printf("%s\n",argv[i]);
 return 0;
}
Если это запустить с параметрами, то она их печатает:
Цитата

C:\!t>tst.exe 1 2 3
C:\!t\tst.exe
1
2
3
Если же ее запустить без параметров, то она запускает себя, но вместо своего имени в 0м параметре задает QuqQua:
Цитата

C:\!t>tst.exe
QuqQua
Im
Not
a
me


Цитата

хотя
Код

ExtractFilePath(Application->ExeName)+"file.txt"

скорее всего равноценен.
Действительно равноценно:
Код

function TApplication.GetExeName: string;
begin
  Result := ParamStr(0);
end;
Тогда вместо Application->ExeName надо пользоваться этим:
Код

   char buf[MAX_PATH];
   GetModuleFileName(NULL,buf,sizeof(buf));
   ...=ExtractFilePath(buf)+"file.txt";
Это 100% гарантия

PM MAIL   Вверх
Platov
Дата 27.11.2009, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 23.7.2009

Репутация: 2
Всего: 2



 
xvr,  smile 
PM MAIL   Вверх
ratgunter
Дата 29.11.2009, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 17.11.2008

Репутация: нет
Всего: нет



Ой как много всего, спасибо. Но что-то я немножко не понял. Я хочу написать НЕ
Код

RecordTable->Rows[1]->SaveToFile("D:\\number.txt");

А вот так хочу написать, просто название папки, чтобы прога сама ее нашла и записала в нее:
Код

RecordTable->Rows[1]->SaveToFile("Sokoban");

PM MAIL   Вверх
xvr
Дата 29.11.2009, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(ratgunter @ 29.11.2009,  09:29)
Ой как много всего, спасибо. Но что-то я немножко не понял. Я хочу написать НЕ
Код

RecordTable->Rows[1]->SaveToFile("D:\\number.txt");

А вот так хочу написать, просто название папки, чтобы прога сама ее нашла и записала в нее:
Код

RecordTable->Rows[1]->SaveToFile("Sokoban");

Код

AnsiString file_name(AnsiString n)
{
  char buf[MAX_PATH];
  GetModuleFileName(NULL,buf,sizeof(buf));
  return ExtractFilePath(buf)+n;
}


...
RecordTable->Rows[1]->SaveToFile(file_name("sokoban.txt"));
...


PM MAIL   Вверх
ratgunter
Дата 29.11.2009, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 17.11.2008

Репутация: нет
Всего: нет



Ругается на 
AnsiString file_name(AnsiString n)
Пишет:
[C++ Error] Unit1.cpp(1085): E2108 Improper use of typedef 'AnsiString'
PM MAIL   Вверх
xvr
Дата 29.11.2009, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(ratgunter @ 29.11.2009,  10:15)
Ругается на 
AnsiString file_name(AnsiString n)
Пишет:
[C++ Error] Unit1.cpp(1085): E2108 Improper use of typedef 'AnsiString'

Эта часть
Код

AnsiString file_name(AnsiString n)
{
  char buf[MAX_PATH];
  GetModuleFileName(NULL,buf,sizeof(buf));
  return ExtractFilePath(buf)+n;
}

является глобальной функцией и должна быть записана ВНЕ каких либо функций (на уровне файла)

Добавлено через 3 минуты и 22 секунды
PS. Советы в конференции не надо трактовать как книгу по черной магии, которую надо вызубрить назубок, и не приведи господь ошибиться хоть в звуке  smile 
Тут дают советы, и предполагается, что спрашивающий в состоянии их понять и применить, а не тупо скопировать к себе в код куда попало  smile 
PM MAIL   Вверх
DenWPF
Дата 29.11.2009, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



прям блин в описание разделов "Тут дают советы, и предполагается, что спрашивающий в состоянии их понять и применить, а не тупо скопировать к себе в код куда попало   "
сори за флуд
PM MAIL   Вверх
ratgunter
Дата 30.11.2009, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 17.11.2008

Репутация: нет
Всего: нет



Как говорится:"Не стыдно не знать - стыдно не учиться". 
Еще один вопрос:
Так работает все правильно
Код

RecordTable->Rows[1]->SaveToFile("D:\\test.txt");

А можно ли сохранить не ряд целиком, а только один фрагмент, например
Код

RecordTable->Cells[2][1]->SaveToFile("D:\\test.txt");

PM MAIL   Вверх
xvr
Дата 30.11.2009, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(ratgunter @ 30.11.2009,  14:50)
А можно ли сохранить не ряд целиком, а только один фрагмент, например
Код

RecordTable->Cells[2][1]->SaveToFile("D:\\test.txt");

Нет. RecordTable->Cells[2][1] - это AnsiString, у него нет метода SaveToFile. Открывай файл обычным методом (fopen или ofstream), и printf (или <<) туда.

PM MAIL   Вверх
ratgunter
Дата 1.12.2009, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 17.11.2008

Репутация: нет
Всего: нет



Блин, подскажите пожалуйста без всяких насмешек:
У меня есть Label1 и у него в Caption записано число 7.
Напишите плиз подробно, как это число записать в файл, а потом как его считать и загрузить например в Label2->Caption, при этом сделав все преобразования типов. Помогите пожалуйста!!!!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1181 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.