Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2007, 17:53   #11
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Сообщение от Marsik Посмотреть сообщение
Что в книге понятно,но вот в какой?Вездесущий гугль какие-то всегда глупости, не по запросу выдает!А насчет ластика ладно,сам разберусь!
ну негде почитать >>>
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 29.12.2007, 18:09   #12
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Цитата:
А почему ты из отладчика ее не грохнул (Run > Program Reset)?
Что дельфи тоже зависла и ты ее тоже из диспетчера убил вместе со своей прогой? Тогда понятно почему проект нерабочим стал.
Возьми файлы со значком ~ и поубирай этот значок, перед этим удали (лучше скинь куда-то) файлы проекта с теми же именами но без этого значка, правда потеряешь последние изменения. И запусти Дельфи. Если не сработает, то придется из исходника новый проект делать.
Я просто незнал что её можно из отладчика грохнуть.. Я особо неразбирался ещё с ним.. Делфи независла, я только запущенный исходник грохнул )) Я некоторые циклы боюсь ещё с VB ибо в VB6 падал и отладчик что недавало вообще никак востановить наработанное если несохранил


Цитата:
Не то и не другое...хотя...=).Вот что я хотел узнать:где читать про динамические массивы,и главное какие функции и процедуры отвечает за создание инстр.ластика?
http://programmersforum.ru/showthread.php?t=11890
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 29.12.2007, 19:56   #13
Marsik
Форумчанин
 
Аватар для Marsik
 
Регистрация: 23.10.2007
Сообщений: 275
По умолчанию

Все сейчас прочту и объязательно сделаю!Спасибо вам,с наступающим!
http://otlishnik.com/ чудесный портал для всех кто учится. Рефераты, каталоГ вузов, решебники, справочники, ЕГЭ! Welcome
Marsik вне форума Ответить с цитированием
Старый 30.12.2007, 09:24   #14
Marsik
Форумчанин
 
Аватар для Marsik
 
Регистрация: 23.10.2007
Сообщений: 275
По умолчанию

Сейчас обрабатываю событие нажимания на имидж1.Все бы хорошо только косит!Тоесть я делаю 4 переменные.Присваиваю им место положения курсора и по ним рисую круг:
a:=mouse.create.cursorpos.x;
b:=a+20;
c:=mouse.create.cursorpos.y;
d:=c+20;
image1.canvas.create.ellipse(a,c,b, d);
по идее должно было так что при нажатии на любое место имиджа1 там бы на месте нажатия появлялся круглешок.Но вместо этого круг смещается куда-то далеко направо и вниз!Почему?
http://otlishnik.com/ чудесный портал для всех кто учится. Рефераты, каталоГ вузов, решебники, справочники, ЕГЭ! Welcome
Marsik вне форума Ответить с цитированием
Старый 30.12.2007, 13:35   #15
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Цитата:
Сообщение от Marsik Посмотреть сообщение
Сейчас обрабатываю событие нажимания на имидж1.Все бы хорошо только косит!Тоесть я делаю 4 переменные.Присваиваю им место положения курсора и по ним рисую круг:
a:=mouse.create.cursorpos.x;
b:=a+20;
c:=mouse.create.cursorpos.y;
d:=c+20;
image1.canvas.create.ellipse(a,c,b, d);
по идее должно было так что при нажатии на любое место имиджа1 там бы на месте нажатия появлялся круглешок.Но вместо этого круг смещается куда-то далеко направо и вниз!Почему?
Ты смотрел мой корявый исходник? Чтобы понять почему он рисуется со смещением надо смотреть на картинку...



Я изучил исходники примитивного редактора на Си и пришёл к выводу что надо делать примерно так.... пока ещё правдо непридумал я как избавится от мерцания:

Код:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if PressLM = True then begin
Image1.Canvas.Pen.Color := CLWhite;
Image1.Canvas.Ellipse(x - 10, y - 10, x + 10, y + 10);
End;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
PressLM := True;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
PressLM := False;
end;
Кстати я так и несмог создать пременную кудабы я мог сохранять рисунок чтоб потом его возвратить

Задавал переменную: SaveP : TBitmap;
Сохранялся туда: SaveP := Image1.Picture.Bitmap;
и также позвращал его: Image1.Picture.Bitmap := SaveP;

Всё компилится а работать нехочет......
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 31.12.2007, 00:38   #16
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Цитата:
Сообщение от Marsik Посмотреть сообщение
Сейчас обрабатываю событие нажимания на имидж1.Все бы хорошо только косит!
a:=mouse.create.cursorpos.x;
b:=a+20;
c:=mouse.create.cursorpos.y;
d:=c+20;
image1.canvas.create.ellipse(a,c,b, d);
Не нужно каждый раз создавать переменную Mouse с помощью конструктора Create - она создается автоматически при запуске программы (один раз), дальше её нужно только использовать.

Цитата:
Сообщение от Marsik Посмотреть сообщение
по идее должно было так что при нажатии на любое место имиджа1 там бы на месте нажатия появлялся круглешок.Но вместо этого круг смещается куда-то далеко направо и вниз!Почему?
Потому что функция CursorPos возвращает абсолютные экранные координаты (т.е. относительно верхнего левого угла экрана), а нужны относительные координаты (т.е. относительно верхнего левого угла компонента). Для такого преобразования служит функция ScreenToClient. Попробуй такой код в обработчике движения мыши на имидже:
Код:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
  P: TPoint;
begin
  P := Mouse.CursorPos;
  //P := Image1.ScreenToClient(P);
  Caption := IntToStr(P.X) + '  ' + IntToStr(P.Y);
end;
А потом раскомментируй вторую строку и запусти заново. В заголовке формы сразу будет видно как меняются координаты в том и в другом случае.

P.S. Не знаю как конкретно ты делаешь, но вообще-то, проще напрямую использовать переменные X и Y, которые передаются в обработчик.
Jeni вне форума Ответить с цитированием
Старый 31.12.2007, 00:51   #17
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Цитата:
Сообщение от Карась Посмотреть сообщение
Кстати я так и несмог создать пременную кудабы я мог сохранять рисунок чтоб потом его возвратить.
Задавал переменную: SaveP : TBitmap;
Сохранялся туда: SaveP := Image1.Picture.Bitmap;
и также позвращал его: Image1.Picture.Bitmap := SaveP;
Всё компилится а работать нехочет......
SaveP := Image1.Picture.Bitmap - это не сохранение картинки, а просто копирование значения одной переменной в другую, т.е. в SaveP в данном случае записывается лишь указатель на Bitmap.
Чтобы реально записать информацию из одного объекта в другой используется метод Assign, т.е.
Сохранить картинку: SaveP.Assign(Image1.Picture.Bitmap) ;
Восстановить картинку: Image1.Picture.Bitmap.Assign(SaveP) ;

Конечно перед использованием нужно выполнить SaveP.Create;
Jeni вне форума Ответить с цитированием
Старый 31.12.2007, 02:31   #18
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

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

Код:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
k := k + 1;
if k = 6 then k := 1;
SaveP[k] := TBitmap.Create;
SaveP[k].Assign(Image1.Picture.Bitmap);
PressLM := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if k = 0 then k := 1;
Image1.Picture.Bitmap.Assign(SaveP[k]);
k := k - 1;
end;
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 31.12.2007, 02:53   #19
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Цитата:
Сообщение от Карась Посмотреть сообщение
Сделал как тут советовали выше, создать массив... дабы можно было много раз отменять
Не совсем понял, в чем именно заключается вопрос. Единственно, что могу дополнительно посоветовать, так это проверять SaveP на наличие перед повторным использованием:
Код:
if Assigned(SaveP[k]) then SaveP[k].Free;
SaveP[k] := TBitmap.Create;
Иначе при новом присвоении, "старая" копия уйдет в небытие - это называется "утечка памяти". А так как картинки занимают немало места, то быстро начнутся проблемы с памятью (хотя при закрытии программы даже эти "потерянные" копии удалятся).
Jeni вне форума Ответить с цитированием
Старый 31.12.2007, 12:45   #20
Marsik
Форумчанин
 
Аватар для Marsik
 
Регистрация: 23.10.2007
Сообщений: 275
По умолчанию

Джени что-то не идет твой код у меня .Карась а какого типа presslm а то типа undeclared identifer?
http://otlishnik.com/ чудесный портал для всех кто учится. Рефераты, каталоГ вузов, решебники, справочники, ЕГЭ! Welcome
Marsik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ластик как в Paint Николая Ленин C# (си шарп) 2 29.03.2015 17:31
ластик(графический редактор) AndersonEgo C# (си шарп) 1 29.05.2011 16:51
image1.Refresh;image1.Repaint; Symba Общие вопросы Delphi 5 24.04.2011 03:53
Растягивание имиджа! Marsik Помощь студентам 20 07.11.2007 18:56