Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись из стрингида в фаил и обратная загрузка! 
V
    Опции темы
XPyCT
Дата 26.6.2008, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добрый день! как записать со стрингрида в фаил  с использованием делемитедтекст вроде сделано!
вот результат сохранения :
Код
,mam,pap
,m200,p300


вот сам код!
Код
int f;
if ( FileExists("tabl.grd") ) f = FileOpen("tabl.grd",fmOpenWrite);

 else
 f=FileCreate("tabl.grd");
 if(f!=-1)
   {
     // Сохранить таблицу в фаиле
for (int i = 1; i < StringGrid1->RowCount; i++)
{
AnsiString st = StringGrid1->Rows[i]->DelimitedText +"\r\n";

FileWrite(f, st.c_str(), st.Length());
}
FileClose(f);
   }


как это все обратно открыть и загнать в стрингрид! пример  из учебника культина! загон фаила обратно у него ну очень сложный для меня! мне там нифига не понятно! если кто знает как по проще это выразить помогите  пожалуйста

Это сообщение отредактировал(а) XPyCT - 7.7.2008, 20:38
PM MAIL Skype   Вверх
Palladin
Дата 26.6.2008, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

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



Забей на это всеsmile
Короче из стринггрида списываешь все в Memo потом Memo1->SaveToFile("путь.txt");
Потом при надобности загружаешь Memo1->LoadFromFile("путь к сохарненному фалу.txt"); и считываеш в стринггрид по своему условию
P.S. Не бей, настроение хорошее просто smile 


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
XPyCT
Дата 26.6.2008, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Palladin @ 26.6.2008,  10:04)
Забей на это всеsmile
Короче из стринггрида списываешь все в Memo потом Memo1->SaveToFile("путь.txt");
Потом при надобности загружаешь Memo1->LoadFromFile("путь к сохарненному фалу.txt"); и считываеш в стринггрид по своему условию
P.S. Не бей, настроение хорошее просто smile

таким образом я сохраняю уже давно! но это геморный способ! в смысле потом считывания инфы! добавьте меня в асю есть пару вопросов! к стати и по поводу вашего мануала нужно подправить кое где 222-271-997

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

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



Я в асе не сижу, если что PM


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
mrbrooks
Дата 26.6.2008, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



В чем проблема то? Циклами записываешь в файл - циклами считываешь из файла. 
PM MAIL   Вверх
XPyCT
Дата 26.6.2008, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mrbrooks @ 26.6.2008,  11:11)
В чем проблема то? Циклами записываешь в файл - циклами считываешь из файла.


Код

Memo1->Clear();

int cCol, cRow;

for(cRow=1; cRow<StringGrid1->RowCount; cRow++)
for(cCol=1; cCol<StringGrid1->ColCount; cCol++)
Memo1->Lines->Add(StringGrid1->Cells[cCol][cRow]);
Memo1->Lines->SaveToFile("Files/base.txt");


И так здесь все ясно сохраняем в фаил по событию клик на кнопке


Код

int cCol, cRow,cLines=0;
Memo1->Clear();
Memo1->LoadFromFile("Files/base.txt");
for(cRow=1; cRow<StringGrid1->RowCount; cRow++)
for(cCol=1; cCol<StringGrid1->ColCount; cCol++)
{
  StringGrid1->Cells[cCol][cRow]=Memo1->Lines->Strings[cLines]
  cLines++;
}
Здесь загрузил обратно по клику на второи кнопке! 

пс: это я все давно знаю! меня  интересует как сохранить целый ряд разделенный делимитером  а потом обратно загрузить

потому как этот код сохранит все  в один столбец!  а делиметр упорядочит сохранение по строкам






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


трололомен
****


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

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



Дык я ж тебе и говорю используй вложенные циклы.

Вот пример. Наваял на спех ибо работа имхо работа.

Код

//---------------------------------------------------------------------------
__fastcall TMForm::TMForm(TComponent* Owner)
        : TForm(Owner)
{
Position = poDesktopCenter;
}
//---------------------------------------------------------------------------
void __fastcall TMForm::BtnRunClick(TObject *Sender) // здесь я заполняю сетку
{
int index = 0;
for(int i = 1; i<MStrGrid->ColCount;i++)
        for(int j = 1; j<MStrGrid->RowCount;j++)
        {
                        MStrGrid->Cells[i][j] = index;
                        index++;
        }
}
//---------------------------------------------------------------------------
void __fastcall TMForm::BtnSaveClick(TObject *Sender) //здесь я сохраняю инфу в файл и чищу сетку
{
TStringList *list = new TStringList;
String str = "";
for(int i = 1; i<MStrGrid->RowCount;i++)
{
        for(int j = 1; j<MStrGrid->ColCount;j++)
        {
        str += MStrGrid->Cells[j][i] + ":";
        MStrGrid->Cells[j][i] = "";
        }
        list->Add(str);
        str = "";
}
list->SaveToFile("res.txt");
MListBox->Items->LoadFromFile("res.txt");
delete list;
}
//---------------------------------------------------------------------------
void __fastcall TMForm::BtnLoadClick(TObject *Sender) //здесь собственно загружаю из файла в сетку
{
TStringList *list = new TStringList;
list->LoadFromFile("res.txt");
MListBox->Items->AddStrings(list);
int counter = 0;
for (int y = 1; y < list->Strings[0].Length()+1; y++)
                                if(list->Strings[0][y] == ':') counter++;
for (int i = 0; i < list->Count; i++)
                    ParsString(list->Strings[i],counter,i+1);
delete list;
}
//---------------------------------------------------------------------------
void __fastcall TMForm::ParsString(String str, int count, int pos) //функция парсинга строки
{
String tmp = "";
       for (int j = 1; j <= count; j++)
        {
                int i = str.Pos(":");
                tmp = str.SubString(1,i-1);
                str = str.Delete(1,i);
                MStrGrid->Cells[j][pos] = tmp;
        }
}
//---------------------------------------------------------------------------



Разделитель можешь оставить либо как я - двуеточие - либо пробел - либо чего хочешь. Не забудь естественно это учесть при парсинге. Так же перспективно использовать функцию StringReplace от Бормана для формирования файла с одним значением в строке - и далее ловкость рук. Чего непонятно спрашивай.
PM MAIL   Вверх
XPyCT
Дата 27.6.2008, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mrbrooks @ 26.6.2008,  13:42)
Дык я ж тебе и говорю используй вложенные циклы.

Вот пример. Наваял на спех ибо работа имхо работа.

Код

//---------------------------------------------------------------------------
__fastcall TMForm::TMForm(TComponent* Owner)
        : TForm(Owner)
{
Position = poDesktopCenter;
}
//---------------------------------------------------------------------------
void __fastcall TMForm::BtnRunClick(TObject *Sender) // здесь я заполняю сетку
{
int index = 0;
for(int i = 1; i<MStrGrid->ColCount;i++)
        for(int j = 1; j<MStrGrid->RowCount;j++)
        {
                        MStrGrid->Cells[i][j] = index;
                        index++;
        }
}
//---------------------------------------------------------------------------
void __fastcall TMForm::BtnSaveClick(TObject *Sender) //здесь я сохраняю инфу в файл и чищу сетку
{
TStringList *list = new TStringList;
String str = "";
for(int i = 1; i<MStrGrid->RowCount;i++)
{
        for(int j = 1; j<MStrGrid->ColCount;j++)
        {
        str += MStrGrid->Cells[j][i] + ":";
        MStrGrid->Cells[j][i] = "";
        }
        list->Add(str);
        str = "";
}
list->SaveToFile("res.txt");
MListBox->Items->LoadFromFile("res.txt");
delete list;
}
//---------------------------------------------------------------------------
void __fastcall TMForm::BtnLoadClick(TObject *Sender) //здесь собственно загружаю из файла в сетку
{
TStringList *list = new TStringList;
list->LoadFromFile("res.txt");
MListBox->Items->AddStrings(list);
int counter = 0;
for (int y = 1; y < list->Strings[0].Length()+1; y++)
                                if(list->Strings[0][y] == ':') counter++;
for (int i = 0; i < list->Count; i++)
                    ParsString(list->Strings[i],counter,i+1);
delete list;
}
//---------------------------------------------------------------------------
void __fastcall TMForm::ParsString(String str, int count, int pos) //функция парсинга строки
{
String tmp = "";
       for (int j = 1; j <= count; j++)
        {
                int i = str.Pos(":");
                tmp = str.SubString(1,i-1);
                str = str.Delete(1,i);
                MStrGrid->Cells[j][pos] = tmp;
        }
}
//---------------------------------------------------------------------------



Разделитель можешь оставить либо как я - двуеточие - либо пробел - либо чего хочешь. Не забудь естественно это учесть при парсинге. Так же перспективно использовать функцию StringReplace от Бормана для формирования файла с одним значением в строке - и далее ловкость рук. Чего непонятно спрашивай.

Спасибо вам за дельный ответ! сейчас буду пробовать
PM MAIL Skype   Вверх
Escort
Дата 28.6.2008, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Люди!!!! Призываю к профессиональному программированию!!!! (...вы же не дельфийсты smile))
Экономте память...
Код

void SaveGrid
{
TextFile f;
int x,y;

  assignfile(f, 'Filename');
  rewrite(f);
  writeln(f, stringgrid->colcount);
  writeln(f, stringgrid->rowcount);
  for (x = 0, x<=stringgrid->colcount - 1,x++)
    for (y = 0 , stringgrid->rowcount - 1,y++)
      writeln(F, stringgrid->cells[x][ y]);

  closefile(f);
}



Добавлено через 1 минуту и 13 секунд
Код

procedure LoadStringGrid(StringGrid: TStringGrid; const FileName: TFileName);
 var
   f:          TextFile;
   iTmp, i, k: Integer;
   strTemp:    String;
 begin
   AssignFile(f, FileName);
   Reset(f);
   with StringGrid do
   begin
    Readln(f, iTmp);
     ColCount := iTmp;
    Readln(f, iTmp);
     RowCount := iTmp;
    for i := 0 to ColCount - 1 do
       for k := 0 to RowCount - 1 do
       begin
         Readln(f, strTemp);
         Cells[i, k] := strTemp;
       end;
   end;
   CloseFile(f);
 end;


Добавлено через 2 минуты и 33 секунды
PS против Delphi ничего против не имею. Просто новички на Delphi расставив на форме 2 кнопки считают себя программистами ))
PM MAIL ICQ   Вверх
Riply
Дата 28.6.2008, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

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



Вместо задавания кучи вопросов на форуме, решила поробовать сохранить и прочитать.
Очень надеюсь, что кому-нибудь будет не лень потыкать меня носом в ошибки smile

Код

#include <vcl.h>
#pragma hdrstop

#include "Main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
        int aColCount = 8;
        int aRowCount = 64;
        if (grdTest->ColCount != aColCount) grdTest->ColCount = aColCount;
        if (grdTest->RowCount != aRowCount) grdTest->RowCount = aRowCount;
        for (int i = 0; i != aColCount; ++i)
            {
                for (int j = 0; j != aRowCount; ++j)
                    {
                            grdTest->Cells[i][j] = "C: " + IntToStr(i) + "  R: " + IntToStr(j);
                    };
            };
}

const
    LenOffset = sizeof(int);

void * PByte_MoveData(const void * pBuffer, const void * pData, const int cbData)
{
        memmove((void *)pBuffer, &cbData, LenOffset);
        if (cbData) memmove((void *)((unsigned long)pBuffer + LenOffset), pData, cbData);
        return (void *)((unsigned long)pBuffer + cbData + LenOffset);
};

void * PByte_MoveString(const void * pBuffer, const AnsiString aStr)
{
    return PByte_MoveData(pBuffer, aStr.data(), aStr.Length());
};

AnsiString PByte_ReadString(void ** ppBuffer)
{
    void * pTmp = * ppBuffer;
    int aLen = *(int *)pTmp;
    pTmp = (void *)((unsigned long)pTmp + LenOffset);
    AnsiString aStr;
    aStr.SetLength(aLen);
    if (aLen) memmove((void *)aStr.data(), pTmp, aLen);
    * ppBuffer = (void *)((unsigned long)pTmp + aLen);
    return aStr;
};

int AnsiDumpSize(const AnsiString aStr)
{
    return aStr.Length() + LenOffset;
};

void GreedToPByte(TStringGrid * Greed, void ** ppBuffer, PULONG cbBuffer)
{
        ULONG DumpSize = LenOffset + LenOffset;

        for (int i = 0; i != Greed->ColCount; ++i)
            {
                for (int j = 0; j != Greed->RowCount; ++j)
                    {
                            DumpSize += AnsiDumpSize(Greed->Cells[i][j]);
                    };
            };

        if (*cbBuffer != DumpSize)
            {
                * ppBuffer = realloc(* ppBuffer, DumpSize);
                *cbBuffer = DumpSize;
            }
        void * pTmp = * ppBuffer;

        int aCount = Greed->ColCount;
        memmove((void *)pTmp, &aCount, LenOffset);
        pTmp = (void *)((unsigned long)pTmp + LenOffset);
        aCount = Greed->RowCount;
        memmove((void *)pTmp, &aCount, LenOffset);
        pTmp = (void *)((unsigned long)pTmp + LenOffset);
        
        for (int i = 0; i != Greed->ColCount; ++i)
            {
                for (int j = 0; j != Greed->RowCount; ++j)
                    {
                        pTmp =    PByte_MoveString(pTmp, Greed->Cells[i][j]);
                    };
            };
}

void GreedFromPByte(TStringGrid * Greed, void * pBuffer, ULONG cbBuffer)
{
        void * pTmp = pBuffer;

        int aCount = *(int *)pTmp;
        pTmp = (void *)((unsigned long)pTmp + LenOffset);
        if (Greed->ColCount != aCount) Greed->ColCount = aCount;

  aCount = *(int *)pTmp;
        pTmp = (void *)((unsigned long)pTmp + LenOffset);
        if (Greed->RowCount != aCount) Greed->RowCount = aCount;

        for (int i = 0; i != Greed->ColCount; ++i)
            {
                for (int j = 0; j != Greed->RowCount; ++j)
                    {
                            Greed->Cells[i][j] = PByte_ReadString(&pTmp);
                    };
            };
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
{
    void * pBuffer = NULL;
    void * pTmp = NULL;
    ULONG  cbBuffer = 0;
    GreedToPByte(grdTest, &pBuffer, &cbBuffer);
    grdTest->ColCount = 1;
    grdTest->RowCount = 1;
    Application->ProcessMessages();
    ShowMessage("Dump Size: " + IntToStr(cbBuffer));
    pTmp = pBuffer;
    GreedFromPByte(grdTest, pTmp, cbBuffer);
    free(pBuffer);
}

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


трололомен
****


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

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



Escort че ее экономить? Тем более что она динамическая. Использовал - освободил.  Чай не гигабайты пережевываем. Если уж работать с файлом на прямую чисто на Си тогда будет более гуманно использовать FILE *file а не TextFile f - это уже есть использование Дельфятинки. Уж если трястись над использованием памяти WinAPI в руки и  вперед. Будет тебе имхо экономия.

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


Новичок



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

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



mrbrooks!("Чай не гигабайты пережевываем") из-за таких программ обычно Винда и летит на...!!!!!!!
PM MAIL ICQ   Вверх
XPyCT
Дата 28.6.2008, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Escort @ 28.6.2008,  17:59)
mrbrooks!("Чай не гигабайты пережевываем") из-за таких программ обычно Винда и летит на...!!!!!!!

молодой человек! вы первый пост читали? я не считаю себя суппер пуппер программистом - мне это и не надо! мне нужен был простои пример!  вот и все!
пс:  спасибо за ответ!
спс всем

вот такой способ есть оцените!

сохранение
Код

void __fastcall TForm1::saveClick(TObject *Sender)
{
TStringList *lst = new TStringList;
AnsiString delimiter="|";
 
lst->Add(IntToStr(SG->RowCount) + delimiter);
lst->Add(IntToStr(SG->ColCount) + delimiter);
 
for (int i=0;i<SG->RowCount;i++)
        for (int j=0;j<SG->ColCount;j++)
                lst->Add(SG->Cells[j][i] + delimiter);
lst->SaveToFile ("MyFile.txt");
delete lst;        
}


загрузка
Код


void __fastcall TForm1::loadClick(TObject *Sender)
{
TStringList *lst = new TStringList;
lst->LoadFromFile ("MyFile.txt");
 
AnsiString delimiter="|";
AnsiString buff;
 
buff=lst->Text.SubString(1,AnsiPos(delimiter,lst->Text)-1);
lst->Delete(0);
SG->RowCount=StrToInt(buff);
 
buff=lst->Text.SubString(1,AnsiPos(delimiter,lst->Text)-1);
lst->Delete(0);
SG->ColCount=StrToInt(buff);
 
for (int i=0;i<SG->RowCount;i++)
for (int j=0;j<SG->ColCount;j++)
   {
   buff="";
   buff=lst->Text.SubString(1,AnsiPos(delimiter,lst->Text)-1);
   lst->Delete(0);
 
   SG->Cells[j][i] = buff;
   }
delete lst;
}

Автор  "moskk"
что скажете?

Это сообщение отредактировал(а) XPyCT - 28.6.2008, 21:58
PM MAIL Skype   Вверх
mrbrooks
Дата 29.6.2008, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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



Escort Куда она летит. Хватит нести чушь. В эпоху C# и dot.net ты мне тут будешь лепить про нерацианальное использование памяти? Автор тебе уже написал свою точку зрения. Чего лезешь со своими оптимизациями туда куда не надо. Еще раз повторяю - хочешь быстроты и минимизации - забудь про VCL и фигач на WinAPI и не надо "ФАК МОЙ МОЗГ"

XPyCT На мой взгляд не плохо имхо для начала. Ты по сути реализовал файловый ввод/вывод с помощью компонентов, а теперь попробуй то же самое только с использованием файлового ввода/вывода с помощью потоков в стиле C++. А то некоторые особо рьяные борцы за рационализм спать спокойно не будут.
PM MAIL   Вверх
XPyCT
Дата 29.6.2008, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mrbrooks @ 29.6.2008,  10:29)
Escort Куда она летит. Хватит нести чушь. В эпоху C# и dot.net ты мне тут будешь лепить про нерацианальное использование памяти? Автор тебе уже написал свою точку зрения. Чего лезешь со своими оптимизациями туда куда не надо. Еще раз повторяю - хочешь быстроты и минимизации - забудь про VCL и фигач на WinAPI и не надо "ФАК МОЙ МОЗГ"

XPyCT На мой взгляд не плохо имхо для начала. Ты по сути реализовал файловый ввод/вывод с помощью компонентов, а теперь попробуй то же самое только с использованием файлового ввода/вывода с помощью потоков в стиле C++. А то некоторые особо рьяные борцы за рационализм спать спокойно не будут.

mrbrooks! смотри вчера весь вечер ковырял голова квадратная! я не силен еще )) помоги плз

смотрите мне нужно к примеру есть  2 поля и 3 записи
Код

------------------
| Вася  | 200  |
------------------
| Вика | 300  |
------------------
| Петр | 700  |
------------------

после сохранения чтоб в файле выгледело  так
Код

2|
3| 
 Вася  | 200  |
 Вика | 300  |
 Петр | 700  |


соответсвенно потом и загруз потом его обратно!
 просто не исключено что по фаилу до момента передачи его в стрингид нужно будет проводить поиск типа по выбору!
плз оч надо

Это сообщение отредактировал(а) XPyCT - 29.6.2008, 19:31
PM MAIL Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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