Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Обновление битмапов  (Прочитано 17968 раз)
0 Пользователей и 1 Гость смотрят эту тему.
SAndrus
Постоялец

ru
Offline Offline
Пол: Мужской

« : 07-06-2009 21:20 » 

Доброе время суток,
В VC6 вывожу в виртуальное совместимое дс битмап, в него добавляю еще битмапы, в онПаинте копирую с изменением размера в дс монитора.
Проблеми, добавленные битмапы не обновляются, окно обновляется только по ЩовВиндовс, очень мелькает при этом, планируется изменение битмапов каждые 0,2 с мелькание раздражает
Подскажите плс как сделать инвалитрект.
Спасибо
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 08-06-2009 06:36 » 

А где у тебя вызывается Invalidate?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
SAndrus
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 08-06-2009 08:29 » 

Invalidate вызваю в функции рисования в вирт. окне, после добавления туда элемента
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #3 : 08-06-2009 13:16 » 

Судя по тексту вроде всё правильно... Переходим ко второй части - показывай код этой ф-ции в окресности вызова Invalidate (добавление элемента не надо) и ещё код OnPaint желательно полностью.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
SAndrus
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 08-06-2009 13:37 » 

Эт реализовано в классе, наследнике от СВнд, в креате вызывается со Статиком, в нем все и рисуется, я весь класс перешлю

* класс отображения.rar (4.39 Кб - загружено 818 раз.)
Записан
SAndrus
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 09-06-2009 07:36 » 

Исвиняюсь за лень и много кода
Функция ОнПайнт
Код:
void CMnemWin::OnPaint() 
{
CPaintDC dc(this); // device context for painting

if(!m_bMemDC)
{
m_MemDC.CreateCompatibleDC(&dc);
InitMDC();
m_bMemDC=TRUE;
}
CRect re(0,0,m_bmWidth*m_Mascht,m_bmHeight*m_Mascht);

dc.StretchBlt(0,0,m_bmWidth*m_Mascht,m_bmHeight*m_Mascht,&m_MemDC,0,0,m_bmWidth,m_bmHeight,SRCAND);
TRACE("Прошли ОНПАИНТ\n");
}

А это вставка элемента
Код:
void CMnemWin::SetImg(CImageList *list,UINT x, UINT y, UINT nom)
{
IMAGEINFO ii;
list->GetImageInfo(nom, &ii);

int nWidth = ii.rcImage.right - ii.rcImage.left;
int nHeight = ii.rcImage.bottom - ii.rcImage.top;

InitMDC();   //Здесь мы перерисовываем фоновую картинку в вирт. окне
CRect rt(x*m_Mascht,y*m_Mascht,(x+nWidth)*m_Mascht,(y+nHeight)*m_Mascht);
list->Draw(&m_MemDC,nom,CPoint(x,y),ILD_TRANSPARENT/*ILD_MASK ILD_IMAGE ILD_NORMAL*/);
// InvalidateRect(rt);
// ::InvalidateRect((HWND)this,NULL,1); //пробовал разные обновлялки, в разных сочетаниях
// UpdateWindow();
// RedrawWindow();
ShowWindow(SW_RESTORE);     //сейчас остановился на этом варианте он работает, но мелькание всего окна
// Invalidate(TRUE);
// OnPaint();                                         //и прямой вызов ОнПайнт
}
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 09-06-2009 09:22 » 

это по любому должно быть внутри OnPaint Улыбаюсь
list->Draw(&m_MemDC,nom,CPoint(x,y),ILD_TRANSPARENT/*ILD_MASK ILD_IMAGE ILD_NORMAL*/);
Записан

SAndrus
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 09-06-2009 09:35 » 

я же это в виртуалное окно катаю, почему в ОнПайнт, непойму
Записан
SAndrus
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 09-06-2009 09:36 » 

там элементов порядка 60 в ОнПайнт наверное долго будет
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #9 : 09-06-2009 11:22 » 

Эммм интересный подход. Я ща на Висте сижу без С++. Не могу сразу сказать, что неправильно, но... сразу пару вопросиков - зачем ты хранишь MemDC? Теория подавления мерцания очень простая: 1 При необходимости (решает Винда сама или ты через Invalidate) обновить окно ему посылается WM_PAINT, в этот момент ты получешь DC и начинаешь в него рисовать. Возникает "мерцание", тк GDI так уж устроен, что обновляет всё окно после отрисовки каждого графического элемента. Чтобы этого избежать на основе полученного DC создаётся совместимый DC в памяти. Он используется вместо оригинального полученного от системы и "мерцание" происходит уже в нём, но мы этого не видим.
Когда процесс отрисовки всех элементов в этот DC закончен (практически мы получили одну BMP картинку) его содержимое копируется в оригинальный DC за один раз. Вот и всё.

Я не совсем понял, зачем ты вызываешь InitMDC() в трёх местах - и в SetImg, и в OnPaint, и в Redraw?

Ну и вызов  list->Draw(&m_MemDC .... в SetImg(CImageList *list,UINT x, UINT y, UINT nom) уж совсем ни к чему. Всегда разделяй данные и отображение этих данных. В будущем пригодится.

Попробуй переделать логику по след. схеме:

Код:
void CMnemWin::OnPaint() 
{
       CPaintDC dc(this); // device context for painting

       // cоздаём cовместимое DC

       CDC memDC = ...

       // Рисуем в memDC наш битмап
       ...

       // рисум необходимые объекты поверх битмапа - он автоматически получится в фоне
       list->Draw(&memDC, ...

       // копируем memDC в оригинал
       dc.StretchBlt(...

}

а это должно выглядеть примерно так

Код:
void CMnemWin::SetImg(CImageList *list,UINT x, UINT y, UINT nom)
{
       // если честно, то я вобще не понял, что ты хотел тут делать? Ну код понятен, но лучше это всё выбросить и просто
        //  сохранять нужный битмап в объекте для прорисовки его потом в OnPaint

        m_bmp = ... // в любой удобной для тебя форме - это ПРОСТО данные, в этом месте они ТОЛЬКО обновляются

        // после чего даётся сигнал для перерисовки

Invalidate(TRUE);

}

Если сложно или непонятно, то (если проект тестовый и/или не содержит секретной инфы) то скинь или сюда или на мыло. Просто нет времени тестовый проект создавать.
Я его переделаю и выложу. Так быстрей будет.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #10 : 09-06-2009 11:26 » 

там элементов порядка 60 в ОнПайнт наверное долго будет

Не бойся, Ага Можно хоть 60 000. В память очень быстро отрисовывается.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
SAndrus
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 09-06-2009 17:49 » 

Спасибо, понял, чет гдето читал, что в ОнПайнт засовывать токо копирование, вот и сделал так,
объяснение понятное, доходчивое все поправлю.
У меня создалось впечатление, что данные это мемДЦ, потомучто не знаю как рисовать на битмапе, поищю.
Спасибо, завтра попробую, отпишу
Записан
SAndrus
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 10-06-2009 11:39 » 

Да получилось, обновляет без мелькания, но чет не пойму, изменяет от светлого к темному, а обратно нет хотя я в ОнПаинте обновляю изображение.
ОнПаинт теперь такой:
Код:
void CMnemWin::OnPaint() 
{
CPaintDC dc(this); // device context for painting

CDC mDc;
mDc.CreateCompatibleDC(&dc);

CBitmap bm,*pOldBmp;
bm.LoadBitmap(IDB_BITMAP3);
BITMAP bmp;
  bm.GetBitmap(&bmp);
pOldBmp=mDc.SelectObject(&bm);
CRect rec;
GetClientRect(&rec);
m_Mascht =(float)rec.Width()/bmp.bmWidth;
m_bmWidth=bmp.bmWidth;m_bmHeight=bmp.bmHeight;

Redraw(&mDc);

CRect re(0,0,m_bmWidth*m_Mascht,m_bmHeight*m_Mascht);
//dc.FillRect(&re,&CBrush(RGB(255,255,255)));
dc.StretchBlt(0,0,m_bmWidth*m_Mascht,m_bmHeight*m_Mascht,&mDc,0,0,m_bmWidth,m_bmHeight,SRCAND);
TRACE("Ïðîøëè ÎÍÏÀÈÍÒ\n");

mDc.SelectObject(pOldBmp);

// Do not call CWnd::OnPaint() for painting messages

Редрав и СетИмаже не менял, только мДс передаю туда и использую.
Записан
SAndrus
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 10-06-2009 11:41 » 

если подобных ситуаций небыло и сходу помочь не получится выложу проект.
Спасибо
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #14 : 10-06-2009 13:27 » 

а точно SRCAND нужно ? Может просто SRCCOPY ?
Записан

SAndrus
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 10-06-2009 13:34 » 

я пробовал и SRCCOPY он белый фон вокруг картинки тоже переносит, как его отсеч незнаю тут маски как добавлять незнаю
Записан
SAndrus
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #16 : 10-06-2009 13:51 » 

да СРЦКОПИ обновляет как надо, но фон картинки остается белый, и еще конструкция

typedef struct
{
   UINT x;
   UINT y;
   CImageList *img;
}Elem,*pElem;
затем
m_pElem = new Elem[64];
потом происходит использование img
когда делаю delete m_pElem;
memory check error at 0x00334E50 = 0x16, should be 0xFD
The thread 0xD54 has exited with code 3 (0x3)
по 4 раза
и куча памяти не освобожденной.
Записан
SAndrus
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 10-06-2009 14:08 » 

это тестовый проект с этим контролом.
Спасибо за участие.
буду рад любым замечаниям.

* tstMnemWnd.rar (107.76 Кб - загружено 831 раз.)
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #18 : 10-06-2009 15:31 » 

1) фон надо закрашивать - контекст после создания неинициализирован. Фон стандартного окна (серый такой цвет, хотя, зависит от темы), если нужно, можно достать так:
Код:
::GetSysColor(COLOR_3DFACE)

2) если создал массив, то и удаляй массив (поставь квадратные скобки):
Код:
delete [] m_pElem;
m_pElem=0;
а также не забудь обнулить указатель - на всякий пожарный Улыбаюсь
Записан

SAndrus
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 10-06-2009 17:08 » 

Спасибо второй массив удаляется без проблем попробовал не помогает ошибки думаю дело в имажеЛист е. Фон надо закрасить на битмапе? Закрасил в мДс не помогло.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #20 : 10-06-2009 19:41 » 

Ух ты вот это да! Сколько иницализацию m_pElem набивал?

Вобще-то яркий пример того, как всё-таки не стоит кодить. И это в эру ООП. Ну ладно это эмоции.
Сразу по ходу дела. Вот это о чём говорит?

memory check error at 0x00324C28 = 0x16, should be 0xFD.
memory check error at 0x00324C29 = 0x00, should be 0xFD.
memory check error at 0x00324C2A = 0x00, should be 0xFD.
memory check error at 0x00324C2B = 0x00, should be 0xFD.

Потом, ворниги зря игнорируешь. Зачем тебе вещественные числа, если ты их всё-равно обрезаешь до целого, даже не округляешь?

А в чём сейчас проблема? У тебя же битмап имеет белый фон. Ты от него хочешь избавиться? Так сделай какой нужно сразу на картинке. А прозрачным контрол лучше не пытайся сделать - геморр ещё тот.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
SAndrus
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #21 : 11-06-2009 03:44 » 

Чет непойму, я код выкладывал не как пример идеального програмирования.
С фоном понятно, думал можно програмно сделать типа маской, в фотошопе проще.
По поводу инициализации m_pElem как это делается в эру ООП, можно пример, или в общих словах.
От ворнингов избавился, флоаты не использую, а memory check и прочее выскакивает.
И говорит это о том, что коряво делаю, а как правильно незнаю.
Надеюсь научите.
Записан
SAndrus
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #22 : 11-06-2009 17:05 » 

Использовал ООП примитивно, ошибки не выдает, очень большой массив наверно, поэтому ошибки
Огромное спасибо, помогли.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #23 : 11-06-2009 17:51 » 

я код выкладывал не как пример идеального програмирования.

Дык, ключевое слово "выкладывал" - значит для кого-то ещё, кроме себя любимого. Я понимаю, что у каждого свой стиль, но всё-таки иногда можно задуматься и над тем, что может быть придётся показать код ещё кому-то. Хороший стиль в форматировании и придерживание определённых правил позволяет легче читать код и следовательно находить проблемные места. Вот собственно говоря и всё что я имел ввиду по поводу кодирования. С++ позволяет программировать в одну строчку. Но это делает код нечитабельным со всеми вытекающими отсюда последствиями. Для врагов такое нужно делать, а вот если расчитываешь получить помощь, то...

Ошибка с памятью может быть следствием сложнючей инициаллизации массива:
Код:
	Elem Elem[] = ;
{{0,0,&m_imgListToch},{cx*366.102/shir,cy*41.5/wis,&m_imgListToch},{cx*366.102/shir,cy*48.707/wis,&m_imgListToch},
{cx*360.142/shir,cy*95.970/wis,&m_imgListToch},{cx*360.142/shir,cy*135.887/wis,&m_imgListToch}, //3 4
{cx*345.173/shir,cy*175.388/wis,&m_imgListToch},{cx*345.173/shir,cy*182.318/wis,&m_imgListToch}, //5 6
{cx*329.234/shir,cy*169.705/wis,&m_imgListToch},{cx*329.234/shir,cy*201.445/wis,&m_imgListToch}, //7 8
{cx*204.633/shir,cy*180.1/wis,&m_imgListToch},{cx*204.633/shir,cy*194.93/wis,&m_imgListToch}, //9 10
{cx*145.867/shir,cy*184.535/wis,&m_imgListToch},{cx*145.867/shir,cy*191.743/wis,&m_imgListToch}, //11 12
{cx*312.048/shir,cy*41.5/wis,&m_imgListToch},{cx*312.048/shir,cy*48.707/wis,&m_imgListToch}, //13 14
{cx*300.128/shir,cy*70.606/wis,&m_imgListToch},{cx*286.268/shir,cy*76.566/wis,&m_imgListToch}, //15 16
{cx*281.556/shir,cy*86.545/wis,&m_imgListStrN},{cx*281.556/shir,cy*94.445/wis,&m_imgListStrV}, //17 18
{cx*265.340/shir,cy*86.545/wis,&m_imgListStrN},{cx*265.14/shir,cy*94.445/wis,&m_imgListStrV}, //19 20
{cx*246.429/shir,cy*86.545/wis,&m_imgListStrN},{cx*246.629/shir,cy*94.445/wis,&m_imgListStrV}, //21 22
{cx*228.888/shir,cy*86.545/wis,&m_imgListStrN},{cx*228.688/shir,cy*94.445/wis,&m_imgListStrV}, //23 24
{cx*211.502/shir,cy*86.545/wis,&m_imgListStrN},{cx*211.702/shir,cy*94.445/wis,&m_imgListStrV}, //25 26
{cx*195.624/shir,cy*86.545/wis,&m_imgListStrN},{cx*195.624/shir,cy*94.445/wis,&m_imgListStrV}, //27 28
{cx*186.061/shir,cy*82.24/wis,&m_imgListToch},{cx*186.061/shir,cy*102.9/wis,&m_imgListToch}, //29 30
{cx*173.587/shir,cy*82.24/wis,&m_imgListToch},{cx*173.585/shir,cy*102.9/wis,&m_imgListToch}, //31 32
{cx*168.597/shir,cy*91.673/wis,&m_imgListToch},{cx*162.914/shir,cy*91.673/wis,&m_imgListToch}, //33 34
{cx*157.925/shir,cy*75.041/wis,&m_imgListToch},{cx*157.925/shir,cy*102.346/wis,&m_imgListToch}, //35 36
{cx*106.088/shir,cy*70.883/wis,&m_imgListToch},{cx*107.198/shir,cy*106.059/wis,&m_imgListToch}, //37 38
{cx*121.196/shir,cy*63.122/wis,&m_imgListToch}, //39
{cx*144.042/shir,cy*20.71/wis,&m_imgListToch},{cx*144.042/shir,cy*27.779/wis,&m_imgListToch}, //40 41
{cx*144.042/shir,cy*34.57/wis,&m_imgListToch},{cx*144.042/shir,cy*41.5/wis,&m_imgListToch}, //42 43
{cx*144.042/shir,cy*47.87/wis,&m_imgListToch}, //44
{cx*233.185/shir,cy*114.404/wis,&m_imgListToch},{cx*197.564/shir,cy*107.335/wis,&m_imgListToch}, //45 46
{cx*78.923/shir,cy*184.535/wis,&m_imgListToch},{cx*78.923/shir,cy*191.743/wis,&m_imgListToch}, //47 48
{cx*89.734/shir,cy*121.75/wis,&m_imgListToch},{cx*85.021/shir,cy*111.632/wis,&m_imgListToch}, //49 50
{cx*80.17/shir,cy*103.732/wis,&m_imgListToch},{cx*80.17/shir,cy*88.347/wis,&m_imgListToch}, //51 52
{cx*80.17/shir,cy*38.174/wis,&m_imgListToch}, //53
{cx*91.867/shir,cy*20.987/wis,&m_imgListToch},{cx*91.867/shir,cy*28.195/wis,&m_imgListToch}, //54 55
{cx*26.671/shir,cy*55.36/wis,&m_imgListToch},{cx*11.009/shir,cy*65.617/wis,&m_imgListToch}, //56 57
{cx*26.671/shir,cy*71.022/wis,&m_imgListToch},{0,0,&m_imgListToch}, //58 59
{cx*8.098/shir,cy*139.075/wis,&m_imgListToch},{cx*8.098/shir,cy*145.034/wis,&m_imgListToch}, //60 61
{cx*8.098/shir,cy*150.994/wis,&m_imgListToch},{cx*8.098/shir,cy*157.093/wis,&m_imgListToch}, //62 63
{cx*8.098/shir,cy*163.091/wis,&m_imgListToch} //64
};

memcpy(m_pElem,&Elem,sizeof(Elem));


Если его отключить, то ошибка пропадает. Я бы тоже его так не инициаллизировал. У тебя куча данных, значит надо засунуть их в удобоваримом виде в ресурсы или файл и сделать нормальную инициаллизацию объектов. А если они вдруг поменяются? Менять код? Перекомпилирвать? И вобще hard coded data не есть гут.
Данные отдельно, обработка данных отдельно.

Вобще-то говоря, совсем чисто было бы создать некий объект-рисовальщик, или несколько таких объектов для отрисовки каждых объектов. Эти объекты получают данные и DC и знают, что с ними делать, как отрисовывать. Больше это не должен знать никто. Таким образом в ф-ции OnPaint() происходило бы только создание этих объектов и вызов их ф-ций, может быть даже статических.

Это всё необходимо для разбивки сложного кода на небольшие самостоятельные модули. Сначала конечено это кажется ненужной тратой времени, но с лихвой окупается в больших проектах когда надо найти ошибку или изменить логику. Ведь тогда нужно будет за-/из-менить только необходимый модуль или его ф-ю. Когда же всё со всем жёстко связано, то любая мельчайшая поправочка приводит к переделке всего кода. Просто представь, что тебе придётся делать, если надо будет добавить в структуру Elem ещё одно поле.

Пока всё. ИМХО это самые трудные моменты. А так вобще-то респект. Я как очень ленивый человек всегда преклоняюсь перед людьми набивающими столько кода почти без ошибок (в принципе прожка работает, чёт там моргает), поэтому я как глянул инициализацию массива... Офигел. Такое просто набрать-то сложно. А ещё с правильными данными...
« Последнее редактирование: 11-06-2009 17:54 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
SAndrus
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #24 : 11-06-2009 19:55 » 

Даа, наверное поэтому получается долго, обидно понимать, что учиться приходится на своих ошибках, но че делать подругому не получается. К блочному программированию иду, плохо не так быстро как хотелось бы.
Спасибо, прогу поправил, ошибки не выскакивают,  до идеального далеко, будет прецендент, буду поправлять
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #25 : 11-06-2009 20:58 » 

SAndrus, все на ошибках учатся. Думаю, что с каждым такое бывает, когда спустя годы видишь свой старый код и думаешь, что за дебил это написал. В начале учения это чаще бывает — пока не наступит некоторая стабильность в стиле. А идеального ничего нет.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #26 : 11-06-2009 21:40 » 

SAndrus, не расстраивайся. Программистами не рождаются. Всё у тебя получится, было бы желание.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines