Fórum DBGrid afeta o Caption do Form? #334208
05/12/2006
0
Delphi 7 - ClientDataSet - 3 Camadas - WebServices - MySQL
Estou com um problema que não consigo achar solução. Eu tenho um form que eu abro e nele tenho uma DBGrid onde eu coloco as linhas zebradas e simulo uma [b:97a77576cd]checkbox[/b:97a77576cd] para o usuário ´selecionar´ os registros que ele quiser e ser gerado daí um arquivo Word.
Tá td funcionando certo, mas acontece que o [b:97a77576cd]Caption[b] do [/b:97a77576cd]Form[/b] fica com o valor da ultima coluna do DBGrid no registro selecionado. Ex: o ultimo campo da DBGRID é um campo de Data e o Caption fica ´14/11/2006´, mto estranho. :shock:
Aqui tá o codigo do OnDrawColumnCell onde eu zebro e desenho a checkbox
var r: TRect; t: UINT; drawst: Integer; const IsChecked: array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED); begin r := Rect; with GridProd do begin if not(gdSelected in State) then if Odd(DataSource.DataSet.RecNo) then begin GridProd.Canvas.Font.Color:= clBlack; GridProd.Canvas.Brush.Color:= clWhite; end else begin GridProd.Canvas.Font.Color:= clBlack; GridProd.Canvas.Brush.Color:= $00DCC1AB; //azul end; GridProd.Canvas.FillRect(r); if (Column.FieldName = ´ENVIAR´) and (DataSource.DataSet.RecNo > 0) then begin drawst := IsChecked[Column.Field.AsBoolean]; DrawFrameControl(GridProd.Canvas.Handle, Rect, DFC_BUTTON, drawst); end else begin InflateRect(r, -3, -2); text := Column.Field.DisplayText; case Column.Field.Alignment of taLeftJustify: t := DT_SINGLELINE or DT_NOPREFIX or DT_VCENTER or DT_LEFT; taRightJustify: t := DT_SINGLELINE or DT_NOPREFIX or DT_VCENTER or DT_RIGHT; taCenter: t := DT_SINGLELINE or DT_NOPREFIX or DT_VCENTER or DT_CENTER; end; DrawText(GridProd.Canvas.Handle, PChar(text), Length(text), r, t); end; end;
E aqui está o codigo onde eu mudo o estado da check(campo ´ENVIAR´)
if Column.FieldName = ´ENVIAR´ then begin cdsItens.Edit; Column.Field.AsBoolean := not Column.Field.AsBoolean; cdsItens.Post; GridProd.Invalidate; end;
Se alguém puder me ajudar eu agradeço e agradeço a todos pela atenção.
Rogick
Curtir tópico
+ 0Posts
05/12/2006
Massuda
Gostei + 0
06/12/2006
Rogick
function EscolherItensASeremEnviados(ped: Integer; tipo: string): Boolean; var f: TEnvioOrcamento; begin Application.CreateForm(TEnvioOrcamento, f); with f do begin PreencherGrade(ped); if tipo = ´O´ then mTipo := 1 else if tipo = ´P´ then mTipo := 2; Caption := ´Envio de OSE de ´ + TP_PED[mTipo]; // TP_PED = array[1..2] of string = (´Orçamento´, ´Pedido´) ShowModal; Result := ModalResult = mrOk; Release; end; end;
Mas eu vou fazer mais testes, valeu pela atenção, e se puder me ajudar mais eu agradeço
Gostei + 0
06/12/2006
Rogick
var r: TRect; t: UINT; drawst: Integer; const IsChecked: array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED); begin r := Rect; with GridProd do begin if not(gdSelected in State) then if Odd(DataSource.DataSet.RecNo) then begin GridProd.Canvas.Font.Color:= clBlack; GridProd.Canvas.Brush.Color:= clWhite; end else begin GridProd.Canvas.Font.Color:= clBlack; GridProd.Canvas.Brush.Color:= $00DCC1AB; //azul end; GridProd.Canvas.FillRect(r); if (Column.FieldName = ´ENVIAR´) and (DataSource.DataSet.RecNo > 0) then begin drawst := IsChecked[Column.Field.AsBoolean]; DrawFrameControl(GridProd.Canvas.Handle, Rect, DFC_BUTTON, drawst); end else begin InflateRect(r, -3, -2); text := Column.Field.DisplayText; case Column.Field.Alignment of taLeftJustify: t := DT_SINGLELINE or DT_NOPREFIX or DT_VCENTER or DT_LEFT; taRightJustify: t := DT_SINGLELINE or DT_NOPREFIX or DT_VCENTER or DT_RIGHT; taCenter: t := DT_SINGLELINE or DT_NOPREFIX or DT_VCENTER or DT_CENTER; end; DrawText(GridProd.Canvas.Handle, PChar(text), Length(text), r, t); end; end;
Gostei + 0
06/12/2006
Rogick
Eu desvinculei o evento do DBGrid e funcionou numa boa, o problema que tenho que zebrar e colocar a checkbox no DBGrid
To ficando maluco c/ isso, só falta isso p/ eu terminar esta tarefa. :cry:
Gostei + 0
07/12/2006
Rogick
var r: TRect; t: UINT; drawst: Integer; // ??? -> Não declarei uma variável chamada "text" const IsChecked: array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED); begin r := Rect; with GridProd do begin if not(gdSelected in State) then if Odd(DataSource.DataSet.RecNo) then begin GridProd.Canvas.Font.Color:= clBlack; GridProd.Canvas.Brush.Color:= clWhite; end else begin GridProd.Canvas.Font.Color:= clBlack; GridProd.Canvas.Brush.Color:= $00DCC1AB; //azul end; GridProd.Canvas.FillRect(r); if (Column.FieldName = ´ENVIAR´) and (DataSource.DataSet.RecNo > 0) then begin drawst := IsChecked[Column.Field.AsBoolean]; DrawFrameControl(GridProd.Canvas.Handle, Rect, DFC_BUTTON, drawst); end else begin InflateRect(r, -3, -2); text := Column.Field.DisplayText; // Está atribuindo ao Text ou Caption do Form // Ou seja, ERRO, BUG, ETC.!!!! case Column.Field.Alignment of taLeftJustify: t := DT_SINGLELINE or DT_NOPREFIX or DT_VCENTER or DT_LEFT; taRightJustify: t := DT_SINGLELINE or DT_NOPREFIX or DT_VCENTER or DT_RIGHT; taCenter: t := DT_SINGLELINE or DT_NOPREFIX or DT_VCENTER or DT_CENTER; end; DrawText(GridProd.Canvas.Handle, PChar(text), Length(text), r, t); end; end;
Para resolver.... :roll:
var r: TRect; t: UINT; drawst: Integer; txt: string; // Declarar uma variável com o nome text ou outro p/ não confundir const IsChecked: array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED); begin r := Rect; with GridProd do begin if not(gdSelected in State) then if Odd(DataSource.DataSet.RecNo) then begin GridProd.Canvas.Font.Color:= clBlack; GridProd.Canvas.Brush.Color:= clWhite; end else begin GridProd.Canvas.Font.Color:= clBlack; GridProd.Canvas.Brush.Color:= $00DCC1AB; //azul end; GridProd.Canvas.FillRect(r); if (Column.FieldName = ´ENVIAR´) and (DataSource.DataSet.RecNo > 0) then begin drawst := IsChecked[Column.Field.AsBoolean]; DrawFrameControl(GridProd.Canvas.Handle, Rect, DFC_BUTTON, drawst); end else begin InflateRect(r, -3, -2); txt := Column.Field.DisplayText; // joga o DisplayText NA variavel case Column.Field.Alignment of taLeftJustify: t := DT_SINGLELINE or DT_NOPREFIX or DT_VCENTER or DT_LEFT; taRightJustify: t := DT_SINGLELINE or DT_NOPREFIX or DT_VCENTER or DT_RIGHT; taCenter: t := DT_SINGLELINE or DT_NOPREFIX or DT_VCENTER or DT_CENTER; end; // Desenha o texto na célula do DBGrid DrawText(GridProd.Canvas.Handle, PChar(txt), Length(txt), r, t); end; end;
Resolvido :!: :!: :!: :D :D :D :D
[i:81f961be15]Se vcs quiserem podem usar este código e depois mostrem para sua mãe como o programa ficou bonito. ehehehe [/i:81f961be15] :wink:
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)