|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
PaintBox (Открыть и Сохранить)
Доброе время суток!
Итак, у меня на форме расположены:
У меня написано следующее: Код:
// Открытие файла procedure TForm1.N2Click(Sender: TObject); var bmp:TBitmap; begin OpenDialog1.Title := 'Відкрити файл...'; if (OpenDialog1.Execute) then begin bmp:=TBitmap.create; bmp.loadfromfile('D:\1.bmp'); paintbox1.width:=bmp.width; paintbox1.height:=bmp.height; paintbox1.canvas.draw(0,0,bmp); bmp.Free; end; end; // Сохранение в файла procedure TForm1.N3Click(Sender: TObject); var bmp: TBitmap; begin SaveDialog1.Title:=' Зберегти файл як...'; // заголовок вікна діалогу збереження файлу if SaveDialog1.Execute then begin bmp := TBitmap.Create; try bmp.Width := PaintBox1.Width; bmp.Height := PaintBox1.Height; bmp.Canvas.CopyRect(Rect(0, 0, bmp.Width, bmp.Height), Canvas, rect (0,0,PaintBox1.Width, PaintBox1.Height)); bmp.SaveToFile(SaveDialog1.Filename); finally bmp.Free; end; end; end; Последний раз редактировалось vah-smile, 02.06.2009 в 07:21. |
#2
|
||||
|
||||
Похожий вопрос нашел на: http://www.delphisources.ru/forum/sh...light=PaintBox. Но там тема не решена (или же я просто не понял). У моем случаэ при наведении любого окна на рисунок (PaintBox) - даные "стираются" Что делать?
Последний раз редактировалось vah-smile, 02.06.2009 в 09:11. |
#3
|
|||
|
|||
1). Для PaintBox рисование обычно пишется в OnPaint.
2). Непонятно, для чего диалог открытия, т.к. берётся готовое имя. Я немного подправил: Код:
var bmp:TBitmap; procedure TForm1.btnLoadClick(Sender: TObject); begin OpenDialog1.Title := 'Відкрити файл...'; if (OpenDialog1.Execute) then begin bmp:=TBitmap.create; bmp.loadfromfile(OpenDialog1.FileName); paintbox1.width:=bmp.width; paintbox1.height:=bmp.height; end; end; procedure TForm1.btnSaveClick(Sender: TObject); begin SaveDialog1.Title:=' Зберегти файл як...'; if SaveDialog1.Execute then try bmp.SaveToFile(SaveDialog1.Filename); finally end; end; procedure TForm1.PaintBox1Paint(Sender: TObject); begin paintbox1.canvas.draw(0,0,bmp); end; |
#4
|
|||
|
|||
Все это фигня.
Человек просто не понимает что такое PaintBox и для чего он используется. Вообще, этот компонент в основном предназначен для отображения и фактически не умеет сохранять то, что в нем нарисовано. Поэтому обычно делают буферный итмап, на котором реально все и отрисовывается, а в PaintBox только вывод этого битмапа на экран (это если мы говорим о графическом редакторе, для других целей все немного подругому). И сохранени/загрузка производятся имено в этот битмап, а уж он потом отображается на PaintBox'е. |