KOlejny problem :)

0

Jaaaa to chyba jestem bardzo niedouczony :) Ale mooshe sie przyznac, ze gdyby nie forum to by bylo kiepsko ze mna {browar} Oto moj problem:

Mam w bibliotece dll forme zadeklarowana jako

var Test: TForm ;

i kiedy deklaruje dla niej procedure OnPaint typu:

Rysuj(Sender: TObject)

i chce sie do niej odwolac w programie(ciagle w kodzie dll), tzn przypisac ja do formy Test w ten sposob:

with Test do
begin
*jakies instrukcje
OnPaint := Rysuj(Sender) ;
*jakies instrukcje
end ;

To pokazuje sie blad ze Podany przeze mnie w nawiasie Sender nie istnieje, nie ma czegos takiego jak sender... a kiedy przypisuje taka procedure OnPaint 'normalnie' w formie, to nie ma przeszkod i Sender jest rozpoznawany przez kompilator. {glowa}

PS. Moduly jakie mam w uses to: Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls, Buttons, ToolWin, ComCtrls, Registry, ImgList;

PROSZE O POMOC ! :) ;(

Pozdrawiam {hello} --LSD - Discover The New Way Of Thinking

0

kiedyś dawno ktoś mi poradził na taki problem ,zeby sender ustawić na nil
nie wiem, czy pomoże, czy w ogóle zadziała, ale nie mam pod ręką delphi i nie mogę sprawdzić. Jak działa, daj znac

{browar} --Spin
(Delphi 5 Enterprise)

0

Spin napisał:
kiedyś dawno ktoś mi poradził na taki problem ,zeby sender ustawić na nil
&gtnie wiem, czy pomoże, czy w ogóle zadziała, ale nie mam pod ręką delphi i nie mogę sprawdzić. Jak działa, daj znac

Nie dziala mi niestety, wyskakuje taki blad [Error] : Incompatible types: 'TNotifyEvent' and 'procedure, untyped pointer or untyped parameter'

Dzieki za pomoc, byc moze cos zle robie {browar}

Pozdrawiam {hello} --LSD - Discover The New Way Of Thinking

0

Spróbuj napisać:
onpaint:=rysuj;
Wystarczyło zajrzeć do pomocy Delphi...

0

mool napisał:
Spróbuj napisać:
&gtonpaint:=rysuj;
&gtWystarczyło zajrzeć do pomocy Delphi...

A czytales co napisalem wyzej ???? hmm...

Pozdrawiam {hello} --LSD - Discover The New Way Of Thinking

0

Jasne, że czytam, ale nie mów, że to nie działa, bo u mnie działa i musi działać.
Patrzę w pomocy pod OnPaint, widzę link do TNotifyEvent, no i wszystko jasne:
type TNotifyEvent = procedure (Sender: TObject) ofobject;
A więc ów tajemniczy Sender jest zadeklarowany w typie zmiennej TNotifyEvent, tak więc po OnPaint i wszystkich podobnych trzeba podstawiać nazwę.

0

Hmmmmmmmmmmmmm................ nie bardzo moge ci uwierzyc :) :) :) Jak mozesz to wrzuc tutaj dzialajacy kod, bylbym bardzo wdzieczny {browar}

Pozdrawiam {hello} --LSD - Discover The New Way Of Thinking

0

Oto fragment twojego pierwszego postu w tym temacie:

with Test do
begin
*jakies instrukcje
OnPaint := Rysuj(Sender) ;
*jakies instrukcje
end ;

A oto ten fragment poprawny:

with Test do
begin
*jakies instrukcje
OnPaint := Rysuj;
*jakies instrukcje
end ;

Po prostu istnieje taki typ jak Procedure, w którym są zdefiniowane również parametry. Sender jest to szczególny parametr i zawsze musi się znajdować w procedurach obsługi zdarzeń, a więc twórcy Delphi ułatwili (choć może utrudnili) nam życie i nie trzeba, a wręcz nie można go po prostu wpisywać. Zresztą co ja tu będę tłumaczyć i tak się do tego nie nadaję, włącz Delphi i zobacz: żadnego błędu!

0

A przeczytales ze jest do biblioteka dll ??? U mnie jesli ten kod w takowej bibliotece umieszcze to nie dziala :)

Pozdrawiam {hello} --LSD - Discover The New Way Of Thinking

0

Skoro tak, to sorry, nie znam się na dll-kach, ale wiesz co podrzuć mi kod (ten co masz dotychczas zrobiony) do tej dll-ki, wszystkie pliki, jakie delphi potrzebuje, bo w zasadzie nie wiem jak zacząć z dll-ką, ja się temu przyjrzę i coś wykombinuję dzisiaj lub jutro.

0

oto kod:

procedure Paint;
const
Tytul = 'Titelek' ;
begin
Test.Caption:='';
Test.Canvas.Handle:=GetWindowDC(Test.Handle);
with Test.Canvas do
begin
Test.Canvas.
Font.Name:='Verdana';
Font.Size := 8 ;
Font.Color:=clWhite;
Font.Style:=[fsBold];
Brush.Style:=bsClear;
TextOut(Round((Test.ClientWidth - TextWidth(Tytul))/2),6,Tytul);
end;
end ;

procedure PokazStats(...)
begin
with Test do
begin
Top := Y ;
Left := X ;
Width := 180 ;
Height := 250 ;
BorderStyle := BsDialog ;
BorderIcons := [] ;
OnPaint := Paint(Sender)
end ;
Test.Show ;
end ;

Watpie zebyc cokolwiek wskoral, ale dzieki za checi :) Jesli chcesz poczytac o dll'kach to mozesz zrobic to tutaj: http://www.4programmers.net/delphi/dll.html

Dzieki za zainteresowanie {browar}

Pozdrawiam {hello} --LSD - Discover The New Way Of Thinking

0

Coś udało mi się wykombinować, tzn. nie ma już żadnego błędu w dll-u. A oto kroki:

  1. Deklaruję coś takiego:
    Type TForm1=class(TForm)
    procedure Paint(Sender:TObject);
    end;
    (Chyba wygląda znajomo?)
  2. Zmienna Test musi być teraz typu TForm1
  3. Ta drobna zmiana też jest konieczna:
    procedure TForm1.Paint(Sender:TObject);
  4. No a potem to już działa przypisanie OnPaint:=Paint;
    Nie wiem, czy o to chodzi ale w każdym razie teraz Delphi potrafi skompilować taką dll-kę.
    Pozdrawiam
0

Dzieki bardzo wielkie mool, dziala ! {browar}

Pozdrawiam {hello} --LSD - Discover The New Way Of Thinking

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