здравствуйте! про диаграмму Ганта почитаю.
а пока начал делать с помощью TImage. Картинки хранятся в базе SQL.
Таблица со столбцами - ID, Parent_ID, Image, Levels.
сделал пока пробный вариант:
Код:
private
_Massiv_Image: array of TImage;
_Param_Level: Integer;
_NumberLeft: Integer;
procedure CreateImage(_Number_Image, _Level: Integer; _Image: TStream);
procedure TfMain.FormShow(Sender: TObject);
var
_Stream: TStream;
_Param_Number_Image: Integer;
begin
_Param_Level := -1;
qImage.Close;
qImage.Open;
SetLength(_Massiv_Image, qImage.RecordCount);
_Stream := TStream.Create;
_Param_Number_Image := 1;
while not qImage.Eof do
begin
_Stream := qImage.CreateBlobStream(qImageImage, bmRead);
CreateImage(_Param_Number_Image, qImageLevel_Image.AsInteger, _Stream);
_Param_Number_Image := _Param_Number_Image + 1;
qImage.Next;
end;
_Stream.Free;
end;
procedure TfMain.CreateImage(_Number_Image, _Level: Integer; _Image: TStream);
begin
_Massiv_Image[_Level] := TImage.Create(ScrollBox);
_Massiv_Image[_Level].Parent := ScrollBox;
_Massiv_Image[_Level].Picture.Graphic := TJPEGImage.Create;
_Massiv_Image[_Level].Picture.Graphic.LoadFromStream(_Image);
_Massiv_Image[_Level].Height := 100;
_Massiv_Image[_Level].Width := 100;
if _Level = _Param_Level then
_NumberLeft := _NumberLeft + 1
else
_NumberLeft := 0;
_Massiv_Image[_Level].Left := (_NumberLeft * 100 + _NumberLeft * 10) + 10;
// Round((fMain.Width / (2 * _Count)) - (_Massiv_Image[_Number_Image].Width / 2));
_Massiv_Image[_Level].Top := (_Level * 100 + _Level * 10) + 10;
_Massiv_Image[_Level].Stretch := True;
_Param_Level := _Level;
end;
в этом примере получилось вот так:
602 .jpg
а должно в данном случае получиться:
603.jpg
и варианты различны, есть такие в которых итог должен быть такой:
604.jpg
и вот вопросы:
в правильном ли я направлении двигаюсь?
возможны ли универсальные варианты по расположению TImage (не знаю как правильно задать вопрос), короче как их расставить на нужные места.
И как от родителя к чайлду нарисовать связи (полосы как на картинке).