Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Delphi Russian Knowledge Base 2.3, Новая версия от 30 января 2005 года 
:(
    Опции темы
Гость_Johnny M
Дата 31.7.2005, 11:24 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ребята - возникла проблемка. Скачал базу знаний с сайта http://www.drkb.ru/ - причем там было вот такое сообщение

Сайт временно закрыт
Новая версия drkb может быть скачена здесь



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

Action canceled
Internet Explorer was unable to link to the Web page you requested. The page might be temporarily unavailable.

--------------------------------------------------------------------------------

Please try the following:

Click the Refresh button, or try again later.

If you have visited this page previously and you want to view what has been stored on your computer, click File, and then click Work Offline.

For information about offline browsing with Internet Explorer, click the Help menu, and then click Contents and Index.




Internet Explorer


smile

  Вверх
StayAtHome
Дата 31.7.2005, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Попробуй распакуй CHM (хотя бы этим: http://wincmd.ru/plugring/chmdir.html) на отдельные HTML и посмотри, есть ли там все (т. е. выяснить то ли ты скачал битый файл, то ли у тебя InternetExplorer барахлит). Выяснишь-- тогда будет ясно что делать дальше.
PM MAIL WWW ICQ YIM   Вверх
Guest
Дата 31.7.2005, 15:14 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











ссылка мертвая - кстати, до этого у меня была старая база знаний - там все работало. Значит не IE виноват....

можт еще раз качнуть? smile
  Вверх
StayAtHome
Дата 31.7.2005, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Вот CRC (MD5) рабочего файла drkb23.chm:
Код
537421766E801FC41582C4727E43DAEE
Проверь.
PM MAIL WWW ICQ YIM   Вверх
Гость_Johnny M
Дата 31.7.2005, 15:37 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Еще бы знать что такое CRC smile
  Вверх
StayAtHome
Дата 31.7.2005, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Контрольная сумма файла. Своего рода "цифровой отпечаток"
TotalCommander'ом пользуешься? Он умеет их считать.
PM MAIL WWW ICQ YIM   Вверх
Гость_Johnny M
Дата 31.7.2005, 16:20 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Тотал коммандером не пользуюсь к сожалению.... наверное все таки архив битый
  Вверх
Quadr0
Дата 31.7.2005, 16:34 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 00:56
  Вверх
Гость_man
Дата 1.8.2005, 16:14 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Vit, спасибо огромное за справку, очень помогло в борьбе с ActiveX smile
  Вверх
Петрович
Дата 2.8.2005, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

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



В код процедуры CreateBitmapRgn из топика "Оптимизация скинов для окошек сложной формы" прокрались несколько досадных ошибок.
Пара из них в сущности безвредные, а вот одна существенная. Из за нее, в строящийся регион всегда попадала полностью верхняя строка кортинки, если вырезался любой цвет кроме черного.
Привожу исправленный мною код. Правда, для удобства разборок, его стиль был переоформлен в соответсвии с моими пристрастиями. Да простит меня автор, Бочаров Александр.
Код

unit RgnUnit; 

interface 

uses 
  Windows, SysUtils, Classes; 

function CreateBitmapRgn(DC : hDC; Bitmap: hBitmap; TransClr: TColorRef): hRgn; 
{ 
Данная функция создает регион, используя для этого растр Bitmap 
и исключая из него цвет TransClr. Все расчеты производятся для 
устройства DC. 

данная функция состоит из двух частей: 

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

Для выделения памяти под конвертируемое изображение используется функция 
WinAPI CreateDIBSection. Данная функция выделяет память и создает 
независмый растр. Для вызова данной функции необходимо заполнить структуру 
BITMAPINFO, что достаточно не сложно. 
Внимание! для изображений Windows Bitmap используется разрешение в формате 
dots per metr (pixels per metr), стандартному разрешению 72dpi соответствует 
2834dpm. 

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

Для конвертации и переноса исходного изображения в выделнную память 
используется функция WinAPI GetDIBits. Функции передаются следуюшие параметры: 
исходное изображение, количество рядов для переноса, указатель на память, 
куда следует перенести изображение, структура BITMAPINFO с заполнеными первыми 
шестью членами (именно здесь задяются параметры для конвертирования 
изображения). Фактически, данная функция может перевести любой исходный растр 
в любой необходимый растр. 

вторая чать описываемой функции проходится по области памяти, куда было 
занесено конвертируемое изображение, отсекает ненужные области и содает регион. 
Для создания региона используется функция WinAPI ExtCreateRegion. Для вызова 
данной функции необходимо заполнить структуру RGNDATA, состоящую из структуры 
RGNDATAHEADER и необходимого количества структур RECT. в Дельфи структура 
RGNDATA описана так: 

  _RGNDATA = record 
    rdh: TRgnDataHeader; 
    Buffer: array[0..0] of CHAR; 
    Reserved: array[0..2] of CHAR; 
  end; 
  RGNDATA = _RGNDATA; 

Скорее всего, поле Reserved было введено программистами Дельфи только для того, 
чтобы в нее умещался хотя бы один прямоугольник, т.к. в Microsoft Platfrom SDK 
этого поля нет. Однако, данная структура нам не подходит, т.к. нам необходимо 
учитывать сразу несколько прямоугольников. Для решения этой задачи приходится 
выделять память вручную, с учетом RGNDATAHEADER и количества прямоугольников, 
необходимых нам, заносить туда прямоугольники (после RGNDATAHEADER), 
создавать указатель на структуру RGNDATA и ставить его на выделнную память. 

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

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

по окнчании работы функции освобождается память, выделенная на конвертируемый 
растр и структуру RGNDATA. 
} 

implementation 

//создает регион из растра Bitmap для DC с удалением цвета TransClr 
//внимание! TColorRef и TColor не одно и тоже. 
//Для перевода используется функция ColorToRGB(). 

function CreateBitmapRgn(DC: hDC; Bitmap: hBitmap; TransClr: TColorRef): hRgn;
var
  bmInfo: TBitmap;                //структура BITMAP WinAPI
  W, H: Integer;                  //высота и ширина растра
  bmDIB: hBitmap;                 //дискрептор независимого растра
  bmiInfo: BITMAPINFO;            //структура BITMAPINFO WinAPI
  lpBits, lpOldBits: PRGBTriple;  //указатели на структуры RGBTRIPLE WinAPI
  lpData: PRgnData;               //указатель на структуру RGNDATA WinAPI
  X, Y, C, F, I: Integer;         //переменные циклов
  Buf: Pointer;                   //указатель
  BufSize: Integer;               //размер указателя
  rdhInfo: TRgnDataHeader;        //структура RGNDATAHEADER WinAPI
  lpRect: PRect;                  //указатель на TRect (RECT WinAPI)
begin
  Result:=0;
  if Bitmap=0 then Exit;          //если растр не задан, выходим

  GetObject(Bitmap, SizeOf(bmInfo), @bmInfo);  //узнаем размеры растра 
  W:=bmInfo.bmWidth;                           //используя структуру BITMAP 
  H:=bmInfo.bmHeight; 
  I:=(W*3)-((W*3) div 4)*4;                    //определяем смещение в байтах 
  if I<>0 then I:=4-I; 

//Пояснение: растр Windows Bitmap читается снизу вверх, причем каждая строка 
//дополняется нулевыми байтами до ее кратности 4. 
//для 32-х битный растров такой сдвиг делать не надо. 

//заполняем BITMAPINFO для передачи в CreateDIBSection 

  bmiInfo.bmiHeader.biWidth:=W;             //ширина 
  bmiInfo.bmiHeader.biHeight:=H;            //высота 
  bmiInfo.bmiHeader.biPlanes:=1;            //всегда 1 
  bmiInfo.bmiHeader.biBitCount:=24;         //три байта на пиксель 
  bmiInfo.bmiHeader.biCompression:=BI_RGB;  //без компрессии 
  bmiInfo.bmiHeader.biSizeImage:=0;         //размер не знаем, ставим в ноль 
  bmiInfo.bmiHeader.biXPelsPerMeter:=2834;  //пикселей на метр, гор.
  bmiInfo.bmiHeader.biYPelsPerMeter:=2834;  //пикселей на метр, верт.
  bmiInfo.bmiHeader.biClrUsed:=0;           //палитры нет, все в ноль 
  bmiInfo.bmiHeader.biClrImportant:=0;      //то же 
  bmiInfo.bmiHeader.biSize:=SizeOf(bmiInfo.bmiHeader); //размер структруы 
  bmDIB:=CreateDIBSection(DC, bmiInfo, DIB_RGB_COLORS, 
                          Pointer(lpBits), 0, 0); 
//создаем независимый растр WxHx24, без палитры, в указателе lpBits получаем 
//адрес первого байта этого растра. bmDIB - дискрептор растра 

//заполняем первые шесть членов BITMAPINFO для передачи в GetDIBits 

  bmiInfo.bmiHeader.biWidth:=W;             //ширина 
  bmiInfo.bmiHeader.biHeight:=H;            //высота 
  bmiInfo.bmiHeader.biPlanes:=1;            //всегда 1
  bmiInfo.bmiHeader.biBitCount:=24;         //три байта на пиксель
  bmiInfo.bmiHeader.biCompression:=BI_RGB;  //без компресси 
  bmiInfo.bmiHeader.biSize:=SizeOf(bmiInfo.bmiHeader); //размер структуры 
  GetDIBits(DC, Bitmap, 0, H, lpBits, bmiInfo, DIB_RGB_COLORS); 
//конвертируем исходный растр в наш с его копированием по адресу lpBits 

  lpOldBits:=lpBits;  //запоминаем адрес lpBits

//первый проход - подсчитываем число прямоугольников, необходимых для
//создания региона
  C:=0;                         //сначала ноль
  for Y:=H-1 downto 0 do begin  //проход снизу вверх
    X:=0;
    while X<W do begin             //от 0 до ширины-1
//пропускаем прзрачный цвет, увеличивая координату и указатель
      while (X<W) and (RGB(lpBits.rgbtRed,lpBits.rgbtGreen,lpBits.rgbtBlue)=TransClr) do begin
        Inc(lpBits);
        X:=X+1;
      end;
//если нашли не прозрачный цвет, то считаем, сколько точек в ряду он идет
      if (X<W) and (RGB(lpBits.rgbtRed,lpBits.rgbtGreen,lpBits.rgbtBlue)<>TransClr) then begin
        while (X<W) and (RGB(lpBits.rgbtRed,lpBits.rgbtGreen,lpBits.rgbtBlue)<>TransClr) do begin
          Inc(lpBits);
          X:=X+1;
        end;
        C:=C+1;  //увиличиваем счетчик прямоугольников
      end;
    end;
//ряд закончился, необходимо увеличить указатель до кратности 4
    PChar(lpBits):=PChar(lpBits)+I;
  end;

  lpBits:=lpOldBits;  //восстанавливаем значение lpBits

//Заполняем структуру RGNDATAHEADER
  rdhInfo.iType:=RDH_RECTANGLES;             //будем использовать прямоугольники
  rdhInfo.nCount:=C;                         //их количество
  rdhInfo.nRgnSize:=0;                       //размер выделяем памяти не знаем
  rdhInfo.rcBound:=Rect(0, 0, W, H);         //размер региона
  rdhInfo.dwSize:=SizeOf(rdhInfo);           //размер структуры

//выделяем память для струтуры RGNDATA:
//сумма RGNDATAHEADER и необходимых на прямоугольников
  BufSize:=SizeOf(rdhInfo)+SizeOf(TRect)*C;
  GetMem(Buf, BufSize);
  lpData:=Buf;             //ставим указатель на выделенную память
  lpData.rdh:=rdhInfo;     //заносим в память RGNDATAHEADER

//Заполдяенм память прямоугольниками
  lpRect:[email protected];  //первый прямоугольник
  for Y:=H-1 downto 0 do begin
    X:=0;
    while X<W do begin
      while (X<W) and (RGB(lpBits.rgbtRed,lpBits.rgbtGreen,lpBits.rgbtBlue)=TransClr) do begin
        Inc(lpBits);
        X:=X+1;
      end;
      if (X<W) and (RGB(lpBits.rgbtRed,lpBits.rgbtGreen,lpBits.rgbtBlue)<>TransClr) then begin
        F:=X;
        while (X<W) and (RGB(lpBits.rgbtRed,lpBits.rgbtGreen,lpBits.rgbtBlue)<>TransClr) do begin
          Inc(lpBits);
          X:=X+1;
        end;
        lpRect^:=Rect(F, Y, X, Y+1);  //заносим координаты
        Inc(lpRect);                  //переходим к следующему
      end;
    end;
    PChar(lpBits):=PChar(lpBits)+I;
  end;

//после окночания заполнения структуры RGNDATA можно создавать регион.
//трансформации нам не нужны, ставим в nil, указываем размер
//созданной структуры и ее саму.
  Result:=ExtCreateRegion(nil, BufSize, lpData^);  //создаем регион

  FreeMem(Buf, BufSize);  //теперь структура RGNDATA больше не нужна, удаляем
  DeleteObject(bmDIB);    //созданный растр тоже удаляем
end;

end.


Это сообщение отредактировал(а) Петрович - 2.8.2005, 15:38


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Stolzen
Дата 27.10.2005, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Vit, спасибо тебе за проделанную работу!!!

Теперб к делу: в WinApi -> Мышка/клавиатура -> Мышь -> Как автоматически помещать курсор мышки в центр контрола получившего фокус? нашел ошибку.

Процедуру MoveMouseOverControl лучше написать так:

Код

procedure MoveMouseOverControl(Sender: TObject);
var
  Point: TPoint;
begin
  with TControl(Sender) do
  begin
    Point.X := Left + (Width  div 2);
    Point.Y := Top +  (Height div 2);
    Point := Parent.ClientToScreen(Point);
    SetCursorPos(Point.X, Point.Y);
  end;
end;


Иначе курсор переносится не в центр контрола, а на панель задач(у меня)


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Vit
Дата 28.10.2005, 04:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



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



smile Стиль мой... Я все коды переформатировал под единый стиль в DRKB


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
StayAtHome
Дата 11.11.2005, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Не нашел в DRKB статтьи "Сабклассинг и суперклассинг в Delphi для начинающих" http://forum.vingrad.ru/index.php?showtopic=69246
Стоящая статья, спасибо автору smile
PM MAIL WWW ICQ YIM   Вверх
Quadr0
Дата 11.11.2005, 15:15 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 02:44
  Вверх
Guest
Дата 21.11.2005, 17:39 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Дополнение к теме "Как узнать, по какой колонке был клик в TListView?"

Код

function acGetItemAt(lsv: TListView; X, Y: integer; var Col: integer): TListItem;
// Получение по координатам элемента, над которым пользователь щелкнул.
{  Пример использования:
procedure TForm1.ListView1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  col: Integer;
  li: TListItem;
begin
  li:= acGetItemAt(ListView1, x, y, col);
  if li <> nil then ShowMessage('Column #' + IntToStr(col));
end;
}
var
  i, RelativeX, ColStartX: Integer;
  ListItem: TlistItem;
  HTI: TLVHitTestInfo;
begin
  Result:= lsv.GetItemAt(X, Y);
  if Result <> nil then begin
    Col:= 0; // Первая колонка
  end
  else if (lsv.ViewStyle = vsReport) and (lsv.TopItem <> nil) then begin
    HTI.pt.x:= X;
    HTI.pt.y:= Y;
    lsv.Perform(LVM_SUBITEMHITTEST, 0, Integer(@HTI));
    Col:= HTI.iSubItem;
    Result:= lsv.Items[HTI.iItem];
  end;
end;

  Вверх
Страницы: (9) Все « Первая ... 5 6 [7] 8 9 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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