Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Клуб профессиональных программистов :: Выпуск #120


Клуб профессиональных программистов «Весельчак У»
Информационная рассылка сайта и форума.  Выпуск 120.  1 октября 2011 г.

Здравствуйте, уважаемые читатели!

Сегодня предлагаем вам подборку свежих тем нашего форума.




Пополнение «Книжной полки разработчика систем со встроенными микропроцессорами». Следующие книги и статьи рекомендуются к прочтению:





Приятного чтения!




  • Программирование :: Неотложка
  • Возникли трудности с рабором работы мыши.
    Конкретно по делу:
    Код:
    #include<conio.h>
    #include<stdio.h>
    int main()
    {   int X,Y;
    int i=0;
    unsigned char mask=1;
    unsigned char SCAN;
    int BUT;
    int IS_ON;
    clrscr();
    asm {
         mov AX,3;
         int 0x33;
         mov X,CX;
         mov Y,DX;
         mov BUT,BX;
         mov AX,0;
         int 0x33;
         mov IS_ON,AX;
         }
    printf ("%d,%d.\n",X,Y);

    if (IS_ON==0x0FFFF)
    printf ("Mouse Is On\n");
    else
    if (IS_ON==0x0000)
    printf ("Mouse Is Off\n");

    for(i=0;i<3;i++) {
    if (mask & BUT)
    {
      if (i==0)
      printf ("Left Mouse Button\n");
      if (i==1)
      printf ("Right Mouse Button\n");
      if (i==2)
      printf ("Middle Mouse Button\n");
    }
    mask=mask<<1;
    }

    asm { mov AH,0;
          int 0x16;
          mov SCAN,AH;
          }
    if (SCAN==16)
    asm { mov AX,2;
          int 0x33;
          }
    getch();
    return 0;
    }

    1)Вывод на экран координат X,Y
    Код:
    mov AX,3;
          int 0x33;
          mov X,CX;
          mov Y,DX;
          printf ("%d,%d.\n",X,Y);
    Результат - координаты выводит.Но только почему-то они не всегда обновляются.Могу получить координаты,выйти из программы,переместить курсор мыши,снова запустить программу,но координаты останутся те же.А иногда меняются на другие.Не понятна причина.

    2)Инициализация мыши IS_ON
    Код:
    mov AX,0;
          int 0x33;
          mov IS_ON,AX;
          if (IS_ON==0x0FFFF)
          printf ("Mouse Is On\n");
          else
          if (IS_ON==0x0000)
          printf ("Mouse Is Off\n");
    Результат - работает корректно.Вроде бы.По крайней мере при подключенной к компьютеру мышке выдает Mouse Is On

    3)Проверка на нажатие кнопки мыши BUT
    Код:
    mov BUT,BX;
          for(i=0;i<3;i++) {
          if (mask & BUT)
          {
          if (i==0)
          printf ("Left Mouse Button\n");
          if (i==1)
          printf ("Right Mouse Button\n");
          if (i==2)
          printf ("Middle Mouse Button\n");
          }
          mask=mask<<1;
          }
    Результат - программа запущена,нажимаю кнопку мыши(правую/левую),сообщение не появлется.Подозреваю,что нужно,чтоб кнопка была нажата во время запуска программы,но с зажатой кнопкой мыши CTRL+F9 упорно не хочет запускать программу.Вопрос.Как сделать так,чтоб программа ожидала нажатия кнопки мыши,а затем выводила соответствующее сообщение о нажатой клавише?

    4)Ну и последнее - при нажатии клавиши скрыть курсор мыши
    Код:
    asm { mov AH,0;
          int 0x16;
          mov SCAN,AH;
          }
          if (SCAN==16)
          asm { mov AX,2;
          int 0x33;
          }
    Нажимаю q после запуска программы - ничего не происходит,а по-идее должен пропадать курсор.Что не так?
    Кто может и захочет - хоть по какому-то вопросу дайте пояснения.Благодарю.
  • Программирование :: Общий
  • Нужно разработать генератор текста на ЕЯ.
    Входные данные - пары параметр-значение, на выходе - небольшое заключение, не более 5 предложений.
    Предметная область вполне конкретная.

    Пока остановился на ознакомлении с литературой. Начал с основ компьютерной лингвистики - фреймы, семантические сети.. Потом - глубже. На лингвистических моделях весь мой энтузиазм куда-то улетучился.
    Посему решил обратиться за советом. Кто-нибудь решал подобные задачи?

    Upd. Судя по всему, повторяемость текста очень высокая. Если за неделю просветление не снизойдёт, придётся ограничиться шаблонами.
  • Программирование :: .NET технология от и до
  • Распараллелил функцию в главном потоке (средствами Rx Framework, но это значения не имеет, пробовал и через BeginInvoke()):
    Цитата
    public void Start()
            {
                //...
                var startSession = Observable.ToAsync<string, string>(this.StartSession);
                startSession(credentionals.Login, credentionals.Password);
                //...
            }

    Она вызывает асинхронно долгоиграющий метод, который в конце должен кинуть эвент всем, кто его слушает:
    Цитата
    private void StartSession(string login, string password)
            {
                //...
                this.OnStarted(EventArgs.Empty);
            }

    Встал вопрос - как сделать так, чтоб метод this.OnStarted() вызывался в главном потоке? Не могу понять, возможно ли это вообще.
    Знаю, что обратная сторона Fork'а - Join, но при его помощи не выходит "слить" потоки обратно.

    Из многопоточности пока только освоил разделение, lock'и и ManualResetEvent's  :)

    PS: дело в том, что подписчики на событие Started - в основном GUI-компоненты, и они вредничают, если менять их не из главного потока. Переделывать UI на безопасные BeginInvoke() - много мороки, много кода уже написано.
    Еще раз пересмотрел все темы про потоки - ничего подобного там нет... Я так понял, это связано больше с параллелизмом, но ведь даже за всеми фреймворками по паралеллизму стоят рядовые инструменты, значит это можно сделать стандартными средствами.


  • Такой код:
    Код:
    [AttributeUsage(AttributeTargets.ReturnValue, Inherited = true)]
    public class MyAttrAttribute : Attribute
    {
            public string S { get; set; }
            public MyAttrAttribute(string s)
            {
                S = s;
            }
    }

    Код:
    public class A
    {
            [return: MyAttr("abc")]
            public virtual void Foo(int a)  { }
    }

    public class B : A
    {
            public override void Foo(int a) { }
    }

    Теперь, если пишем
    Код:
    Type t = typeof(B);
    MethodInfo mi = t.GetMethod("Foo");
    ParameterInfo pi = mi.ReturnParameter;         
    MyAttrAttribute atr = (MyAttrAttribute)Attribute.GetCustomAttribute(pi, typeof(MyAttrAttribute));
    if (atr != null)
    {
            Console.WriteLine(atr.S);
    }

    Attribute.GetCustomAttribute выбрасывает исключение IndexOutOfRange!
    Если явно пометить атрибутом возвращаемое значение переопределённого метода (хотя в этом нет смысла - атрибут наследуемый)  - ничего не меняется. Ну а для класса A всё как и должно быть. И с параметрами методов. Т.е. не получается проверить на применение атрибутов возвращаемые значения только в переопределённых методах.
  • Программирование :: С/С++
  • Имеется код.
    Код: (cpp)
    #include <stdio>
    #include <iostream.h>
    #include <wtypes.h>
    #include <winsmcrd.h>
    #include <winscard.h>
    #include <ok.h>
    #include <scardcl.h>

    using namespace std;
    int main(int argc, char* argv[])
    {

    cout << "Start work\n";
    cin >> Z;
    LPSCARDCONTEXT hContext;
    SCARDCONTEXT    hSC;
    LONG            lReturn;

    [b]lReturn = SCardEstablishContext(SCARD_SCOPE_USER,
    NULL,
    NULL,
       &hSC);[/b]
    cout << "hSC =   " << hSC << "\n";
    cout << "lReturn =   " << lReturn << "\n";
    cin >> Z;
    if ( SCARD_S_SUCCESS != lReturn )
       {
       cout << "Failed SCardEstablishContext\n";
    cin >> Z;
    }
    else
    {
    LPTSTR          pmszReaders = NULL;
    LPTSTR          pReader;
    cout << "pmszReaders =    " << &pmszReaders << "\n";
    cout << "pReader =    " << &pReader << "\n";

    DWORD           cch = SCARD_AUTOALLOCATE;
    cin >> Z;


    lReturn = SCardListReaders(hSC,
       NULL,
       (LPTSTR)&pmszReaders,
       &cch );
    cout << "pmszReaders =    " << &pmszReaders << "\n";
    cout << "cch =    " << &cch << "\n";
    cin >> Z;

    }
    return 0;
    }
    Выделенная функция почему-то упрямо возвращает ноль, хотя в справке такой вариант не предусмотрен (сама функция просто скопированна из соотв раздела в help-е), и похоже вообще не работает.
    Подскажите пожалуста, с чем это может быть связано? Что я пропустил/сделал не так?
  • char b = 0xC0 - почему это -64,а не 192?
  • Добрый день.
    Для отладочных целей надо узнать адрес вызывающей функции (адрес возврата) для некой функции в GCC. По идее, этот адрес лежит в стеке, как и локальные переменные. Есть ли какой-то способ у компилятора это узнать?

    Добавлено:
    Вопрос закрыт.
    __builtin_return_address
    http://gcc.gnu.org/onlinedocs/gcc/Return-Address.html
  • Ткнулся я в это дело... Пока отложил... Для начала поштудирую литературу. Я потом еще обращусь, хорошо?

    Еще такой простейший вопрос. Я пишу здоровенную DLL-ку измерений разных УЗ-параметров. Чтобы она не принимала совсем уж непотребных размеров, я все измерения оформляю в виде отдельных LIB-проектов (Configuration Type: Static Library (.lib)), присоединяемых к основной DLL-ке на этапе ее линковки.

    Черт, столкнулся с проблемой, что если имя функции в одной LIB-е совпадает с именем функции в другой - линкер связывает с первой встретившейся одноименной функцией. Как бы сделать так, чтобы все функции данной LIB-ы были как бы static на уровне данной конкретной LIB-ы и не цеплялись бы в другой LIB-е? Это возможно? Или заводить геморрой с дописыванием уникального префикса к каждой функции LIB-ы? (Делать их static неудобно, т.к. локальные функции LIB-ы должны быть видны в нескольких других ее файлах.)
  • И так есть несколько десятков строк. Сортирую их с помощью оператора "<" или ">". Все очень просто, но сортируются они в порядке "ABCDEFGabcdefg". То есть любая заглавная буква, по умолчанию, старше, чем любая строчная, а мне нужно "AaBbCcDdEeFfGg". При использовании CString строки сортируются именно так, как мне нужно. Как выйти из сложившейся ситуации?

    Добавлено через 1 час, 7 минут и 38 секунд:
    Всем спасибо, вопрос закрыт. Открыл для себя превосходную вещь под названием _wcsicmp.

    Было вот так:
    Код: (cpp)
    return SortAscending ? first.fName < second.fName : first.fName > second.fName;

    Сделал вот так:
    Код: (cpp)
    int res = _wcsicmp(first.fName.c_str(), second.fName.c_str());
    return SortAscending ? res < 0 : res > 0;
  • Программирование :: С/С++ :: WinAPI & Visual C++
  • забавная проблема напала: получается, что функция FindNextFile нереентерабельна, из-за чего рекурсивный поиск содержимого папки происходит неверно

    (слева - моё дерево, справа - проводниковое)
    содержимое папки C:\1111111111\2\3\  показано верно (она первая была просмотрена) , а вот папка C:\1111111111\3  показывает то же самое, что в предыдущей, хотя там совсем не то

    (http://forum.shelek.ru/index.php?action=dlattach;attach=6186;image)

    И как же этот рекурсивный поиск сделать, неужели вытаскивать содержимое по одной папке, затем по этим файлам пробегаться снова и заходить в каждую папку ?
  • Доброго времени всем! Прошу помощи, есть кнопочка Fill к которой прикручен стандартный диалог выбора папок, проблема в том, что при многократном нажатии на нее открывается множество таких диалогов.  Как мне запретить вызов более одного экземпляра диалога?

    Код: (cpp)
    LRESULT CMainDlg::OnFill(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
    {
    TCHAR szPath[MAX_PATH];
    LPMALLOC pMalloc;
    if (::SHGetMalloc(&pMalloc) == NOERROR)
    {
    BROWSEINFO bi;
    ::ZeroMemory(&bi,sizeof bi);
    bi.ulFlags = BIF_RETURNONLYFSDIRS;
    LPITEMIDLIST pidl = ::SHBrowseForFolder(&bi);
    if (pidl != NULL)
    {
    if (::SHGetPathFromIDList(pidl, szPath))
    {
    if (szPath)// если нажато ОК то выполнить следующие действия
    {

    if (fScanner_->my_thread_)
    {
    fScanner_->StopThread ();
    }
    fScanner_->StartThread (szPath);
    }
    }
    }
    }
    return 0;
    }

  • Программирование :: С/С++ :: Borland C/C++
  • Код: (cpp,1,5,27)
    void __fastcall TForm1::diski()
    {  //получаем название диска

    char DiskLabel[MAX_PATH];
    char *DiskName1 = (ComboBox1->Items->Strings[ComboBox1->ItemIndex]).c_str();//+"\\"
    WORD OldErrorMode;
    Label4->Caption = (ComboBox1->Items->Strings[ComboBox1->ItemIndex]).c_str();
    OldErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS); // убираем показ ошибок
    bool ready = DirectoryExists(DiskName1); // пытаемcя открыть корневую директорию
    SetErrorMode(OldErrorMode); // восстанавливаем старый режим показа ошибок

     if (ready)
     {
              GetVolumeInformation(DiskName1, DiskLabel, MAX_PATH, NULL, NULL, NULL, NULL, 0);
              

              Edit1->Text =  DiskLabel;//здесь название диска
              Button2->Enabled = true;
              Timer1->Enabled = false;
              }
              else
              {
              Edit1->Text = "не готов";
              Button2->Enabled = false;
              Timer1->Enabled = true;
              }
     delete [] DiskName1;
    }
    этот код работает нестабильно, невсегда показывает название диска, часто показывает его неправильно.
    вызываю функцию:
    Код:
    void __fastcall TForm1::ComboBox1Change(TObject *Sender)
    {
    diski();
    }
  • Программирование :: Delphi
  • Помогите пожалуйста!!!!
    У меня в Access создана таблица "Контакты". Через компонент ADOTable в Object Inspektor на вкладке Properties в строке ConnectionString прописан путь к документу Access. На моем компьютере проект на Delphi открывается и база данных работает хорошо, но дело в том, что на другом компьютере при открытии проекта выдает ошибку.что якобы БД находится на рабочем столе моего компьютера В итоге база не считывается оболочку.

    Подскажите пожалуйста как можно сделать так, чтобы интерфейс программы предусматривал возможность изменить путь до  базы данных. Допустим, если прогрмма при запуске не находит БД по пути, заданному по умолчанию, тогда пользователю дается возможность вручную указать путь до БД на компьютере и считать файл заново.

  • Помогите пожалуйста!!!!
    Как мне сохранить свою программу, чтобы она открывалась на других компьютерах без установки Delphi.
    У меня Delphi 7.
  • У меня в Delphi XE такие вещи:
    (http://forum.shelek.ru/index.php?action=dlattach;attach=6171;image)
    Загружал в комбобокс из базы.
    Если сделать в cmd-консоли SELECT-выборку, то отобразится кириллица нормально.
    В SQL-Front - каракули.
     
    my.ini
    [mysql]
    default-character-set=cp1251


    Что предпринять браза?

    MySQL 5.5, SQL-Front 5.1
  • Программирование :: VisualBasic :: Visual Basic for Applications
  • Добрый день.
    Проблема такая - в рабочем листе заполняются поля, оттуда берутся данные, различным образом обрабатываются, например:
       А                 В                      С                   D
    21.сен   суммесли…   суммесли…   впр(…
    22.сен   суммесли…   суммесли…   впр(…
    23.сен   суммесли…   суммесли…   впр(…
    24.сен   суммесли…   суммесли…   впр(…


    нужно сделать так, чтобы при появлении данных в очередной строке (например, данные за 21.сен заполнены, начинается заполнение за 22.сен, т.е. в этой строке в столбцах В, С, D и т.д. появляются ненулевые значения) данные за "прошедший" период сохранялись как значение.
    Можно конечно прописать макрос, запускаемый по условию для каждой ячейки, но это очень громоздко (много строк и столбцов), да и при добавлении новых столбцов нужно писать новый.
    Заранее спасибо за помощь.

    Добавлено через 11 минут и 29 секунд:
    извиняюсь, как-то насвязанными получилась тема и само сообщение - сначала думал о том, чтобы условие активировалось через обычное ЕСЛИ, которое запускало бы функцию, передающую адрес нужной ячейки в макрос
  • Программирование :: Программирование 1С
  • Добрый день вопрос вот в чем есть отчет оборот счета нужно чтоб при выводе документа списания в скобках было прописано счет фактура номер и от такого числа при поступлении накладная номер и от такого числа
  • Программирование :: Программирование 1С :: 1С 7.x
  • При открытии формы списка дерево "Сжато". Хотелось бы развернуть хотя бы 1й уровень.
    Не спрашивайте зачем мне это надо, просто подскажите возможное решение. Заранее спасибо.
  • Программирование :: Программирование 1С :: 1С 8.x
  • Добрый день. Кто нибудь дайте плиз справку по работе с деревом значений и галкой выбора.
    Нарисовал такую таблицу
    Код:
    Group1
    |
    -Element1
       |
        -PodElement1

    Как реализовать код чтобы при выборе группы1 вибирался и элемент1 и подэлемент 1 и соответсвенно
    выбирая элемент выделялся подэлемент. Уже несколько дней с этим мучаюсь...
  • Добрый вечер. подскажите плиз с такой вещью. как после загрузки текста в полеhtmlдокумента прокрутить документ до самого низу автоматически. Спасибо
  • Здравствуйте!
    Есть 2 базы 1с 7.7 бухгалтерии (центральная и периферийная). Конфигурация на столько изменена, что от стандартной бухгалтерии ничего не осталось. Как можно реализовать переход на 1с 8.2 (бухгалтерию), чтоб сделать такую же конфигурацию по максимуму как в 7.7 , перенести данные, надо еще, чтоб базы работали через веб-интерфейс?
    1. Думала, может конвертором ИБ предприятия 7.7 воспользоваться, но конфигурация создается криво + код 7ки просто закомменченный + перенеслись только справочники - все это исправить очень долго, да и практически не реально привести в нормальный вид.
    2. Конфигурацию дорабатывать своими силами, писать обработку для переноса данных.
    Подскажите пожалуйста!!! Может еще есть варианты? :dontknow:
  • Операционные системы :: Встраиваемые системы
  • Привет!

    Сегодня узнал, что для симпатичной линейки плат BeagleBoard наконец-то появились BSP для Windows CE и Windows Compact 7. К примеру, от MPC, Adeneo, отдельно взятый коллега предлагает "The source is for sale for half the price of what the "others" charge". Т.е. дело пошло.

    Про BeagleBoard я узнал давно, вскоре после ее появления. Но была проблема: открытое сообщество признает исключительно Линукс. А я в Линуксе - ни в зуб ногой! :-) Поэтому сначала меня заинтересовала плата Mini8100 и мы даже купили SBC8100 для освоения и экспериментов. Однако, опыт показал, что наши друзья-китайцы не очень-то глубоко проникают в проблемы... В частности, мне весьма важен вопрос 3D графики (нынешняя наша система работает с DirectX под WinXP). Поддержка DirectX в Windows CE, типа, декларируется. Но я столкнулся с неразрешимыми проблемами.

    Поэтому, прозондировав этот вопрос, я сосредоточился на реализации OpenGL ES в системе Windows CE. Увы, Embest Info&Tech Co. не помогла мне в этом вопросе. Запустить PowerVR на их плате мне не удалось. Я уже было приуныл, а тут такая хорошая новость! Причем, декларируется поддержка OpenGL ES 1.0/2.0 уже сразу, без всяких неуклюжих попыток с моей стороны. Это меня в наилучшей степени устраивает. Особенно если обратить внимание, что BeagleBoard уже содержит приличную функциональность на борту, в отличие от того же Mini8100, которому пришлось бы еще городить собственную несущую плату (а это - бабки, и немалые, сопоставимые со стоимостью самого модуля).

    Товарищи! Давайте обсудим этот животрепещущий вопрос! Кто уже поимел опыт работы с этим железом под Windows Embedded? Поделитесь, пожалуйста, впечатлениями, отзывами, мнениями!

  • Направления программирования :: Drivers
  • Решаю всю ту же проблему, что была обозначена в конце темы http://forum.shelek.ru/index.php/topic,24622.0.html. А именно, мой USB-девайс при работе с драйвером, созданным в DS 3.2 пропускает данные на медленных машинах (PIV) и не пропускает данные на машине Core 2 Duo, при условии, если не запущены приложения, требующие значительных ресурсов (Opera). Отсюда сделал вывод, что пропуски могут проходить на уровне драйвера. Девайс работает следующим образом: подготовив данные для передачи по USB (заполнив FIFO UDP-модуля контроллера, отвечающего за работу с USB), ставит флаг готовности для передачи пакета данных размером 60 байт по USB. Далее ожидает, пока придет запрос от Хоста и уже после этого начинает передачу данных. Запросы формирует драйвер, который в свою очередь принимает их от приложения. Если я правильно понял, то в медленных или загруженных другими приложениями эти запросы могут задерживаться и в случае маленького буфера для запросов - теряться. Таким образом, какой смысл делать большой буфер для принимаемых драйвером от девайса данных, если при этом запросы на считывание этих данных приложением будут поступать с той же  частотой или реже?
    Что вы посоветуете для решения подобной проблемы?
    Заранее благодарен!
  • Есть задача - запретить редактирование и удаление файлов на сетевых ресурсах с конкретной машины, т.е. чтобы нельзя было ничего испортить на расшаренных ресурсах.
    Хотел было поставить файловый фильтр, но он перехватывает открытие файлов только с примонтированных устройств.
    Думаю можно перехватить открытие файлов на запись через SSDT, но это крайний случай.
    Может у кого-нибудь будут предложения чем можно воспользоваться?
  • Направления программирования :: Web
  • Интересует, это красивая (валидная) верстка или можно что-то переделать..
    Верстка приведена не полностью..

    HTML:
    Код:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
    <head>
    <meta http-equiv="Content-Script-Type" content="text/javascript" />
    <meta http-equiv="Content-Style-Type" content="text/css" />
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

    <meta name="keywords" content="" />
    <meta name="description" content="" />
    <title>Заголовок</title>

    <link rel="stylesheet" href="css/style.css" type="text/css" />
    </head>
    <body>
    <!-- START WRAP -->
    <div id="wrap">
    <!-- START HEADER BLOCK -->
    <div id="header">
    <div id="header_text">
    <div id="header_title">
    Пластиковые окна и двери
    </div>
    <div id = "bottom_text">
    Ваш квалифицированный партнер по проектированию, изготовлению, монтажу пластиковых конструкций
    </div>
    </div>
    <div id = "header_logo">
    <img src = "./images/logo.png">
    </div>
    <div id="phone">
    <div id="phone_code"><b>1111</b></div>
    <div id = "phone_num">111-111</div>
    </div>
    </div>
    <!-- END HEADER BLOCK -->

    <!-- START TOP_MENU BLOCK -->
    <div id="top_menu">
    <div id="top_links" align = "center">
    <a href = "">Пластиковые окна и двери</a>
    <a href = "">Акции</a>
    <a href = "">Услуги и сервис</a>
    <a href = "">Контакты</a>
    <a href = "">Вызов замерщика</a>
    <a href = "">Для партнеров</a>
    </div>
    <div style=""float:" left;">
    <img src = "./images/window.png" style=""padding-top:" 16px; padding-left: 74px;">
    </div>
    <div style=""float:" left; color: #fff; font-size: 2em; padding-top: 45px;">
    Работаем в России<br> по Европейским стандартам
    </div>
    </div>
    <!-- END TOP_MENU BLOCK -->
    </div>
    <!-- END WRAP -->
    </body>
    </html>

    CSS:
    body {
    font-family: Tahoma, Helvetica, sans-serif;
    margin: 0px;
    min-width: 1024px;
    }
    #top_links a
    {
    font-family: "Tahoma";
    color: #28aa37;
    font-size: 1.05em;
    padding-left: 24px;
    }
    #top_links
    {
    padding-top: 25px;
    }
    #header_logo{
    padding-left: 125px;
    padding-top: 9px;
    float: left;
    }
    #header {

    width: 100%;

    height: 120px;
    }
    #phone{
    padding-top: 28px;
    padding-right: 105px;
    float: right;
    font-family: Tahoma;
    }
    #header_title{
    text-shadow: 0px 0px 20px #fff;
    font-size: 1.1em;
    }
    #bottom_text{
    text-shadow: 0px 0px 4px #fff;
    padding-top: 10px;
    font-size: 0.776em;
    }
    #header_text{
    color: #424548;
    padding-left: 88px;
    padding-top: 24px;
    width: 25%;
    float: left;
    }
    #phone_code{
    color: #53BB5F;
    font-size: 0.9em;
    font-family: sans-serif;
    float: left;
    }
    #phone_num{
    color: #424545;
    float: left;
    font-size: 2.3em;
    padding-left: 8px;
    }
    #top_menu{
    width: 100%;
    height: 294px;
    background: url('../images/back_green.png');
    }

А теперь прощаемся с Вами до следующего выпуска.


С уважением, команда Клуба.


В избранное