Теорию по ООП защитил на отлично, а вот с практикой большие проблеммы(
1.нужно разработать класс способный изменять размеры изображения в TImage…
2.(+ нужно учитывать что при не пропорциональном изменении размера надо будит обрезать края дабы не допустить искажения)
приступил к первому пункту…
сам класс:
unit KLimg;
interface
uses
Classes, ExtCtrls;
type
Kimg=class(Timage)
private
img:Timage;
h,w:Integer;
public
constructor Criate();
procedure nowy(img1:Timage; h1,w1:Integer) ;
function NewImg:TImage;
end;
implementation
constructor Kimg.Criate();
begin
end;
procedure Kimg.nowy(img1:Timage; h1,w1:Integer) ;
begin
h:=h1;
w:=w1;
img1.Canvas.StretchDraw(Rect(0, 0, h, w), img1.Picture.bitmap);
img1.Picture.Bitmap.Height:=w;
img1.Picture.Bitmap.Width:=h;
img1.Height:=w;
img1.Width:=h;
end;
function Kimg.NewImg:TImage;
var
img1:TImage;
begin
result:=img1;
end;
end .
кусок кода использующий класс:
procedure TForm1.Button3Click(Sender: TObject);
var
Img:Kimg;
h,w:Integer;
begin
img:=Kimg.criate ;
h:=strtoint(edit1.text);
w:=strtoint(edit2.text);
img.nowy(image1,h,w);
image1:=img.newimg;
end;
дальше нужна помощь, так как никогда ни занимался практичеким ООП наделал кучу ошибок Которых не могу найти(((
частично написаный код работает , при запуске, при первой попытке изменить размеры работает нормально, но если попытаться ещё раз изменить размер выдает ошибку(((
(наверное должен быть деструктор но куда его засунуть не знаю(
11 июня 2009 в 17:04
книжку не читал… но посмотрел на многих сайта везде отзывы положительные!! причем очень положительные))))
11 июня 2009 в 9:01
—== "Совершенный Код", С. Макконнелл ==—
Настоятельно рекомендую купить.
10 июня 2009 в 19:03
Таки скажу – их лучше всё-таки называть на нормальном англицком.
10 июня 2009 в 0:00
вот именно что никто не учил…
9 июня 2009 в 22:03
>constructor Criate();
>procedure nowy
Эт кто ж тебя так переменные называть научил?
9 июня 2009 в 15:04
Гугл говорит, что это помогает =) :
img.Picture.Graphic.Width := img.Width;
img.Picture.Graphic.Height := img.Height;
А вообще, разберись как устроен объект TImage, где какие размеры надо задавать, почитай доки.
9 июня 2009 в 15:00
немного поправил, работает, но при увеличении картинки получается такая вещь
например картинка размером 50х50,
изменяю её размер напримерна 100х100,
и получаеться такая вещь, Timage принимает размеры 100х100, но её содержимое такое: в верхнем левом углу кусок 50х50 от растянутой картики, а остольная часть залита белым цветом(((
как с этим ботроться?
вод код:
//paste.org/8179
9 июня 2009 в 14:02
Не знаю, наверное что-то типа:
function Kimg.NewImg:TImage;
begin
__result:= TImage.Create;
end;
Посмотри как ты image1 создаёшь (в приведённом коде ты это опустил, судя по всему). Надо документацию к TImage смотреть, чтобы знать, как его создать, какие параметры нужны и т.п.
На самом деле, мне кажется что тебе переписывать image1 новым объектом вообще нет смысла.
9 июня 2009 в 14:00
а как её инициализировать?
9 июня 2009 в 10:04
"Я сдал теорию секса на отлично, но вот с практикой проблемы. Попробовав позу 69, я наделал кучу ошибок и не могу их найти" =)
Проблема тут не в отсутствии навыков "практического ООП", а в неумении программировать, что, впрочем, поправимо
Первый шаг на пути к успеху – записать свою программу так, чтобы её можно было прочитать без излишних усилий, т.е. в отформатированном виде. Это можно сделать используя, например знаки _ для отступов или опубликовав ссылку на код, лежащий на внешнем ресурсе вроде paste.org
А вообще, проблема, думаю в том, что следующий кусок возвращает некое неинициализированное значение вместо собственно новой картинки. Как бы переменную не только объявить надо, но и объект создать тоже бы не помешало:
function Kimg.NewImg:TImage;
var img1:TImage;
begin
__result:=img1;
end;
А потом ты этим неинициализированным значением затираешь поле image1 в методе Button3Click. Ну а при следующем вызове метода nowy, который пытается использовать поле image1 (указывающее теперь неизвестно на что), ты получаешь некую ошибку памяти.
ЗЫЖ Могу ошибаться, т.к. от Делфы далёк и проверить не на чем.
ЗЗЫЖ С точки зрения "теории ООП" код тоже не ахти)
9 июня 2009 в 2:01
а мне почему то не смешно..((
хотя бы в чём мои ошибкиукажите…
9 июня 2009 в 0:01
жжете