Klopotliwa latwizna

0

Witam !

Mam 2 krótkie pytanka :

  1. Jak mam rozumiec taki zapis : TLabeledEdit(Sender).Tag ???.
  2. Jak wykorzystac komendy OpenGl w Delphi, tak aby dzialaly, np
    glColor3f(0,1,0) itd ...

//zamiast pisac 3 posty obok siebie napisz wszystko w jednym watku - pedros

0

TLabeledEdit(Sender).Tag

TLabeledEdit(Sender) - to jest tzw. rzutowanie, czyli zmiana typu zmiennej w wyrażeniu.
Obiekt Sender zostaje tutaj potraktowany jako TLabeledEdit.
Po takim "zrzutowaniu" można się odwoływać do wszystkich właściwości i metod obiektu TLabeledEdit.

Np. zapis "TLabeledEdit(Sender).Tag := 1" oznacza zrzutowanie Sender-a na TLabeledEdit, a następnie zapisanie w Tag wartości 1. Przy czym Tag jest właściwością obiektu TLabeledEdit.

0

Ad 1) Jest to wywołanie właściwości Tag komponentu typu TLabeledEdit przekazanego w zmiennej Sender (często wykorzystywana konstrukcja, jeśli wiele elementów ma działać podobnie, lub jeśli tworzysz jakieś komponenty dynamicznie). Bezpiecznie jest jednak wcześniej sprawdzić, czy taki manewr w ogóle zadziała i nie spowoduje błędu Acces Violation za pomocą warunku If (Sender is TLabeledEdit) then ... .
Ad 2) Niestety nie pomogę, bo OpenGl'em się nie zajmowałem specjalnie.
//Jack - wyprzedziłeś mnie :]

0

co do 2) - do uses zdaje się musisz dodać "OpenGL".

0

....no i aby ci to w ogóle działało musisz sobie odpowiednio zainicjować okno OpenGl'a
(no i do uses przyda sie jeszcze "gl", "glu" ;) )
Pozd.

// jakby coś to TUTAJ
masz sposób inicjacji Ogl'a ;)

// do postu poniżej: to anonim wiec nie umie poprawić :), też zawsze sie wkurzam ;)

0

BTW, uważam, że konstrukcja (Sender as TLabeledEdit).Tag jest czytelniejsza niż TLabeledEdit(Sender).Tag gdyż nawias może znaczyć wiele rzeczy, a as od razu wskazuje na rzutowanie.

<font size="6"><font color="red">I popraw temat!!!!</span></span>

0

IMO rzeczywiście konstrukcja as jest czytelniejsza :]. Bo wystarczy, że ktoś zna anglika i już wie o co chodzi, a tak to trzeba wiedzieć :]

0

IMO rzeczywiście konstrukcja as jest czytelniejsza :]

I de facto bezpieczniejsza w wypadku, gdy Sender nie jest obiektem typu TLabeledEdit lub klasy potomnej - w takim wypadku operator as zwróci pusty wskaźnik (nil) i wykonanie linii wywoła wyjątek EAccessViolation. Ale bezpieczniejsze to od wywołania tej linii, która może być poprawna, ale spowoduje nie wiadomo co...

// DOPISANE: Fakt :]

0

No tak, ale co do bezpieczeństwa to pisałem wcześniej, zeby wcześniej sprawdzić, czy się zgadza (If (Sender is TLabeledEdit)).

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