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

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


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

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

Выпуск : № 


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


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

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


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


Вопрос № 19 задаёт: SHKoder Ответить
от части вопрос quote Skeleton22, но с другого боку
Есть таблица, содержит поля город, область, улица, дом, подъезд при фильтрации получается двухмерный масив, содержищий
записи, в которых в основном, повторяется город, остальные значения могут быть разными. подскажите, как двух мерный масив
приобразовать в строку.
пример первого масива.
Москва, ул. Победы, д.1, п.1, эт.4
Москва, ул. Победы, д.1, п.1, эт.6
Москва, ул. Победы, д.1, п.2
Москва, ул. Победы, д.9, п.3
Москва, ул. Мира, д.2, п.1
Москва, ул. Мира, д.4, п.7
Москва, ул. Мира, д.4, п.1

но необходимо получить
Москва, ул. Победы, д.1, п.1, эт.4
эт.6
п.2
д.9, п.3
ул. Мира, д.2, п.1
д.4, п.7
п.1

зарание благодарен
Вопрос № 20 задаёт: SOURCE Ответить

Как в Memo вывести имена директорий на указанном диске?
Имя диска хранится в переменной типа String.

Добро пожаловать на мою страничку http://sources.h11.ru/

Ответы.

Вопрос № 10 задаёт: Dashutka Ответить
Привет всем!
Хотела бы попросить помощь, делаю программу в которой запись, содержащася сведения об учениках класса: фамилия, имя, отчество, класс, вес, рост, пол, дата рождения.и мне надо Распечатать(т.е вывести в стринггриде) в алфавитном порядке список учеников, чей вес ниже определенного веса. у меня есть отдельное окно где надо ввести определенный вес. подскажите пожалуста как сделать сортировку(сортировку в стринггриде) и связать ее с поиском еще, ну т.е если ниже определенного веса. P.S есть файл;
Отвечает: Vadim
Обычно такие задачи решаются с использованием базы данных СУБД InterBase - более надежная (требует установки IBserver) или СУБД Access (требует наличие установленного стандартного MS Access в комплекте MS Office (или установки драйверов mdac_typ25.exe), а также дополнительные компоненты и драйвера под Delphi для работы с ADO-технологией Access.
Файлы базы данных будут в этом случае называться, например:
uchenik.gdb или
uchenik.mdb
В любом случае при работе с большим объемом информации время от времени желательно сохранять резервную копию файла базы данных (например, архивировать
с указанием даты).
Дальше:
Для отображения информации из таблиц базы данных используются компоненты, соответственно:
IBDataBase -> IBQuery -> DataSourse -> DBStringGrid
ADOConnection ->ADOQuery-> DataSourse -> DBStringGrid
или стандартные
DataBase -> Query -> DataSourse -> DBStringGrid
Table
При использовании любого компонента Query появляется возможность использования стандартной SQL-технологии, что позволяет создать любой запрашиваемый набор данных, в том числе и отсортированный в алфавитном порядке, по возрастанию или убыванию.Например, для данной задачи SQL-запрос мог бы
быть похож на нижеследующее:

Select FAM, NAME, OTCH, CLASS, VES, ROST, SEX, BIRTHDAY
From CHILDREN
Where VES<40 Range by FAM


который бы означал создание набора данных через выбор строк
из таблицы CHILDREN с полями:
фамилия, имя, отчество, класс, вес, рост, пол, дата рождения,
где вес < 40 с сортировкой по фамилии.
Отвечает: TechnoSkinner
Типичная задача из серии баз данных. То, что тебе нужно, прекрасно делает язык SQL, даже если нет сервера базы данных. Если создать табличку в формате Paradox 7 (из под Дельфей смотри меню Tools => Database Desktop), то с помощью компонента TQuery можно считать из неё данные, удовлетворяющие нужным условиям, и отсортировать так как нужно. Пример:

SELECT Имя_поля_1, Имя_поля_2, Имя_поля_3, ...
FROM Имя_таблицы
WHERE (Имя_поля_1 > значение_1) AND (Имя_поля_3 < значение_2) ...
ORDER BY Имя_поля_1, Имя_поля_2, Имя_поля_3 ...


Свяжись со мной по ICQ: 315100307, обсудим детали твоей задачи и найдём оптимальное для тебя решение
Вопрос № 15 задаёт: SHKoder Ответить
на базе MS SQL имею таблицу TEMP с полями fk_id и fc_name, где fk_id уникальное, самоинкременирующеся поле. После
INSERT INTO TEMP
([fc_series])
VALUES
('qqqqq')

fk_id инкременируется на порядок.
Вопрос: как получить, т.е. вернуть клиенту значение fk_id после выполнения INSERT??
Отвечает: Scopich Oleg
Перед INSERT-ом нужно получать fk_id и его использовать в INSERT-е.
IDENTITY может оказаться не достоверным если работают сразу несколько пользователей.
Вопрос № 16 задаёт: Skeleton22 Ответить
Есть таблица, содержит поля город, область, улица, дом, подъезд при фильтрации получается двухмерный масив, содержищий записи, в которых в основном, повторяется город, остальные значения могут быть разными. подскажите, как двух мерный масив приобразовать в строку.
пример первого масива.
Москва, ул. Победы, д.1, п.1
Москва, ул. Победы, д.1, п2
Москва, ул. Мира, д.2, п.1
необходимо получить
Москва, ул. Победы, д.1, п.1,п.2, ул. Мира, д.2, п.1
Отвечает: TechnoSkinner
Расскажи более подробно о своей задаче и о том, как ты представляешь данные внутри своей программы. Если ты используешь компонент TQuery, то можно решить задачу например так:

Query1.SQL.Text := <твой_запрос_в_одинарных_кавычках>;
Query1.Open;
if Query1.FindFirst then
begin
s := Query1.FieldByName('Поле_1').AsString
Repeat
if <твои условия>
then s := s + Query1.FieldByName('Поле_2').AsString + ', ' + Query1.FieldByName('Поле_2').AsString ... + ';';
Until not Query1.FindNext;
end;


Нечто аналогичное можно провернуть и в том случае, если у тебя данные уже занесены в массив памяти. Расскажи, как ты хранишь данные, и я смогу набросать тебе решение конкретно твоей задачи.
Вопрос № 17 задаёт: $T!13tT0 Ответить
Как перехватывать обращения к файлам в Windows NT/@k/XP ?
Отвечает: SHKoder
Filemon for Windows NT/2000/9x
Copyright (C) 1996-2000 Mark Russinovich and Bryce Cogswell
Sysinternals
www.sysinternals.com
Вопрос № 18 задаёт: Viterik Ответить
Подскажите как сделать снимок экрана(скриншот) и чтобы этот снимок сохранялся
в файл *.jpg... А так же, как сделать чтобы
снимок отображался на форме в TImage???
Отвечает: Gregory
Попробуйте разобраться в следующем куске кода

>>> CUT <<<
procedure GetScreenImage(bmp: TBitmap);
var bmp:Tbitmap;
begin
bmp:=TBitmap.Create;
bmp.Width := Screen.Width;
bmp.Height := Screen.Height;
BitBlt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,
GetDC(GetDesktopWindow), 0, 0, SRCCopy);
end;
>>> END <<<

Отвечает: Burich-Caeser
Uses ..., JPEG;

var
...
MJPG: TJPEGImage;

procedure Shot;
var
DeskTopDC: HDC;
begin
DeskTopDC := GetWindowDC(GetDeskTopWindow);
with form1.Image1 do
StretchBlt(Canvas.Handle,0,0,Width,Height,DeskTopDC,0,0,screen.Height,screen.Width,SRCCOPY);
ReleaseDC(GetDeskTopWindow, DeskTopDC);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
jpgimg:=TJPEGImage.Create;
Shot;
jpgimg.Assign(image1.Picture.Bitmap);
jpgimg.SaveToFile('tmp.jpg');
jpgimg.Destroy;
end;

Пока

Отвечает: SHKoder
PRINTSCREEN

Заманчиво, когда в программе имеется возможность делать "снимки" экрана и сразу записывать их в файл. Этот пример ничем не
отличается от предыдущих, за исключением того, что при нажатии на клавишу "Пробел" делается запись содержимого экрана в
файл screen.bmp. Функция, которая проделывает эту работу, находится в файле pscreen.pas. Рассмотрим её.

Первым делом создаётся новый файл или открывается для перезаписи старый:

// созда?м файл с заданным именем, в него будет производиться запись
hFile := CreateFile(szFileName, GENERIC_WRITE, FILE_SHARE_READ, nil,
CREATE_ALWAYS, 0, 0);
if hFile = INVALID_HANDLE_VALUE then
begin
CloseHandle(hFile);
exit;
end;

// Затем нам необходимо получить данные о поверхности(здесь в функцию передан
// дополнительный буфер):

// подготавливаем структуру TDDSURFACEDESC2
ZeroMemory(@ddsd2, sizeof(TDDSURFACEDESC2));
ddsd2.dwSize := sizeof(TDDSURFACEDESC2);

// получаем формат поверхности
pSurface.GetSurfaceDesc(ddsd2);
dwWidth := ddsd2.dwWidth;
dwHeight := ddsd2.dwHeight;
dwBPP := ddsd2.ddpfPixelFormat.dwRGBBitCount;

// Структура ddsd2 используется дополнительно в методе
// Lock()поверхности.Заблокировав поверхность, можно обратится к е? содержимому
// для чтения данных:

// блокируем поверхность DirectDraw
if (FAILED(pSurface.Lock(nil, ddsd2, DDLOCK_WAIT, 0))) then
exit;

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


pPixels := pbyte(GlobalAllocPtr( GMEM_MOVEABLE, dwWidth * dwHeight * 3 ));

Затем начинается главное. Т. к. формат пикселя поверхности в каждом из графических режимов различается, необходимо
предусмотреть все особенности размещения данных. Бессмысленно подробно описывать все операции - они запутанны и сложны. Мне
понадобилось некоторое количество времени, чтобы правильно перевести все операции с указателями с языка C++ в контекст
Object Pascal. Операции с указателями на этом языке получаются довольно путаными, малейшая оплошность приводит к тому, что
обычно в файл записывается не тот участок памяти (получается мешанина из пикселей), или запись вообще не происходит.
Обратите внимание на такую строку:

pixel := PDWORD(DWORD(ddsd2.lpSurface) + i * 4 + j * ddsd2.lPitch)^;

Здесь определяется цвет нового пикселя поверхности. ddsd2.lpSurface - это указатель на начало данных поверхности, а
ddsd2.lPitch - шаг поверхности, учитывать его нужно обязательно. После того, как данные скопированы в массив, поверхность
обязательно нужно разблокировать. Теперь можно начать запись данных в файл.

Для начала необходимо вручную подготовить структуры BITMAPFILEHEADER и BITMAPINFOHEADER. В последней надо указать ширину и
высоту растра, а также разрядность пикселя. Тип сжатия должен быть BI_RGB - т. е. без сжатия. После этого с помощью
API-функций Windows последовательно в файл записываются структуры BITMAPFILEHEADER, BITMAPINFOHEADER и далее -
подготовленные данные из памяти. После записи файл необходимо закрыть, а память - освободить:

// закрываем файл
CloseHandle(hFile);
pPixels := nil;

Функция получилась громоздкой, согласен. Однако иного способа не существует - во всём виноват формат поверхности. Кстати,
я не учёл режим в 256 цветов - опять же по причине анахронизма.

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

///////////////////////////////////////////////////////////////////////////////////////////////////////////
В событиях, обрабатывающих нажатия клавишь в TForm, клавиша PrintScreen не обрабатывается. Однако проблему можно решить
при помощи 'GetAsyncKeyState'. Функция GetAsyncKeyState определяет, когда клавиша была нажата или отпущена каждый раз,
когда функция вызвана, а так же, когда клавиша была нажата после предыдущего вызова GetAsyncKeyState.

Событие OnIdle в TApplication как раз подходит для вызова этой API функции:

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnIdle := AppIdle;
end;

procedure TForm1.AppIdle(Sender: TObject; var Done: Boolean);
begin
if GetAsyncKeyState(VK_SNAPSHOT) <> 0 then
Form1.Caption := 'PrintScreen нажата !';
Done := True;
end;


/////////////////////////////////////////////////////////////////////////////////////////////////////////////
я взял с www.Delphiworld.narod.ru



Книги:  

Иллюстрированный самоучитель по Delphi 7 для начинающих формат *.chm размер = 5 157 kb
Аннотация:
Это учебное пособие по программированию на языке Delphi в одноименной среде. В нем рассмотрена вся цепочка, весь процесс создания программы: от разработки диалогового окна и функций обработки событий до создания справочной системы и установочного диска.
Цель этой книги может быть сформулирована так: научить программировать в среде Delphi, т. е. создавать законченные программы различного назначения: от простых однооконных приложений до вполне профессиональных программ работы с базами данных.
Существует четыре варианта пакета Borland Delphi 7 Studio: Personal, Professional, Enterprise и Architect. Каждый из этих комплектов включает стандартный набор средств, обеспечивающих разработку высокоэффективных программ различного назначения, в том числе для работы с базами данных. Вместе с тем, чем выше уровень комплекта (от Personal до Architect), тем большие возможности он предоставляет программисту. Так, комплект Enterprise позволяет разрабатывать приложения работы с удаленными базами данных (например, InterBase), а комплект Personal — нет. Подробную информацию о структуре, составе и возможностях пакетов Borland Delphi 7 Studio можно найти на сайте Borland (www.borland.com/delphi).
Материал книги не привязан к конкретному комплекту Delphi. Все задачи, рассмотренные в качестве примеров, могут быть реализованы в рамках набора Personal.
Научиться программировать можно только программируя, решая конкретные задачи. При этом достигнутые в программировании успехи в значительной степени зависят от опыта. Поэтому, чтобы получить максимальную пользу от книги, вы должны работать с ней активно. Не занимайтесь просто чтением примеров, реализуйте их с помощью вашего компьютера. Не бойтесь экспериментировать — вносите изменения в программы. Чем больше вы сделаете самостоятельно, тем большему вы научитесь

Иллюстрированный самоучитель по Delphi 7 для профессионалов формат *.chm размер = 2 316 kb
Аннотация:
Материал книги рассчитан на читателя, имеющего представление о самом языке Object Pascal, его операторах и основных возможностях.

Примеры по Delphi 7 для профессионалов размер = 541 kb
Аннотация:
Каждый пример хранится в отдельной папке и представляет собой полноценный проект, который можно загружать в среду разработки и компилировать. 
Название каталогов состоит из номера главы, в которой рассматривается пример, и порядкового номера примера по тексту главы. Некоторые приложения используют в качестве источника данных демонстрационную базу данных Delphi, которая при стандартной инсталляции находится в папке \Program Files\Common Files\Barland Shared\Data. При работе с такими приложениями вам необходимо самостоятельно настроить соответствующие свойства компонентов доступа к данным. Они преднамеренно обнулены, т. к. на вашем компьютере база данных Delphi может располагаться в другом месте.

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

Ниже приводится описание демонстрационных приложений.

-----------------------------------------------------------------------
Папка Приложение
-----------------------------------------------------------------------
05_1 Пример использования компонентов TTreeView и TTreeList для просмотра информации из системного реестра Windows
05_2 Простой пример разработки собственного компонента
06_1 Ресурсы манифеста Windows XP
07_1 Пример использования в приложении списка объектов на основе класса TList
07_2 Пример использования в приложении списка строк на основе класса TStringList
10_1 Пример приложения, использующего компоненты Delphi для отображения графики
10_2 Приложение для просмотра растровых приложений JPG, JPEG, BMP
11_1 Пример простейшего приложения баз данных
12_1 Пример использования параметров компонентов запросов SQL и взаимодействия таких компонентов на основе передачи значений параметров
14_1 Приложение баз данных, использующее отношение "один-ко-многим" между таблицами базы данных
14_2 Приложение баз данных, демонстрирующее варианты поиска записей в таблице базы данных
14_3 Пример использования закладок (класс TBookmark) в наборах данных Delphi
15_1 Приложение баз данных, использующее компоненты синхронного просмотра
16_1 Приложение баз данных, напрямую использующее API BDE для полного удаления записей из таблиц базы данных
16_2 Приложение баз данных, напрямую использующее API BDE для представления данных
17_1 Приложение баз данных, демонстрирующее возможности технологии dbExpress
19_1 Приложение баз данных, демонстрирующее возможности технологии ADO
21_1 Пример простого распределенного приложения баз данных
25_1 Пример использования компонента проекта отчета Rave Reports и разработки простых отчетов в визуальной среде Rave Reports
26_1 Пример использования настраиваемого соединения на основе компонента TRvCustomConnection
26_2 Пример отчетов Rave Reports для приложений баз данных
27_1 Пример реализации Drag-and-Drop
27_2 Пример реализации Drag-and-Dock
27_3 Пример реализации управления мышью
28_1 Пример создания динамической библиотеки
29_1 Приложение, использующее отдельный поток к памяти для расчета числа
30_1 Приложение, использующее компоненты многомерного представления данных
31_1 Пример приложения, использующего Shell API 


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

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


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


- Вы кем работаете?
- Я фармацевт.
- А, значит, в аптеке работаете?
- Нет, диски С форматирую.


Один мужик другому:
- Ты уже 10 лет женат, и ни разу не изменил! Почему?
- Ну... Причина в двух вещах...
-... наверное, любовь и преданность?
- Нет! Лень и порносайты!


Парадокс двадцатого века: ламеры снимают фильм про хакеров


Если полет в космос стоит 20 миллионов долларов, то Билл Гейтс может смело покупать себе проездной.


 

Два инетчика: 
- Я тут с такой девушкой познакомился... Отпад. 90-60-90. 
- Круто. А откуда у нее шестизначная аська?


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

Рассылки Subscribe.Ru
Программирование на Delphi.
Всё о Delphi


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

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


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiinternet
Отписаться

В избранное