Programação de horários - Para os experientes
Olá pessoal!
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.:
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.
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
Curtidas 0
Respostas
Robson Castro
27/10/2011
Alguém?
GOSTEI 0
Robson Castro
27/10/2011
Ajudaí pessoal!
Cadê os cabeças?
Cadê os cabeças?
GOSTEI 0
Emerson Nascimento
27/10/2011
vamos supor que sua grade tenha a aparência abaixo (os pontos simbolizam espaços em branco, já que esse fórum suprime os espaços):
+--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| 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:
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.
+--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| 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
Gustavo Costa
27/10/2011
a DevExpress tem componentes para isso..
se estiver afim de investir um pouco:
http://go.devexpress.com/DevExpressDownload_VCLTrial.aspx
se estiver afim de investir um pouco:
http://go.devexpress.com/DevExpressDownload_VCLTrial.aspx
GOSTEI 0