Układ okresowy pierwiatków - porady

0

Witam!

Robię ten programik, ale zastanawiam się co w nim mogę ulepszyć, zmienić.

Ogólnie: Używam Paneli, a po najechaniu na któryś pierwiastek to panel robi się wklęsły. Podobnie gdy nakieruję na numer grupy/okresu.

Jak widać jest to bardzo mozolne i trochę nieprofesjonalne. Jeśli ktoś wie jak za pomocą Paneli [tylko nie coś innego] zrobić coś takiego to proszę o kontakt. Chyba to coś z operacjami na komponentach, ale nie wiem za bardzo jak to zrobić na więcej niż jednym. Proszę o pomoc.

GG: 4651965
email : [email protected]

0

Powinno się przydać:

function GetCaptionAtPoint(CrPos: TPoint): string; 
var 
  textlength: Integer; 
  Text: PChar; 
  Handle: HWND; 
begin 
  Result := 'Empty'; 
  Handle := WindowFromPoint(CrPos); 
  if Handle = 0 then Exit; 
  textlength := SendMessage(Handle, WM_GETTEXTLENGTH, 0, 0); 
  if textlength <> 0 then 
  begin 
    getmem(Text, textlength + 1); 
    SendMessage(Handle, WM_GETTEXT, textlength + 1, Integer(Text)); 
    Result := Text; 
    freemem(Text); 
  end; 
end;
0

Napisałem posta, ale chyba mało kto skapował o co w nim chodzi... sorki

Otóż:

  1. Mam 118 Paneli 40x40
  2. Są tam również Panele wskazujące na numer frupy i okresu
  3. Całość jest poukładana i poindexowana Tagami - Pierwiastki mają 1-188, okresy '100' + '01-07', a grupy '200' + '01-18'

Co chciałbym osiągnąć:

  1. Po najechaniu na jakiś panel [pierwiastek] ma zmieniać się sty BevelOuter z bvRaised na bvLowered.
  2. Po najechaniu na panel odpowiadający numerowi grupy ma zmieniać się styl j/w ale całego okresu/grupy.

Przpraszam za nieścisłość.

[email protected]

0

No to:

var I:Integer;
begin
For i:=0 to ComponentCount-1 do
        begin
        If (Components[i] is TPanel) and (Components[i] as TPanel).Left=20)
        then ... else ....;
        end;
end;
      

AAA!
dodaj zmienną C:TPanel... Kod bedzie bardziej przejrzysty (jak to się pisze [wstyd] )... dużo bardziej...

0

Cimak, niestety kompilator pokazuje błąd w...

<font color="green">for i:=0 to ComponentCount-1 do
begin
if (Components[i] is TPanel) and (Components[i] as TPanel)<font color="red">.Top=152</span>) then

  else

  end;</span>
0

sorry, ale patrz na nawiasy. Powinno być:

if (Components[i] is TPanel) and ((Components[i] as TPanel).Top=152) then ...
0

Jesteś zajebisty!

Dzięki 99 99

:p

0

wiem :-)

0

I to wszystko ręcznie? Ja bym się załamał. Próbowałbym raczej stworzyć dynamicznie komponenty i umiejscawiać je dopiero na podstawie danych jakie zawierają. Najlepiej byłoby stworzyć oddzielnie obiekty dla każdego pierwiastka, z odpowiednimi informacjami oraz komponenty pochodne od TCustomPanel, aby dodać w nich pole wiążące z odpowiednim elementem. Wówczas operacje na całości stają się proste. Łatwe jest wówczas takie graficzne ustawienie paneli, aby można było dostosować do preferencji użytkownika. Jedni wolą stary system z grupami głównymi i pobocznymi (IIIA IIIB), a inni jednolity (3, 13). Łatwe jest wówczas także wyświetlanie po kolei według liczby atomowej lub według dowolnego innego kryterium. Nie jest się ograniczonym do statycznej formy wyświetlania. Zasady określające położenie w tablicy są czysto matematyczne, więc implementacja tego nie powinna stwarzać zbyt wielu problemów.
Ale jak już ręcznie te wszystkie tagi ustawiłeś...

0

teraz mam tak ale i tak nie dziala :

[code]<font color="green">procedure BevelsNorm(XTop : Integer);
var
I, J :Integer;
begin

for i:=0 to frmMain.ComponentCount -1 do //wyrównanie
begin
if (frmMain.Components[i] is TPanel) then
begin
(frmMain.Components[i] as TPanel).BevelOuter := bvSpace;
end;
end;

for j:=0 to frmMain.ComponentCount -1 do //podwyzszenie
begin
if (frmMain.Components[j] is TPanel) and ((frmMain.Components[j] as TPanel).Top=XTop) then
begin
(frmMain.Components[j] as TPanel).BevelOuter := bvRaised;
end;
end;

end;</span>[/code]

0

co sie skopalo- ten post spokojnie moze byc wyrzucony. juz go nie bede kontynuowal

0

Jeżeli chodzi ci o temat, to raczej nie powinien zostać wyrzucony, ponieważ główną ideą forum jest to, żeby przyszli użytkowanicy mogli się czegoś dowiedzieć nie zadawająć kolejnych pytań i niezawracać głowy innym (choć i tak zasadnicza większość się do tego nie stosuje :) )

0

po prostu wkradla sie tutaj odpowiedz z mojego innego posta - operacje na komponentach. BTW jak mozesz to zerknij

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