Fórum Programação de horários - Para os experientes #408885
27/10/2011
0
Preciso desenvolver um sistema e estou com um pouco de dúvida de como elaborar a tela de manuseio dos dados pelo usuário.
O objetivo do sistema é construir uma tabela de horários porém esses horários devem ser mostrados de forma gráfica em um grid (como se fosse gráfico de gantt), ou seja, o usuário escolhe um intervalo ex. das 06:00 às 14:00 hs. O o sistema deverá desenhar no grid o horário conforme o intervalo estabelecido.
Eu pensei na seguinte situação: No evento DrawCell do grid é possível desenhar essas varetas, ex.:
If (ACol in [1..10]) and (ARow = 1) then
Grid.Canvas.StretchDraw(Rect,Img.Picture.Bitmap);
If (ACol in [3..12]) and (ARow = 3) then
Grid.Canvas.StretchDraw(Rect,Img.Picture.Bitmap);
If (ACol in [5..14]) and (ARow = 5) then
Grid.Canvas.StretchDraw(Rect,Img.Picture.Bitmap);
If (ACol in [7..16]) and (ARow = 7) then
Grid.Canvas.StretchDraw(Rect,Img.Picture.Bitmap);
Porém eu preciso de alguma forma fazer algo que possibilite o usuário interagir com esses horários, ex. diminuir ou aumentar o intervalo.
Ou seja pessoal, é muito parecido com gráfico de gantt porém deve haver a possibilidade do usuário mever as barras (seja para frente ou para traz).
Por favor é a primeira vez que posto neste forum já postei em outros mais não obtive êxito. Sei que é uma rotina complexa e é por isso que estou aqui pedindo ajuda.
Agradeço pela atenção.
Robson Castro
Curtir tópico
+ 0Posts
27/10/2011
Robson Castro
Gostei + 0
28/10/2011
Robson Castro
Cadê os cabeças?
Gostei + 0
30/10/2011
Emerson Nascimento
+--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| DIA....|.00h-01h.|.01h-02h.|.02h-03h.|.03h-04h.|.04h-05h.|.05h-06h.|.06h-07h.|.07h-08h.|.08h-09h.|
+--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
|.01.....|.........|.........|.........|.........|.........|.........|.........|.........|.........|
+--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
|.02.....|.........|.........|.........|.........|.........|.........|.........|.........|.........|
+--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
|.03.....|.........|.........|.........|.........|.........|.........|.........|.........|.........|
+--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
|.04.....|.........|.........|.........|.........|.........|.........|.........|.........|.........|
+--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
|.05.....|.........|.........|.........|.........|.........|.........|.........|.........|.........|
+--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
|.06.....|.........|.........|.........|.........|.........|.........|.........|.........|.........|
+--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
|.07.....|.........|.........|.........|.........|.........|.........|.........|.........|.........|
+--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
|.08.....|.........|.........|.........|.........|.........|.........|.........|.........|.........|
+--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
|.09.....|.........|.........|.........|.........|.........|.........|.........|.........|.........|
+--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
|.10.....|.........|.........|.........|.........|.........|.........|.........|.........|.........|
+--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
supondo que todos os campos sejam do tipo integer, faça assim:
procedure TForm3.DBGrid1CellClick(Column: TColumn);
begin
if Trim(UpperCase(Column.Field.FieldName)) <> DIA then
try
ClientDataSet1.Edit;
if Column.Field.AsInteger = 1 then
Column.Field.AsInteger := 0
else
Column.Field.AsInteger := 1;
ClientDataSet1.Post;
except
end;
end;procedure TForm3.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Trim(UpperCase(Column.Field.FieldName)) <> DIA then
begin
if column.Field.AsInteger = 1 then
begin
DBGrid1.Canvas.Brush.Color := clLime; // cor do fundo
DBGrid1.Canvas.Font.Color := clLime; // cor da fonte
end
else
begin
DBGrid1.Canvas.Brush.Color := clWindow; // cor do fundo
DBGrid1.Canvas.Font.Color := clWindow; // cor da fonte
end;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;com o código acima, ao clicar num campo, o célula será pintada. ao clicar novamente, a pintura será desfeita. para simular uma barra, tanto o fundo quanto a fonte serão pintadas da mesma cor (eu escolhi esse verde limão).
creio que isto possa te dar uma idéia de como fazer o seu gráfico.
Gostei + 0
31/10/2011
Gustavo Costa
se estiver afim de investir um pouco:
http://go.devexpress.com/DevExpressDownload_VCLTrial.aspx
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)