Czemu ??? Dlaczego ??? -> oper. na kompon.

0

mam taki kod mojej procedury:

[code]implementation

{$R *.dfm}

procedure BevelsNorm(XTop : Integer);
var
I, J:Integer;
begin

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

for j:=0 to Application.ComponentCount -1 do //podwyzszenie
begin
if (Application.Components[j] is TPanel) then
begin
(Application.Components[j] as TPanel).BevelOuter := bvSpace;
end;
end;

end;[/code]

potem wywoluje ta procedurke w taki sposob:

[code]procedure TfrmMain.Panel122MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
BevelsNorm(112)
end;[/code]

i k** nie działa... czemu ???

jak robiłem to samo ale bez Application przed Components w każdej procedurze oddzielnie to dzialalo, a teraz k* nie chce... co jest nie tak ?

0

Spróbuj:
[code]Application.MainForm.Components[];[/code]

Lub:
[code]NazwaFormy.Components[];[/code]

0

tak czy inaczej nie dziala.... pomocy !
[glowa] [glowa] [glowa] [glowa] [glowa] [glowa] [glowa] [glowa]

0
  1. Po co ta druga pętla?
  2. Jak dasz bvSpace to i tak nie widać zmian, ale się zmienia.
  3. Zamiast Application musisz dać nazwę formy np Form1.Components

Ja to widzę tak :

procedure BevelsNorm(XTop : Integer);
var
  I : Integer;
begin

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

0

teraz mam tak ale i tak nie dziala :

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;

0

Bo jak w jednej pętli zmieniasz właściwość na Space a w drugiej tą samą właściwość znów na raised, to się nie dziwię, że nie widać efektu:P
Może po prostu napisz co chcesz zrobić, będzie łatwiej.

0

Jesli chcesz, zeby najpierw zmienilo sie w jedna, a potem w druga strone, to daj Application.ProcessMessages; pomiedzy petle. Zeby nie bylo za szybko, mozesz dac druga petle w zdarzenie timera o interval np 100 uruchamianego po 1. petli i wylaczanego po drugiej. ProcessMessages tez obowiazuje - choc tu raczej na wszelki wypadek.

0

Dobra rzeczywiście. Tam były dwie pętle i program nie zdążał tego wyświtlić [przynajmniej tak powinno się dziać]. Ale gdy napisałem coś takiego:

procedure BevelsNorm(XTop : Integer);
var
  J :Integer;
begin

   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;

i potem to wywołuję w ten sposób:

procedure TfrmMain.Panel121<font color=red>MouseMove</font>(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
  BevelsNorm(152)
end;

to nie działa. Zaznaczam że gdy umieszczam kod procedury BevelsNorm w procedurze MouseMove Panela to wszystkie pięknie działa. Panele stają się wklęśnięte.

Ktoś zadał też pytanie do czego mi to. Otóż mam <font color="green">Układ okresowy pierwiastków</span> i po najechaniu na panel z numerem okresu cały okres [tzn. wszystkie panele] stają się 'wklęśnięte'

0

To ja nie wiem jak ty to robisz, ale u mnie wszystko działa. Może u ciebie nie działa dlatego, że:

  1. Właściwość top paneli nie jest równa parametrowi w procedurze
  2. Panel na początku ma ustawione BevelOuter na bvRaised i ty to w pętli zmieniasz na bvRaised, więc nie widać efektu.
  3. bvRaised "podwyższa" panel a podobno ma być wklęśnięty ("bvLowered").
0

ahhhhhhhhhhhhhhhhhhhhhh...........................

jaka pomyłka...........................

[wstyd] [wstyd] [wstyd] [wstyd] [wstyd] [wstyd] [wstyd] [wstyd]

bvLowered !

ja pierrrnicze........

[wstyd] [wstyd] [wstyd] [wstyd] [wstyd] [wstyd] [wstyd] [wstyd]

dzięki....

0

Prosta sprawa: Najpierw zadeklaruj procedure BevelsNorm(XTop: Integer) w części public lub private formy, a potem nie

procedure BevelsNorm

tylko

procedure Tnazwa_formy.BevelsNorm

i powinno działać, cokolwiek to ma robić.

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