Poszukiwane: tutek z tablica okien

0

Wiem, zem leniwy, ale nie chce tego spie... popsuc :) i przydalby mi sie jakis solidny przyklad. Czego? "System", ze tak to nazwe, zarzadzania tablica okien. Czyli ze mamy glowna forme, a w niej

Tablica: array of TNoweOkno;

Trzeba obsluzyc zwiekszanie jej wielkosci (SetLength) i odpowiednie wywalanie indeksow gdy okno zostanie zamkniete. W sumie proste, ale i tak bym wolal obaczyc. W tej chwili szukam czegos podobnego na goglach, ale moze ktos z Was ma konkretny link do zrodel?

0

Tego sie nie da spie... popsuć :> . A jesli, to trzeba byc arcymistrzem

function windowexist(name:string):boolean;
var i:integer;
begin
  for i=0 to length(tablica)-1 do 
    begin
      result:=(tablica[i].nazwa=name);
      if result then exit  // lub break - obojetne
    end
end;

function findwindow(name:string):integer;
var i:integer;
begin
  result:=-1;
  for i:=0 to length(tablica)-1 do 
    if tablica[i].nazwa=name then
      begin
        result:=i;
        exit
      end
end;

function addwindow(name:string):integer;
begin
  result:=findwindow(name);
  if result>-1 then tablica[result].setfocus; // czy cokolwiek
  result:=length(tablica);
  setlength(tablica,result+1)
  with tablica[result] do
    begin
      nazwa:=name
    end;
end;

procedure removewindow(name:string);
var i,j,index:integer;
begin
  index:=findwindow(name);
  if index=-1 then exit;     // window does not exist
  j:=high(tablica)-1;
  if j>=0 then    // przynajmniej 2 elementy w tablicy
    for i:=index to j do tablica[i]:=tablica[i+1];
  if j>-2 then setlength(tablica,j+1)
end;

// do postu ponizej: poprawka powyżej

0

Dzieki, a moglbys jeszcze napisac jak skonstruowac petle, w przypadku gdy musze sprawdzic czy okno istnieje, jesli tak to cos z nim zrobic, jesli nie to je stworzyc (uwzgledniajac ze zadne okno nie zostalo jeszcze stworzone). Robilem tak:

for i:=0 to Length(Okna)-1 do begin
if assigned(okna[i]) then begin
        if Okna[i].Name = zmienna then begin
        Okna[i].SetFocus;
        jest := true;
        end;
end;
end;

jesli zmienna jest==false to sie tworzy nowe okno, ale dostaje Acces Violation :-(.

dopisane:
dziala, kolega flabra pomogl via gg :). Problem lezal w tym, iz Length(Okna)-1 zwracalo -1 gdy nie bylo zadnych okien :).

0

Proponuję użyć TList zamiast tablicy. Łatwiej to obsługiwać.

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