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

Интернет для Delphi-программиста


Информационный Канал Subscribe.Ru

Интернет для Delphi программиста.

Выпуск : № 41


Здравствуйте уважаемые подписчики рассылки "Интернет для Delphi программиста". Данная рассылка предназначена для всех кого интересует Delphi, здесь будут выкладываться ссылки на различные ресурсы интернета так или иначе связанные с Delphi: книги, исходники, программы... Изучайте Delphi один из лучших языков программирования!!!


У меня возникла небольшая проблема с почтой на nextmail.ru, в последнее время она часто недоступна. Поэтому я изменил e-mail на  list.ru.


 

ЗАДАТЬ ВОПРОС :

Правила рассылки: 
1. Не присылайте ответов на вопросы типа "да, нет".  
2. Если отвечаешь на вопрос - то отвечай подробно с примерами (желательно с исходником примера).
3. Тема вопросов - программирование на Delphi.
Внимание авторам: - Я не указываю ваши адреса из-за спама, но кто хочет, чтобы его email был - пишите, иначе только имя(ник).
Отправить вопрос


Новые вопросы.


Вопрос № 98 задаёт: Илона Ответить  
Здравствуйте.
У меня такой вопрос: как узнать ширину символов, введенных, например, в комонент Tedit.
Вопрос № 99 задаёт: Сергей  Ответить
Здравствуйте всем.
Такой вопрос: программа генерирует рабочую книгу Excel, состоящую из большого количества листов с разным содержимым. Время от времени некоторые листы необходимо удалять без вмешательства пользователя. Excel же это сделать не дает. Он в любом случае выдает окно подтверждения на удаление.
Как мне удалить лист Excel без вывода подтверждения на удаление со стороны Excel? Или как программно из Delphi ответить утвердительно на этот запрос?
Пробовал перед удалением листа сначала удалять данные из него и применял разные методы удаления листа, но результат тот же.
Если есть у кого какие мысли, поделитесь. Буду благодарен.
var
 XL: TExcelApplication;
 ...

  (XL.ActiveWorkbook.Sheets[1] as _Worksheet).Activate(lcid);
  with XL.ActiveWorkbook do
      (Worksheets.Item[1] as _Worksheet).Delete(lcid);
Вопрос № 100 задаёт: Vitek  Ответить
Здравствуйте!
Form1.MediaPlayer1.Display:=Form2.Panel1;
при открытии файла, картинка идёт только вкакой-то его (дисплее) части, а как сделать так, чтобы границы изображения (не Panel1) были прикреплены к границам формы и изменялись вместе с ними?
Спасибо!

Ответы.

Вопрос № 95 задаёт: hexer Ответить  
Доброго времени суток, уважаемые эксперты.
Хотел спросить: корректно ли работают компоненты/методы со вкладки IB с базой Firebird?
Отвечает: Кама 
Вполне корректно, за исключением того, что не поддерживают некоторые уникальные особенности Interbase\Firebird\Yaffil, типа array-полей etc
Отвечает: Андрей Германович 
В принципе работают, так как на уровне коннекта и API Interbase и Firebird одинаковы, но я привык к IBObjects (www.ibobjects.com), многие любят FIBPlus
Более подробно по этим компонентам смотри у Димы Кузьменко на www.ibase.ru
Вопрос № 96 задаёт: Markova Natalia Ответить 
Такая вот проблема:
нужно сделать заполнение вордовских шаблонов(вставка из базы данных на места закладок), сохранение и распечатку заполненных документов. На word 2000 все работает без проблем, а вот с Office Xp возникает проблема: файл создается, созраняется, а потом возникает ошибка "Microsoft Word - обнаружена ошибка" с предложением отправить отчет в майкрософт...Как с этим бороться?

+++++++++++++++++++++++++++++++++++
unit winword;{модуль для работы с вордом}
interface
procedure Wopen(filename:string);
procedure Wrun;
procedure Wsearch(data:string);
procedure Winsert(info:string;_italic:boolean);
procedure WQuit;
procedure Wclose;
procedure WSave(Name:string);
procedure WPrint;

implementation
uses Olectnrs,comobj;
var MsWord:Variant;

procedure WOpen(fileName:string);
begin
try MsWord.Documents.Add(fileName{,EmptyParam});
except WError(2,'файл не найден'); end;
end;

procedure WRun;
begin
try MsWord:=CreateOleObject('Word.Application');
MsWord.Visible:=False;
except Werror(1,'Microsoft Word не установлен');
end;
end;

procedure Wsearch(data:string);
var What,Which,Count,Name:OLEVariant;
begin
What:=-1;
Which:=unAssigned;
Count:=unAssigned;
Name:=data;
MsWord.Selection.GoTo(What,Which,Count,Name);
end;

procedure Winsert(info:string;_italic:boolean);
begin
MsWord.Selection.Font.italic:=_italic;
MsWord.selection.TypeText(info);
end;

procedure WQuit;
begin
MsWord.Quit;
end;

procedure WClose;
begin
MsWord.Documents.Close;
end;

procedure WSave(Name:string);
begin
MsWord.ActiveDocument.SaveAs(FileName:=Name);
end;

procedure WPrint;
begin
MsWord.ActiveDocument.Print;
end;
end.

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
{вот так используется}
Wrun;
Wopen('c:\program files\my.dot');
//открытие шаблона
...
Wsearch('data1'); Winsert('record 1', false);
...
Wsave('c:\program files\new.doc');
{печать}
Wclose; //закрытие документа
WQuit; //закрыть word
end;

Отвечает: Андрей Германович 
Обшибка - использование OLE-технологии для создания документов MSOffice.
Проблема в том что многоуважаемый Билли в каждой версии применяет разные алгоритмы работы с Word-ом или Excel-ем.
Если не хочешь генерировать rtf-файл с нуля, то воспользуйся компонентом EkRTF (http://ekrtf.code.net.ru ), он позволяет отдельно от программы создать шаблон с переменными, а затем "выплюнуть" в этот шаблон данные из таблиц и внутренних переменных программы.
Для Excel я использую компоненты axolot (www.axolot.con) - они работают напрямую с файлом Excel .
Отвечает: Сергей Денисов
Natalia, попробуйте в процедуре WQuit выполнить
MSWord.Quit(False);
При этом будет подавляться выдача диалога о сохранении файла.
Отвечает: Сергей
Было бы неплохо, если было указано, в каком месте происходит ошибка.
Поэтому сказать что именно работает не так сложно.
Для поиска рекомендую залесть в Word2000.pas и WordXP.pas, находящиеся .\Program Files\Borland\Ocx\Servers.
Ведь не зря для разных Offic'ов написали разные модули.
Вопрос № 97 задаёт: #One Ответить 
Как узнать IP-адрес машины, на которой прога запущена?
Отвечает: Евгений http://decoding.narod.ru 
// На компьютере может быть установлено несколько сетевых
// плат, тогда у этого компьютера будет несколько IP-адресов.
// Эта процедура найдет все IP-адреса.

uses
  ..., WinSock;

procedure TForm1.Button1Click(Sender: TObject);
type
  InAddr = Array[0..10] of PInAddr;
  TInAddr = ^InAddr;
var
  Host: PHostEnt;
  pPtr: TInAddr;
  Buffer: Array[0..63] of char;
  i: Integer;
  Socket: TWSAData;
begin
   ListBox1.Clear;
   WSAStartup( $101, Socket );
   GetHostName( Buffer, SizeOf( Buffer ) );
   Host := GetHostByName( buffer );
   if Host = nil then Exit;
   pPtr := TInAddr( Host^.h_addr_list );
   i := 0;
   while pPtr^[i] <> nil do
   begin
      ListBox1.Items.Add( inet_ntoa( pPtr^[i]^ ) );
      Inc( i );
   end;
   WSACleanup;
end;
Отвечает: Антон Трапезников
Существует множество методов получения IP адреса компьютера. Но данный пример представляет наиболее корректный способ получения всех адресов, сетевых масок, broadcast адресов и статусов для всех интерфейсов включая циклический 127.0.0.1 - требует WinSock 2.
Это завершённый Delphi компонент. Для его использования достаточно вызвать: 
EnumInterfaces(var s string): Boolean;
 
unit USock;
 
interface
 
uses
  Windows, Winsock;
 
{
 
Если Вы поместите строку результатов в wide TMEMO
(в его свойство memo.lines.text)
то никаких результатов не увидите.
 
}
 
function EnumInterfaces(var sInt: string): Boolean;
 
 
function WSAIoctl(s: TSocket; cmd: DWORD; lpInBuffer: PCHAR; dwInBufferLen:
  DWORD;
  lpOutBuffer: PCHAR; dwOutBufferLen: DWORD;
  lpdwOutBytesReturned: LPDWORD;
  lpOverLapped: POINTER;
  lpOverLappedRoutine: POINTER): Integer; stdcall; external 'WS2_32.DLL';
 
{ Константы взятые из заголовка C файлов }
 
const
  SIO_GET_INTERFACE_LIST = $4004747F;
  IFF_UP = $00000001;
  IFF_BROADCAST = $00000002;
  IFF_LOOPBACK = $00000004;
  IFF_POINTTOPOINT = $00000008;
  IFF_MULTICAST = $00000010;
 
type sockaddr_gen = packed record
  AddressIn: sockaddr_in;
  filler: packed array [0..7] of char;
end;
 
type INTERFACE_INFO = packed record
  iiFlags: u_long; // Флаги интерфейса
  iiAddress: sockaddr_gen; // Адрес интерфейса
  iiBroadcastAddress: sockaddr_gen; // Broadcast адрес
  iiNetmask: sockaddr_gen; // Маска подсети
end;
 
implementation
 
{-------------------------------------------------------------------
 
1. Открываем WINSOCK
2. Создаём сокет
3. Вызываем WSAIOCtl для доступа к сетевым интерфейсам
4. Для каждого интерфейса, получаем IP, MASK, BROADCAST, статус
5. Разделяем строку символом CRLF
6. Конец :)
 
--------------------------------------------------------------------}
 
function EnumInterfaces(var sInt: string): Boolean;
var
  s: TSocket;
  wsaD: WSADATA;
  NumInterfaces: Integer;
  BytesReturned, SetFlags: u_long;
  pAddrInet: SOCKADDR_IN;
  pAddrString: PCHAR;
  PtrA: pointer;
  Buffer: array[0..20] of INTERFACE_INFO;
  i: Integer;
begin
  result := true; // Инициализируем переменную
  sInt := '';
 
  WSAStartup($0101, wsaD); // Запускаем WinSock
  // Здесь можно дабавить различные обработчики ошибки :)
 
  s := Socket(AF_INET, SOCK_STREAM, 0); // Открываем сокет
  if (s = INVALID_SOCKET) then
    exit;
 
  try // Вызываем WSAIoCtl
    PtrA := @bytesReturned;
    if (WSAIoCtl(s, SIO_GET_INTERFACE_LIST, nil, 0, @Buffer,
    1024, PtrA, nil, nil) <> SOCKET_ERROR) then
    begin // Если OK, то определяем количество существующих интерфейсов
 
      NumInterfaces := BytesReturned div SizeOf(INTERFACE_INFO);
 
      for i := 0 to NumInterfaces - 1 do // Для каждого интерфейса
      begin
        pAddrInet := Buffer[i].iiAddress.addressIn; // IP адрес
        pAddrString := inet_ntoa(pAddrInet.sin_addr);
        sInt := sInt + ' IP=' + pAddrString + ',';
        pAddrInet := Buffer[i].iiNetMask.addressIn; // Маска подсети
        pAddrString := inet_ntoa(pAddrInet.sin_addr);
        sInt := sInt + ' Mask=' + pAddrString + ',';
        pAddrInet := Buffer[i].iiBroadCastAddress.addressIn; // Broadcast адрес
        pAddrString := inet_ntoa(pAddrInet.sin_addr);
        sInt := sInt + ' Broadcast=' + pAddrString + ',';
 
        SetFlags := Buffer[i].iiFlags;
        if (SetFlags and IFF_UP) = IFF_UP then
          sInt := sInt + ' Interface UP,' // Статус интерфейса up/down
        else
          sInt := sInt + ' Interface DOWN,';
 
        if (SetFlags and IFF_BROADCAST) = IFF_BROADCAST then // Broadcasts
          sInt := sInt + ' Broadcasts supported,' // поддерживает или
        else // не поддерживается
          sInt := sInt + ' Broadcasts NOT supported,';
 
        if (SetFlags and IFF_LOOPBACK) = IFF_LOOPBACK then // Циклический или
          sInt := sInt + ' Loopback interface'
        else
          sInt := sInt + ' Network interface'; // нормальный
 
        sInt := sInt + #13#10; // CRLF между каждым интерфейсом
      end;
  end;
  except
  end;
  //
  // Закрываем сокеты
  //
  CloseSocket(s);
  WSACleanUp;
  result := false;
end;
 
end.
Отвечает: Сергей Денисов
function GetLocalHostName(var Addr:string):string;
var P:array[0..255] of char;
 s:string;
 wsaData_:WSADATA;
 pH  :  PHostEnt;
begin
 result:='';
 if  WSAStartup( $22, wsaData_ ) <> 0  then
    Exit;
 if gethostname(@P[0],255)=0 then
  begin
   s:=P;
   result:=s;
   pH  :=  GetHostByName(PChar(s));
   Addr  :=  inet_ntoa(PInAddr(pH.h_addr_list^)^);
  end;
 
 WSACleanup;
end;
 
В функции - выходной параметр - имя хоста, в поле Addr - IP-адрес.


Исходники:   

Создание интерактивных Сервисов для Windows NT

Создание интерактивных Сервисов для Windows NT
Цель этой работы описать некоторые аспекты создания сервисов для Windows NT в Delphi. Я не буду касаться фактов, которые уже описаны другими авторами. Я постараюсь рассказать о не очевидных и недостаточно хорошо описанных вещах.
А именно:
∙ Получение доступа к рабочему столу
∙ Создание гибридных приложений, которые могут запускаться как сервис или как обычное приложение
∙ Несколько полезных советов по создание NT сервисов

DLL Inject v.1.01

Пример показывает как вставить свою DLL в какой-либо процесс, используя VirtualAllocEx и CreateRemoteThread.
Пример может быть использован для добавления дополнительной функциональности существующему приложению. Также может быть адаптирован для перехвата вызова API функций.
Из-за того, что пример использует несколько NT функции, он недоступен в Windows 9X

Desktop Icons Positon v.1

Небольшая программа (исходный код включён) для установки/перемещения иконок на рабочем столе. Только для Windows XP

Desktop Sprite Demo v.1.51

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

Get Symbols Table v.1.0

Приложение позволяет показать шрифты Windows в различных таблицах шрифтов

Вызов функций из Dll.

Из этого примера Вы можете узнать, как вызывать функции из динамических библиотек, как использовать некоторые API функции, как использовать exe файлы в качестве Dll и многое другое.

Как принимать перетащенные файлы из Windows Explorer v.1.0

Этот небольшой пример показывает, как реагировать Вашему приложению на перетащенные из проводника Windows файлы. Перетащенные файлы загружаются к компонент TMemo, а соответствующая им иконка загружается в компонент TPicture.

Как модифицировать Системное меню и показать диалог ShellAbout

Приме показывает, как модифицировать Системное Меню формы (изменять, удалять, добавлять пункты меню) во время выполнения, а также пример показа диалога ShellAbout (Как в стандартных программах Windows)


Модули:   

s.m.a.r.t monitor v.1

Этот модуль показывает, как получить данные (такие как температура и …) со s.m.a.r.t HDD.


Компоненты:   

TodMacOSCaption v.1.0

Этот компонент создаёт заголовки форм в стиле MAC OS

ТOxygenSMS Component для Borland Delphi и Borland C++ Builder

Модуль SMS позволит отправлять и принимать SMS-сообщения, считывать и устанавливать номер центра SMS, получать количество хранимых сообщений и номера соответствующих ячеек, читать и удалять содержимое папок SMS. Кроме того, Вы получаете доступ к различным параметрам телефона: IMEI, модель телефона, версию и дату прошивки, а также уровень сигнала, заряда батарей и др. Данный модуль предоставляет возможность посылать простой текст, текст в формате Unicode, мигающий (flash) текст, сообщения с картинками, мелодии, логотипы групп абонентов и операторов. После получения сообщения или подтверждения о доставке компонент автоматически генерирует соответствующие события. Модуль также позволяет автоматически удалять входящие сообщения.
Модуль Календарь предназначен для работы с календарем телефона. Он позволяет читать, добавлять, изменять и удалять заметки в календаре.
TOxygenSMS Component работает в операционных системах Microsoft Windows 95, 98, NT и 2000 и поддерживает следующие GSM телефоны Nokia:
Модуль SMS: 3210, 3310, 3330, 3390, 3350, 3410, 3510, 5110, 5130, 5190, 5210, 6110, 6130, 6150, 6190, 6210, 6250, 6310, 6310i, 6360, 6510, 7110, 7190, 8210, 8290, 8250, 8310, 8390, 8810, 8850, 8855, 8890, 8910;
Модуль Календарь: 6210, 6250, 7110, 7190.
Автор: Oxygen Software http://www.oxygensoftware.ru/
Версия программы: 2.6 Пробная версия · Лицензия: Условно-бесплатно · Русский интерфейс: нет

ICQ_Socket - живое общение

Уникальная библиотека ICQ_Socket поможет Вам интегрировать в программы возможности общения друг с другом, используя все прелести протокола ICQ. Возможности: поддержка протокола ICQ 8-ой версии, прием сообщений, отправка сообщений, отправка и прием url-ов, получение информации о пользователя, поиск участника всемирное сети ICQ, трассировка содержимого отправляемых и получаемых пакетов, одновременная работа с несколькими ICQ идентификаторами, поддержка мильтипоточности - Вы можете не заботиться о синхронизации при работе с ICQ сокетами из разных потоков и многое другое. Интеграция с MS Visual C++, с Delphi и Builder C++ через компоненту TICQSocket (распространяемой бесплатно), которая поможет Вам более эффективно использовать библиотеку в визуальных приложениях. Добавлены новые возможности + исправлены все ошибки предыдущей версии. 
Автор: softvariant.ru mailto:support@softvariant.ru 
Версия программы: 2.3 · Лицензия: Условно-бесплатно · Русский интерфейс: есть 


Интересные и полезные сайты по Delphi: Если Вы хотите, чтобы Ваш сайт был в этом разделе пишите.
http://www.noil.pri.ee/ - Здесь вы можете почитать статьи, скачать исходники и компоненты, пообщаться на форуме.
http://www.delphi.int.ru/ - Ресурс для Delphi-программистов, где каждый найдёт что-то полезное!
http://www.ExCode.ru - Программирование на высоком уровне
http://decoding.narod.ru - Сайт для Delphi-программистов со статьями автора, компонентами, FAQ, и другой полезной информацией.

Немного юмора:  :))

Если человек не отвечает на Ваши письма, значит он занят какой-нибудь более важной ерундой!


Один из вариантов конца света: 
В небе появляются пылающие буквы 
"Программа выполнила некорректную операцию и будет закрыта"... 


Мелкомягкие винды, смоют все твои труды...


В кабинете у невропатолога: 
- Вам приходилось переживать нервные потрясения? 
- Однажды прямо у меня на глазах компьютер спиртом промыли.


Россиянин! Помни: пока ты сидишь в Интернете - китайцы размножаются!


Компьютер - это полнейший идиот с феноменальной памятью.


Быстро поднятый Мастдай не считается упавшим.


Компьютер в руках женщины - груда металлолома


Покупка компьютера - первый шаг к его апгрейду


Какой бы Вы компутер ни настраивали, тот, кто настраивал его до Вас - чайник


В фирму для рутинной работы на компьютере устраиваются три претендента. Первого зашедшего на собеседование спрашивают: 
- Вас интересуют порносайты в Интернете? 
Тот подумал, если сказать, что интересуют, то примут за сексуального маньяка: 
- Нет, не интересуют. 
- Свободны! 
Заходит второй, ему тот же вопрос. Он подумал, если сказать, что не интересуют, то сочтут за ненастоящего мужика: 
- Да, интересуют. 
- Свободны! 
Наконец заходит третий: 
- Вас интересуют порносайты в Интернете? 
- А что такое Интернет? 
- Оформляйтесь на работу!


Если Вы написали впервые программу и у Вас компилятор не нашел ошибок, обратитесь к администратору, он исправит ошибки в компиляторе.



Дружественные рассылки:

Рассылки Subscribe.Ru
Программирование на Delphi
Рассылка сайта Delphi coding


Все кто хочет изучить Delphi и реально научиться писать свои программы, ЦПИ "Эверест" поможет Вам.
Всё, что Вам нужно это компьютер и доступ к интернету - для получения уроков.

10 причин в пользу платного обучения в ЦПИ "Эверест"…

1. Когда Вы платите деньги- появляется дополнительный стимул против лени: надо учиться, ведь деньги уже уплачены….
2. Учась платно, получаете удобный для Вас график работы.
3. Весь необходимый справочный материал Вы получите в свое время и на русском языке.
4. Используя интернет в качестве бесплатной библиотеки, Вы получаете все ее минусы:

  • трата времени на поиск необходимого материала (а это потерянные деньги и время). А у Вас есть лишние время и деньги?;
  • отсутствие гарантии, что Вы "осилите" данный материал, ведь пишут его, в основном, не педагоги- профессионалы, а программисты- профессионалы, а они пишут для таких же, как они. А Вы программист- профессионал?
  • отсутствие системности в скачиваемом материале (ведь человек, писавший для Вас материал, не знает, чем Вы владеете). А Вы обладаете системой знаний по Delphi?;

5. Стоимость обучения одного месяца в ЦПИ "Эверест" сравнима с ценой хорошей книги. Но часто ли Вам попадались книги, рассчитанные именно на Вас. Мы же работаем индивидуально.
6. Автор книги или магазин не несет никакой ответственности за то, поняли ли Вы материал или нет, мы же закрепляем за каждым курсантом преподавателя, курирующего Вас.
7. Освоив программирование в Delphi - Вы освоите:

  • основы настоящего программирования- структурного и процедурного программирования ;
  • систему работы с базами данных и SQL- запросами, а это одно из самых перспективных направлений в программировании;
  • язык программирования ObjectPascal, что позволит Вам легко перейти, при желании, на С или Паскаль;
  • работу с компьютерной графикой;
  • при желании - основы низкоуровневого программирования ( Ассемблер).

8. А это значит, что …Мы предлагаем получить "высшее образование" - профессию программиста всего за 1 год и 144 доллара, любой ВУЗ попросит в 3 раза больше за один только семестр.
9. Вы получаете самый практический курс в сети, поскольку теория дается только тогда, когда она действительно необходима…
10. Учиться у нас легко и просто. Весь материал доступен и простым людям, не имеющим никогда дел с программированием….


По всем вопросам обращайтесь ко мне.

Если вы встретили в интернете интересный сайт или статью, да и вообще, что угодно связанное с Delphi, поделитесь ссылкой.
Если можете написать статью связанную с Delphi - присылайте с радостью выложу.
Давайте поможем друг другу!  Архив рассылки.

Предложения, критику и пожелания пишите на e-mail.


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiinternet
Архив рассылки
Отписаться
Вспомнить пароль

В избранное