Fórum Programação de horários - Para os experientes #408885

27/10/2011

0

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.:

   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

Robson Castro

Responder

Posts

27/10/2011

Robson Castro

Alguém?
Responder

Gostei + 0

28/10/2011

Robson Castro

Ajudaí pessoal!

Cadê os cabeças?
Responder

Gostei + 0

30/10/2011

Emerson Nascimento

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:

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.
Responder

Gostei + 0

31/10/2011

Gustavo Costa

a DevExpress tem componentes para isso..

se estiver afim de investir um pouco:
http://go.devexpress.com/DevExpressDownload_VCLTrial.aspx
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar