* @author QQ:3440895 * @version CVS: $Id: digiclock.php,v 1.11 2006/12/25 05:36:38 arzen Exp $ */ include_once "include/winbinder.php"; include_once "wb_httpget.class.php"; include_once "RSS.php"; //-------------------------------------------------------------------- CONSTANTS define("ID_APP_TIMER", 201); define("ID_NEWS_TIMER", 301); define("SHORT_FMT", "h:i:s A"); define("LONG_FMT", "l, F dS, Y --- "); define("WIDTH", 150); define("HEIGHT", 90); //-------------------------------------------------------------- EXECUTABLE CODE // Create main window, then assign a procedure to it $dim = explode(" ", wb_get_system_info("workarea")); $mainwin = wb_create_window(NULL, PopupWindow, "现在时间", $dim[2] - WIDTH - 30, $dim[3] - HEIGHT, WIDTH, HEIGHT, WBC_TOP | WBC_TASKBAR); wb_set_handler($mainwin, "process_main"); // Create label control inside the window class Wb { } $wb = new Wb(); $wb->newscontent = null; $label = wb_create_control($mainwin, Label, getTimeShotFormat(date("h:i:s")), 0, 15, 108, 20, 0, WBC_CENTER); wb_set_font($label, wb_create_font("Tahoma", 11, null, FTA_BOLD)); $label_week = wb_create_control($mainwin, Label, formatLocalWeek(date("Y-m-d H:i:s")), 102, 2, 50, 15, 0, WBC_CENTER); $label_day = wb_create_control($mainwin, Label, date("m月d"), 102, 15, 50, 15, 0, WBC_CENTER); $label_year = wb_create_control($mainwin, Label, date("Y年"), 102, 30, 50, 15, 0, WBC_CENTER); wb_set_font($label_week, wb_create_font("Tahoma", 8)); wb_set_font($label_day, wb_create_font("Tahoma", 8));
function read_window_geom($window, $prefix, $resize = false) { global $wb; if (!$window) { return; } $geom = $wb->settings["Settings"][$prefix . "_geom"]; $geom = preg_split("/\\s+/", $geom); $desk = wb_get_system_info('workarea'); $desk = preg_split("/\\s+/", $desk); wb_set_position($window, max(min((int) $desk[2] - $geom[2], $geom[0]), 0), max(min((int) $desk[3] - $geom[3], $geom[1]), 0)); if ($resize) { wb_set_size($window, min(max(MIN_WIDTH, (int) $geom[2]), (int) $desk[2]), min(max(MIN_HEIGHT, (int) $geom[3]), (int) $desk[3])); } }
function gotWindow($wid = null, $Timer = 0, $Title = 'Привет! :)', $Type = 0, $TextBlocks = array(), $X = null, $Y = null, $Wdth = 360, $Hgnt = 500) { //© roxblnfk ;) if (!isset($wid)) { $wid = FloatWindow; } // window id $Wa = explode(' ', wb_get_system_info('workarea')); $W = intval(min(max(40, $Wdth), $Wa[2])); $H = intval(min(max(40, $Hgnt), $Wa[3])); WinAPI_USER::GetCursorPos($xx, $yy); if (!isset($X)) { $X = $Wa[2] - $W; } elseif ($X === true) { $X = $xx; } if (!isset($Y)) { $Y = $Wa[3] - $H; } elseif ($Y === true) { $Y = $yy; } if (!isset(self::$wb_windows[$wid])) { $NEW = true; self::$wb_windows[$wid] = new TForm(); self::$wb_windows[$wid]->clientWidth = $W; self::$wb_windows[$wid]->borderStyle = bsNone; //bsSizeToolWin;//bsToolWindow;//bsSingle;//bsNone; self::$wb_windows[$wid]->color = 0x123456; self::$wb_windows[$wid]->caption = 'ололололо'; self::$wb_windows[$wid]->doubleBuffered = true; self::$wb_windows[$wid]->transparentColor = true; self::$wb_windows[$wid]->transparentColorValue = 0x123456; self::$wb_windows[$wid]->alphaBlend = true; self::$wb_windows[$wid]->alphaBlendValue = dsSpy::$Options['alphaBlend']; self::$wb_windows[$wid]->formStyle = fsStayOnTop; //self::$wb_windows[$wid]->onClosequery='dsSpy::CloseProgram'; //self::$wb_windows[$wid]->onClose='dsSpy::CloseProgram'; WinAPI_USER::SetParent(self::$wb_windows[$wid]->handler); // self::$wb_controls[$wid][WB_FloatWindow_Title]=wb_create_control(self::$wb_windows[$wid],Label,$Title,2,2,$W-4,20,WB_FloatWindow_Title,WBC_CENTER,0,0); } else { $NEW = false; // уничтодить имеющиеся компоненты на форме for ($i = 1, $j = sizeof(self::$wb_controls[$wid]); $i < $j; ++$i) { self::$wb_controls[$wid][$i]->free(); } if (isset(self::$wb_controls[$wid][0])) { self::$wb_controls[$wid][0]->free(); } unset(self::$wb_controls[$wid]); } self::$wb_windows[$wid]->x = $X; self::$wb_windows[$wid]->y = $Y; self::$wb_windows[$wid]->w = $W; self::$wb_windows[$wid]->h = $H; self::$wb_controls[$wid] = array(); // автоскрытие окна $function = function ($LastEventTime, $wid) { if ($LastEventTime == dsSpy::$LastEventTime) { WinAPI_USER::AnimateWindow(dsSpy::$wb_windows[$wid]->handle, null, 0x10004); } }; if ($Timer > 1) { TRTaskMamager::addTask($Timer, $function, array(self::$LastEventTime, $wid)); } // автоскрытие if ($NEW) { // события $onMouseDown = function ($id, $button, $shift, $x, $y) use(&$wid) { $self = c($id); if ($button === 0) { // нажата только левая клавиша dsSpy::goToLastEvent(); } //if( $button === 1) // нажата только правая клавиша //if( $button === 2) // нажата только средняя WinAPI_USER::AnimateWindow(dsSpy::$wb_windows[$wid]->handle, null, 0x10004); // скрыть }; //self::$wb_windows[$wid]->onMouseDown=$onMouseDown; self::$wb_windows[$wid]->hide(); } // заполняем форму компонентами $b = 5; // border $i = 0; $x = 0; $y = 0; $w = $W; $h = 20; switch ($Type) { case 0: break; // пустое окно // пустое окно case 1: // новое сообщение theme, themeuri, themeid, author, authorid, authoruri, messageuri, messageid, datetime, cat, caturi // title self::$wb_controls[$wid][++$i] = self::ds_createImage(self::$wb_windows[$wid], $x, $y, 20, $h); self::$wb_controls[$wid][$i]->loadFromFile(self::skin('WinImageLT')); self::$wb_controls[$wid][$i]->hint = self::encoding_toGUI('Передвинуть окно'); $OnResize = array(false, $X, $Y, $W, $H); // изменение размера и перемещение окна $onMouseDown = function ($id, $button, $shift, $x, $y) use(&$wid, &$OnResize) { WinAPI_USER::GetCursorPos($xx, $yy); $OnResize = array(true, $xx, $yy); }; $onMouseUp = function ($id, $button, $shift, $x, $y) use(&$wid, &$OnResize) { $OnResize[0] = false; dsSpy::$WinPositions[$wid] = array(dsSpy::$wb_windows[$wid]->x, dsSpy::$wb_windows[$wid]->y, dsSpy::$wb_windows[$wid]->w, dsSpy::$wb_windows[$wid]->h); }; self::$wb_controls[$wid][$i]->cursor = crSize; self::$wb_controls[$wid][$i]->onMouseMove = function ($id, $shift, $x, $y) use(&$wid, &$OnResize) { // перемещение if (true !== $OnResize[0]) { return false; } WinAPI_USER::GetCursorPos($xx1, $yy1); $xx0 = $OnResize[1]; $yy0 = $OnResize[2]; $OnResize[1] = $xx1; $OnResize[2] = $yy1; $nx = dsSpy::$wb_windows[$wid]->x + $xx1 - $xx0; $ny = dsSpy::$wb_windows[$wid]->y + $yy1 - $yy0; $Wa = explode(' ', wb_get_system_info('workarea')); if ($nx < $Wa[0] || $ny < $Wa[1] || $nx >= $Wa[2] || $ny >= $Wa[3]) { return false; } dsSpy::$wb_windows[$wid]->x = dsSpy::$wb_windows[$wid]->x + $xx1 - $xx0; dsSpy::$wb_windows[$wid]->y = dsSpy::$wb_windows[$wid]->y + $yy1 - $yy0; }; self::$wb_controls[$wid][$i]->onMouseDown = $onMouseDown; self::$wb_controls[$wid][$i]->onMouseUp = $onMouseUp; self::$wb_controls[$wid][++$i] = self::ds_createImage(self::$wb_windows[$wid], $w - 20, $y, 20, $h); self::$wb_controls[$wid][$i]->loadFromFile(self::skin('WinImageRT')); self::$wb_controls[$wid][$i]->hint = self::encoding_toGUI('Скрыть окно'); self::$wb_controls[$wid][$i]->cursor = crHandPoint; self::$wb_controls[$wid][$i]->onClick = function ($id) use(&$wid) { WinAPI_USER::AnimateWindow(dsSpy::$wb_windows[$wid]->handle, null, 0x10004); }; $DownItems = array(); // элементы внизу окна self::$wb_controls[$wid][++$i] = self::ds_createImage(self::$wb_windows[$wid], $x, $H - $h, 20, $h); self::$wb_controls[$wid][$i]->loadFromFile(self::skin('WinImageLD')); self::$wb_controls[$wid][$i]->cursor = crSizeNESW; self::$wb_controls[$wid][$i]->hint = self::encoding_toGUI('Прозрачность'); $OnAlpha = array(false, $X, $Y); // изменение размера и перемещение окна self::$wb_controls[$wid][$i]->onMouseDown = function ($id, $button, $shift, $x, $y) use(&$wid, &$OnAlpha) { WinAPI_USER::GetCursorPos($xx, $yy); $OnAlpha = array(true, $xx, $yy); }; self::$wb_controls[$wid][$i]->onMouseUp = function ($id, $button, $shift, $x, $y) use(&$wid, &$OnAlpha) { $OnAlpha[0] = false; }; self::$wb_controls[$wid][$i]->onMouseMove = function ($id, $shift, $x, $y) use(&$wid, &$OnAlpha) { // перемещение if (true !== $OnAlpha[0]) { return false; } WinAPI_USER::GetCursorPos($xx1, $yy1); $xx0 = $OnAlpha[1]; $yy0 = $OnAlpha[2]; $OnAlpha[1] = $xx1; $OnAlpha[2] = $yy1; $na = min(255, max(20, dsSpy::$wb_windows[$wid]->alphaBlendValue + $xx1 - $xx0 + $yy0 - $yy1)); dsSpy::$Options['alphaBlend'] = $na; dsSpy::$wb_windows[$wid]->alphaBlendValue = $na; }; $DownItems[] = $i; self::$wb_controls[$wid][++$i] = self::ds_createLabel(self::$wb_windows[$wid], $x + 20, $H - $h, $w - 40, $h, 'dsSpy © roxblnfk 2012', taCenter, fsBold, 10, self::skin('TextColor')); self::$wb_controls[$wid][$i]->transparent = false; self::$wb_controls[$wid][$i]->cursor = crHelp; self::$wb_controls[$wid][$i]->layout = tlCenter; self::$wb_controls[$wid][$i]->color = self::skin('BGColor'); //self::$wb_controls[$wid][$i]->hint=self::encoding_toGUI('Перейти на сайт '.dsSpy::$Host); self::$wb_controls[$wid][$i]->onDblClick = function ($id) { ++dsSpy::$Options['skin']; if (!isset(dsSpy::$Skins[dsSpy::$Options['skin']])) { dsSpy::$Options['skin'] = 0; } }; $DownItems[] = $i; self::$wb_controls[$wid][++$i] = self::ds_createImage(self::$wb_windows[$wid], $w - 20, $H - $h, 20, $h); self::$wb_controls[$wid][$i]->loadFromFile(self::skin('WinImageRD')); self::$wb_controls[$wid][$i]->hint = self::encoding_toGUI('Прилепить в парвый шижний угол'); self::$wb_controls[$wid][$i]->cursor = crHandPoint; self::$wb_controls[$wid][$i]->onClick = function ($id) use(&$wid, &$OnResize) { $Wa = explode(' ', wb_get_system_info('workarea')); dsSpy::$WinPositions[$wid][0] = dsSpy::$WinPositions[$wid][1] = null; dsSpy::$wb_windows[$wid]->x = $Wa[2] - dsSpy::$wb_windows[$wid]->w; dsSpy::$wb_windows[$wid]->y = $Wa[3] - dsSpy::$wb_windows[$wid]->h; }; $DownItems[] = $i; self::$wb_controls[$wid][++$i] = self::ds_createLabel(self::$wb_windows[$wid], $x + 20, $y, $w - 40, $h, $Title, taCenter, fsBold, 10, self::skin('TitleColor')); self::$wb_controls[$wid][$i]->transparent = false; self::$wb_controls[$wid][$i]->layout = tlCenter; self::$wb_controls[$wid][$i]->color = self::skin('BGColor'); self::$wb_controls[$wid][$i]->hint = self::encoding_toGUI('Растянуть окно'); self::$wb_controls[$wid][$i]->onMouseDown = $onMouseDown; self::$wb_controls[$wid][$i]->onMouseUp = $onMouseUp; self::$wb_controls[$wid][$i]->cursor = crSizeNS; self::$wb_controls[$wid][$i]->onMouseMove = function ($id, $shift, $x, $y) use(&$wid, &$OnResize, &$DownItems) { // расширение if (true !== $OnResize[0]) { return false; } WinAPI_USER::GetCursorPos($xx1, $yy1); $Wa = explode(' ', wb_get_system_info('workarea')); $xx0 = $OnResize[1]; $yy0 = $OnResize[2]; $OnResize[1] = $xx1; $OnResize[2] = $yy1; //dsSpy::$wb_windows[$wid]->clientWidth =dsSpy::$wb_windows[$wid]->clientWidth +$xx0-$xx1; $nh = dsSpy::$wb_windows[$wid]->h + $yy0 - $yy1; $ny = dsSpy::$wb_windows[$wid]->y + $yy1 - $yy0; if ($nh < 40 || $ny < $Wa[1] || $ny >= $Wa[3]) { return false; } dsSpy::$wb_controls[$wid][0]->h = dsSpy::$wb_controls[$wid][0]->h + $nh - dsSpy::$wb_windows[$wid]->h; for ($i = 0, $j = sizeof($DownItems); $i < $j; ++$i) { dsSpy::$wb_controls[$wid][$DownItems[$i]]->y = dsSpy::$wb_controls[$wid][$DownItems[$i]]->y + $nh - dsSpy::$wb_windows[$wid]->h; } dsSpy::$wb_windows[$wid]->h = $nh; //dsSpy::$wb_windows[$wid]->x=dsSpy::$wb_windows[$wid]->x+$xx1-$xx0; dsSpy::$wb_windows[$wid]->y = $ny; }; unset($OnResize, $DownItems); // scroll Box self::$wb_controls[$wid][0] = self::ds_createScrollBox(self::$wb_windows[$wid], 0, $y + $h, $W, $H - $x - $h - $h, bsNone); self::$wb_controls[$wid][0]->doubleBuffered = true; self::$wb_controls[$wid][0]->color = self::skin('BGColor'); $parent =& self::$wb_controls[$wid][0]; $ww = $W - 16; $y = -10; for ($i0 = 0, $j0 = sizeof($TextBlocks); $i0 < $j0; ++$i0) { $Text =& $TextBlocks[$i0]; ///////////// $w = $ww; $x = 0; // picture self::$wb_controls[$wid][++$i] = self::ds_createImage($parent, $x += $b, $y += $h, $w = 100, 100); self::$wb_controls[$wid][$i]->hint = self::encoding_toGUI('Аватарка пользователя'); // кач картинки if (!isset(self::$Avatars[$Text['authorid']]) && self::$Options['downloadImages']) { self::$Avatars[$Text['authorid']] = true; if (!isset(self::$WaitingAvatars[$Text['authorid']])) { self::$WaitingAvatars[$Text['authorid']] = array($i); } $ip = gethostbyname(self::$Host); $url = 'http://' . $ip . '/image.php?u=' . $Text['authorid'] . '&dateline=1341764643'; $addheads = array('Host: ' . self::$Host); $EndFunc = function ($ch, $wid, $LastEventTime, $AuthorID) { $img = TMC::GetContent($ch); err_no(); $im = @imagecreatefromstring($img); if (false === $im) { //alert($img); unset(dsSpy::$Avatars[$AuthorID]); return false; } if (imagesx($im) < 10 || imagesy($im) < 10) { dsSpy::$Avatars[$AuthorID] = false; return false; } //wb_play_sound(WBC_INFO); $file = DOC_ROOT . '/files/temp/Ava_' . $AuthorID . '.png'; imagepng($im, $file); dsSpy::$Avatars[$AuthorID] = $file; //alert(strlen($img)); ///file_put_contents('f:/suck.jpg',$img); //dsSpy::$wb_controls[$wid][$id]->picture->clear(); if (dsSpy::$LastEventTime !== $LastEventTime) { return false; } //dsSpy::$wb_controls[$wid][$id]->picture->loadFromStr(dsSpy::ImageToStr($im),'png'); if (is_file($file)) { if (!isset(dsSpy::$WaitingAvatars[$AuthorID])) { return true; } for ($i = 0, $j = sizeof(dsSpy::$WaitingAvatars[$AuthorID]); $i < $j; ++$i) { $id = dsSpy::$WaitingAvatars[$AuthorID][$i]; //alert($id); dsSpy::$wb_controls[$wid][$id]->picture->loadFromFile($file, 'png'); } } else { unset(dsSpy::$Avatars[$AuthorID]); } }; $tmc = TMC::NewThread($url, $EndFunc, array($wid, self::$LastEventTime, $Text['authorid']), $addheads); TMC::Go($tmc); } if (is_string(self::$Avatars[$Text['authorid']])) { if (is_file(self::$Avatars[$Text['authorid']])) { dsSpy::$wb_controls[$wid][$i]->picture->loadFromFile(self::$Avatars[$Text['authorid']], 'png'); } else { unset(self::$Avatars[$Text['authorid']]); } } elseif (self::$Avatars[$Text['authorid']] === true) { self::$WaitingAvatars[$Text['authorid']][] = $i; } //////////////// $x += $w + $b; $w = $ww - $x - $b - $b; // date time self::$wb_controls[$wid][++$i] = self::ds_createLabel($parent, $x, $y, $w, $h = 20, date('H:i, d M', $Text['datetime']), taRightJustify, null, null, self::skin('DateTimeColor')); self::$wb_controls[$wid][$i]->hint = self::encoding_toGUI('Время публикации сообщения'); self::$wb_controls[$wid][$i]->autosize = true; self::$wb_controls[$wid][$i]->onMouseEnter = function ($id) { c($id)->font->color = dsSpy::skin('DateTimeColor', 1); }; self::$wb_controls[$wid][$i]->onMouseLeave = function ($id) { c($id)->font->color = dsSpy::skin('DateTimeColor', 0); }; // name self::$wb_controls[$wid][++$i] = self::ds_createLabel($parent, $x, $y, $w, $h = 20, $Text['author'], null, fsBold, 11, self::skin('AuthorColor')); self::$wb_controls[$wid][$i]->hint = self::encoding_toGUI('Пользователь'); self::$wb_controls[$wid][$i]->autosize = true; self::$wb_controls[$wid][$i]->cursor = crHandPoint; self::$wb_controls[$wid][$i]->onMouseEnter = function ($id) { c($id)->font->color = dsSpy::skin('AuthorColor', 1); }; self::$wb_controls[$wid][$i]->onMouseLeave = function ($id) { c($id)->font->color = dsSpy::skin('AuthorColor', 0); }; $url = 'http://' . self::$Host . '/' . $Text['authoruri']; self::$wb_controls[$wid][$i]->onClick = function ($id) use(&$url) { dsSpy::RunURL($url); }; unset($url); // cat self::$wb_controls[$wid][++$i] = self::ds_createLabel($parent, $x, $y += $h + 5, $w, $h = 15, '<< ' . $Text['cat'] . ' >>', taCenter, fsBold, 8, self::skin('CategoryColor')); self::$wb_controls[$wid][$i]->hint = self::encoding_toGUI('Раздел'); self::$wb_controls[$wid][$i]->cursor = crHandPoint; self::$wb_controls[$wid][$i]->onMouseEnter = function ($id) { c($id)->font->color = dsSpy::skin('CategoryColor', 1); }; self::$wb_controls[$wid][$i]->onMouseLeave = function ($id) { c($id)->font->color = dsSpy::skin('CategoryColor', 0); }; $url = 'http://' . self::$Host . '/' . $Text['caturi']; self::$wb_controls[$wid][$i]->onClick = function ($id) use(&$url) { dsSpy::RunURL($url); }; unset($url); // theme $themtxt = self::encoding_toGUI($Text['themefull']); self::$wb_controls[$wid][++$i] = self::ds_createLabel($parent, $x, $y += $h, $w, $h = 40, mb_substr($Text['themefull'], 0, 80) . (mb_strlen($Text['themefull']) > 80 ? '…' : ''), taCenter, fsBold, 9, self::skin('ThemeColor')); self::$wb_controls[$wid][$i]->hint = self::encoding_toGUI($Text['themefull']); self::$wb_controls[$wid][$i]->wordWrap = true; self::$wb_controls[$wid][$i]->cursor = crHandPoint; self::$wb_controls[$wid][$i]->layout = tlCenter; self::$wb_controls[$wid][$i]->onMouseEnter = function ($id) { c($id)->font->color = dsSpy::skin('ThemeColor', 1); }; self::$wb_controls[$wid][$i]->onMouseLeave = function ($id) { c($id)->font->color = dsSpy::skin('ThemeColor', 0); }; $url = 'http://' . self::$Host . '/' . $Text['themeuri']; self::$wb_controls[$wid][$i]->onClick = function ($id) use(&$url) { dsSpy::RunURL($url); }; unset($url); // post self::$wb_controls[$wid][++$i] = self::ds_createLabel($parent, $x, $y += $h, $w, $h = 20, '#' . $Text['messageid'] . ' перейти', taCenter, fsUnderline, 9, self::skin('ToMessageColor')); self::$wb_controls[$wid][$i]->hint = self::encoding_toGUI('Перейти к первому непрочитанному сообщению в теме'); self::$wb_controls[$wid][$i]->cursor = crHandPoint; self::$wb_controls[$wid][$i]->onMouseEnter = function ($id) { c($id)->font->color = dsSpy::skin('ToMessageColor', 1); }; self::$wb_controls[$wid][$i]->onMouseLeave = function ($id) { c($id)->font->color = dsSpy::skin('ToMessageColor', 0); }; $url = 'http://' . self::$Host . '/' . $Text['messageuri']; self::$wb_controls[$wid][$i]->onClick = function ($id) use(&$url) { dsSpy::RunURL($url); }; unset($url); $h += 10; // промежуток } wb_play_sound(WBC_INFO); break; } //wb_set_size(self::$wb_windows[$wid],WBC_NORMAL); //self::showWindow(self::$wb_windows[$wid],500); self::showWindow($wid); return $wid; }