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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2010, 11:45   #1
Nater
Пользователь
 
Регистрация: 23.05.2009
Сообщений: 59
По умолчанию проблема с Canvas.Draw

Здраствуйте , возникла проблема :

Есть форма с кодом :

Код:
unit MainUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ShellApi, StdCtrls;

type
  TMainForm = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormPaint(Sender: TObject);
    procedure FormMouseLeave(Sender: TObject);
    procedure FormMouseEnter(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;
  List: TStringList;
  i: byte;
  CloseTag: boolean;
  Bitmap: TBitmap;

implementation

{$R *.dfm}


procedure TMainForm.FormCreate(Sender: TObject);
begin
Left := 5 - ClientWidth;
Top := 200;
List := TStringList.Create;
Bitmap := TBitmap.Create;
if FileExists(ExtractFilePath(Application.ExeName)+'index.txt') then
List.LoadFromFile(ExtractFilePath(Application.ExeName)+'index.txt')
else
begin
  MessageDlg('File not exists : index.txt', mtError, [mbOK], 0);
  CloseTag := true;
if FileExists(ExtractFilePath(Application.ExeName)+'index.bmp') then
begin
Bitmap.LoadFromFile(ExtractFilePath(Application.ExeName)+'index.bmp');
end;
begin
  MessageDlg('File not exists : index.bmp', mtError, [mbOK], 0);
  CloseTag := true;
end;
end;
end;

procedure TMainForm.FormDestroy(Sender: TObject);
begin
List.Free;
Bitmap.Free;
end;

procedure TMainForm.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if ((Y div 36) < List.Count)then
begin
  if FileExists(List.Strings[(Y div 36)]) then
  ShellExecute(0, 'open', PChar(List.Strings[(Y div 36)]), '', '', SW_SHOW)
  else
  MessageDlg('File not exists : '+List.Strings[(Y div 36)], mtError, [mbOK], 0);
end;
end;

procedure TMainForm.FormMouseEnter(Sender: TObject);
begin
repeat
Left := Left + 2;
Sleep(5);
until Left >= 0;
Left := 0;
end;

procedure TMainForm.FormMouseLeave(Sender: TObject);
begin
repeat
Left := Left - 2;
Sleep(5);
until Left <= 5 - ClientWidth;
Left := 5 - ClientWidth;
end;

procedure TMainForm.FormPaint(Sender: TObject);
begin
Canvas.MoveTo(0,0);
Canvas.LineTo(ClientWidth - 1, 0);
Canvas.LineTo(ClientWidth - 1, ClientHeight - 1);
Canvas.LineTo( - 1, ClientHeight - 1);
for i := 0 to List.Count do
begin
  Canvas.Draw(0,i*36, Bitmap);
  Canvas.Draw(32,i*36, Bitmap);
  Canvas.MoveTo(0, i*36);
  Canvas.LineTo(ClientWidth, i*36);
  if i <> List.Count then
Canvas.TextOut(10, (i*36) + 11, ExtractFileName(List.Strings[i]));
end;
end;

procedure TMainForm.FormShow(Sender: TObject);
begin
if CloseTag then
Close;
end;

end.
и есть процедура :

Код:
procedure TMainForm.FormPaint(Sender: TObject);
begin
Canvas.MoveTo(0,0);
Canvas.LineTo(ClientWidth - 1, 0);
Canvas.LineTo(ClientWidth - 1, ClientHeight - 1);
Canvas.LineTo( - 1, ClientHeight - 1);
for i := 0 to List.Count do
begin
  Canvas.Draw(0,i*36, Bitmap);
  Canvas.Draw(32,i*36, Bitmap);
  Canvas.MoveTo(0, i*36);
  Canvas.LineTo(ClientWidth, i*36);
  if i <> List.Count then
Canvas.TextOut(10, (i*36) + 11, ExtractFileName(List.Strings[i]));
end;
end;
В которой по непонятной мне причине игнорируется Canvas.Draw ( В работе ничего не рисуется )! При чем не только в ней, но и во всех других процедурах. В чем проблема не знаю. Вроде бы все делаю правильно,
обьявил Bitmap, на OnCreate создаю Bitmap и загружаю index.bmp, на OnDestroy - Bitmap.Free, а Canvas.Draw нуль эффекта. Помогите решить эту проблему.
Nater вне форума Ответить с цитированием
Старый 27.08.2010, 11:53   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я всегда для отрисовки использую не метод Draw а функцию BitBlt
Код:
BitBlt(Canvas.Handle,0,i*36,canvas.Width,Canvas.Height,Bitmap.Canvas.Handle,0,0,SRCCOPY);
Пока еще не подводила
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.08.2010, 12:04   #3
Nater
Пользователь
 
Регистрация: 23.05.2009
Сообщений: 59
По умолчанию

Аналогичный результат - пустая форма
Nater вне форума Ответить с цитированием
Старый 27.08.2010, 12:27   #4
Nater
Пользователь
 
Регистрация: 23.05.2009
Сообщений: 59
По умолчанию

Ой ))) напортачил с FormCreate))) исправил - все заработало
до:
Код:
procedure TMainForm.FormCreate(Sender: TObject);
begin
Left := 5 - ClientWidth;
Top := 200;
List := TStringList.Create;
Bitmap := TBitmap.Create;
if FileExists(ExtractFilePath(Application.ExeName)+'index.txt') then
List.LoadFromFile(ExtractFilePath(Application.ExeName)+'index.txt')
else
begin
  MessageDlg('File not exists : index.txt', mtError, [mbOK], 0);
  CloseTag := true;
if FileExists(ExtractFilePath(Application.ExeName)+'index.bmp') then
begin
Bitmap.LoadFromFile(ExtractFilePath(Application.ExeName)+'index.bmp');
end;
begin
  MessageDlg('File not exists : index.bmp', mtError, [mbOK], 0);
  CloseTag := true;
end;
end;
end;
после

Код:
procedure TMainForm.FormCreate(Sender: TObject);
begin
Left := 5 - ClientWidth;
Top := 200;
List := TStringList.Create;
Bmp := TBitmap.Create;
if FileExists(ExtractFilePath(Application.ExeName)+'index.txt') then
List.LoadFromFile(ExtractFilePath(Application.ExeName)+'index.txt')
else
begin
  MessageDlg('File not exists : index.txt', mtError, [mbOK], 0);
  CloseTag := true;
  end;
if FileExists(ExtractFilePath(Application.ExeName)+'index.bmp') then
begin
Bmp.LoadFromFile(ExtractFilePath(Application.ExeName)+'index.bmp');
end
else
begin
  MessageDlg('File not exists : index.bmp', mtError, [mbOK], 0);
  CloseTag := true;
end;
end;
Nater вне форума Ответить с цитированием
Старый 27.08.2010, 12:34   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Nater
Только что проверил твой код с такими изменениями
Код:
procedure TMainForm.FormCreate(Sender: TObject);
begin
 Left := 5 - ClientWidth;
Top := 200;
List := TStringList.Create;
Bitmap := TBitmap.Create;
Bitmap.LoadFromFile('D:\stasya_ru_2_big.bmp');
end;
(Сам понимаешь нет у меня твоих файлов)
Таки все прекрасненько отрисовывается. Коряво, но отрисовывается, Могу приаттачить проект со скрином

Цитата:
Nater
Ну что же вы... Семен Семеныч... ))))
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.08.2010, 12:45   #6
Nater
Пользователь
 
Регистрация: 23.05.2009
Сообщений: 59
По умолчанию

бывает )))
Nater вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с нарисованием чертежа з использованием canvas akaMisHka Помощь студентам 1 09.05.2010 14:04
HBITMAP => DRAW Alex Cones Общие вопросы Delphi 18 08.05.2010 18:52
Проблема с рисованием на canvas`e Timage (Delphi) Dalagardi Помощь студентам 9 25.03.2010 20:55
проблема копирования из image.canvas в переменную TBitMap h4muk Мультимедиа в Delphi 2 27.02.2009 09:44
ImageList1.Draw(Canvas,500,500,n); KAMASUTR Gamedev - cоздание игр: Unity, OpenGL, DirectX 6 12.08.2007 01:44