Canvas.Draw - pytanie

0

Napisałem coś takiego:

var
obraz : TBitMap;
begin
obraz.LoadFromFile('img/logo.BMP');
Canvas.Draw(0,0,obraz);
end;

Jest to w procedurze OnCreate - kiedy kompiluje program jest wszystko OK! (Ctrl+F9), natomiast kiedy uruchamiam (F9) wywala karte z blędami: tytuł: Debugger Exception Notification; treść: Project Baza_Danych.exe raised exception class EExternalException with message 'External exception C000001D'. Process stopped. Used Step or Run to continue. Czy ktoś może wie o co tu chodzi ??

0

Daj to w OnPaint.

//DOPISANE
AndRew przebił nas wszystkich. Respect....

0

wciepnij tą procke do OnActivate formy. z tego co sie orientuje to ci błąd wyskakuje dlatego ze procedura oncreate wykonuje sie jeszcze zanim forma zostaje pokazana, a ty tam juz chcesz cos rysować. OnActivate wykonywane jest wtedy gdy juz forma sie pokaze.

0

Wywołujesz to w konstruktorze a wtedy jeszcze Canvas nie istnieje.

[<font color="blue">dopisane</span>]
Dziwne - ja miałem kiedyś problemy z użyciem Canvas w konstruktorze, ale to był BCB.

0

imho zapomniałeś o obraz := TBitmap.Create...

0

Dzięki za pomoc. matoda AndReg'a jest OK! :-) Wszystko dziła. Tylko zaskoczył mnie efekt... jak się uruchomił program. Sprobowałem później w OnPaint - efekt ten sam. Przerobilem tez troszke kod na:

Form3.Canvas.Draw(0,0,obraz);

jednak nadal po uruchomieniu programu nic nie widać. Robiąc to myślałem, że przynajmniej się to pokaże gdzieś na formie, a tu nic, tak na prawdę liczyłem ze uzyskam tlo Formy w ten sposób, niestety na formie nie widac w ogóle tego obrazka! Czy to normalne? Jak zrobić żeby było widać?

(p.s. Jak zrobiłem w OnCreate to kiedy startował program i tworzyły się Formy to przez momęt pokazał się obrazek ale kiedy program już wystartował i zamknęła się Forma1, ktora pełni rolę Loadingu i pojawiła się Forma3 wszystko zniknęło)

0

Wszystko zniknęło, bo forma się odrysowała. Jeśli to ma być permanentnie, to zrób tak jak napisał berl - rysuj bitmapę w zdarzeniu OnPaint formy.

0

Poszedłem za radą wrzuciłem w OnPaint są teraz 2 sytuacje, jeśli dam:

Form3.Canvas.Draw(0,0,obraz); 

to przy kompilowaniu i urachamianiu jest wszystko OK! Lecz na formie nic nie wiać! (czy to że na formie są jakieś obiekty np. Edit1 to ma na to wpływ? Jest jakies polecenie, domyślam się że w API, które by rozciągało obraz na całą formę?)

Natomiast w drugiej sytuacji kiedy dam w OnPaint:

Canvas.Draw(0,0,obraz); 

to przechodzi kompilacje, a przy uruchomieniu wyrzuca komunikat: tytuł: Debugger Exception Notification; treść: Project Baza_Danych.exe raised exception class EAccessViolation with message 'Access violation at address 005387FD in module 'BAZA_DANYCH.EXE'. Read of address B883669F'. Process stopped. Used Step or Run to continue.

Ja się już gubie o co tu chodzi... zwlaszcza, dopiero się ucze pisać w Delphi...

(P.S. Jeszcze raz bardzo dziękuje za pomoc...)

0

więc jeśli chodzi Ci o tło dla programu, to walnij na formę komponent TImage i po kłopocie...

0

ja ma coś takiego i ladnie działa
oczywiście w OnPaint

var b:TBitmap;
begin
b:=TBitmap.Create;
b.LoadFromFile('c:\f1.bmp');
Canvas.Draw(0,0,b);
b.free;
end;

I jeszcze jedno w twoim pierwszym poscie zamiast
obraz.LoadFromFile('img/logo.BMP');
powinno być raczej
obraz.LoadFromFile('img\logo.bmp');
a właściwie to po co dodajesz "form3" skoro on i tak rysuje na przypisanej do unita formie... :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0