[Delphi] Stringgrid + rysowanie

0

Witam.
Mam problem z rysowaniem po SG. Ponieżej podaje kod. Chciałbym aby w momencie/(w danej komórce określonej przez zmienną) zaznaczonym w kodzie wyrysowana została figura i odpowiedni napis. W nawiasach klamrowych umieściłem kod co ma rysować. Procedura ta wykonywana jest w pętli zależnie od ilości podanych danych zmienna

index_serii

się zmienia. (Mądry mędrzec ;-) ). Kompletnie nie wiem jak to wykonać. Może ktoś pomoże. :)

procedure TForm1.Uzupelnianie_SG;
var
i : integer;

begin
 i := 0;

 StringGrid2.Cells[i, index_serii] := inttostr(index_serii); inc(i);
 StringGrid2.Cells[i, index_serii] := Nazwa_Pliku; inc(i);
 Obsluga_Grida;
 StringGrid2.Cells[i, index_serii] := rodzaj_segmentu; inc(i);
 StringGrid2.Cells[i, index_serii] := 'od ' + inttostr(tablica_programu_temp_plikow[ComboBox1.ItemIndex,yyy-1].temp_pocz) + ' °C ' + 'do ' + inttostr(tablica_programu_temp_plikow[ComboBox1.ItemIndex, yyy].temp_pocz) + ' °C'; inc(i);
{
Polygon([Point(Rect.Left+12, Rect.Top + 3),Point(Rect.Left+12-5, Rect.Top + 8),Point(Rect.Left+12, Rect.Bottom -3),Point(Rect.Left+12+5, Rect.Top + 8)]); // romb
Brush.Style:= bsclear;
TextOut(Rect.Left + 50,Rect.Top, rodzaj_segmentu);
Font.Style:=Canvas.Font.Style + [fsBold];
}
Stringgrid2.Cells[i, index_serii] := //tu rysuje romb i umieszcza napis

end;

Pozdrawiam.

0

poszukaj pod hasłem onDrawCell

0

Przeglądałem już informację o OnDrawCell. Zdarzenie OnDrawCell wywołuje procedurę SGOnDrawCell.... i podczas tworzenia formularza od razu rysuje. Ja potrzebuje aby ta procedura wykonała się tylko w pewnym określonym momencie, czyli podczas ładowania informacji/danych do komórki o określonych parametrach.

0
ts81 napisał(a)

Zdarzenie OnDrawCell wywołuje procedurę SGOnDrawCell.... i podczas tworzenia formularza od razu rysuje.

widzisz wszystkie Twoje pytania spowodowane są brakiem wiedzy jak to działa. Tworzenie formulaża nie jest bezpośrednią przyczyną rysowania. Spowodowane jest to samymy przerysowaniem SG, który pojawia się pierwszy raz. SQ zostanie też przerysowany (i wywołane onDrawCell) jeśli przykryjesz SG a potem odsłonisz, itp

Ja potrzebuje aby ta procedura wykonała się tylko w pewnym określonym momencie, czyli podczas ładowania informacji/danych do komórki o określonych parametrach.

procedure SGDrawCell...
begin
  if (ACol = 1) and (ARow = 1) and (Cells[1, 1] = 'aa') then
  begin
    //to co tu będziesz rysował narysuje się tylko w komórce [1, 1] i tylko jeśli text w niej będzie 'aa'
  end;
end;
0

Masz rację, że do końca nie znam wszystkiego, oczywiście. Natomiast wiedziałem, że przerysowywanie SG wywołuje procedurę OnDrawCell sama nazwa z angielskiego na to wskazuje ;-) . Niestety nie wpadłem na pomysł skonstruowania takiego założenia jakie Ty skonstruowałeś. Bardzo mi pomogłeś MisiekD - znowu. Dziękuje [browar].

Czy mógłbyś umieścić jakieś linki do ciekawych arykułów odnośnie Delphi. Chodzi mi między innymi o związane z obsługą eventów poszczególnych komponentów. Lub jeśli miałbyś jakieś ciekawe pdf/doc w wersji elektronicznej i zechciałbyś się podzielić to... ts81[at]op.pl. I tak, wiem co to google i jak się z niego korzysta :-) .
Pozdrawiam.

0
ts81 napisał(a)

Czy mógłbyś umieścić jakieś linki do ciekawych arykułów odnośnie Delphi. Chodzi mi między innymi o związane z obsługą eventów poszczególnych komponentów. Lub jeśli miałbyś jakieś ciekawe pdf/doc w wersji elektronicznej i zechciałbyś się podzielić to... ts81[at]op.pl.

ja wiem, nie zbierałem raczej linków a co do eventów to D7 (bo D2k5 ma skopaną, nie wiem jak D2k6) ma na prawdę dobrą pomoc i są one dość dobrze opisane. Na dobrą sprawę tych eventów wcale nie jest tak dużo bo większość komponentów ma podobne a do tego jak ich używać w praktyce to już dema i inne kody źródłowe. Nie wiem czy "odkryłeś" już kopalnie wiedzy, jaką są grupy dyskusyjne i dosyć bogata na Polska pl.comp.lang.delphi oraz pl.comp.lang.delphi.bazy-danych można tam znaleźć odpowiedzi na wiele pytań

0

Rozumiem że D7 to Delphi 7. Ja pracuję pod Delphi 5 i za wiele ten help nie pomaga co do list dyskusyjnych zgodzę się z Tobą, że to kopalnie wiedzy. Jednak często moje pytania są dość trywialne(jak to z bieżącego postu) i przydałoby się coś do przeglądania w chwilach słabości. Pozdrawiam.

0

tak D7 to Delphi7
a co do trywialności pytania to staje się ono takie dopiero jak poznasz odpowiedź :) ale tak jest z większością pytań

0

Pozwolę sobie wciśnąć jeszcze jedno-dwa pytania. Chodzi mi mianowicie o Charta. Czy klikając na Chart mogę rozróżnić który przycisk wdusiłem, bądź czy wciskam przycisk z ctrl? I nie chodzi mi o OnSeriesClick... tylko OnChartClick, bo nie ma on parametru określającego Button, prawda?
I jeśli mam kilka serii w Chart czy klikając na wykres mogą uzyskać jej index? Wiem, że mogę uzsykać współrzędne(punktu w którym klikne), ale czy index?

0

nie mam pojęcia - nie bawiłem się tym

0

a wiec kliknie w serie(musisz trafic kursorem w serie

procedure TForm1.Chart1ClickSeries(Sender: TCustomChart;
  Series: TChartSeries; ValueIndex: Integer; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 showmessage(inttostr(ValueIndex));
end;

obsluga klawisza myszki

procedure TForm1.Chart1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if Button=mbleft then showmessage('lewy');
end;
0

Dziękuje bardzo crowa. Pomogło. :-)

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