PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка


Вопросы новичка

Сообщений 961 страница 990 из 1000

961

Пётр написал(а):

Судя по провалам на первом (верхнем) графике, есть несколько селективных помех, наверное по близости имеются пара средневолновых передатчиков, работающих на частотах примерно 575, 640 и 654 КГц (это самые мощные, которые сводят на нет возможности использования этих каналов) и не нескольких других.Но в целом, линия нормальная, думаю до 4мб/с можно из неё выжать.

У меня верхний предел 1024/768 Kbit/c (зато за 100 руб/мес.) так что до 4000 есть куда расти :о)   Канал вроде даёт обещанную скорость, почти достигает предела, хотя порой чуть не дотягивает…А эти средневолновые передатчики близь модема моего стоят  или где-то на самой линии? В комнате с тестером все облазил ничего не фонит… Есть возможность доступными методами как-то повлиять на качество, или все эти помехи уже в районе провайдера?

Получается чем выше значение графика тем лучше показатели линии… В начале думал наоборот, думал это и есть уровень помех… :blush:

А что из устройств могут давать такие помехи? Среди чего искать? “работающих на частотах примерно 575, 640 и 654 КГц” :question:

Отредактировано Lucagin (16.12.2010 00:14:56)

0

962

Lucagin написал(а):

У меня верхний предел 1024/768 Kbit/c (зато за 100 руб/мес.)

Блин, у меня скорость (исходящая) меньше, а стоит в 5 раз больше! :'(

Lucagin написал(а):

А эти средневолновые передатчики близь модема моего стоят  или где-то на самой линии?

Где-то в округе.
Судя по их действию на линию, расстояние до них не больше 20 километров, но это еще от их мощности зависит.
Но не стоит беспокоится по этому поводу, ADSL живущий как кошка и его сложно полностью заблокировать радио-помехами.
Модемы сами тестируют линию и не используют полосы частот на которых есть помехи, т. е. модем адаптируются к текущему состоянию линии. :)

0

963

Пётр написал(а):

Блин, у меня скорость (исходящая) меньше, а стоит в 5 раз больше!

так в чем проблема... http://mgts.ru/home/internet/tariffs/

0

964

Lucagin написал(а):

Получается чем выше значение графика тем лучше показатели линии

Да, это соотношение сигнал/шум.
График показывает насколько полезный сигнал сильнее вредного, шумового.

Lucagin написал(а):

А что из устройств могут давать такие помехи? Среди чего искать? “работающих на частотах примерно 575, 640 и 654 КГц”

Включить радиоприёмник, позволяющий случать средневолновые радиостанции и попробовать настроится на частоты, которые видны на графике в виде провалов.
Если на этих частотах будут радиостанции, значит это виноваты средневолновые передатчики.

Lucagin написал(а):

так в чем проблема

Проблема в том, что я не могу подключится к этому провайдеру.
У нас тут только один провайдер, который делает все что хочет.

0

965

Пётр написал(а):

Судя по их действию на линию, расстояние до них не больше 20 километров, но это еще от их мощности зависит.

А в комнате такие источники помех могут быть? это объекты какого рода?

Вобщем крутая прога, буду звонить провайдеру и сказажу, что провалы мол, что у них там помехи на частотах 575, 640 и 654 КГц и  мне качать  мешают, и чтобы мол устранили... Тетки на том конце сума сойдут…   :canthearyou: :cool:

Отредактировано Lucagin (16.12.2010 00:28:18)

0

966

Слушай Петь, а не знаешь, как можно мак адрес АДСЛ-модема поменять на другой или на  мак адрес своей сетевух. Встроенными средствами похоже он не меняется …? Пробовал ставить новую прошивку, но  такой функции там по прежнему нет.  Я вот не знаю, если у нас динамический Ip-адрес, провайдер как-то сможет доказать, что скаченный файл был скачен именно тобой. Кроме мас-адреса у него есть средства фиксирующие что скачка шла именно тобой? Как вообще у них  эта кухня работает, просто с нашим законодательством, когда за скачку песни могут дать  до 5 лет, хорошо бы как-то продумать систему максимизации  инкогнито в этом процессе??

Отредактировано Lucagin (16.12.2010 00:39:43)

0

967

Ты им еще скрины пошли.
Если там спецы грамотные, они поймут что означают эти графики.

Lucagin написал(а):

А в комнате такие источники помех могут быть? это объекты какого рода?

Вряд ли.
Судя по частотам это передатчики, которые используются на радиостанциях.
По близости есть радиостанции?

0

968

Пётр написал(а):

По близости есть радиостанции?

Сложный вопрос, я вроде каких-либо ретрансляторов по близости не видел...Может правда провайдеру график послать… Хотя выше заявленной скорости все равно не будет… Но может пообщаюсь с ними всетаки…  :D

0

969

Lucagin написал(а):

а не знаешь, как можно мак адрес АДСЛ-модема поменять на другой или на  мак адрес своей сетевух

Многое зависит от модема.
С ZXDSL831a я не имел дела, но думаю что с помощью Tenlet можно поменять мак.
Спроси об этом на форуме тех. поддержки данного модема. Там должны знать.

Lucagin написал(а):

если у нас динамический Ip-адрес, провайдер как-то сможет доказать, что скаченный файл был скачен именно тобой.

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

0

970

Пётр написал(а):

Спроси об этом на форуме тех. поддержки данного модема. Там должны знать.

У них сайт какой-то мутный, чуть ли не китайский... Вот описание модема: http://www.stream-support.ru/modems/mod … zxdsl831a2
Облазил все возможные темы, по поводу смены мак-адреса на  модемах схожих с моим, ни слова… эта область как-то всех мало заботит…  Ладно начнут прижимать  будем думать… :о)))

Отредактировано Lucagin (16.12.2010 00:54:51)

0

971

Можно использовать анонимные прокси серверы.

0

972

Пётр написал(а):

Что касается GIF, то с помощью этой процедуры можно его загрузить:

Код:
Procedure LoadGIF_Mem(*GIF, GIF_Size, Image)
Protected ImageID=0
  HGLOBAL    = GlobalAlloc_(#GMEM_MOVEABLE, GIF_Size)
  If HGLOBAL 
  pvData = GlobalLock_(HGLOBAL)
  CopyMemory(*GIF, pvData, GIF_Size)
  GlobalUnlock_(HGLOBAL)  
  
    If CreateStreamOnHGlobal_(HGLOBAL, #True, @pstm.IStream) = #S_OK  
      If OleLoadPicture_(pstm, GIF_Size, #False,?IID_IPicture, @Bild.IPicture) = #S_OK  
        Bild\get_Height(@Height)  
             Bild\get_Width(@Width)  
              
             hDC = GetDC_(GetDesktopWindow_())  
             ScreenPixels_X = GetDeviceCaps_(hDC,#LOGPIXELSX)  
             ScreenPixels_Y = GetDeviceCaps_(hDC,#LOGPIXELSY)  
             ReleaseDC_(GetDesktopWindow_(),hDC)  
  
             PicHeight = (Height * ScreenPixels_X) / 2540  
             PicWidth  = (Width  * ScreenPixels_Y) / 2540  
              
             result = CreateImage(Image,PicWidth,PicHeight)  
              
             If result  
               hDC = StartDrawing(ImageOutput(Image))  
                 Bild\Render(hDC,0,PicHeight,PicWidth,-PicHeight,0,0,Width,Height,0)  
               StopDrawing()  
             EndIf  
             
             ImageID=result
              
             Bild\Release()    
           pstm\Release() 
     EndIf
    EndIf
  EndIf
ProcedureReturn ImageID
EndProcedure

Она взята из этой программы Прога, проверяющая пригодность телефонной линии для ADSL интернета

Петь, объясни пожалуйста “внутренности” работы процедуры по загрузке gif?
Технически как с ней работать вроде понятно, (подобие CatchImage()). Но многие моменты просто за пределами моего понимания.
Функция CreateStreamOnHGlobalfunction(),создает поток-объект, который использует HGLOBAL дескриптор памяти для хранения содержимого потока.
1.Здесь переменной Bild присваивается тип какой-то вероятно структуры (@pstm.IStream). Поясни, что это вообще за структура, которая не объявлялась в самой программе? И зачем вообще нужно создание потока!!?
2. OleLoadPicture()-Создает новый объект изображения и инициализирует его из содержимого потока. Здесь переменной Bild присваивается тип вероятно структуры (@Bild.IPicture) ,описанной в самой программе, но по виду она  не похожа на привычную Структуры. Поясни, что это такое и структура ли это вообще???

IID_IPicture:
       Data.l $7BF80980 
       Data.w $BF32,$101A 
       Data.b $8B,$BB,$00,$AA,$00,$30,$0C,$AB

Ну  и дальше по коду что происходит? Понятно, что создается изображение, в которое рисуется и загружается наш гиф, но моменты типа:
Bild\Render(hDC,0,PicHeight,PicWidth,-PicHeight,0,0,Width,Height,0)
Bild\Release()   
pstm\Release()
откуда берутся вообще не понятно??? 
Ясно, что процедура  возвращает Хэндл изображения, которое мы потом и загружаем в ImageGadget, но вот по поводу структур полная не ясность. И прозрачный фон в загруженном изображении выглядит как черный фон, хотя в твоей программе логотип отображается правильно...?? :dontknow:

Код:
;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Image_0
 EndEnumeration

;- Fonts
Global FontID1
FontID1 = LoadFont(1, "Arial", 36)


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 620, 620, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_0))
      ImageGadget(#Image_0, 10, 10, 600, 600, Image0)               
    EndIf
  EndIf
EndProcedure

Procedure LoadGIF_Mem(*GIF, GIF_Size, Image)
Protected ImageID=0
  HGLOBAL    = GlobalAlloc_(#GMEM_MOVEABLE, GIF_Size)
  If HGLOBAL 
  pvData = GlobalLock_(HGLOBAL)
  CopyMemory(*GIF, pvData, GIF_Size)
  GlobalUnlock_(HGLOBAL)  
  
    If CreateStreamOnHGlobal_(HGLOBAL, #True, @pstm.IStream) = #S_OK  
      If OleLoadPicture_(pstm, GIF_Size, #False,?IID_IPicture, @Bild.IPicture) = #S_OK  
        Bild\get_Height(@Height)  
             Bild\get_Width(@Width)  
              
             hDC = GetDC_(GetDesktopWindow_())  
             ScreenPixels_X = GetDeviceCaps_(hDC,#LOGPIXELSX)  
             ScreenPixels_Y = GetDeviceCaps_(hDC,#LOGPIXELSY)  
             ReleaseDC_(GetDesktopWindow_(),hDC)  
  
             PicHeight = (Height * ScreenPixels_X) / 2540  
             PicWidth  = (Width  * ScreenPixels_Y) / 2540  
              
             result = CreateImage(Image,PicWidth,PicHeight)  
              
             If result  
               hDC = StartDrawing(ImageOutput(Image))  
                 Bild\Render(hDC,0,PicHeight,PicWidth,-PicHeight,0,0,Width,Height,0)  
               StopDrawing()  
             EndIf  
             
             ImageID=result
              
             Bild\Release()    
           pstm\Release() 
     EndIf
    EndIf
  EndIf
ProcedureReturn ImageID
EndProcedure


Open_Window_0()

LoadGIF_Mem(?Im, ?endIm-?Im, 1)

SetGadgetState(#Image_0,ImageID(1))


Repeat 
Until WaitWindowEvent(3) = #PB_Event_CloseWindow


DataSection
  Im:
  IncludeBinary "циф.gif"
  endIm:  
   
  IID_IPicture:  
       Data.l $7BF80980  
       Data.w $BF32,$101A  
       Data.b $8B,$BB,$00,$AA,$00,$30,$0C,$AB
EndDataSection

Здесь, картинка и код... http://willvs822.ifolder.ru/20854255

Отредактировано Lucagin (17.12.2010 05:16:29)

0

973

Lucagin написал(а):

Функция CreateStreamOnHGlobalfunction(),создает поток-объект, который использует HGLOBAL дескриптор памяти для хранения содержимого потока. 1.Здесь переменной Bild присваивается тип какой-то вероятно структуры (@pstm.IStream). Поясни, что это вообще за структура, которая не объявлялась в самой программе? И зачем вообще нужно создание потока!!?2. OleLoadPicture()-Создает новый объект изображения и инициализирует его из содержимого потока. Здесь переменной Bild присваивается тип вероятно структуры (@Bild.IPicture) ,описанной в самой программе, но по виду она  не похожа на привычную Структуры.

Здесь производится работа с COM интерфейсом.
IStream это имя интерфейса, который заранее был объявлен. Для того чтобы просмотреть его содержимое, нужно в расположить текстовый курсор на его имени (слове IStream) и в меню Инструменты выбрать Просмотр структур. Если всё сделано правильно, то откроется окно с активной вкладкой Интерфейсы и выделенным словом IStream. Двойной клик по нему, отобразит содержимое интерфейса.
Оно такое:

Код:
Interface IPicture
  QueryInterface(a, b)
  AddRef()
  Release()
  get_Handle(a)
  get_hPal(a)
  get_Type(a)
  get_Width(a)
  get_Height(a)
  Render(a, b, c, d, e, f, g, h, i, j)
  set_hPal(a)
  get_CurDC(a)
  SelectPicture(a, b, c)
  get_KeepOriginalFormat(a)
  put_KeepOriginalFormat(a)
  PictureChanged()
  SaveAsFile(a, b, c)
  get_Attributes(a)
EndInterface
Lucagin написал(а):

Поясни, что это такое и структура ли это вообще???
IID_IPicture:
       Data.l $7BF80980 
       Data.w $BF32,$101A 
       Data.b $8B,$BB,$00,$AA,$00,$30,$0C,$AB

Это такой идентификатор интерфейса.

Lucagin написал(а):

но моменты типа:
Bild\Render(hDC,0,PicHeight,PicWidth,-PicHeight,0,0,Width,Height,0)
Bild\Release()
pstm\Release()
откуда берутся вообще не понятно???

Это вызов методов, объекта с именем Bild и pstm.
Если говорить более простым языком, то при вызове функции OleLoadPicture, в интерфейс Bild.IPicture были занесены адреса функций, которые в последствии вызываются примерно так Bild\Release()
То есть это такой вызов системной функции операционной системы.

Lucagin написал(а):

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

Там картинка обрабатывается еще процедурой LoadTransparentImage.

PS.
Процедура LoadGIF_Mem позволяет загружать не только GIF, но и BMP, JPG и другие типы рисунков.
К сожалению PNG не загружает.

0

974

Пётр написал(а):

Здесь производится работа с COM интерфейсом.IStream это имя интерфейса, который заранее был объявлен. Для того чтобы просмотреть его содержимое, нужно в расположить текстовый курсор на его имени (слове IStream) и в меню Инструменты выбрать Просмотр структур. Если всё сделано правильно, то откроется окно с активной вкладкой Интерфейсы и выделенным словом IStream. Двойной клик по нему, отобразит содержимое интерфейса.

Спасибо, Пётр!!! Стало немного понятнее,  буду дальше разбираться…  :writing:

С процедурой LoadTransparentImage() всё заработало...:cool:
Надо учить мат.часть…   :blush:

Отредактировано Lucagin (17.12.2010 17:00:28)

0

975

Ребят, подскажите, есть в PB база данных названий цветов, чтобы они автоматически выдавались на указанный номер цвета? Скажем 255.0.0 - красный ,  0.0.0. - черный  и т.д.
И есть ли обратный ввод не по номеру RGB, а по названию ???
Можно конечно самому такой список составить, но вдруг уже есть встроенный??

И почему команда Circle(150, 150, 120 ,$FF0000) рисует синий круг а не красный.

вроде 255.0.0 это же красный цвет...

Код:
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Image_0
EndEnumeration

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 661, 408, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_0))
      CreateImage(#Image_0,660,390)
      ImageGadget(#Image_0, 0, 10, 660, 390, Image0)
      
       If StartDrawing(ImageOutput(#Image_0))
           Circle(150, 150, 120 ,$FF0000)                
          StopDrawing()               
       EndIf      
      SetGadgetState(#Image_0,ImageID(#Image_0))  
    EndIf
  EndIf
EndProcedure

Open_Window_0()

Repeat
  event=WaitWindowEvent()
   
Until event=#PB_Event_CloseWindow

Отредактировано Lucagin (21.12.2010 00:37:16)

0

976

Lucagin написал(а):

Можно конечно самому такой список составить, но вдруг уже есть встроенный??

Что прям по-русски? Даже и на буржуйском нет. :D

Lucagin написал(а):

И почему команда Circle(150, 150, 120 ,$FF0000) рисует синий круг а не красный.

вроде 255.0.0 это же красный цвет...

255 - это действительно красный. А вот ты вводишь $FF0000 - это в десятичном исчислении = 16711680, а это уже чисто СИНИЙ.
Не надо путать функцию RGB ( r,g,b) и шестнадцатеричные числа - это две большие разницы!

0

977

ВиниПур написал(а):

Что прям по-русски? Даже и на буржуйском нет.

по буржуйски тоже бы пошло...  :rolleyes: Хотябы как тут ( http://elektra28s.ucoz.ru/publ/5-1-0-26 ) , ну нет, сам сделаю...

ВиниПур написал(а):

255 - это действительно красный. А вот ты вводишь $FF0000 - это в десятичном исчислении = 16711680, а это уже чисто СИНИЙ.Не надо путать функцию RGB ( r,g,b) и шестнадцатеричные числа - это две большие разницы!

Я думал они из 16-тиричной по парно переводятся подобно RGB(FF,00,00), а получается как единое число, теперь понятно…

Отредактировано Lucagin (21.12.2010 12:21:35)

0

978

Хочу сделать модуль, в котором цвета RGB и BGR  буду соответствовать их русским и английским названиям. Конечно, цветов будет на порядок меньше чем можно составить цифрами, но наиболее употребимые (какие найду).

Работа модуля примерно такая:
1.Скорее всего будет упрощенная палитра по какой-то классификации цветов, возможно оттенки цветов радуги + оттенки черного и белого.
2.  пишу в строке названия цвета рус/англ. программа генерирует RGB и BGR код этого цвета.
Задача модуля позволить работать не только с кодом цвета, но и с его названием, а также напомнит пользователям истинные названия цветов на родном и буржуйском языках…

Про интерфейс и классификацию (в какие группы объединять) пока думаю, но вот вопрос, как лучше это реализовывать, чтобы потом в PB можно было по трем буквам цвета получить подсказку его названия?  Пока хочу сделать в виде записи в TXT файле, но вот не знаю получится ли при этом сделать подсказку, может записи в файле не лучший способ для такой задачи?

Отредактировано Lucagin (21.12.2010 20:50:17)

0

979

Можно использовать датасекцию, т. е.

Код:
Restore m1:

For i=1 To 4
  Read.s String.s
  Debug String
Next i

DataSection
  m1:
  Data.s "Красный"
  Data.s "зелёный"
  Data.s "Синий"
  Data.s "Белый"
EndDataSection

0

980

Пётр написал(а):

Можно использовать датасекцию, т. е.

Планировал на одной строке иметь: 1. рус. название;  2.англ. название; 3.Код RGB;  и   4. код BGR
Стоит ли коды цветов дать в отдельную переменную датасекции не строкового типа, чтобы потом не мучиться с переводом строки в цифру…?

НЕ очень понял назначение цикла(For-Next)  в примере?

Отредактировано Lucagin (21.12.2010 21:30:56)

0

981

Lucagin написал(а):

Планировал на одной строке иметь: 1. рус. название;  2.англ. название; 3.Код RGB;  и   4. код BGR

Можно так:

Код:
Structure MyColor
  Rus.s
  En.s
  RGB.l
  BGR.l
EndStructure

Dim Color.MyColor(10)

Color(0)\Rus="Красный"
Color(0)\En="Red"
Color(0)\RGB=RGB(255, 0, 0)
Color(0)\BGR=$FF0000

Color(1)\Rus="Зелёный"
Color(1)\En="Green"
Color(1)\RGB=RGB(0, 255, 0)
Color(1)\BGR=$00FF00
Lucagin написал(а):

НЕ очень понял назначение цикла(For-Next)  в примере?

Он нужен чтобы прочитать четыре строки из ДатаСекции

0

982

Пётр написал(а):

Можно так:

тоже думал про структурный массив...

А подсказку вводимого названия цвета  делать потом  переборкой значений массива?
Если по трем буквам есть несколько совпадений, то их значения вывести туда-то… допустим всплывающей подсказкой…

Вобщем понял, буду пробовать. Спасибо!!! :writing:

Отредактировано Lucagin (21.12.2010 23:30:01)

0

983

А как в PB делить без остатка?

нужно чтобы Step был равен 360/17=21

Отредактировано Lucagin (22.12.2010 03:51:18)

0

984

Lucagin написал(а):

А как в PB делить без остатка?

Посмотри 2 функции, может подойдет:

Int()

Round()

0

985

haav написал(а):

Посмотри 2 функции, может подойдет:
            Int()
            Round()

Спасибо, то что нужно!!!

0

986

Ребят, подскажите, как лучше сделать?   Кликаю мышкой по ImageGadget и хочу используя команду Point(x, y) определить в этом месте  цвет. Возможно ли  получить координаты курсора именно внутри гаджета  ImageGadget?
Или единственное, что остается это WindowMouseX(#Window_0), WindowMouseY(#Window_0) , эти команды, на сколько я понял, дают координаты внутри окна. Я конечно могу сделать поправку, но рисую относительно гаджета, поэтому было бы лучше получать координаты мыши именно внутри него…???

Отредактировано Lucagin (22.12.2010 17:13:34)

0

987

Определить цвет пискеля можно с пощью этого кода

Код:
Procedure GetCursorColor()
  sysviewDC = GetDC_(0)
  GetCursorPos_(Pos.POINT)
  Color = GetPixel_( sysviewDC,Pos\x, Pos\y)
  ReleaseDC_(0,sysviewDC)
  ProcedureReturn Color
EndProcedure

Код возвращает цвет точки экрана, где сейчас находится курсор мышки.

0

988

Пётр написал(а):

Код возвращает цвет точки экрана, где сейчас находится курсор мышки.

Спасибо, Пётр!!! :)

0

989

Lucagin написал(а):

Хочу сделать модуль, в котором цвета RGB и BGR  буду соответствовать их русским и английским названиям. Конечно, цветов будет на порядок меньше чем можно составить цифрами, но наиболее употребимые (какие найду).

Когда то я проектировал свою страничку в Интернет, мне понадобились стандартные цвета, для этого написал маленькую программку. Правда она была для старой версии Пурика, немного подправил, может тебе поможет чем. Состоит из текстового файла, типа базы и самого кода. Выбираешь название цвета и на экран выводится его HTML код, шестнадцатеричный и десятичный ну и его изображение.

Код :

Код:
If OpenWindow(0,0,0,500,100,"Стандартные цвета HTM",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ComboBoxGadget(1,210,35,200,20,#PB_ComboBox_Editable)
   
Dim ColorName$(256)
Dim RedColor$(256)
Dim GreenColor$(256)
Dim BlueColor$(256)
i.l=0
If ReadFile(0, "ColorHTML")  
     While Eof(0) = 0          
      ColorName$(i)=ReadString(0)  
      RedColor$(i)=ReadString(0)
      GreenColor$(i)=ReadString(0)
      BlueColor$(i)=ReadString(0)
      i+1
    Wend
    CloseFile(0)  

  Else
    MessageRequester("Information","Couldn't open the file!")
  EndIf

  For j = 0 To i
      AddGadgetItem(1, -1,ColorName$(j))
  Next

Repeat
  Event = WaitWindowEvent()
  Select Event
    ; ///////////////////
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = 1
        If GetGadgetState(1)>-1
          z=GetGadgetState(1)
           If CreateImage(0, 200, 60) And StartDrawing(ImageOutput(0))
              Box(0, 0, 200, 60, Val("$"+BlueColor$(z)+GreenColor$(z)+RedColor$(z)))
             StopDrawing() 
             ImageGadget(0, 0, 0, 200, 60, ImageID(0))
             TextGadget(2,210,0,300,20," HTML = #"+RedColor$(z)+GreenColor$(z)+BlueColor$(z) + " Hex = $"+BlueColor$(z)+GreenColor$(z)+RedColor$(z)+" Dec ="+Str(Val("$"+BlueColor$(z)+GreenColor$(z)+RedColor$(z))) )
           EndIf

        EndIf
        
        
      EndIf
    ; ////////////////////////
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = 0
        CloseWindow(0)
        Break
      EndIf
  EndSelect
ForEver
EndIf
;}

База цветов - сохранить в файл с именем "ColorHTML" и положить в папку с кодом ( можно пополнять по образу и подобию):

Код:
alicemblue
F0
F8
FF
antiquewhite
FA
EB
D7
aqua
00
FF
FF
aquamarine
7F
FF
D4
azure
F0
FF
FF
beige
F5
F5
DC
bisque
FF
E4
C4
black
00
00
00
blanchedalmond
FF
EB
CD
blue
00
00
FF
blueviolet
8A
2B
E2
brown
A5
2A
2A
burlywood
DE
B8
87
cadetblue
5F
9E
A0
chartreuse
7F
FF
00
chocolate
D2
69
1E
coral
FF
7F
50
cornflowerblue
64
95
ED
cornsilk
FF
F8
DC
crimson
DC
14
3C
cyan
00
FF
FF
darkblue
00
00
8B
darkcyan
00
8B
8B
darkgoldenrod
B8
86
0B
darkgray
A9
A9
A9
darkgreen
00
64
00
darkkhaki
BD
B7
6B
darkmagenta
8B
00
8b
darkolivegreen
55
6B
2F
darkorange
FF
8C
00
darkochid
99
32
CC
darkred
8B
00
00
darksalmon
E9
96
7A
darkseagreen
8F
BC
8F
darkslateblue
48
3D
8B
darkslategray
2F
4F
4F
darkturquoise
00
CE
D1
darkviolet
94
00
D3
deeppink
FF
14
93
deepskyblue
00
BF
FF
dimgray
69
69
69
dodgerblue
1E
90
FF
firebrick
B2
22
22
floralwhite
FF
FA
F0
forestgreen
22
8B
22
fushsia
FF
00
FF
gainsboro
DC
DC
DC
ghostwhite
F8
F8
FF
gold
FF
D7
00
goldenrod
DA
A5
20
gray
80
80
80
green
00
80
00
greenyellow
AD
FF
2F
honeydew
F0
FF
F0
hotpink
FF
69
B4
indiandred
CD
5C
5C
indigo
4B
00
82
ivory
FF
FF
F0
khaki
F0
E6
8C
lavender
E6
E6
FA
lavenderblush
FF
F0
F5
lawngreen
7C
FC
00
lemonchiffon
FF
FA
CD
ligtblue
AD
D8
E6
lightcoral
F0
80
80
lightcyan
E0
FF
FF
lightgoldenrodyellow
FA
FA
D2
lightgreen
90
EE
90
lightgrey
D3
D3
D3
lightpink
FF
B6
C1
lightsalmon
FF
A0
7A
lightseagreen
20
B2
AA
lightscyblue
87
CE
FA
lightslategray
77
88
99
lightsteelblue
B0
C4
DE
lightyellow
FF
FF
E0
lime
00
FF
00
limegreen
32
CD
32
linen
FA
F0
E6
magenta
FF
00
FF
maroon
80
00
00
mediumaquamarine
66
CD
AA
mediumblue
00
00
CD
mediumorchid
BA
55
D3
mediumpurple
93
70
DB
mediumseagreen
3C
B3
71
mediumslateblue
7B
68
EE
mediumspringgreen
00
FA
9A
mediumturquoise
48
D1
CC
medium violetred
C7
15
85
midnightblue
19
19
70
mintcream
F5
FF
FA
mistyrose
FF
E4
E1
moccasin
FF
E4
B5
navajowhite
FF
DE
AD
navy
00
00
80
oldlace
FD
F5
E6
olive
80
80
00
olivedrab
6B
8E
23
orange
FF
A5
00
orengered
FF
45
00
orchid
DA
70
D6
palegoldenrod
EE
E8
AA
palegreen
98
FB
98
paleturquose
AF
EE
EE
palevioletred
DB
70
93
papayawhop
FF
EF
D5
peachpuff
FF
DA
B9
peru
CD
85
3F
pink
FF
C0
CB
plum
DD
A0
DD
powderblue
B0
E0
E6
purple
80
00
80
red
FF
00
00
rosybrown
BC
8F
8F
royalblue
41
69
E1
saddlebrown
8B
45
13
salmon
FA
80
72
sandybrown
F4
A4
60
seagreen
2E
8B
57
seashell
FF
F5
EE
sienna
A0
52
2D
silver
C0
C0
C0
skyblue
87
CE
EB
slateblue
6A
5A
CD
slategray
70
80
80
snow
FF
FA
FA
springgreen
00
FF
7F
steelblue
46
82
B4
tan
D2
B4
8C
teal
00
80
80
thistle
D8
BF
D8
tomato
FF
63
47
turquose
40
E0
D0
violet
EE
82
EE
wheat
F5
DE
B3
white
FF
FF
FF
whitesmoke
F5
F5
F5
yellow
FF
FF
00
yellowgreen
9A
CD
32

0

990

Этот-же код для наглядности:

Код:
Enumeration 
 #Window_0=150
 #image
 #Ima
EndEnumeration
Procedure.l MyImage(ImageNumber.l, Color.l)
  ImageID.l = CreateImage(ImageNumber, 40, 40)
  StartDrawing(ImageOutput(ImageNumber))
    Box(0, 0,40,40, Color)
  StopDrawing()
  ProcedureReturn ImageID
EndProcedure
Dim ColorName$(256)
Dim RedColor$(256)
Dim GreenColor$(256)
Dim BlueColor$(256)
i.l=0
If ReadFile(0, "ColorHTML.txt")  
     While Eof(0) = 0          
      ColorName$(i)=ReadString(0)  
      RedColor$(i)=ReadString(0)
      GreenColor$(i)=ReadString(0)
      BlueColor$(i)=ReadString(0)
      i+1
    Wend
    CloseFile(0)  
  Else
    MessageRequester("Information","Couldn't open the file!")
  EndIf
OpenWindow (#Window_0, 0, 0, 490, 490,  "Заглавие", #PB_Window_MinimizeGadget |#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget) 
 For a=0 To 139
  RGB=Val("$"+BlueColor$(a)+GreenColor$(a)+RedColor$(a))
  If 5+(40*a)<446
   ButtonImageGadget(a,5+(40*a),     5,  40,40,MyImage(a,RGB))
  ElseIf 5+(40*a)<926
   ButtonImageGadget(a,5+(40*(a-12)),45, 40,40,MyImage(a,RGB))
  ElseIf 5+(40*a)<1406 
   ButtonImageGadget(a,5+(40*(a-24)),85, 40,40,MyImage(a,RGB))
  ElseIf 5+(40*a)<1886 
   ButtonImageGadget(a,5+(40*(a-36)),125,40,40,MyImage(a,RGB)) 
  ElseIf 5+(40*a)<2366 
   ButtonImageGadget(a,5+(40*(a-48)),165,40,40,MyImage(a,RGB))
  ElseIf 5+(40*a)<2846 
   ButtonImageGadget(a,5+(40*(a-60)),205,40,40,MyImage(a,RGB))
  ElseIf 5+(40*a)<3326 
   ButtonImageGadget(a,5+(40*(a-72)),245,40,40,MyImage(a,RGB))
  ElseIf 5+(40*a)<3806 
   ButtonImageGadget(a,5+(40*(a-84)),285,40,40,MyImage(a,RGB))
  ElseIf 5+(40*a)<4286 
   ButtonImageGadget(a,5+(40*(a-96)),325,40,40,MyImage(a,RGB))
  ElseIf 5+(40*a)<4766 
   ButtonImageGadget(a,5+(40*(a-108)),365,40,40,MyImage(a,RGB)) 
  ElseIf 5+(40*a)<5246 
   ButtonImageGadget(a,5+(40*(a-120)),405,40,40,MyImage(a,RGB))
  ElseIf 5+(40*a)<5726 
   ButtonImageGadget(a,5+(40*(a-132)),445,40,40,MyImage(a,RGB))  
  EndIf
  GadgetToolTip(a,ColorName$(a))
 Next
;-----------------------------------
Repeat
Event =  WaitWindowEvent() 
Gadget = EventGadget()
 If Event=#PB_Event_Gadget                        
    For gadget=0 To 139                         
     If EventGadget()=gadget 
     z=gadget
      RGB=Val("$"+BlueColor$(z)+GreenColor$(z)+RedColor$(z))  
      SetWindowTitle(#Window_0, "  HTML = #"+RedColor$(z)+GreenColor$(z)+BlueColor$(z) + "  Hex = $"+BlueColor$(z)+GreenColor$(z)+RedColor$(z)+"  Dec ="+Str(Val("$"+BlueColor$(z)+GreenColor$(z)+RedColor$(z))))                     
        If CreateImage(#image, 1680, 1024) 
          StartDrawing(ImageOutput(#image)) 
          Box(0, 0, 1680, 1024,RGB)
          StopDrawing()
          #file = "oooo.bmp" 
          SaveImage(#image, #file, #PB_ImagePlugin_BMP) 
          SystemParametersInfo_(#SPI_SETDESKWALLPAPER, 0, #file, #SPIF_UPDATEINIFILE | #SPIF_SENDWININICHANGE)
        EndIf                           
     EndIf                                     
    Next                                       
 EndIf
If Event = #PB_Event_CloseWindow
Break    
EndIf
ForEver

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка