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

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Обновлён FAQ для скачивания, Версия 2.0 (Более 1700 статей) 
:(
    Опции темы
Vit
  Дата 8.12.2003, 03:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


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

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



Существенно обновлён FAQ.

1. Добавлено более 300 статей
2. В существующие статьи добавлено большое количество нового материала
3. Улучшена классификация, навигация.
4. Исправлены ошибки.
5. Добавлены мои комментарии к некоторым статьям.

Ссылки для скачивания:

1) Основная: http://chicago.lastplanet.com/DelphistFAQ.2.0.zip
2) Дополнительная: http://www.delphist.com/DelphistFAQ.2.0.zip

Формат: Файл CHM (упакован zip), размер 5 496 039 байт (5.24 MB)


Очень прошу сообщать о всех пожеланиях, дополнениях, неточностях и т.п.


--------------------
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   Вверх
dr.ZmeY
Дата 8.12.2003, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Политолог
****


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

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



Интересно.. посмотрим...



--------------------
PM MAIL WWW ICQ Skype   Вверх
NiJazz
Дата 8.12.2003, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


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

Репутация: 6
Всего: 23



Vit, спасибо! Предыдущие были хороши, представляю, что с этим. smile.gif
PM MAIL   Вверх
Vit
Дата 8.12.2003, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


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

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



2 Snick_Y2K - я знаю, что ты сейчас занят, но мне необходимо твоё мнение и помощь как специалиста:

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

2) Нужен логотип FAQ - не очень большой, но оригинальный





--------------------
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   Вверх
Vit
Дата 8.12.2003, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


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

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



2 All - мне нужен помошник. Желателен опыт работы с Help and Manual и хотя бы поверхностное знание Дельфи.

Нужно помочь мне с составлением внутренних ссылок в FAQ - как в официальных Help - везде есть линк на "See Also" и список ссылок близких тем...


--------------------
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   Вверх
December
Дата 13.12.2003, 01:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


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

Репутация: 8
Всего: 57



Дубляж:

API - Windows - Как скрыть ТаскБар
API - Windows - Как принудительно скрыть ТаскБар

API - Windows - Как скрыть/показать иконки на рабочем столе?
API - Windows - Как скрыть /показать иконки на рабочем столе?


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
Vit
Дата 13.12.2003, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


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

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



2 December - спасибо, это самая большая проблема - дубляжи, я уже не помню - что есть, а чего нет.


--------------------
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   Вверх
December
Дата 13.12.2003, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


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

Репутация: 8
Всего: 57



Soon will be more...


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
December
Дата 14.12.2003, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


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

Репутация: 8
Всего: 57



Системные функции и WinAPI - Windows - Шрифты, языки... - Перекодировка
Хороший алгоритм, только вот что-то непонятное там со строкой
Цитата

Str[dos] := 'Ђ ?Ў‚ўѓЈ„¤…Ґ†¦‡§?Ё‰©ЉЄ‹"Њ¬?­Ћ®?Ї?а'б'в"г"де–ж—з?и™йљк›лњм?нћоџп';

Просто перенести в свой проект не удаётся.

Также есть несколько (три или больше) статей "Как научить BDE и Database Desktop говорить по-русски". Имеет смысл удалять клоны или лучше оставить как есть, чтобы проще найти было?


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
December
Дата 14.12.2003, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


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

Репутация: 8
Всего: 57



И вообще, нужно в раздел "Языки, перекодировка..." впихнуть топик из "Работа с dBase"
При использовании DOS DBF файлов - перекодировка между форматами


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
StayAtHome
Дата 31.1.2004, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



1. В разделе "Математика, алгоритмы" есть статья с ошибкой в названии:
"Как проверить правильность номера средитной карточки?"
2. Дублирующиеся темы:
Цитата
Работа с графикой и мультимедиа/GDI - графика в Delphi
  Работа с графикой и мультимедиа/Разные вопросы, связанные с графикой/GDI: графика в Delphi

Цитата
VCL/DBGrid/Как экспортировать содержимое DBGrid в Excel или ClipBoard?
  ActiveX,COM.../Работа с Excel из Delphi/Как экспортировать содержимое DBGrid в Excel или ClipBoard
(ИМХО это разные статьи а не ссылки, т.к. названия у них отличаются)
Цитата
Delphi IDE/Работа с ToolsAPI/Текущий модуль и проект -- есть две одинаковые статьи с таким названием.

3. -
Цитата
"ActiveX,COM.../Общие вопросы о COM.../ Общие сведения о COM/Понятие интерфейсе"
-- наверно лучше "Понятие об интерфейсе"
PM MAIL WWW ICQ YIM   Вверх
StayAtHome
Дата 31.1.2004, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Кандидатуры на добавление в FAQ:

Как правильно работать с прозрачными окнами (стиль WS_EX_TRANSPARENT)?
Стиль окна-формы указывается в CreateParams. Только вот когда перемещаешь его, фон остается со старым куском экрана. Чтобы этого не происходило, то когда pисуешь своё окно, запоминай, что было под ним,а пpи пеpемещении восстанавливай.
HDC hDC = GetDC(GetDesktopWindow()) тебе поможет..
Andrei Bogomolov
http://cardy.hypermart.net
ICQ UIN:7329451
[email protected]
e-pager: [email protected]
(2:5013/11.3)
------------------------------------------------------------------------------------------
OpneGL: Каким обpазом выбиpать pазмеp шpифта, т.к. все мои стpадания по выбоpy паpаметpов шpифта в CreateFont() никак не отpажались на его pазмеpе
Все что я пpидyмал, это юзать glScale(), но в этом слyчае полyчаем плохое качество (по сpавнению с той-же Воpдой) пpи малом pазмеpе символов. Вот часть работающего примера на Си (переведенного мною на Паскаль (АА)).
Код

procedure GLSetupRC( pData: Pointer )
//void GLSetupRC(void *pData)
//{
var
//  HDC hDC;
hDC: HDC;
//  HFONT hFont;
hFont: HFONT;
//  GLYPHMETRICSFLOAT agmf[128];
agmf: array [0..127] of GLYPHMETRICSFLOAT;
//  LOGFONT logfont;
logfont: LOGFONT;

begin

 logfont.lfHeight := -10;
 logfont.lfWidth := 0;
 logfont.lfEscapement := 0;
 logfont.lfOrientation := 0;
 logfont.lfWeight := FW_BOLD;
 logfont.lfItalic := FALSE;
 logfont.lfUnderline := FALSE;
 logfont.lfStrikeOut := FALSE;
 logfont.lfCharSet := ANSI_CHARSET;
 logfont.lfOutPrecision := OUT_DEFAULT_PRECIS;
 logfont.lfClipPrecision := CLIP_DEFAULT_PRECIS;
 logfont.lfQuality := DEFAULT_QUALITY;
 logfont.lfPitchAndFamily := DEFAULT_PITCH;
 //strcpy(logfont.lfFaceName,"Arial");
//  strcpy(logfont.lfFaceName,"Decor");
 StrPCopy( logfont.lfFaceName, 'Decor' );

 glDepthFunc(GL_LESS);
 glEnable(GL_DEPTH_TEST);  // Hidden surface removal
 glFrontFace(GL_CCW);      // Counter clock-wise polygons face out
 glEnable(GL_CULL_FACE);   // Do not calculate insides
 glShadeModel(GL_SMOOTH);  // Smooth shading
 glEnable(GL_AUTO_NORMAL);
 glEnable(GL_NORMALIZE);
 glEnable(GL_COLOR_MATERIAL);

 glClearColor(0.0, 0.0, 0.0, 1.0 );

 glEnable(GL_LIGHTING);
 glLightfv(GL_LIGHT0,GL_AMBIENT,ambientLight);
 glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuseLight);
 glLightfv(GL_LIGHT0,GL_SPECULAR,specular);
 glLightfv(GL_LIGHT0,GL_POSITION,lightPos);
 glEnable(GL_LIGHT0);

 glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);

 glMaterialfv(GL_FRONT, GL_SPECULAR,specular);
 glMateriali(GL_FRONT,GL_SHININESS,100);

 // Blue 3D Text
 glRGB(0, 0, 255);

 // Select the font into the DC
 hDC := (HDC)pData;
//  hFont = CreateFontIndirect(&logfont);
 hFont := CreateFontIndirect( Addr(logfont) );
 SelectObject (hDC, hFont);

 //create display lists for glyphs 0 through 255 with 0.3 extrusion
 // and default deviation. The display list numbering starts at 1000
 // (it could be any number).

//  if(!wglUseFontOutlines(hDC, 0, 128, 1000, 0., 0.3,
//                            WGL_FONT_POLYGONS, agmf))
 if not wglUseFontOutlines(hDC, 0, 128, 1000, 0., 0.3,

//>                                         ``` - это тебе поможет
//> Выводить текст можно в любым масштабе

                           WGL_FONT_POLYGONS, agmf) then

    Windows.MessageBox(nil,'Could not create Font Outlines',
                    'Error',MB_OK or MB_ICONSTOP);

 // Delete the font now that we are done

 DeleteObject(hFont);
//}
end;

// void GLRenderScene(void *pData)
procedure GLRenderScene(pData: Pointer);
begin
 (*  ...  *)

 // Draw 3D text
 glListBase(1000);
 glPushMatrix();
 // Set up transformation to draw the string.
 glTranslatef(-35.0, 0.0, -5.0);
 glScalef(60.0, 60.0, 60.0);
 glCallLists(3, GL_UNSIGNED_BYTE, 'Decor');
 glPopMatrix();  // Clear the window with current clearing color

 (* ... *)
end;

Автор: Garik Pozdeev (2:5021/15.9)

Это сообщение отредактировал(а) StayAtHome - 31.1.2004, 12:45
PM MAIL WWW ICQ YIM   Вверх
StayAtHome
Дата 31.1.2004, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Как по IP адресу получить HostName (и обратно)
Хм... А ты увеpен, что пытался найти эту функцию?
Ты, навеpно, будешь очень удивлен (так уж повелось в этой эхе), но это gethostbyaddr, а если в Winsock2, то можно еще SAAddressToString
Скачиваешь с microsoft или с intel WinSock2 SDK и документацию (она отдельно),там все есть.
Мне лень сейчас вспоминать и pазбиpаться, вот тебе кусочек, в котоpом этим функции используются (не пpетендую на абсолютную истину, но с IP pаботает):
Код

function TGenericNetTask.GetPeerOrigin( const ALogin : String ) : DWORD;
const AddressStrMaxLen = 256;
var len : DWORD;
       ptr : PChar;
       pHE : PHostEnt;
       addr : TSockAddr;
       buf : Array [0..AddressStrMaxLen-1] of Char;
begin
   if FNet=nil then raise ESocketError.Error(-1,ClassName+'.GetPeerAds: Net is
not defined',WSAHOST_NOT_FOUND);
   len := SizeOf(TSockAddr);
   if getpeername(FSocket,addr,len)<>0 then
RaiseLastSocketError(-1,ClassName+'.GetPeerAds: getpeername()');
   case addr.sin_family of
   AF_INET: // TCP/IP

       begin
           pHE := gethostbyaddr( PChar(@addr.sin_addr), SizeOf(TInAddr),
AF_INET );
           if pHE=nil then RaiseLastSocketError(-1,ClassName+'.GetPeerAds:
gethostbyaddr()');
           FPeerNodeName := pHE^.h_name;
           if FNet.NodeByName(FPeerNodeName)=nil then
           begin
               ptr := StrScan(pHE^.h_name,'.');
               if ptr<>nil then FPeerNodeName :=
Copy(pHE^.h_name,1,ptr-pHE^.h_name);
           end;
       end;

   else
       len := AddressStrMaxLen;
       if WSAAddressToStringA(sin,sinlen,nil,buf,len)<>0 then
RaiseLastSocketError(-1,ClassName+'.GetPeerAds: WSAAddressToStringA()');
       ptr := StrRScan(buf,':');
       if ptr<>nil then len := ptr-buf;
       FPeerNodeName := Copy(buf,1,len);
   end;
   Result :=
FNet.EncodeAddress(ALogin,FPeerNodeName,'',[bLoginIdRequired,bNodeIdREquired,bR
aiseError]);
end; {TGenericNetTask.GetPeerOrigin}

Alex Konshin
mailto:[email protected]"
(2:5030/217)
------------------------------------------------------------------------------------------------------
Хотелось бы иметь возможность отмены вставки нового узла в TTreeView по нажатию кнопки Esc. Как сделать?
Код
unit BetterTreeView;
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 ComCtrls, CommCtrl;

type
 TTVNewEditCancelEvent = procedure( Sender: TObject;
   Node: TTreeNode; var Delete: Boolean) of object;
 TBetterTreeView = class(TTreeView)
 protected
   FIsEditingNew: Boolean;
   FOnEditCancel: TTVChangedEvent;
   FOnNewEditCancel: TTVNewEditCancelEvent;
   procedure Edit(const Item: TTVItem); override;
 public
   function NewChildAndEdit(Node: TTreeNode; const S: String)

     : TTreeNode;
 published
   property IsEditingNew: Boolean read FIsEditingNew;
   property OnEditCancel: TTVChangedEvent
     read FOnEditCancel write FOnEditCancel;
   property OnNewEditCancel: TTVNewEditCancelEvent
     read FOnNewEditCancel write FOnNewEditCancel;
 end;

implementation

procedure TBetterTreeView.Edit(const Item: TTVItem);
var
 Node: TTreeNode;
 Action: Boolean;
begin
 with Item do begin
   { Get the node }
   if (state and TVIF_PARAM)  0 then
     Node := Pointer(lParam)

   else
     Node := Items.GetNode(hItem);

   if pszText = nil then begin
     if FIsEditingNew then begin
       Action := True;
       if Assigned(FOnNewEditCancel) then
         FOnNewEditCancel(Self, Node, Action);
       if Action then
         Node.Destroy
     end
     else
       if Assigned(FOnEditCancel) then
         FOnEditCancel(Self, Node);
   end
   else
     inherited;
 end;
 FIsEditingNew := False;
end;

function TBetterTreeView.NewChildAndEdit
 (Node: TTreeNode; const S: String): TTreeNode;

begin
 SetFocus;
 Result := Items.AddChild(Node, S);
 FIsEditingNew := True;
 Node.Expand(False);
 Result.EditText;
 SetFocus;
end;

end.

Том Сван "Секреты..."







Это сообщение отредактировал(а) StayAtHome - 31.1.2004, 12:48
PM MAIL WWW ICQ YIM   Вверх
StayAtHome
Дата 31.1.2004, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Как зафиксировать один или несколько столбцов в TDBGrid с возможностью навигации по этим столбцам?
Код
procedure TDbGridEx.ColEnter;

procedure ProcessColEnter;
begin
 // -----------------------------------------------------------
 if (SelectedIndex  _Mark) then
   begin
     ColumnMoved(Columns.Count, StaticCol + 1);
     SelectedField := Fields[StaticCol];
   end;
   Exit;
 end;

 // -----------------------------------------------------------
 if (SelectedIndex > StaticCol) then
 begin

   if _LastSelectedIndex = StaticCol then
   begin
     if _Mark = Columns[SelectedIndex].Title.Caption then

     begin
       ColumnMoved(StaticCol + 1, Columns.Count);
       SelectedField := Fields[Columns.Count - 1];
     end
       else
     begin
       ColumnMoved(StaticCol + 1, Columns.Count);
       SelectedField := Fields[StaticCol];
     end;
   end;

 end;
end;

begin
 if (_EntryCol > 0) or _MouseDown or (StaticCol = 0) then
 begin
   _MouseDown := FALSE;
 end else
 begin
   inc(_EntryCol);
   ProcessColEnter;
   dec(_EntryCol);
 end;

 if Assigned(OnColEnter) then OnColEnter(Self);

 _LastSelectedIndex := SelectedIndex;
end;

Автор: Ramil Galiev
(2:5085/33.11)




PM MAIL WWW ICQ YIM   Вверх
StayAtHome
Дата 31.1.2004, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Использование HOOK в Дельфи.

Что такое НООК?
НООК - это механизм перехвата сообщений, предоставляемый системой Microsoft Windows. Программист пишет специального вида функцию (НООК-функция), которая затем при помощи функции SetWindowsHookEx вставляется на верх стека НООК-функций системы. Ваша НООК-функция сама решает, передать ли ей сообщение в следующую НООК-функцию при помощи CallNextHookEx или нет.

Какие бывает НООК'и?
НООК бывают глобальные, контролирующие всю систему, так и локальные, ориентированные на какой-либо поток (Thread). Кроме того НООК различаются по типу перехватываемых сообщений (подробнее об этом - ниже). НООК несколько подтормаживают систему, поэтому ставить их рекомендуется только при необходимости, и кактолько необходимость в них отпадает - удалять.

Как создавать НООК?
НООК устанавливается в систему при помощи функции SetWindowsHookEx, вот её заголовок:
Код
function SetWindowsHookEx(idHook: Integer; lpfn: TFNHookProc; hmod: HINST; dwThreadId: DWORD): HHOOK;

idHook
константа, определяющая тип вставляемого НООК'а, должна быть одна из нижеследующих констант:
WH_CALLWNDPROC
вставляемая НООК-функция следит за всеми сообщения перед их отпралением в соответствующую оконную функцию
WH_CALLWNDPROCRET
вставляемая НООК-функция следит за всеми сообщениями после их отправления в оконную функцию
WH_CBT
вставляемая НООК-функция следит за окнами, а именно: за созданием, активацией, уничтожением, сменой размера; перед завершением системной команды меню, перед извлечением события мыши или клавиатуры из очереди сообщений, перед установкой фокуса и т.д.
WH_DEBUG
вставляемая НООК-функция следит за другими НООК-функциями.
WH_GETMESSAGE
вставляемая НООК-функция следит за сообщениями, посылаемыми в очередь сообщений.
WH_JOURNALPLAYBACK
вставляемая НООК-функция посылает сообщения, записанные до этого WH_JOURNALRECORD НООК'ом.
WH_JOURNALRECORD
эта НООК-функция записывает все сообщения куда-либо в специальном формате, причем позже они могут быть "воспроизведены" при помощи НООК'а WH_JOURNALPLAYBACK. Это в некотором роде аналог магнитофонной записи сообщений.
WH_KEYBOARD
вставляемая НООК-функция следит за сообщениями клавиатуры
WH_MOUSE
вставляемая НООК-функция следит за сообщениями мыши
WH_MSGFILTER
WH_SHELL
WH_SYSMSGFILTER
lpfn
указатель на непосредственно функцию. Обратите внимание, что если Вы ставите глобальный НООК, то НООК-функция обязательно должна находиться в некоторой DLL!!!
hmod
описатель DLL, в которой находится код функции.
dwThreadId
идентификатор потока, в который вставляется НООК
Подробнее о НООК-функциях смотри справку по Win32API.

Как удалять НООК?
НООК удаляется при помощи функции UnHookWindowsEx.

Пример использования НООК.
Ставим НООК, следящий за мышью (WH_MOUSE). Программа следит за нажатием средней кнопки мыши, и когда она нажимается, делает окно, находящееся непосредственно под указателем, поверх всех остальных (TopMost). Код самой НООК-функции помещен в библиотеку lib2.dll, туда же помещены и функции Start - для установки НООК, и Remove - для удаления НООК.

Файл sticker.dpr
Код
program sticker;
 uses windows, messages;
var
 wc : TWndClassEx;
 MainWnd : THandle;
 Mesg : TMsg;
//экспортируем две функции из библиотеки с НООК'ами
procedure Start; external 'lib2.dll' name 'Start';
procedure Remove; external 'lib2.dll' name 'Remove';

function WindowProc(wnd:HWND; Msg : Integer; Wparam:Wparam; Lparam:Lparam):Lresult; stdcall;
var
 nCode, ctrlID : word;
Begin
 case msg of
 wm_destroy :
   Begin
   Remove;//удаляем НООК
   postquitmessage(0); exit;
   Result:=0;
   End;
 else
   Result:=DefWindowProc(wnd,msg,wparam,lparam);
 end;
End;

begin
 wc.cbSize:=sizeof(wc);
 wc.style:=cs_hredraw or cs_vredraw;
 wc.lpfnWndProc:=@WindowProc;
 wc.cbClsExtra:=0;
 wc.cbWndExtra:=0;
 wc.hInstance:=HInstance;
 wc.hIcon:=LoadIcon(0,idi_application);
 wc.hCursor:=LoadCursor(0,idc_arrow);
 wc.hbrBackground:=COLOR_BTNFACE+1;
 wc.lpszMenuName:=nil;
 wc.lpszClassName:='WndClass1';

 RegisterClassEx(wc);

 MainWnd:=CreateWindowEx(0,'WndClass1','Caption',ws_overlappedwindow,
           cw_usedefault,cw_usedefault,cw_usedefault,cw_usedefault,0,0,
           Hinstance,nil);
 ShowWindow(MainWnd,CmdShow);
 Start;//вставляем НООК

 While GetMessage(Mesg,0,0,0) do
  begin
  TranslateMessage(Mesg);
  DispatchMessage(Mesg);
  end;
end.
[code]

[i]Файл lib2.dpr[/i]
library lib2;
uses
 windows, messages;
var
 pt : TPoint;
 theHook : THandle;
function MouseHook(nCode, wParam, lParam : integer) : Lresult; stdcall;
var
 msg : PMouseHookStruct;
 w : THandle;
 style : integer;
Begin
 if nCode<0 then
   begin
   result := CallNextHookEx(theHook, nCode, wParam, lParam);
   Exit;
   end;
 msg := PMouseHookStruct(lParam);
 case wParam of
 WM_MBUTTONDOWN :
   pt := msg^.pt;
 WM_MBUTTONUP :
   begin
   w := WindowFromPoint(pt);
   style := GetWindowLong(w, GWL_EXSTYLE);
   if (style and WS_EX_TOPMOST) <> 0 then
     begin //уже поверх всех - сделать обычным
     ShowWindow(w, sw_hide);
     SetWindowPos(w, HWND_NOTOPMOST, 0,0,0,0, SWP_NOMOVE or SWP_NOSIZE OR SWP_SHOWWINDOW);
     end
   else
     begin //сделать поверх остальных
     ShowWindow(w, sw_hide);
     SetWindowPos(w, HWND_TOPMOST, 0,0,0,0, SWP_NOMOVE OR SWP_NOSIZE OR SWP_SHOWWINDOW);
     end;
   end;
 end;
 Result := CallNextHookEx(theHook, nCode, wParam, lParam);
End;

procedure Start;
begin
 theHook := SetWindowsHookEx(wh_mouse, @mouseHook, hInstance, 0);
 if theHook = 0 then
   messageBox(0,'Error!','Error!',mb_ok);
end;

procedure Remove;
begin
 UnhookWindowsHookEx(theHook);
end;

exports
 Start index 1 name 'Start',
 Remove index 2 name 'Remove';
end.

Всё.

(С) Автор статьи: Sergey Stolyarov
Development и Дельфи (http://MDelphi.far.ru).
При использовании этого материала ссылка на автора и
источник информации обязательна!!!
PM MAIL WWW ICQ YIM   Вверх
StayAtHome
Дата 31.1.2004, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Еще слать?
PM MAIL WWW ICQ YIM   Вверх
Vit
Дата 1.2.2004, 02:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


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

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



Огромное спасибо. Шли конечно...


--------------------
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
Дата 1.2.2004, 03:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Как получить доступ к битам переменной и управлять их значением?

Решение 1
Код
unit Bitwise;

interface

function IsBitSet(const val: longint; const TheBit: byte): boolean;
function BitOn(const val: longint; const TheBit: byte): LongInt;
function BitOff(const val: longint; const TheBit: byte): LongInt;
function BitToggle(const val: longint; const TheBit: byte): LongInt;

implementation

function IsBitSet(const val: longint; const TheBit: byte): boolean;
begin
 result := (val and (1 shl TheBit)) <> 0;
end;

function BitOn(const val: longint; const TheBit: byte): LongInt;
begin
 result := val or (1 shl TheBit);
end;

function BitOff(const val: longint; const TheBit: byte): LongInt;
begin
 result := val and ((1 shl TheBit) xor $FFFFFFFF);
end;

function BitToggle(const val: longint; const TheBit: byte): LongInt;
begin
 result := val xor (1 shl TheBit);
end;

end.


Решение 2
SetWord – слово, которое необходимо установить.
BitNum – номер бита, который необходимо выставить согласно определениям в секции const (Bit0, Bit1 и др.).
GetBitStat возвращает значение True, если бит установлен и False – в противном случае.

Код
const
 Bit0 = 1;
 Bit1 = 2;
 Bit2 = 4;
 Bit3 = 8;
 Bit4 = 16;
 Bit5 = 32;
 Bit6 = 64;
 Bit7 = 128;

 Bit8 = 256;
 Bit9 = 512;
 Bit10 = 1024;
 Bit11 = 2048;
 Bit12 = 4096;
 Bit13 = 8192;
 Bit14 = 16384;
 Bit15 = 32768;

procedure SetBit(SetWord, BitNum: Word);
begin
 SetWord := SetWord Or BitNum;        { Устанавливаем бит }
end;

procedure ClearBit(SetWord, BitNum: Word);
begin
 SetWord := SetWord Or BitNum;       { Устанавливаем бит }
 SetWord := SetWord Xor BitNum;      { Переключаем бит }
end;

procedure ToggleBit(SetWord, BitNum: Word);
begin
 SetWord := SetWord Xor BitNum;      { Переключаем бит }
end;

function GetBitStat(SetWord, BitNum: Word): Boolean;
begin
 GetBitStat := SetWord and BitNum = BitNum; { Если бит установлен }
end;

Источник: Книга В. Озерова "Delphi. Советы программистов"

----------------------------------------------------------------------------------------------------
Пожелание
Добавить ссылку на статью "VCL/TForm/Общие вопросы/Как иммитировать появление формы как нового приложения?" В раздел "Системные функции и WinAPI/Windows/Taskbar, кнопка Пуск..."

Это сообщение отредактировал(а) StayAtHome - 1.2.2004, 03:37
PM MAIL WWW ICQ YIM   Вверх
StayAtHome
Дата 1.2.2004, 03:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Как послать самостийное сообщение всем окнам Windows?
Код
Var
FM_FINDPHOTO: Integer;
// Для использовать hwnd_Broadcast нужно сперва
// зарегистрировать уникальное сообщение
Initialization
FM_FindPhoto:=RegisterWindowMessage('MyMessageToAll');
// Чтобы поймать это сообщение в другом приложении
//(приемнике) нужно перекрыть DefaultHandler
procedure TForm1.DefaultHandler(var Message);
begin
 with TMessage(Message) do
 begin
   if Msg = Fm_FindPhoto then MyHandler(WPARAM,LPARAM)  else
   Inherited DefaultHandler(Message);
 end;

end;

// А тепрь можно
SendMessage(HWND_BROADCAST,FM_FINDPHOTO,0,0);

Кстати, для посылки сообщения дочерним контролам некоего контрола можно использовать метод Broadcast.

АвторAndrey Burov
(2:463/238.19)
PM MAIL WWW ICQ YIM   Вверх
StayAtHome
Дата 1.2.2004, 03:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Как отчитывать промежутки времени с точностью, большей чем 60 мсек?
Для начала описываешь процедуру, которая будет вызываться по сообщению от таймера :
Код
procedure FNTimeCallBack(uTimerID, uMessage: UINT;dwUser, dw1, dw2: DWORD)
stdcall;
begin
//
//  Тело процедуры.
end;

а дальше в программе (например по нажатию кнопки) создаешь Таймер и вешаешь на него созданную процедуру
Код
uTimerID:=timeSetEvent(10,500,@FNTimeCallBack,100,TIME_PERIODIC);

Подробности смотри в Help.
Hу и в конце убиваешь таймер
Код
timeKillEvent(uTimerID);

И все. Точность этого способа до 1 мсек. минимальный интервал времени можно задавать 1 мсек.

Автор: Leonid Tserling
[email protected]
PM MAIL WWW ICQ YIM   Вверх
StayAtHome
Дата 1.2.2004, 03:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Как указать максимальный размер текста для RichEdit Control?
У этого компонента есть свойство MaxLength, которое работает некорректно. Поэтому лучше пользоваться
Код
RichEdit.Perform(EM_LIMITTEXT, нужный размер, 0);

Причем перед каждом открытии файла это действие необходимо повторять.

Maxim Liverovskiy
(2:5030/254.38)

Если Вы передаете в качестве размера 0, то ОС ограничивает размер OS Specific Default Value. Реально, по результатам моих экспериментов, поставить можно размер, чуть меньший доступной виртуальной памяти. Я ограничился 90% от свободной виртуалки.
Для того, чтобы не повторять этот вызов (EM_LIMITTEXT), можно воспользоваться сообщением EM_EXLIMITTEXT.

Stas Mehanoshin
(2:5030/143.23)
PM MAIL WWW ICQ YIM   Вверх
StayAtHome
Дата 1.2.2004, 03:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Как рисовать картинки в пунктах меню?
Код
unit DN_Win;

interface

uses
 SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
 Forms, Dialogs, Menus, StdCtrls,

type
 TDNForm = class(TForm)
   MainMenu1: TMainMenu;
   cm_MainExit: TMenuItem;
   procedure FormCreate(Sender: TObject);
   procedure cm_MainExitClick(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
   BM:TBitmap;
   Procedure WMDrawItem(var Msg:TWMDrawItem);      message wm_DrawItem;
   Procedure WMMeasureItem(var Msg:TWMMeasureItem); message
wm_MeasureItem;

 end;

var
 DNForm : TDNForm;

implementation

{$R *.DFM}

var
 Comm,yMenu : word;

procedure TDNForm.FormCreate(Sender: TObject);
begin
 {confused.gifconfused.gif?? ? confused.gif¦}
 yMenu:=GetSystemMetrics(SM_CYMENU);
 comm:=cm_MainExit.Command;
 ModifyMenu(MainMenu1.Handle,0,mf_ByPosition or mf_OwnerDraw,comm,'Go');
end;{TDNForm.FormCreate}

procedure TDNForm.cm_MainExitClick(Sender: TObject);
begin
 DNForm.Close;
end;{TDNForm.cmExitClick}

{?? confused.gifconfused.gifconfused.gif? confused.gif¦}
Procedure TDNForm.WMMeasureItem(var Msg:TWMMeasureItem);

Begin
with Msg.MeasureItemStruct^ do
 if ItemID=comm then  begin ItemWidth:=yMenu; Itemheight:=yMenu; end;
End;{WMMeasureItem}
{}
Procedure TDNForm.WMDrawItem(var Msg:TWMDrawItem);
var
 MemDC:hDC;
 BM:hBitMap;
 mtd:longint;
Begin
with Msg.DrawItemStruct^ do
 begin
 if ItemID=comm then
   begin
     BM:=LoadBitMap(hInstance,'dver');
     MemDC:=CreateCompatibleDC(hDC);{hDC confused.gifconfused.gif ? confused.gifconfused.gifconfused.gif
TDrawItemStruct}
     SelectObject(MemDC,BM);
     {rcItem confused.gifconfused.gif ? confused.gifconfused.gifconfused.gif TDrawItemStruct}

     if ItemState=ods_Selected then mtd:=NotSrcCopy  else mtd:=SrcCopy;

StretchBlt(hDC,rcItem.left,rcItem.top,yMenu,yMenu,MemDC,0,0,24,23,mtd);
     DeleteDC(MemDC);
     DeleteObject(BM);
   end;
 end{with}
End;{TDNForm.WMDrawItem}

end.
Eugeny Sverchkov
[email protected]
(2:5031/12.23)
-----------------------------------------------------------------------------------------------------------
К сожалению, до меня этот совет дошел уже с битой кодировуой в комментариях

Это сообщение отредактировал(а) StayAtHome - 1.2.2004, 14:09
PM MAIL WWW ICQ YIM   Вверх
StayAtHome
Дата 1.2.2004, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Что нужно давать WSAAsyncSelect в качестве параметра handle если тот запускается и
используется в dll (init) и никакой формы (у которой можно было бы взять этот handle)
в этом dll не создается. Что бы такого сделать чтобы работало?

Код
const
 WM_ASYNCSELECT = WM_USER+0;
type
 TNetConnectionsManager = class(TObject)
protected
 FWndHandle : HWND;
 procedure WndProc( var MsgRec : TMessage );
 ...
end;

constructor TNetConnectionsManager.Create
begin
 inherited Create;
 FWndHandle := AllocateHWnd(WndProc);
 ...
end;

destructor TNetConnectionsManager.Destroy;
begin
 ...
 if FWndHandle<>0 then DeallocateHWnd(FWndHandle);
 inherited Destroy;
end;

procedure TNetConnectionsManeger.WndProc( var MsgRec : TMessage );
begin
 with MsgRec do
   if Msg=WM_ASYNCSELECT then
     WMAsyncSelect(MsgRec)
   else
     DefWindowProc( FWndHandle, Msg, wParam, lParam );
end;

Hо pекомендую посмотpеть WinSock2, в котоpом можно:
Код
WSAEventSelect( FSocket, FEventHandle, FD_READ or FD_CLOSE );
WSAWaitForMultipleEvents( ... );
WSAEnumNetworkEvents( FSocket, FEventHandle, lpNetWorkEvents );

То есть, обойтись без окон и без очеpеди сообщений windows, а заодно иметь возможность pаботать и с IPX/SPX, и с netbios.
Свой winsock2.pas я вчеpа кинул в RU.DELPHI.DB, если кто имеет такой из дpугих источников - свистните погpомче.

Автор: Alex Konshin
[email protected]
(2:5030/217)
PM MAIL WWW ICQ YIM   Вверх
StayAtHome
Дата 1.2.2004, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Как правильно в Win32 отслеживать запуск второй копии программы?
FindWindow является неполным решением (если меняется заголовок окна или если есть другая программа с таким же заголовком или типом окна).
Вторично: медленно.Лениво пользовать семафоры, покажу на именованных мутексах (семафоры с двумя состояниями).
Код
Unit OneInstance32;
interface
..........
implementation
uses
 Forms;
var
 g_hAppMutex: THandle;
function OneInstance: boolean;
var
 g_hAppCritSecMutex: THandle;
 dw: Longint;
begin
 g_hAppCritSecMutex := CreateMutex( nil, true, PChar(Application.Title +'.OneInstance32.CriticalSection') );
 // if GetLastError - лениво писать
 g_hAppMutex := CreateMutex( nil, false, PChar(Application.Title +'OneInstance32.Default') );
 dw := WaitForSingleObject( g_hAppMutex, 0 );
 Result :=  (dw <> WAIT_TIMEOUT);
 ReleaseMutex( g_hAppCritSecMutex ); // необязательно вследствие последующего закрытия
 CloseHandle( g_hAppCritSecMutex );
end;
initialization
 g_hAppMutex := 0;
finalization
 if LongBool( g_hAppMutex ) then
   begin
   ReleaseMutex( g_hAppMutex); // необязательно
   CloseHandle( g_hAppMutex );
   end;
end.

Автор:Akzhan Abdulin
(2:5040/55)
PM MAIL WWW ICQ YIM   Вверх
StayAtHome
Дата 1.2.2004, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Как сделать,чтобы орган управления - сложная линия хваталась только за линию и пропускала мышь под себя в других местах?
Надо CM_HITTEST обpабатывать (Это сообщение получают даже потомки от TGraphicsControl, не имеющего своего HWND). Hапpимеp, так:
Код
procedure TLine.CMHitTest(var Message: TWMNCHitTest);
begin
 if PointInLineReg(Message.XPos, Message.YPos) then
   Message.Result:=1
 else
   Message.Result:=0;
end;

Автор:Dmitry Medved
(2:464/58.7)
-------------------------------------------------------------------------------
Как отследить изменение файловой системы и/или реестра ОС?
Отслеживание файловой системы через FindFirstFileNotification и прочие.
Отслеживание реестра ОС - RegNotifyChangeKeyValue (только для NT).

Авторы:Alexey Mahotkin(2:5020/433)
Dmitry V'yal(2:450/110.11)


Примечание:Вопрос об отслеживании файлов уже есть, а вот о реестре - я не нашел.
-------------------------------------------------------------------------------
Как получить имя папки pабочего стола (не чеpез registry). ПРpосто очень
хочется поpаботать с shell functions.

Код
procedure TForm1.Button1Click(Sender: TObject);
procedure madd(s:string);
begin
 memo1.lines.add(s);
end;
var
 ppmalloc:imalloc;
 id:ishellfolder;
 pi:pitemidlist;
 lpname:tstrret;
begin
 if succeeded(shgetspecialfolderlocation(0,CSIDL_PROGRAMS,pi)) then  <<<<<<<
   begin
   madd('Succeeded programs location');
   if succeeded(shgetdesktopfolder(id)) then
     begin
     madd('Succeeded get desktop folder');
     if succeeded(id.getdisplaynameof(pi,0,lpname)) then
       begin
       madd('Succeeded get display name');
       if lpname.uType=2 then
         madd(lpname.cstr);
       end
     else
       madd('UnSucceeded get display name');
     end
   else
     madd('UnSucceeded get desktop folder');
   end
 else
   madd('UNSucceeded programs location');
end;

Автор: Denis Tanayev
[email protected]
PM MAIL WWW ICQ YIM   Вверх
StayAtHome
Дата 1.2.2004, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Как рисовать на органе управления, например, на TPanel (у которого нет свойства Canvas)?
У всех компонентов, порожденных от TCustomControl, имеется свойство Canvas типа TCanvas. Грубо говоря, это аналог TDC из OWL. Те операции, которые нельзя выполнить с помощью методов TCanvas, можно выполнить с помощью WinAPI. Для этого у обьектов класса TCanvas имеется свойство Handle - это и есть Хэндл Дисплейного Контекста ОС Windows (HDC), который необходим графическим функциям WinAPI. Если свойство Canvas недоступно, Вы можете достучаться до него созданием потомка и переносом этого свойства в раздел Public.

Код
{ Example. We recommend You to create this component through Component Wizard.In Delphi 1 it can be found as 'File|New Component...', and can be found as 'Component|New Component...' in Delphi 2 or above. }
type
TcPanel = class(TPanel)
 public
 property Canvas;
end;

Автор:Akzhan Abdulin
(2:5040/55)

У меня есть маленькое замечание.
Если у объекта нет свойства Canvas (у TDBEdit, вpоде-бы нет), по кpайней меpе в D3 можно использовать класс TControlCanvas. Пpимеpное использование:
Код
var cc: TControlCanvas;
...
cc := TControlCanvas.Create;
cc.Control := youControl;
...

и далее как обычно можно использовать методы Canvas.

Автор:Andrew Velikoredchanin
(2:5026/29.3)
-------------------------------------------------------------------------------
Как выделить некотоpые стpочки в TTreeView жиpным или бледным?
Гpхм... Господа, но если pечь пpо bold... Матчасть yчить надо 8-).
Код
procedure SetNodeState(node :TTreeNode; Flags: Integer);
var
 tvi: TTVItem;
begin
 FillChar(tvi, Sizeof(tvi), 0);
 tvi.hItem := node.ItemID;
 tvi.mask := TVIF_STATE;
 tvi.stateMask := TVIS_BOLD or TVIS_CUT;
 tvi.state := Flags;
 TreeView_SetItem(node.Handle, tvi);
end;

// И вызываем:

SetNodeState(TreeView1.Selected, TVIS_BOLD);               // Текст жиpным
SetNodeState(TreeView1.Selected, TVIS_CUT);                // Иконкy бледной (Ctrl+X)
SetNodeState(TreeView1.Selected, TVIS_BOLD or TVIS_CUT);   // Текст жиpным
SetNodeState(TreeView1.Selected, 0);                       // Hи того, ни дpyгого

Когда-то (мечтательно закатив глаза в потолок) в API было еще и TVIS_DISABLE.Снесли собаки. А pекомендyемyю стилистикy yпотpебления этого добpа смотpи в MS Internet News.

Автор:Dmitry Nogin
(FidoNet 2:5020/611.15)
PM MAIL WWW ICQ YIM   Вверх
StayAtHome
Дата 1.2.2004, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



IMHO файл .dfm - это компилированный ресурс с определением сеттингов формы.А можно ли как-то увидеть этот ресуpс в исходном виде?
1. File|Open... ТвояФорма.DFM (увидишь текст)
2. "\delphi\bin\convert ТвояФорма.DFM" получится ТвояФорма.TXT
[можно и наоборот]
Идею в массы: в DN/VC/NC можно настроить viewer'ом .DFM .BAT'ник, который скажет convert;wpview;del - и заглядывать в .DFM не открывая Delphi.Кстати, функции, которые реализуют это преобразование, доступны для использования в личных целях smile.gif
Код
CLASSES.PAS:
[...]
{ Object conversion routines }

procedure ObjectBinaryToText(Input, Output: TStream);

procedure ObjectTextToBinary(Input, Output: TStream);

procedure ObjectResourceToText(Input, Output: TStream);
procedure ObjectTextToResource(Input, Output: TStream);

Автор:Александр Петросян, Зеленоград.
(2:5020/468.8)
-------------------------------------------------------------------------------
Как в TMemo определить номер строки, в которой находится курсор и его местоположение в строке.
Код
var X,Y: LongInt;
Y:=Memo1.Perform(EM_LINEFROMCHAR, Memo1.SelStart, 0);
X:=Memo1.Parform(EM_LINEINDEX, Y, 0);
inc(Y);
X:=Memo1.SelStart-X+1;

Автор:Alexey Glotov(2:5020/382.18)
-------------------------------------------------------------------------------
Можно ли запустить OpenGL под Windows'95, и как поставлять его с программой?
Беpешь, к пpимеpy, из диcтpибyтива OSR2 GLU32.DLL и OPENGL32.DLL - и запycкай на здоpовье.

Автор:Alexei Ivanov(2:5020/942.1)

Более эффективную реализацию OpenGL для Win32 от фирмы SGI я бы советовал стянуть с www.sgi.com или www.opengl.org

Автор:Akzhan Abdulin(2:5040/55)
-------------------------------------------------------------------------------
Как создать клон (копию, достаточно близкую к оригиналу) произвольного компонента?
Здесь пpоцедypа CreateClone, котоpая кpеатит компонентy ОЧЕHЬ ПОХОЖУЮ на
входнyю. С такими же значениями свойств. Пpисваивается все, кpоме методов.
Код
function CreateClone(Src: TComponent): TComponent;
var
 F: TStream;
begin
 F := nil;
 try
   F := TMemoryStream.Create;
   F.WriteComponent(Src);
   RegisterClass(TComponentClass(Src.ClassType));
   F.Position := 0;
   Result := F.ReadComponent(nil);
 finally
   F.Free;
 end;
end;

Автор:Vladimir Gaitanoff(2:5020/880.5)
PM MAIL WWW ICQ YIM   Вверх
StayAtHome
Дата 1.2.2004, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Как задать в качестве фона MDIForm картинку из TBitmap?
Код

interface
 type ....  =class(TForm)
 ....
 procedure FormCreate(Sender:TObject);
 procedure FormDestroy(Sender:TObject);
 ....
 private
   FHBrush:HBRUSH;
   FCover:TBitmap;
   FNewClientInstance:TFarProc;
   FOldClientInstance:TFarProc;
 procedure NewClientWndProc(var Message:TMessage);
 ....
 protected
 ....
 procedure CreateWnd;override;
 ....
 end;
 .....

implementation

{$R myRes.res} //pесуpс с битмапом фона

procedure .FormCreate(...);
var
 LogBrush:TLogbrush;
begin
 FCover:=TBitmap.Create;
 FCover.LoadFromResourceName(hinstance,'BMPCOVER');

 With LogBrush do
 begin
   lbStyle:=BS_PATTERN;
   lbHatch:=FCover.Handle;
 end;
 FHBrush:=CreateBrushIndirect(Logbrush);
end;

procedure .FormDestroy(...);
begin
 DeleteObject(FHBrush);
 FCover.Free;
end;

procedure .CreateWnd;
begin
 inherited CreateWnd;
 if (ClientHandle <> 0) then
   begin
   if  NewStyleControls then
       SetWindowLong(ClientHandle, GWL_EXSTYLE, WS_EX_CLIENTEDGE or
         GetWindowLong(ClientHandle, GWL_EXSTYLE));

   FNewClientInstance:=MakeObjectInstance(NewClientWndProc);
   FOldClientInstance:=pointer(GetWindowLong(ClientHandle,GWL_WNDPROC));
   SetWindowLong(ClientHandle,GWL_WNDPROC,longint(FNewClientInstance));
   end;
end;

procedure .NewClientWndProc(var Message:TMessage);

 procedure Default;
 begin
   with Message do
     Result := CallWindowProc(FOldClientInstance, ClientHandle, Msg, wParam, lParam);
 end;

begin
 with Message do
   case Msg of
   WM_ERASEBKGND:
     begin
     FillRect(TWMEraseBkGnd(Message).DC, ClientRect,FHBrush);
     Result := 1;
     end;
   else
     Default;
   end;
end;

Автор:Alex Miachin(2:5000/81.12)
PM MAIL WWW ICQ YIM   Вверх
StayAtHome
Дата 1.2.2004, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



-------------------------------------------------------------------------------
Как корректно перехватить сигнал выгрузки операционной системы, если в моей программе нет окна?
Используй GetMessage(), в качестве HWND окна пиши NULL. Если в очереде сообщений следущее WM_QUIT, то функция фозвращает FALSE.
Если ты пишешь прогу для win32, то запихни это в отдельный поток, организующий выход из програмы.
Автор:Alex Soloviev(2:5047/14.20)
-------------------------------------------------------------------------------

Предложения по улучшению FAQ smile.gif
1. Сделать ссылку на тему "Системные функции и WinAPI/ Windows/Процессы, потоки, память, задачи/Как сделать, чтобы запускалась только одна копия приложения?" в разделе "Разработка приложений"
2. Перенести тему "Системные функции и WinAPI/ Windows/ Процессы, потоки, память,задачи/Запуск программ с передачей консольного ввода и чтением вывода?" в подраздел "../Консольные приложения", убрав из ее названия вопросительны знак.
3. В разделе VCL некоторые названия тем соответствующие названиям компонентов сожержат префикс "Т" (TForm, TEdit)а некоторые -- нет (Label, TreeView). Стоит привести их к общему виду.
4. В разделе "Delphi IDE, компилятор.../Ошибки в Дельфи/" есть тема ""Error reading symbol file." error" у которой не отображается название в дереве тем слева.


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

PM MAIL WWW ICQ YIM   Вверх
December
Дата 4.2.2004, 03:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


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

Репутация: 8
Всего: 57



StayAtHome От меня лично большое спасибо за предоставленные примеры.
Vit, может, это уже предлагалось, не помню, но всё же: может, стоит сделать из FAQ два FAQ: один - общие вопросы, VCL, BD - самое популярное, второй - сети, инет, ActiveX, Kylix, .Net etc - потому как не очень красиво отсылать вопрошающего к пятиметровому файлу, а вот скачать, скажем, полтора метра - гораздо проще.


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
Vit
Дата 4.2.2004, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


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

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



Подумаю,может и правда сделаю в виде нескольких вариантов


--------------------
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   Вверх
Cheba
Дата 5.2.2004, 02:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pointless one
***


Профиль
Группа: Vingrad developer
Сообщений: 1777
Регистрация: 27.11.2003
Где: /dev/null

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



И можно сделать, чтобы если несколько частей в одной папке, то к любой можно было добраться из любого файла. Точно знаю, что html-help'ы можно связывать.
PM MAIL ICQ   Вверх
Medved
Дата 5.2.2004, 07:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



Кстати Вит, размер FAQ это действительно проблема. ПО крайней мере для USSR-ного пользователя, учитывая что большинство сидит на dual-up. Может как нибудь попробовать его оптимизировать. Или сжать чем нибуть сам exe-шник.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Monty
Дата 5.2.2004, 07:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Advanced Lamer
****


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

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



Цитата
В DPR файле совершенно обычного проэкта дельфи можно указать функцию (процедуру) и объявить ее как экспортируемую - синтаксис точно такой-же как при создании стандартной DLL. С таким довеском EXE совершенно нормально компиллируется и работает и как EXE и как DLL (т.е. из нее можно импортировать описанные функции). Зачем это нужно? Была одна задача - делал консоль которая связывала воедино несколько приложений, так экспортные функции позволяли существенно расширять функциональность комплекса. Правда такой EXE все же имеет недостаток - EXE упаковщики сохраняют исполняемую часть и неправильно упаковывают экспортированную...

Поправка:
Протектор Armadillo этого минуса не имеет smile.gif ..... так что я им и ЕХЕ файлы содержащие экспортируемые функции протектирую/пакую и все работает smile.gif


--------------------
...
О, вещая моя печаль,
О, тихая моя свобода
И неживого небосвода
Всегда смеющийся хрусталь!
PM MAIL ICQ   Вверх
Paradox
Дата 6.2.2004, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Vit не знаю видел или нет, и включены ли описанные здесь вопросы в наш FAQ, но будет время зайди глянь, я бы мог повыбирать но к сожалению не настолько хорошо знаком с содержанием нашего FAQ, так как заглядываю только по необходимости
ИМХО вышеописанные примеры могут быть отттуда, поэтому может там есть еще что-нибудь чего нет у нас


--------------------
---
PM MAIL WWW   Вверх
StayAtHome
Дата 8.2.2004, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Ну что ж... Продолжим! smile.gif
Smart Browse For Folder
example of smart usage of BrowseForFolder API function
including
- repositioning and resizing browse window
- adding a listbox, static elements and a button
- catching button click
- filling the listbox with file names
- custom information field
- custom condition for allowing folder selection
- creating new folder
- !!! REFRESHING TREE !!! after folder creation
(thanks to Leonid Kunin for his idea published at
http://codeguru.earthweb.com)

Copyright © Konstantin Polyakov, 2001

FIDO: 2:5030/542.251
e-mail: [email protected]
Web: http://kpolyakov.newmail.ru

Код

program SmartBff;

uses Windows, SysUtils, Messages,  ActiveX,  ShlObj,  CommCtrl,  Dialogs;

type AWndProc = function (Wnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM):
                      LRESULT; stdcall;

const
   ID_CREATEBTN = 100;
   FileMask = '*.dat';

var MainWnd, TreeWnd, LBoxWnd, StatusWnd,
   DirLabel, CreateBtn: HWND;
   OldWndProc: AWndProc;
   PathSelected: string;

//-------------------------------------------------------------------
//       FILL LISTBOX
//-------------------------------------------------------------------
procedure FillListBox(LBoxWnd: HWND; Path, Mask: string);
var FindHandle: THandle;
   FindData: TWin32FindData;
begin
   SendMessage(LBoxWnd, LB_RESETCONTENT, 0, 0);
   if Path = '' then Exit;
   Path := Path + Mask;
   FindHandle := FindFirstFile(PChar(Path), FindData);
   while FindHandle <> INVALID_HANDLE_VALUE do begin
      if (FILE_ATTRIBUTE_DIRECTORY and FindData.dwFileAttributes) = 0 then
        with FindData do begin
           if (AnsiStrUpper(cFileName)=cFileName) and (cFileName[1]<>#0) then
             AnsiStrLower(cFileName+1);
           SendMessage(LBoxWnd, LB_ADDSTRING, 0, Longint(@cFileName[0]));
        end;
      if not FindNextFile(FindHandle, FindData) then begin
        Windows.FindClose(FindHandle);
        break;
      end;
   end;
end;

//-------------------------------------------------------------------
//       GET STATUS TEXT
//-------------------------------------------------------------------
function GetStatusText(var Enable: integer; Path: string): string;
begin
   Result := '';
   if Enable = 0 then begin
      Result := 'Ii?ii auae?aou eaoaeiae oieuei ia ?anoeeo aeneao';
      EnableWindow(CreateBtn, False);
      Exit;
   end;
   EnableWindow(CreateBtn, True);
   if SendMessage(LBoxWnd, LB_GETCOUNT, 0, 0) = 0 then begin
      Enable := 0;
      Result := 'A yoie iaiea iao io?iuo oaeeia.';
   end;
end;

//-------------------------------------------------------------------
//       DO CREATE FOLDER
//-------------------------------------------------------------------
function DoCreateFolder(Wnd: HWND; Folder: string): Boolean;
var i: integer;
   FullPath: string;
 procedure CreationError(Info: string);
 begin
    MessageBox(Wnd, PChar(Info), 'Ioeaea i?e nicaaiee iaiee', MB_ICONERROR or MB_OK);
 end;
begin
 Result := False;
 Folder := Trim(Folder);
 if (Length(Folder) = 0) or (Folder[1] = '.') then begin
    CreationError('Iaaa?iia eiy iaiee ' + Folder);
    Exit;
 end;
 for i:=1 to Length(Folder) do
    if (Folder[i] in ['<','>',':','/','\','|','*','?','"']) then begin
       CreationError('Eiy iaiee ia aie?ii niaap?aou neiaieia: \ / : * ? " < > |');
       Exit;
    end;
 if Length(PathSelected)=3 then
      FullPath := PathSelected + Folder
 else FullPath := PathSelected  + '\' + Folder;

 if not CreateDirectory(PChar(FullPath), nil) then begin
    CreationError('Ia oaaeinu nicaaou iaieo ' + FullPath);
    Exit;
 end;
 Result := True;
end;

//-------------------------------------------------------------------
//       BROWSE WND PROC



PM MAIL WWW ICQ YIM   Вверх
StayAtHome
Дата 8.2.2004, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Обработка сообщения о максимизации окна
Q: Я хочу обрабатывать сообщение об максимизации окна и изменить его размер вручную.
Я написал обработчик для SC_MAXIMIZE.
Но это мне дает ошибку duplicate virtual method error (?).
A: Вместо этого обрабатывайте сообщение WMGetMinMaxInfo.
Код

private
   procedure WMGetMinMaxInfo( var Message :TWMGetMinMaxInfo ); message WM_GETMINMAXINFO;

procedure TCCentre.WMGetMinMaxInfo( var Message :TWMGetMinMaxInfo );
begin
 with Message.MinMaxInfo^ do
 begin
   ptMaxSize.X := 640;              {Width when maximized}
   ptMaxSize.Y := 96;                {Height when maximized}
   ptMaxPosition.X := 0;            {Left position when maximized}
   ptMaxPosition.Y := 0;            {Top position when maximized}
   ptMinTrackSize.X := 500;      {Minimum width}
   ptMinTrackSize.Y := 96;        {Minimum height}
   ptMaxTrackSize.X := 640;     {Maximum width}
   ptMaxTrackSize.Y := 150;     {Maximum height}
 end;
 Message.Result := 0;                 {Tell windows you have changed minmaxinfo}
 inherited;
end;

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

Как я могу вставить текст в TMemo в позиции курсора?
Я хочу использовать клавишу для вставки некоторых стандартных фраз.
Я решил эту проблему путем использования TEdit из которого я копирую текст
в clipboard и вставляю его в Memo. Это удовлетворительно,
но я не хочу использовать clipboard в своей программе,
к тому же пользователь может также вставить кое что свое, что нежелательно.

=== 1 ===
Используйте Windows API сообщение EM_REPLACESEL

EM_REPLACESEL
wParam = 0; /* not used, must be zero */
lParam = (LPARAM) (LPCSTR) lpszReplace; /* address of new string */

В программе пошлите сообщение EM_REPLACESEL для замены текущего выбора
текстом в параметре lpszReplace.

Параметр Описание
lpszReplace содержит замещающий текст
Возврат нет возвращаемого значения

Комментарий
Исползуйте EM_REPLACESEL когда вы хотите заменить тоько часть текста.
Если вы желаете заместить весь текст то используйте сообщение WM_SETTEXT.

Если выделение отсутствует то, замещаемый текст вставляется в текущую позицию.

=== 2 ===
для вставки строки в memo :
Код
procedure TForm1.Button1Click(Sender: TObject);
begin
    with Memo1 do begin
     SelStart:=10;
     SelLength:=0;
     SelText:='This is a string inserted into a memo, at 10th char position ';
  end;
end;

для вставки и замены:
Код
procedure TForm1.Button1Click(Sender: TObject);
begin
    with Memo1 do begin
     SelStart:=10;
     SelLength:=20;
     SelText:='This is a string inserted, at 10th char position replacing 20 chars ';
  end;
end;


-------------------------------------------------------------------------------
Как заставить курсор перемещаться только x-координате
В вашем обработчике OnMouseMove сделайте следующее:
Код
  if (y<>0) and (lockY) then begin
    GetMouseCoords(NewX,NewY);
    NewY := NewY + y;                           {or should that be minus?}
    SetMouseCoords(NewX,NewY);
  end;

Переменная lockY определяет желаете ли вы подобное поведение курсора или нет.

PM MAIL WWW ICQ YIM   Вверх
StayAtHome
Дата 8.2.2004, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Я хочу узнать номер текущей записи для DBase таблицы.

Если набор данных является таблицей Paradox или dBASE то номер записи
может быть получен путем ряда вызовов BDE API.
BDE не поддерживает нумерацию для SQL таблиц,
но если ваш сервер поддерживает это, то вы должны ознакомиться
с соотвествующей документацией на сервер.

Следующая функция получает параметр любого компонента наследника от TDataset
(например TTable, TQuery, TStoredProc) и возвращвет номер текущей записи
(больше чем 0) если это таблица Paradox или dBASE. В других случая возвращается 0.

Примечние: для dBASE это номер физической записи.

Код
uses
 DbiProcs, DbiTypes, DBConsts;
function RecordNumber(Dataset: TDataset): Longint;
var
 CursorProps: CurProps;
 RecordProps: RECProps;
begin
 { Return 0 if dataset is not Paradox or dBASE }
 Result := 0;
 with Dataset do  begin
   { Is the dataset active? }
   if State = dsInactive then DBError(SDataSetClosed);
   { We need to make this call to grab the cursor's iSeqNums }
   Check(DbiGetCursorProps(Handle, CursorProps));
   { Synchronize the BDE cursor with the Dataset's cursor }
   UpdateCursorPos;
   { Fill RecordProps with the current record's properties }
   Check(DbiGetRecord(Handle, dbiNOLOCK, nil, @RecordProps));
   { What kind of dataset are we looking at? }
   case CursorProps.iSeqNums of
     0: Result := RecordProps.iPhyRecNum;  { dBASE   }
     1: Result := RecordProps.iSeqNum;     { Paradox }
   end;
 end;
end;


PM MAIL WWW ICQ YIM   Вверх
StayAtHome
Дата 8.2.2004, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Как я могу назначить заголовок для диспетчера печати?
Код
Printer.Title := 'Your Title Here';

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

Существует ли способ вызвать метод Hint напрямую?
Я хочу по нажатию на определенную клавишу показать Hint для другого компонента
после 1 секунды или более и пропасть после отпускания клавиши.
Код
function RevealHint (Control: TControl): THintWindow;
{Показать окно Hint для указанного Control, и убрать его в методе RemoveHint.}
var
  ShortHint: string;
  AShortHint: array[0..255] of Char;
  HintPos: TPoint;
  HintBox: TRect;
begin
  Result := THintWindow.Create(Control);       { создать oокно для Hint }
  ShortHint := GetShortHint(Control.Hint);     { получить левую часть - до знака '|': }
  HintPos := Control.ClientOrigin;
  Inc(HintPos.Y, Control.Height + 6);    <<<< See note below
  HintBox := Bounds(0, 0, Screen.Width, 0);
  DrawText(Result.Canvas.Handle,
      StrPCopy(AShortHint, ShortHint), -1, HintBox,
      DT_CALCRECT or DT_LEFT or DT_WORDBREAK or DT_NOPREFIX);
  OffsetRect(HintBox, HintPos.X, HintPos.Y);
  Inc(HintBox.Right, 6);
  Inc(HintBox.Bottom, 2);
  { Now show the window: }
  Result.ActivateHint(HintBox, ShortHint);
end; {RevealHint}

procedure RemoveHint (var Hint: THintWindow);
{Убрать окно Hint ранее открытое в функции RevealHint.}
begin
  Hint.ReleaseHandle;
  Hint.Free;
  Hint := nil;
end; {RemoveHint}

-------------------------------------------------------------------------------
Есть ли какой либо метод вызываемый при переходе на другую строку в TDBGrid?

Вы можете использовать метод OnDataChange компонента Datasource
к которому подсоединен DBGrid. Если свойство State равно dsBrowse
то это означает переход на другую строки (или открытие таблицы).

Почему нет этого события у самого dbGrid? Потому что grid не единственный
компонент в который используется для показа данных из таблицы.
Использование Datasource обеспечивает централизованное управление данным событием.
-------------------------------------------------------------------------------
Как можно определить в обработчике MenuItem для PopupMenu,
на какой компоненте было произведено нажатие правой кнопки мыши?

Для этого нужно воспользоваться свойством PopupMenu.PopupComponent, например:
Код
procedure TForm1.PopupItem1Click(Sender: TObject);
begin
 Label1.Caption := PopupMenu1.PopupComponent.ClassName;
end;


PM MAIL WWW ICQ YIM   Вверх
StayAtHome
Дата 8.2.2004, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Почему экземпляры наследников TFiled, после вставки их через FieldEditor,
присутствуют в Object Inspector и в описании формы в PAS-файле,
но их иконки отсутствуют в форме (design-time)?

Дело в том, что наследники TFiled, такие как TStringField, TIntegerField и т.д.
зарегистрированы не процедурой RegisterComponents, а процедурой RegisterNoIcon.
Поэтому, хотя TField является наследником TComponent,
его наследники не имеют иконок в форме в режиме дизайна.
Вы можете использовать эту процедуру регистрации, если Вы хотите,
чтобы Ваши компоненты не отображались в палитре компонент Delphi,
но были доступны для вставки в форму и удаления из нее в режиме дизайна
из редакторов свойств (Property Editor) или редакторов компонент
(Component Editor) других компонент, присутствующих в форме.
Именно так сделан редактор компонент TTable и TQuery - Fields Editor.
-------------------------------------------------------------------------------
В BP 7.0 возможно было регулировать форму отображения величин
в процессе отладки в окне ""Watch List"". Возможно ли такое в Delphi?

Такой эффект можно достичь используя следующие спецификации формата отображения
(практически совпадающие с BP 7.0), которые указываются через запятую после
идентификатора инспектируемой величины:
Код

Символ   Применяется к типу Функциональность
-------- ------------------------------------------------------------------
H или X  Integers           Отображает целые величины в 16-ричном формате
                           с префиксом 0x

C        Char,strings       Показывает специальные символы (ASCII 0..31).
                           По умолчанию они отображаются в виде
                           esc-последовательности (/n , /t , и т.п.)

D        Integers           Отображает целые величины в десятичном формате.

Fn       Floating point     Показывает n десятичных знаков
                           (где n = 2..18, по умолчанию 7 )

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

P        Pointers           Отображает величину, как указатель в формате seg:ofs.

R        Records, classes,  Показывает не только величины полей,
        objects            но и сами поля, напрмер, как (X:2; Y:5)
                           вместо (2, 5).

S        Char,strings       Показывает любые неотображаемые ASCII символы в виде #nn.
                           Используется вместе с nM.


PM MAIL WWW ICQ YIM   Вверх
StayAtHome
Дата 8.2.2004, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Как определить, что текущая запись удаленная или нет
Аналог функции dBase DELETED()
Код
function Deleted(Table:TTable);
var
 Prop : RECProps;
begin
 dbiGetRecord(Table.Handle, dbiNoLock, nil, @Prop);
 Result := Prop.bDeleteFlag;
End;

Аналог функции dBase SET DELETED ON/OFF
Код
procedure ShowDeleted(Table: TTable; ShowFlag: Boolean;);
begin
 if ShowFlag then
   dbiSetProp(hDBIObj(Table.Handle), curSOFTDELETEON, 1)
 else
  dbiSetProp(hDBIObj(Table.Handle), curSOFTDELETEON, 0);
end;

-------------------------------------------------------------------------------
Как востановить удаленые записи ддля dBase таблиц?
Востановление удаленной записи. Аналог функции dBase RECALL
После востановления требуется вызов метода Table.Refresh
Код
Function UnDelete(Table:TTable) : INTEGER;
begin
 if Table.State = dsBrowse then
   Table.Edit;               { востановление в режиме EDIT }
   Result := DbiUndeleteRecord(Table.Handle);               { код ошибки }
   Table.State := dsBrowse;  { после востновления всегда в режим BROWSE }
end;

-------------------------------------------------------------------------------
Как получить номер физической записи для dBase таблиц
Получение номера физической записи. Аналог функции dBase RECNO()
Код
function RecNo(Table:TTable);
var
 Prop : RECProps;
begin
 if Table.State = dsBrowse THEN BEGIN
   Table.UpdateCursorPos;
   dbiGetRecord(Table.Handle, dbiNoLock, NIL, @Prop);  {get record number}
   Result := Prop.iPhyRecNum;
 end;
end;[code]
-------------------------------------------------------------------------------
[b]Как запретить кнопку Close [x] в заголовке окна.[/b]
[b]Способ 1[/b]
[code]procedure TForm1.FormCreate(Sender: TObject);
var
 Style: Longint;
begin
 Style := GetWindowLong(Handle, GWL_STYLE);
 SetWindowLong(Handle, GWL_STYLE, Style And Not WS_SYSMENU);
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 if (Key = VK_F4) and (ssAlt in Shift) then begin
   MessageBeep(0);
   Key := 0;
 end;
end;

Автор:Alexander Petrushev
(2:5001/88.10)
Способ 2
На самом деле есть более простой способ (запрет на SC_CLOSE),
но я уже деталей его не помню.
Автор:Akzhan Abdulin
(2:5040/55)
Способ 3
Код
{ Disable close button }
procedure TForm1.Button1Click(Sender: TObject);
var
 SysMenu: HMenu;
begin
 SysMenu := GetSystemMenu(Handle, False);
 Windows.EnableMenuItem(SysMenu, SC_CLOSE, MF_DISABLED or MF_GRAYED);
end;
{ Enable close button }
procedure TForm1.Button2Click(Sender: TObject);
begin
 GetSystemMenu(Handle, True);
 Perform(WM_NCPAINT, Handle, 0);
end;

-------------------------------------------------------------------------------
Как убрать всплывающие подсказки в TreeView?
TCustomTreeView.WMNotify. О том, что такое тип notify'а TTM_NEEDTEXT пpочтешь в хелпе. Убpать хинты можно, пеpекpыв обpаботчик для этого уведомительного сообщения.
Автор:Eugene Mayevski
[email protected]
(2:463/209.209)

PM MAIL WWW ICQ YIM   Вверх
StayAtHome
Дата 10.2.2004, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Замеченные недочеты]
- В разделе "Системные функции и WinAPI/Windows/Звук/Как можно получить звук с микрофона" есть тема "Пример работы с DrawIcon(Ex)"
- Частичный дубляж:
Цитата
Системные функции и WinAPI/Windows/Звук/Как можно получить звук с микрофона/Как сделать регулятор громкости?
и
Цитата
Работа с графикой и мультимедиа/Работа со звуком/Изменить громкость

--------------------------------------------------------------------------------
Как сделать пункт " по умолчанию" в Pop-Up меню выделенным ?]
Устанавливается пункт " по умолчанию" в любом меню функцией
Код
API SetMenuDefaultItem(HMENU hMenu, UINT uItem, UINT fByPos)

подробности - в Win32 SDK документации. Пункт "По умолчанию" не влияет на работу меню - это чисто интерфейсное выделение пункта меню полужирным (bold) шрифтом.
--------------------------------------------------------------------------------

PM MAIL WWW ICQ YIM   Вверх
StayAtHome
Дата 10.2.2004, 02:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Как поместить ProgressBar на StatusBar.
Есть два принципиально разных решения. Первый вариант - это сделать все " вручную" .
Здесь создается Bitmap с текстом (возможно любое изображение). Чтобы нарисовать светлую часть полосы, достаточно скопировать кусок Bitmap на StatusBar, а чтобы нарисовать темную часть полосы, нужно скопировать кусок Bitmap с инвертированием. При этом фон станет темным, а текст светлым. Реализация ясна из самой программы.
Второй вариант более простой в реализации, но и менее функциональный. StatusBar является наследником TWinControl, а следовательно, на нем можно разместить еще какие-то компоненты. Но сделать это можно только динамически (непосредственно из программы). На StatusBar помещается компонент ProgressBar, вначале невидимый. Когда в нем появляется необходимость, его нужно сделать видимым и начать изменять свойство Position.
Из этого примера хорошо видны некоторые достоинства и недостатки объектов.
Если у Вас Delphi3, то строчка pb.Smooth := true; работать не будет. На сайте выложена версия программы с заменой этой строчки. Впрочем, ее можно просто удалить - принципиально это ничего не изменит. Скачать все необходимые для компиляции файлы проекта можно на program.dax.ru.
Способ 1
Код
uses Commctrl;
const
 MaxProgress = 50;
var
 bm: TBitmap;
// Возвращает прямоугольник нулевой панели:
function GetPanelRect: TRect;
begin
 SendMessage(Form1.StatusBar1.Handle, SB_GETRECT, 0,
   integer(@result));
 InflateRect(result, -1, -1);
end;

// Копирует часть bm на StatusBar
procedure CopyPart(left, right: integer; ACopyMode: TCopyMode);
var bmRect, pnRect: TRect;
begin
 bmRect := Rect(left, 0, right, bm.Height - 1);
 pnRect := bmRect;
 with GetPanelRect do
   OffsetRect(pnRect, Left, Top);
 with Form1.StatusBar1.Canvas do begin
   CopyMode := ACopyMode;
   CopyRect(pnRect, bm.Canvas, bmRect);
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 with StatusBar1.Panels.Add do begin
   Width := 100;
   Style := psOwnerDraw;
 end;
 with StatusBar1.Panels.Add do begin
   Width := 0;
   Text := 'abc';
 end;
 Timer1.Enabled := false;
 Timer1.Interval := 50;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Timer1.Enabled := true;
 bm := TBitmap.Create;
 with GetPanelRect do begin
   bm.Width := Right - Left;
   bm.Height := Bottom - Top;
 end;
 with bm.Canvas do begin
   Brush.Color := clSilver;
   FillRect(Bounds(0, 0, bm.Width, bm.Height));
   TextOut(1, 1, 'Doing smth...');
 end;
 CopyPart(0, bm.Width - 1, cmSrcCopy); // Вывод текста
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Timer1.Tag := Timer1.Tag + 1;
 if Timer1.Tag >  MaxProgress then begin
   Timer1.Enabled := false;
   Timer1.Tag := 0;
   StatusBar1.Repaint; // Очистка StatusBar
 end else
   // Вывод только что закрашенной части:
   CopyPart(trunc((Timer1.Tag - 1) / MaxProgress * bm.Width),
     trunc(Timer1.Tag / MaxProgress * bm.Width), cmNotSrcCopy);
end;

procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
 Panel: TStatusPanel; const Rect: TRect);
var p: integer;
begin
 if (Panel.Index = 0) and (Timer1.Tag >  0) then begin
   p := round((Rect.Right - Rect.Left) * Timer1.Tag / MaxProgress);
   // Вывод закрашенной части:
   CopyPart(0, p, cmNotSrcCopy);
   // Вывод незакрашенной части:
   CopyPart(p + 1, bm.Width - 1, cmSrcCopy);
 end;
end;

--------------------
Способ 2
Код
uses Commctrl;
const
 MaxProgress = 50;
var pb: TProgressBar;

function GetPanelRect: TRect;
begin
 SendMessage(Form1.StatusBar1.Handle, SB_GETRECT, 0, integer(@result));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 with StatusBar1.Panels.Add do begin
   Width := 100;
   Style := psOwnerDraw;
 end;
 with StatusBar1.Panels.Add do begin
   Width := 0;
   Text := 'abc';
 end;
 Timer1.Enabled := false;
 Timer1.Interval := 50;
 pb := TProgressBar.Create(StatusBar1);
 pb.Visible := false;
 pb.Parent := StatusBar1;
 pb.BoundsRect := GetPanelRect;
 pb.Smooth := true;
 pb.Step := 1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Timer1.Enabled := true;
 pb.Position := 0;
 pb.Max := MaxProgress;
 pb.Visible := true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Timer1.Tag := Timer1.Tag + 1;
 if Timer1.Tag >  MaxProgress then begin
   Timer1.Enabled := false;
   Timer1.Tag := 0;
   pb.Visible := false;
 end else pb.StepIt;
end;

Все советы и замечания, пожалуйста, присылайте на [email protected]
Даниил Карапетян.

Это сообщение отредактировал(а) StayAtHome - 10.2.2004, 02:10
PM MAIL WWW ICQ YIM   Вверх
StayAtHome
Дата 10.2.2004, 02:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Алгоритм распо§нования кодировки нужен для автоматического декодирования текста.
Этот алгоритм основан на том, что некоторые буквы русского алфавита встречается очень часто, а некоторые редко. Поскольку этот способ статистический, то лучше всего он работает с большими текстами.
Код
type
 TCode = (win, koi, iso, dos);
const
 CodeStrings: array [TCode] of String = ('win','koi','iso','dos');
procedure TForm1.Button1Click(Sender: TObject);
var
 str: array [TCode] of string;
 norm: array ['А'..'я'] of single;
 code1, code2: TCode;
 min1, min2: TCode;
 count: array [char] of integer;
 d, min: single;
 s, so: string;
 chars: array [char] of char;
 c: char;
 i: integer;
begin
 so := Memo1.Text;

 norm['А'] := 0.001;
 norm['Б'] := 0;
 norm['В'] := 0.002;
 norm['Г'] := 0;
 norm['Д'] := 0.001;
 norm['Е'] := 0.001;
 norm['Ж'] := 0;
 norm['З'] := 0;
 norm['И'] := 0.001;
 norm['Й'] := 0;
 norm['К'] := 0.001;
 norm['Л'] := 0;
 norm['М'] := 0.001;
 norm['Н'] := 0.001;
 norm['О'] := 0.001;
 norm['П'] := 0.002;
 norm['Р'] := 0.002;
 norm['С'] := 0.001;
 norm['Т'] := 0.001;
 norm['У'] := 0;
 norm['Ф'] := 0;
 norm['Х'] := 0;
 norm['Ц'] := 0;
 norm['Ч'] := 0.001;
 norm['Ш'] := 0.001;
 norm['Щ'] := 0;
 norm['Ъ'] := 0;
 norm['Ы'] := 0;
 norm['Ь'] := 0;
 norm['Э'] := 0.001;
 norm['Ю'] := 0;
 norm['Я'] := 0;
 norm['а'] := 0.057;
 norm['б'] := 0.01;
 norm['в'] := 0.031;
 norm['г'] := 0.011;
 norm['д'] := 0.021;
 norm['е'] := 0.067;
 norm['ж'] := 0.007;
 norm['§'] := 0.013;
 norm['и'] := 0.052;
 norm['й'] := 0.011;
 norm['к'] := 0.023;
 norm['л'] := 0.03;
 norm['м'] := 0.024;
 norm['н'] := 0.043;
 norm['о'] := 0.075;
 norm['п'] := 0.026;
 norm['р'] := 0.038;
 norm['с'] := 0.034;
 norm['т'] := 0.046;
 norm['у'] := 0.016;
 norm['ф'] := 0.001;
 norm['х'] := 0.006;
 norm['ц'] := 0.002;
 norm['ч'] := 0.011;
 norm['ш'] := 0.004;
 norm['щ'] := 0.004;
 norm['ъ'] := 0;
 norm['ы'] := 0.012;
 norm['ь'] := 0.012;
 norm['э'] := 0.003;
 norm['ю'] := 0.005;
 norm['я'] := 0.015;

 Str[win] := 'АаБбВвГгДдЕеЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя';
 Str[koi] := 'юЮаАбБцЦдДеЕфФгГхХиИйЙкКлЛмМнНоОпПяЯрРсСтТуУжЖвВьЬыЫзЗшШэЭщЩчЧъЪ';
 Str[iso] := 'РрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯяа№бёв?гѓдєеѕжізїијйљкњлћм?н§оўпџ';
 Str[dos] := 'Ђ ?Ў‚ўѓЈ„¤…Ґ†¦‡§?Ё‰©ЉЄ‹Њ¬?­Ћ®?Ї?а‘б’в“г”д•е–ж—з'
 for c := #0 to #255 do
   Chars[c] := c;

 min1 := win;
 min2 := win;
 min := 0;
 s := so;
 fillchar(count, sizeof(count), 0);
 for i := 1 to Length(s) do
   inc(count[s[i]]);
 for c := 'А' to 'я' do
   min := min + sqr(count[c] / Length(s) - norm[c]);
 for code1 := low(TCode) to high(TCode) do begin
   for code2 := low(TCode) to high(TCode) do begin
     if code1 = code2 then continue;

     s := so;
     for i := 1 to Length(Str[win]) do
       Chars[Str[code2][i]] := Str[code1][i];
     for i := 1 to Length(s) do
       s[i] := Chars[s[i]];
     fillchar(count, sizeof(count), 0);
     for i := 1 to Length(s) do
       inc(count[s[i]]);
     d := 0;
     for c := 'А' to 'я' do
       d := d + sqr(count[c] / Length(s) - norm[c]);
     if d <  min then begin
       min1 := code1;
       min2 := code2;
       min := d;
     end;
   end;
 end;

 s := Memo1.Text;
 if min1 < >  min2 then begin
   for c := #0 to #255 do
     Chars[c] := c;
   for i := 1 to Length(Str[win]) do
     Chars[Str[min2][i]] := Str[min1][i];
   for i := 1 to Length(s) do
     s[i] := Chars[s[i]];
 end;
 Form1.Caption := CodeStrings[min2] + ' ' + CodeStrings[min1];

 Memo2.Text := s;
end;


PM MAIL WWW ICQ YIM   Вверх
Cashey
Дата 14.2.2004, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


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

Репутация: 2
Всего: 60



Я что-то не понял у нас теперь FAQ в виде постов оформляется?


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
December
Дата 14.2.2004, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


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

Репутация: 8
Всего: 57



Не, я так понял, Vit это потом занесёт в FAQ, который chm


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
Vit
Дата 14.2.2004, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


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

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



Цитата
Я что-то не понял у нас теперь FAQ в виде постов оформляется?


Просто тут собирается всё что планируется для FAQ, как соберётся достаточно материала и у меня времени - это всё войдёт в следующую версию


--------------------
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   Вверх
Cashey
Дата 14.2.2004, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


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

Репутация: 2
Всего: 60



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


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
December
Дата 14.2.2004, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


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

Репутация: 8
Всего: 57



Cashey Вообще-то это уже есть... Раздел FAQ


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
Cashey
Дата 15.2.2004, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


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

Репутация: 2
Всего: 60



Вообще-то эта тема называется "Обновлён FAQ для скачивания" (это я о правилах форума) и лично я искать здесь ответ на вопрос об алгоритме распо§нования кодировки стал бы в последнюю очередь.


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
StayAtHome
Дата 15.2.2004, 02:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Cashey
Сорри, пишу здесь с позволения Vit'a и дабы не плодить многочисленные темы.
PM MAIL WWW ICQ YIM   Вверх
Vit
Дата 15.2.2004, 02:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


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

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



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

Цитата
Сорри, пишу здесь с позволения Vit'a и дабы не плодить многочисленные темы.


Извинения не требуются, так как разрешил я, то все шишки на меня, ты здесь не причём...


--------------------
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   Вверх
Cheba
Дата 15.2.2004, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pointless one
***


Профиль
Группа: Vingrad developer
Сообщений: 1777
Регистрация: 27.11.2003
Где: /dev/null

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



2 Vit
Цитата
...когда появится нормальный FAQ...
Такой вопрос. Как ты его организуешь? Ато как-то не хочется скачивать 6М ради пары-тройки новых статей...
PM MAIL ICQ   Вверх
dm9
Дата 15.2.2004, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 6
Всего: 137



Vit, у меня на диске есть ФАК. Решил вот выложить в интернет. Может, ты это видел. Если нет и это интересно - пришлю в архиве. Может, что дополнишь.

http://dmitry9.nm.ru/info
Обрати внимание на "Маленькие хитрости с большой пользой"

PS По-моему, этот ФАК так часто попадается на пиратских компактах, что его все видели, но всё же...

Это сообщение отредактировал(а) dm9 - 15.2.2004, 17:23
PM MAIL ICQ   Вверх
Vit
Дата 16.2.2004, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


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

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



Цитата
Такой вопрос. Как ты его организуешь? Ато как-то не хочется скачивать 6М ради пары-тройки новых статей...


Off-line FAQ он Off-line и есть. К сожалению я не смогу прислать тебе чисто add-on, так как каждый раз я ещё меняю очень многое - структуру, добавляю индексы, новые перекрёстные ссылки, переношу разделы, топики, что-то добавляю, что-то удаляю, какие-то топики разделяю на подразделы и т.д. Поэтому работа над каждой новой версией отнюдь не ограничивается простым добавлением новых статей. В связи с этим у тебя нет никакой другой возможности, кроме как обновить файл целиком. Впрочем я не так часто делаю Update...


Цитата
Vit, у меня на диске есть ФАК. Решил вот выложить в интернет. Может, ты это видел. Если нет и это интересно - пришлю в архиве. Может, что дополнишь


Спасибо, я посмотрю.


--------------------
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   Вверх
swe
Дата 19.2.2004, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



2 Vit
В разделе "ссылки на сайты по Delphi" есть строка:
http://www.borland.com.ru/delphi/index.htm Borland Russia

должно быть:
http://www.borland.ru/delphi/index.htm Borland Russia
или
http://www.borland.ru/delphi/ Borland Russia

PM MAIL WWW ICQ   Вверх
swe
Дата 24.2.2004, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



2 Vit
Ещё два технических момента:
1. Многие корпоративные прокси, особенно в ВУЗах имеют ограничение на объем скачиваемых файлов в 2 мегабайта. Поэтому желательно иметь вариант download архива порезанного на кусочки.
2. В обычной Win98 левая сторона (т.е. оглавление) отображается шрифтом, который не имеет киррилического набора символов. Видимо Win98 некорректно делает автоподстановку какого-то отсутствующего шрифта, причем неизвестно какого. Желательно шрифт сменить.
PM MAIL WWW ICQ   Вверх
Vit
Дата 24.2.2004, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


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

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



Цитата
В разделе "ссылки на сайты по Delphi" есть строка:


Спасибо, исправлю.

Цитата
1. Многие корпоративные прокси, особенно в ВУЗах имеют ограничение на объем скачиваемых файлов в 2 мегабайта. Поэтому желательно иметь вариант download архива порезанного на кусочки.


Принято, будет

Цитата
2. В обычной Win98 левая сторона (т.е. оглавление) отображается шрифтом, который не имеет киррилического набора символов.


Знаю, пока не знаю как исправить


--------------------
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   Вверх
Cheba
Дата 9.3.2004, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pointless one
***


Профиль
Группа: Vingrad developer
Сообщений: 1777
Регистрация: 27.11.2003
Где: /dev/null

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



Что-то долго новостей нет... Скажи хотябы примерно, на когда намечается новый ФАК?
PM MAIL ICQ   Вверх
Vit
Дата 11.3.2004, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


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

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



Сейчас у меня дома ремонт: компьютер не то что не подключен - просто разобран на части которые зарыты в кучу вещей в мой рост размером.... При самом оптимистичном раскладе мне нужно будет примерно ещё 2-3 недели для того чтобы можно было хотябы включить компьютер...


--------------------
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   Вверх
Vit
Дата 6.4.2004, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


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

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



А есть идеи как назвать FAQ? А то он какой-то безликий... Да и FAQ его уже не очень-то назовёшь, слишком уж обширный.


--------------------
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
Дата 6.4.2004, 01:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Delphilibrium wink.gif
Delphinium wink.gif
Университет Делфи
Delphi Universe
Master's Tips
Советы Бывалого
Полное собрание сочинений делфиста
и т. д.
На каком языке нужно название?

Это сообщение отредактировал(а) StayAtHome - 7.4.2004, 00:10
PM MAIL WWW ICQ YIM   Вверх
Guest
Дата 14.4.2004, 10:09 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо! Это самая хорошая вещь-для меня и моих студентов!

  Вверх
Vit
Дата 14.4.2004, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


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

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



Цитата
На каком языке нужно название?



На любом!

Цитата
Спасибо! Это самая хорошая вещь-для меня и моих студентов!



Привет студентам от автора! smile.gif Может автограф вставить?


--------------------
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
Дата 15.4.2004, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Домосед
**


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

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



Точно! И автограф, и портрет! :-)
Когда обновление-то?
PM MAIL WWW ICQ YIM   Вверх
Vit
Дата 15.4.2004, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


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

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



Скоро уже. Сейчас работаю. Тут вот даже ещё один топик создал по ходу дела:

http://forum.vingrad.ru/index.php?showtopic=21417


--------------------
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   Вверх
cardinal
Дата 18.4.2004, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


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

Репутация: 2
Всего: 99



Vit, я немного посмотрел на FAQ. Круто - до фига хорошей информации. Я только две вещи заметил:

1. В теме "Что такое базы данных?" ответ начинается: итак бд существуют след. видов... Помоему нестыковачка.
2. "Как проверить правильность номера средитной карточки?". Тут опечаточка.

Все мелочи, но раз уж я увидел, решил сказать.


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Medved
Дата 26.4.2004, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



Цитата(Vit @ 6.4.2004, 03:43)
А есть идеи как назвать FAQ? А то он какой-то безликий... Да и FAQ его уже не очень-то назовёшь, слишком уж обширный.

ИМХО пусть сам файл так и называется - Delphist. Скромно, содержательно и со вкусом, плюс косвенно указывает на своего составителя.

Ну а в заголовок можно и расписать, например - "Советы программистов".


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Cashey
Дата 26.4.2004, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


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

Репутация: 2
Всего: 60



Я заметил, что в FAQ включены статьи по базам данных, которые прямого отношения к Delphi не имеют. Стало быть надо расширять и название. Например: "Лучшие с форумов программистов"


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
Medved
Дата 26.4.2004, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



Или "Справочник программиста"


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Pakshin A. S.
Дата 27.4.2004, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 21
Всего: 61



"Гениальные решения от Vit'а" biggrin.gif
(от Новичка до Эксперта)
PM   Вверх
x77
Дата 28.4.2004, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 19
Всего: 22



Pakshin A. S.,

... и генитальные - от Pakshin'а!!

biggrin.gif


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Vit
Дата 28.4.2004, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


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

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



x77, ну не надо скатываться до пошлости, а "гениальные" это черезчур.



--------------------
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   Вверх
x77
Дата 29.4.2004, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 19
Всего: 22



Vit, каюсь, грешен ;)



--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
x77
Дата 30.4.2004, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 19
Всего: 22



Vit, там бредятина откровенная в старом факе (2.0, который). глянь темку, плз.:

http://forum.vingrad.ru/index.php?showtopic=22108


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Vit
Дата 1.5.2004, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


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

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



Закончили с этой версией! Всем огромное спасибо:

http://forum.vingrad.ru/index.php?showtopic=22229


--------------------
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   Вверх
yurka
Дата 3.5.2004, 22:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Какой язык лучший?
  Вверх
Vit
Дата 3.5.2004, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


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

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



Цитата
Какой язык лучший?



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


--------------------
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   Вверх
Cheba
Дата 3.5.2004, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pointless one
***


Профиль
Группа: Vingrad developer
Сообщений: 1777
Регистрация: 27.11.2003
Где: /dev/null

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



Vit, юморист. smile.gif biggrin.gif laugh.gif biggrin.gif laugh.gif biggrin.gif laugh.gif biggrin.gif laugh.gif
PM MAIL ICQ   Вверх
Medved
Дата 4.5.2004, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



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


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
December
Дата 4.5.2004, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


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

Репутация: 8
Всего: 57



Цитата
Какой язык лучший?

Однозначно основанный на азбуке Морзе. Чтоб лишние вопросы лень было писать.


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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