Skocz do zawartości

[Delphi] Dynamiczne tworzenie komponentu.


Siber

Polecane posty

  • 4 years later...
Witam. Częściowo odgrzeje temat.

Na formie Form1/ Unit1.pas mam komponent Image1,

w module Unit2.pas tworzę "pokręconą" klasę i w jednej z procedur np.
UmageDraw(const FileName: String); bez dodawania w Uses modułu Unit1

chcę wczytać plik JPG o nazwie FileName, albo w ostateczności rysować po Canvas

Otóż w procedurze UmageDraw próbowałem wykorzystać dynamicznie zrobiony komponent

[code=Delphi] FImage:= TImage.Create(nil);
FImage.Left:=10;
FImage.Top:=10;
FImage.Height:=50;
FImage.Width:=50;
FImage.Visible:=False;
FImage.Parent:=nil;
ŁózŚQMMĄĄ%Q%0ąą@ąŃ)M!(%!)(!(ą(MŃ](%AŃ Ń!Ą(%AŃ Ń]Ń@0(%%AŃ Ń
!ą( Ń ąĄ%ą@0MM
(%I(MĄ) [/code]

ale nic mi nie świta jeśli chodzi o przerysowanie z JPG na uchwyt, rozwiązanie jest tuż tuż
ale chyb późno już bo go nie widzę.
Byłbym wdzięczny za jakąś sugestię.
Link do komentarza
Udostępnij na innych stronach

Dodam na wszelki wypadek, że
UmageDraw(const Img : TImage; FileName: String);
nie wchodzi w grę bo procedura jest wywoływana przez Timer tworzony dynamicznie w klasie,
dlatego jedyne co wymyśliłem to przekazanie w

[code=Delphi] constructor TMojImage.CreateCreate(const ????; FileName: String) [/code]

"jakiegoś" parametru w stylu Handle i zapisanego w zmiennych private klasy, a stąd obsługa w dowolnym miejscu,
o ile dobrze kombinuję.?
Link do komentarza
Udostępnij na innych stronach

Jestem na takim etapie i niby wszystko działa a nie widać efektu/ obrazka

[code=Delphi]
Unit1;
...

procedure TForm2.FormCreate(Sender: TObject);
var ImageDC : HDC;
begin
ImageDC:= Image.Picture.Bitmap.Canvas.Handle;
MojImage:= TMojImage.Create(ImageDC);
end;

Ś)U(()Ń(Q5%ą(Ń(ą(%!źźUĄ%U((()ŃŃQ5%
ŃĄ}%!)(%}%)()Q5%Q%Ą}ą9MŃ) Q Ń()AQ)A%( !()źź(ąŃĄ}ą9ŃĄ(5ź1ąŹ}ą9źź(()AQ)A%
Ń()A1ąĄ}ą9(( Q Ń
Ń( Ą%AŃ Ń(
!ą((źź]ćŃą%Ńąąąąąąą(( Ń ąĄ%(%]Ń%!Ą(%AŃ Ń!ą(M
((9Ą )( [/code]
Link do komentarza
Udostępnij na innych stronach

Ok, ogolnie winApi to nie jest moja mocna strona ale do przemyslenia nastepujace sprawy:

1) Idac za tropem M$ -> http://msdn.microsoft.com/en-us/library/dd183370(VS.85).aspx

Mamy:
Not all devices support the BitBlt function. For more information, see the RC_BITBLT raster capability entry in the GetDeviceCaps function as well as the following functions: MaskBlt, PlgBlt, and StretchBlt.

czyli sprawdzic trzeba za pomoca metody GetDeviceCaps czy docelowy kontekst obsluguja ta operacje.

pomoc tez moze wartosc zwracana czyli:
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.

Jak nie ma 0 to znaczy ze jest zlo i kiszone ogorki i trzeba zasiegnac rady wyroczni o nazwie GetLastError.

2) Nie wiem czy dobrze mowie wiec niech jakis goru od API sie wypowie: Nie wiem czy BitBlt nie rysuje do urzadzenia renderujacego, czyli moze operacja zachodzi ale nie jest zapisywana do danych docelowego obrazka. W efekcie jego odswiezenie (np zmiana formy) odrysowuje stare dane. Przyklad takiego zachowania to narysowanie czegos na canvasie formy a nastepnie min/max formy, narysowane dane znikaja...

Wiecej pomyslow nie mam na ten moment.

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...