Последние записи
- Delphi 7: замостить TImage маленьким изображением
- Определить, что кнопка зажата сейчас
- ATmega128 — При появлении положительного фронта на входе PD3 запустить таймер-счётчик 0
- Можно вставить в HTML элемент из XML?
- Не получается запустить компьютер, при старте показывает no codec initialized
- Громкость звука (Делфи)
- Собрать post/get и куки параметры в одну переменную
- Создание окна ввода пароля на чистом Ассемблере
- Удаление пустых абзацев в ячейках таблиц (MS Word)
- Не создавать форму при определенном параметре
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
11th
Июл
Программа для получения данных об устройствах ПК
[MoNAMur]:
отрыл у себя на компьютере в папке “раритет” эти исходники.
интересно ваше мнение по поводу кода и полезности программы)))
да и может кому то понадобится какой-нибудь кусок кода.программа получает данные о некоторых железках…
10th
Июл
Как работать с графикой на канве в среде Дельфи. Урок 7-8
Вот мы и подошли к заключительной серии наших уроков по графике в среде DELPHI. Сегодня рассмотрим практическое применение модуля <LoadObjectToBufferMod>, из нашего прошлого материала, на примере работы с движущимися графическими объектами…
Продолжение. Начало цикла смотрите в первом выпуске журнала…
Как работать с графикой на канве в среде Дельфи. Урок 7—8
Владимир Дегтярь
DeKot degvv@mail.ru
Проект с использованием дополнительного универсального модуля. Урок 7
Создайте и сохраните аналогично предыдущим урокам новый проект <Lesson 4>. В разделе uses введем модуль и в разделе var переменные для фона и звездолета ‘ship1 . Сам модуль должен находится в папке проекта (см. листинг 1):
Interface ЛИСТИНГ-1
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,LoadObjectToBufferMod, ExtCtrls;
var
Form1: TForm1;
xf,yf: integer; // координаты вывода общего буфера на форму
dyf: integer; // приращение изменения координаты yf по вертикали
xS1,yS1: integer; // координаты звездолета 'ship1'
dxS1,dyS1: integer; // приращение координат 'ship1' по гориз. и вертик.
xR,yR: integer; // координаты звездолетов 'ship4' ...'ship7'
dyR: integer; // приращение координат 'ship2 - 5'
N_kadrS1: byte; // номер изображения спрайта 'ship1'
implementation
В процедуре OnCreate() формы проведем инициализацию буферов и введем начальные данные для переменных (см. листинг 2):
procedure TForm1.FormCreate(Sender: TObject); ЛИСТИНГ-2
begin
// инициализация и загрузка битовых образов буфера фона и общего буфера
InitFon(1,2,'data/star1.bmp');
LoadFon(0,0,'data/star1.bmp');
LoadFon(0,540,'data/star2.bmp');
InitBuff;
// начальные значения переменных
xS1:= 250; yS1:= 1006;
dxS1:= 5; dyS1:= 2;
xf:= 0; yf:= -540; dyf:= 2;
end;
Процедура InitFon() вызывается из модуля ‘1‘ – количество используемых файлов фона по ширине, ‘2‘ – по высоте, ‘data/star1.bmp’ – по этому файлу определяем размеры основного буфера фона BufFon. Далее в процедурах loadFon() загружаем все файлы фона в BufFon. InitBuff() – инициализация буфера Buffer и загрузка в него фона. Движение графических объектов организовано в обработчике таймера (см. листинг 3):
procedure TForm1.Timer1Timer(Sender: TObject); ЛИСТИНГ-3
begin
// вывод движения 'ship1'
N_kadrS1:= InitSprite('data/ship1.bmp',2,1,1,N_kadrS1);
LoadBuff(xS1-dxS1,yS1+dyS1,xS1,yS1,0);
Form1.Canvas.Draw(xf,yf,Buffer);
yf:=yf+dyf; // приращения координат для движ. фона
if yf >= 0 then // если половина фона "прошла" через окно формы
begin
yf:= -540; yS1:= 1006; // возврат к начальным координатам
FreeBuff; // "перезагрузка" фона
end;
yS1:= yS1 - dyS1; // приращение для 'ship1',обратное приращению фона
end;
Функция InitSprite() возвращает номер следующего кадра (следующий рисунок спрайта ‘ship1’), который при следующем такте таймера опять передается в эту же функцию. В процедуре LoadBuff() предыдущее изображение спрайта перекрывается областью TRect фона и затем выводится новое изображение спрайта.
Когда весь фон проходит через окно формы в процедуре FreeBuff() фон снова перерисовывается в Buffer и возвращаются начальные координаты вывода Buffer на форму. Движение звездолета по горизонтали организовано в обработчике нажатия клавиш (см. листинг 4):
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; ЛИСТИНГ-4
Shift: TShiftState);
begin
case Key of
VK_Left: begin // клавиша "стрелка" - влево
if xS1 <= 0 then EXIT; { если звездолет у левого края формы
xS1 не изменяется}
dxS1:= -5; // движение звездолета влево
xS1:= xS1 + dxS1;
end;
VK_Right: begin // клавиша "стрелка" - вправо
if xS1 >= 630 then EXIT; { если звездолет у правого края формы
xS1 не изменяется}
dxS1:= 5; // движение звездолета вправо
xS1:= xS1 + dxS1;
end;
end;
end;
Запустите данный проект. Получим приложение аналогичное проекту <Lesson 3>. Сравнив коды этих проектов, заметно преимущество применения модуля. Сам проект приведен в папке <Lesson 4_1> (см. ресурсы к статье). Мы же продолжим создание проекта <Lesson 4> далее, введя еще один движущийся
графический объект (звездолет из файлов ‘ship4’ … ‘ship7’). Эти файлы имеют разный размер и разное количество рисунков).
В разделе var введем переменные для нового графического объекта:
var
N_kadrR: byte; // номер изображения спрайта 'ship4' ... 'ship7'
ns: byte = 5; // номер файла спрайтов
Nspr: byte = 2; // кол-во изображений в строке файла спрайтов
Добавим начальные значения новых этих переменных:
xs1 := 250; ys1 := 1006; // начальные значения переменных-
dxs1:= 4; dys1:= 2;
xf := 0; yf := -540; dyf:= 2;
xr := 50; yr:= 450;
dyr:= 3;
Randomize;
В обработчике таймера для нового объекта повторно вызовем методы вывода изображений спрайтов (см. листинг 6):
// вывод движения ‘ship4-ship7’ ЛИСТИНГ-6
N_kadrR:= InitSprite(‘data/ship’ + inttostr(ns) + ‘.bmp’, Nspr, 1, 1, N, N_kadR);
LoadBuf(xR, yR – dyR, xR, yR, 0);
Form1.canvas.draw(xf, yf, Buffer);
yR:= yR + dyR; // приращение для ‘ship4-ship7’
if yR >= yS1 + 100 then // проход ‘ship4-ship7’ через окно формы
begin
xR:= random(600);
yR:= yS1 – 600;
ns:= random(4) + 4;
if ns = 7 then Nspr:= 4
else Nspr:= 2
end
end
Здесь, в функции InitSprite() переменная Nspr означает количество изображений в файле спрайтов и определяется по значению ns – номера файла нового объекта, который в свою очередь определяется функцией random() после каждого прохождения новым графическим объектом окна формы. Причем, движение ‘ship1’ аналогично предыдущим примерам в процедуре FormKeyDown(). Полностью проект приведен в папке <Lesson 4> (см. ресурсы к статье).
Развитие проекта Lesson 4. Урок 8
Продолжим наш проект <Lesson 4>, превратив его в небольшой «шутер» или попросту в «стрелялку». Добавим также возможность стрельбы ракетами для ‘ship1’ по встречным звездолетам и эффект взрыва при попадании. Соответствующие графические файлы ракеты (bullet) и взрыва (explo) находятся в папке <data>. Сделаем это новым проектом с использованием проекта <Lesson 4>.
Итак, приступим… Создайте новую папку и присвойте ей имя <Lesson 5>. Скопируйте в нее все файлы
проекта <Lesson 4> и затем откройте проект в Delphi. Переименуем проект – File => Save Project as … и в диалоговом окне “Введите имя файла” – введите Lesson5 и сохраните проект под новым именем. Теперь снова откройте проект <Lesson 5> и добавьте переменные для новых объектов:
xb, yb: integer; // координаты ракеты
dyb: integer; // приращение координат ракеты
n_kadrb: byte; // номер изображения ракеты
n_kadre: byte; // номер изображения взрыва
vistrel,flag_s: boolean;
Флаги vistrel и flag_S типа Boolean необходимы для управления выводом изображения при выстреле ракетой. Случайный выбор звездолетов ‘ship4’ … ‘ship7’ выделим в отдельную процедуру, так как выбор в программе осуществляется несколько раз после прохождения звездолетом нижней границы окна формы, после попадания ракеты, а значит и уничтожения звездолета (см. листинг 7):
procedure randomship; ЛИСТИНГ-7
begin
xr:= random(600);
yr:= ys1 – 600;
ns:= random(4) + 4;
if ns = 7 then nspr:= 4
else nspr:= 2
end;
В процедуре FormKeyDown() добавим обработку клавиши ”пробел” – пуск ракеты (см. листинг 8):
vk_space: // пробел – выстрел ЛИСТИНГ-8
if not vistrel then begin
xb:= xs1 + 22;
yb:= ys1 – 30;
dyb:= 20;
vistrel:= true
end;
В обработчике таймера выводим движение ракеты при произведенном пуске – флаг (см. листинг 9):
if yr >= ys1 + 100 then ЛИСТИНГ-9
randomShip; // проход ship4-7 через окно формы
if (vistrel) and (not flag_s) then begin // если произведен выстрел, то
// вывод изображения ракеты
n_kadrb:= initSprite(‘data/bullet.bmp’, 1, 1, 1, n_kadrb);
loadBuff(xb, yb + dyb, yb, 0);
yb:= yb – dyb;
if yb <= ys1 – 510 then begin // ракета вышла за пределы окна формы
vistrel:= false;
freeBuff // ПЕРЕЗАГРУЗКА фона
end
end;
и также вводим “эффект взрыва” при попадании ракеты в цель (см. листинг 10):
if (yb <= yr) and ЛИСТИНГ-10
(xb >= xr) and
(xb <= xr+100) and
(vistrel) then begin
flag_s:= true;
dyb:= 0;
n_kadre:= initSprite(‘data/explo.bmp’, 8, 1, 1, n_kadre);
loadBuff(xb-54, yb + 2, xb-54, 0);
form1.canvas.draw(0, yf, buffer);
if n_kadre = 0 then begin // конец эффекта взрыва
vistrel:= false;
flag_s:= false;
freeBuff;
randomShip
end
end;
И собственно то, чего добивались. Скомпилируем и запустим наш проект (см. рисунок):
Заключение
На этом мы закончим рассмотрение простейших приемов работы с движущимися графическими объектами. Предложу еще самостоятельно разобрать метод вывода на канву текстовой графики. Добавьте в код последнего приложения счетчики количества пусков ракет и попаданий в цель (например: count1, count2) и используя свойства Font(Size,Style,Color) и метод TextOut(X,Y, IntToStr(count..) введите статистику в приложении. Будем считать это домашним заданием…
Рассматриваемые в данной статье проекты полностью приведены в ресурсах к статье на http://www.programmersforum.ru в разделе «Журнал клуба программистов. Четвертый выпуск» (папка Lesson5*).
* Комментарий автора
Перед запуском в среде Дельфи скопируйте в папку с проектом папку data с графическими файлами.
Статья из четвертого выпуска журнала “ПРОграммист”.
Скачать этот номер можно по ссылке.
Ознакомиться со всеми номерами журнала.
Обсудить на форуме — Как работать с графикой на канве в среде Дельфи. Урок 7-8
9th
Июл
Рассылка. Выпуск 66.
От ведущего рассылки.
Здравствуйте!! И снова рад представить очередной 66 выпуск рассылки клуба программистов. Сегодня у нас и статьи из журнала, и интересные, серьезные и шуточные, темы с форума, и как обычно немного отдохнуть и посмеяться.
9th
Как узнать позицию курсора в TMemo?
var
X, Y: LongInt;
begin
Y := Memo1.Perform(EM_LINEFROMCHAR, Memo1.SelStart, 0);
X := Memo1.Perform(EM_LINEINDEX, Y, 0);
inc(Y);
X := Memo1.SelStart – X + 1;
Form1.Caption := ‘X = ‘ + IntToStr(X) + ‘ : ‘ + ‘Y = ‘ + IntToStr(Y);
end;
9th
100 компонентов Delphi
100 компонентов Delphi
А. Я. Архангельский.
В этой книге говорится о базовых
компонентах Delphi. Описаны также некоторые классы и типы Delphi. Такие как:
канву —Canvas, перо — Pen, кисть — Brush . А такие объекты, как принтер — Printer, Application-приложение или экран — Screen.
От автора:
Эта книга — посвящена Delphi —
превосходный инструмент, с помощью которого и начинающий пользователь, и
программист-профессионал могут создавать одинаково профессионально выглядящий
интерфейс пользователя к прикладным программам самых различных классов.
В данной книге описаны компоненты
библиотеки Delphi 5. Описание скомпоновано не по страницам библиотеки, а по
назначению компонентов и по выполняемым ими функциям. Это позволяет параллельно
рассматривать сходные компоненты, сравнивать их возможности и давать
рекомендации по их применению.
Описаны также некоторые классы и типы
Delphi 5, которые формально не являются компонентами, поскольку не включены в
палитру библиотеки, но без которых изложение было бы неполным. Например,
невозможно описывать компоненты отображения графической информации, не
рассмотрев канву Canvas, перо Pen, кисть Brush. А такие объекты, как принтер
Printer, приложение Application или экран Screen, фактически являются не
визуальными компонентами и не включены в страницы библиотеки только потому, что
в каждой прикладной программе они имеются всего в одном экземпляре.
Данная книга предназначена для
пользователей различной квалификации — от начинающих до опытных специалистов.
Начинающий найдет в ней простое изложение методики работы с различными
компонентами. Специально для этой категории читателей введена небольшая первая
глава и отдельные разделы второй главы, поясняющие общие принципы работы с
Delphi 5. А опытному пользователю она также будет полезна как справочное
пособие. Во-первых, он найдет в ней сведения по последней версии Delphi — Delphi
5, в которой появилось много нового. А во-вторых, жизнь показывает, что обычно
даже опытный разработчик предпочитает работать с очень ограниченным набором
когда-то освоенных им ком понентов и не использует в полной мере всего богатства
библиотеки Delphi.
Delphi — чрезвычайно мощная система
разработки прикладных программ для Windows. Она все увереннее завоевывает
ведущие позиции в нашей стране, как среди профессиональных программистов, так и
среди людей, никогда профессионально программированием не занимавшихся.
Профессионалы используют Delphi для построения сложных приложений с
распределенными базами данных и для многих других целей. Специалисты самых
разных специальностей (не программисты) создают с помощью Delphi небольшие
прикладные программы для решения своих профессиональных задач и радуются, что,
не владея всерьез программированием, могут создавать интерфейс, неотличимый от
привычного интерфейса Windows. Студенты (не программисты) выполняют с помощью
Delphi свои курсовые и дипломные проекты. Сейчас уже есть даже средние школы, в
которых начинают знакомить с работой в среде Delphi.
Все книги…
Скачать (1.19 мб)
Programming articles
Создание сайтов на шаблонах
Множество вариантов работы с графикой на канве
Шифруем файл с помощью другого файла
Перехват API функций — Основы
Как сделать действительно хороший сайт
Создание почтового клиента в Delphi 7
Применение паскаля для
решения геометрических задач
Управление windows с помощью Delphi
Создание wap сайта
Операционная система unix, термины и понятия
SQL враг или друг
Возникновение и первая редакция ОС UNIX
Оптимизация проекта в Delphi
Ресурсы, зачем нужны ресурсы
Термины программистов 20 века
Советы по созданию собственного сайта с нуля
Шифруем файл с помощью пароля
Фракталы — геометрия природы
Crypt — Delphi программа для шифрования
Рассылка, зачем она нужна и как ее организовать?
Учебник по C++ для начинающих программистов
Уроки для изучения ассемблера
Загадочный тип PCHAR
Средства по созданию сайтов
Операторы преобразования
классов is и as
Borland Developer studio 2006. Всё в одном
Создание базы данных в Delphi, без сторонних БД
Software engineering articles
8th
Июл
В чем различие 32- и 64-битной операционной системы?
stenl1:
На комп можно ставить любую операционную систему 32 или 64 бита.У меня всегда стояла 32 битная .Могу я теперь поставить 64 битную , и в чем у них разница.
В этой теме участники клуба рассказывают в чём отличие этих двух ОС. Присоединится к обсуждению
8th
TStringGrid проверка вводимых данных в ячейку
Условие:
В ячейках только цифры, поэтому больше одного символа в ячейчке не должно быть.
Stilet:
Я бы написал так:
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
with TStringGrid(Sender) do
if not (key in [‘0’..’9′])or(length(Cells[Col,row])=1)
then key:=#0;
end;
8th
В чем разница между CreateThread(); и _beginthreadex(); и что лучше использовать?
pproger:
msdn:
A thread in an executable that calls the C run-time library (CRT) should use the _beginthread and _endthread functions for thread management rather than CreateThread and ExitThread; this requires the use of the multi-threaded version of the CRT. It is safe to call CreateThread and ExitThread from a thread in a DLL that links to the static CRT as long as the thread does not call the DisableThreadLibraryCalls function.кратко-вольный перевод. если используешь многопоточную версию crt, используй _beginthread. иначе возникнут проблемы при использовании глобальных переменных и тп, ибо в первой версии crt и понятия не было о многозадачности. об этом еще рихтер писал
а “ex” – просто более широкий набор параметров, не более
7th
Июл
Мат в комментариях исходников :)
Отдельно заслуживает внимания тема про мат в комментариях. Весело, от души и понятно))
Слышал шутку про то, что если убрать все матерные комментарии из исходников ядра Линукс, свободного места прибавится на пару сотен килобайт. Думал это миф… Для прикола выполнил поиск слова “f*ck” в этих самых исходниках… Нашёл! Нашёл много! Например:
/*
...this function must be called before fucking with memory controller...
*/
А вы материтесь в комментах?
6th
Июл
Оптимизация PHP-скрипта: Что быстрее function или include?
По поводу оптимизации и скорости работы include в сети много материала, а вот по function практически ничего, поэтому возник достаточно простой вопрос: что быстрее выполняется function или include и идентичным содержанием?
Облако меток
css реестр ассемблер timer SaveToFile ShellExecute программы массив советы word MySQL SQL ListView pos random компоненты дата LoadFromFile form база данных сеть html php RichEdit indy строки Win Api tstringlist Image мысли макросы Edit ListBox office C/C++ memo графика StringGrid canvas поиск файл Pascal форма Файлы интернет excel Microsoft Office Excel winapi журнал ПРОграммист DelphiКупить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)