
Micheus
Veteranos-
Total de itens
3.189 -
Registro em
-
Última visita
Tudo que Micheus postou
-
é uma boa pergunta. Não há possibilidade de ter algum valor nulo no resultado de sua query que possa por acaso estar gerando este problema - se bem que não parece que funcionaria com o INT, mas em todos os casos...
-
Se você estiver utilizando o QuickRep, deveria bastar apenas alterar a propriede do QuickRep->Page->Columns para o nº de colunas desejada, bem como ajustar outros detalhes relacionados como ColumnSpace e as margens do QuickRep para que consiga imprimir corretamente suas etiquetas. Isto sem ter que fazer nada na mão. Sua banda detalhe teria as dimensões de sua etiqueta.
-
Aparentemente não seria traumática, apenas trabalhosa. Outros colegas devem ter mais a dizer sobre o assunto. Migração dos dados: - Interbase DataPump (link) - em inglês - sofware e tutorial - Conversor Intebase-Paradox (link) - em português Artigos que podem ser úteis neste processo - Interbase x Paradox (link) -Transações (link) boa sorte.
-
Utilizando o exemplo que postei anteriormente, pergunto:- o compenente QRLabel1 está na mesma banda que os QRExpr? se não estiver, deverá estar. - indiferente ao somatório das expressões, na banda em que os QRExpr estão, eles imprimindo o valor esperado? é um pouco difícil dar outros palpites sem ter a real ideia de como você estruturou seu relatório (bandas que utiliza, localização dos componentes nestas bandas, ...)
-
Caso você ainda não tenha resolvido o problema ... Eder, que eu saiba não dá mesmo. Quando preciso de algo parecido, coloco um QRLabel na banda em que esse resultado deve ser impresso e no OnBeforePrint da banda faço o somatório. Seria assim:procedure ....BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); begin QRLabel1.Caption := FormatFloat('#,##0.00', QRExpr2.Value.dblResult -QRExpr1.Value.dblResult); end;
-
Talvez seja porque eu esqueci dos parenteses, corrija e tente novamente: if Table1.FindKey([Query1campochave.value]) then
-
Arquivos De Dados Dentro De Um Arquivo De Recursos.
pergunta respondeu ao Paulo Nobre de Micheus em Delphi, Kylix
Paulo Nobre, se eles existem com certeza você precisará deles, já que são os arquivos de índices. O arquivo .px = primario; .xgn e .ygn são um par que corresponde a um índice secundário onde n é um número sequencial e vai aumentando a medida que você cria novos indices secundários para sua tabela Quanto à RCDATA, não tenho utilizado mas dê uma olhada neste link que tem exemplo do "empacotamento" de diversos tipos de arquivos. Talvez ajude. -
Como Saber O Numero Da Linha Em Que Você está No Richedit?
pergunta respondeu ao D4n1l0d de Micheus em Delphi, Kylix
Ok s3c. não havia percebido que a atualização da posição estava um pouco atrasada. O negócio é interceptar outras mensagens: ... case Message.Msg of WM_LBUTTONUP, // atualiza quando o botão é solto - a caret já foi atualizado WM_KEYUP, // atualiza quando a tecla é solta - a caret já foi atualizado WM_KEYDOWN, // isso evita que ao se manter a tecla pressionada a posição não seja atualizada WM_SETFOCUS: // ao receber o foco begin StatusBar1.Panels[0].Text := IntToStr(RichEdit1.CaretPos.Y+1) + ':' + ... O motivo daquele efeito colateral, que citei no meu post anterior, era devido ao que você colocou no seu post acima. Agora ficou ok e acredito que não precisará de timer (era só uma questão de pegar a posição no momento correto). []s -
se ninguém lhe postar nada até o meio dia, dê uma olhada no post de outro colega que está tentando fazer algo similar ao que você deseja e veja se com o que já tem lá você consegue resolver seu problema (link)
-
a questão da chave que citei no post anterior seria, no sentido de que você a incluiria na cláusula select da sua query. Assim, adaptando o código posteriormente, ao invés de você tentar colocar a query em modo de edição (o que não está sendo possível), você adiciona ao seu form um TTable apontando para a tabela a ser atualizada, configura o índice através das propriedades IndexName ou IndexFieldNames, e utilizando o campo chave incluido na query, você posiciona o registro na tabela utilizando FindKey. Daí é só dar um edit no component Table, alterar a informação que você quer e em seguida dar um post. Algo mais ou menos assim: Table1.Open; while Query1.EOF do begin if Table1.FindKey[Query1campochave.value] then begin Table1.Edit; Table1SITUACAO.Value := 'PAGO'; // supondo que o nome do campo seja SITUACACAO e seja alfanumérico Table1.Post; end; Query1.Next; end; Table1.Close;
-
Como Saber O Numero Da Linha Em Que Você está No Richedit?
pergunta respondeu ao D4n1l0d de Micheus em Delphi, Kylix
duas boas observações. Acho que o primeiro problema poderia ser corrigido reescrevendo o procedimento de janela para o RichEdit - e não precisamos derivar um novo componente, de TRichEdit, para isto, certo?! O segundo problema poderiamos resolver levando em conta a solução do primeiro problema e o fato de que as mensagens que influenciarão na movimentação do cursor (posicionamento no texto) serão a do click do botão esquerdo do mouse (mensagem WM_LBUTTONDOWN) e uma tecla pressionada (mensagem WM_KEYDOWN). vejamos como ficaria minha proposta associada a sua solução (s3c): ... type TForm1 = class(TForm) ... private SavedRichEditProc :TWndMethod; procedure NewRichEditProc(var Message: TMessage); ... end; ... procedure TForm1.NewRichEditProc(var Message: TMessage); begin case Message.Msg of WM_LBUTTONDOWN, WM_KEYDOWN: begin // mative minha status bar StatusBar1.Panels[0].Text := IntToStr(RichEdit1.CaretPos.Y+1) + ':' + IntToStr(RichEdit1.CaretPos.X+1); // mative seu label Label1.Caption := IntToStr(RichEdit1.CaretPos.Y+1) + ':' + IntToStr(RichEdit1.CaretPos.X+1); Label1.Refresh; end; end; // aqui chamamos o procedimento salvo no OnShow do form SavedRichEditProc(Message); end; procedure TForm1.FormShow(Sender: TObject); begin // o teste previne para o caso de o form não for modal (ShowModal) e vier a ser // mostrado várias vezes (usando apenas Show) durante sua existência if not Assigned(SavedRichEditProc) then begin // salvamos o procedimento de janela padrão do RichEdit SavedRichEditProc := RichEdit1.WindowProc; // setamos ele para o nosso novo procedimento RichEdit1.WindowProc := NewRichEditProc; end; end; Eu optei por alterar o procedimento de janela padrão do RichEdit no evento OnShow do form, porque se alguém vier a aproveitar esta idéia para outra situação, deve ter em mente que durante o processo de criação (no OnCreate) das janelas (principal e filhas) há uma avalanche de eventos. Assim, se as mensagens corretas não forem filtradas, há o risco de seu form não aparecer (experimente colocar no OnCreate e retirar o filtro - case). Além do mais, em nosso caso, o RichEdit está disponível para edição apenas após a janela ser mostrada. Porém haverá um efeito colateral que naquele meu, imenso e grosseiro, exemplo consegui contornar. Quando você tecla enter no fim da linha - indo para uma nova - o indicador de posição na linha do componente não é atualizado até que se começe a digitar algo. Porém, isto também deve poder ser contornado. -
Como Saber O Numero Da Linha Em Que Você está No Richedit?
pergunta respondeu ao D4n1l0d de Micheus em Delphi, Kylix
s3c, isto sim é que é uma sugestão decente. 1000 vezes mais simples. Perfeita. []s -
Como Saber O Numero Da Linha Em Que Você está No Richedit?
pergunta respondeu ao D4n1l0d de Micheus em Delphi, Kylix
Não encontrei outro meio de viabilizar o que você queria e como até agora não apareceu uma sugestão, então vou postar a minha. Achei que ficaria complicado explicar, então fiz as alterações naquele seu código que "corrigi" e lhe postei anteriormente. Considerei que você tem uma StatusBar no form: type TForm1 = class(TForm) ... private ParssingText :Boolean; // apenas para segurança, prefiro não arriscar end; ... procedure TForm1.FormCreate(Sender: TObject); begin ParssingText := False; end; procedure TForm1.RichEdit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin // processa as teclas de movimentação de texto if Key in [VK_BACK, VK_RETURN, VK_PRIOR, VK_NEXT, VK_UP, VK_DOWN, VK_HOME, VK_END, VK_LEFT, VK_RIGHT] then RichEdit1.OnChange(Sender); end; procedure TForm1.RichEdit1Change(Sender: TObject); var PosNaLinha, PosNoTexto, LenLinha, IdxLinha, IdxColuna, ContaPos, SavedPos :integer; begin // não executa o procedimento se ainda estiver processando o texto if ParssingText then Exit; ParssingText := True; SavedPos := richedit1.SelStart; IdxLinha := 0; ContaPos := 0; repeat LenLinha := Length(RichEdit1.Lines[IdxLinha]) +2; // soma os caracteres #10 e #13 if (ContaPos +LenLinha) = SavedPos then // ocorre sempre que teclar enter (linha em branco) begin IdxColuna := 0; // Início da linha Inc(IdxLinha); // Avança Linha Break; end else if (ContaPos +LenLinha) > SavedPos then // quando passar da posição do cursor sai begin IdxColuna := SavedPos -ContaPos; // Posição do cursor na linha Break; end; Inc(ContaPos, LenLinha); Inc(IdxLinha); until IdxLinha > RichEdit1.Lines.Count; StatusBar1.Panels[0].Text := Format('%d:%d', [IdxLinha +1,IdxColuna +1]); PosNaLinha := 0; PosNoTexto := 0; for IdxLinha := 0 to richedit1.Lines.Count -1 do ... // segue com o código do post anterior Talvez até desse para integrar o código do primeiro loop (que calcula o posicionamento do cursor) no segundo, aproveitando o mesmo, mas ficou complicado de mais o gerenciamento das variáveis envolvidas, então deixei assim para simplificar. Espero ter ajudado. []s -
Dê uma procurada na pasta BIN ou PROJECTS\BPL (dentro da pasta de instalação Delphi) pelo pacote TeeQR70.bpl
-
Bom, como minhas aplicações rodam em Win98, W2K e XP, tente fazer um teste criando as janelas da forma como eu faço: begin ... Form1 := TForm1.Create(Self); try Form1.ShowModal; finally Form1.Free; end; end;
-
A opção que o colega Maikel citou é a melhor alternativa, pois você poderá redimensionar as colunas direto no header (título das colunas) do DBGrid. Porém, se você não desejar adicionar os fields ao DBGrid, poderá ainda definir a largura dos campos desejados através da propriedade DisplayWidth dos campos desejados. Assim, ao abrir a tabela as colunas ficaram com a largura de acordo com sua especificação. Costumo fazer isto quando uso o mesmo DBGrid e altero o dataset, já que normalmente nestes casos os campos não são os mesmos. Os campos são acessado ao se dar um duplo click no dataset (Table ou Query), quando aparece uma lista com todos os campos que você adicionou a eles, basta então selecionar e alterar a propriedade.
-
Bicicleta, acredito que você esteja apenas contornando um problema e gerando outro. Setando a propriedade FormStyle como fsStayOnTop você coloca seu form a frente de qualquer outro, mesmo que ele não tenha o foco, assim, se você iniciar ou tiver outro aplicativo rodando neste computador, provavelmente a tela de seu programa ficará sobre ele. Minha sugestão é que você tente vericar se há alguma propriedade que você possa ter alterado no form e que esteja gerando este problema. Crie um novo projeto com dois forms, coloque no primeiro form um botão que chama o segundo form com showmodal, simulando sua aplicação, porém sem mexer nas propriedades dos forms e então teste no windows 98. Assim, se não houver o mesmo resultado, reveja seu projeto original, procure por algum detalhe comparando os dois projetos.
-
Ou você encontra um componente DBGrid que mostre o conteúdo de um campo memo ou então utiliza o evento OnDrawColumnCell e desenha a coluna que possui o memo utilizando Canvas.TextRect
-
Como estão configuradas as propriedades do seu DBLookupComboBox1: DataField, DataSource, ListSource, ListField. você disse em outro post que este componente está dentro do DBGrid, uma das colunas, é isto?
-
Experimente excluir os arquivos nomeprojeto.dsk e nomeprojeto.dsm, eles serão recriados quando você salver o projeto novamente.
-
Se o outro post realmente não ajudou, então... function CreateClearBitMap(aWidth, aHeight :Integer) :TBitMap; begin Result := TBitmap.Create; with Result do begin Width := aWidth; Height := aHeight; Canvas.Lock; Canvas.FillRect(Rect(0, 0, aWidth-1, aHeight -1)); Canvas.Unlock; end; end;
-
Como eu coloquei no comentário (supondo que o nome do campo seja SITUACACAO e 1=Pago) eu não tenho idéia da estrutura da tabela em questão. Então se você utiliza este campo como um alfa-numérico e o conteúdo deve ser o texto 'PAGO', então substitua. Realmente este é o motivo da mensagem. Veja bem, se você estiver utilizando tabelas paradox e se sua consulta na query utiliza apenas uma tabela (não há relacionamento com outra), você pode definir a propriedade RequestLive (do componente TQuery em questão) para TRUE. Caso contrário, preciso de mais informações para dar a outra alternativa: nome da tabela e campo(s) da chave primária.
-
Veja se esta alteração no seu código faz o que você quer. Consiste em criar um novo bitmap e inicializá-lo com o conteúdo do primeiro bitmap. Isto faz com que seja alocado espaço correto para o bitmap sem ter que carregar um em branco (observe que considerei que image1 tem o tamanho da imagem final desejada). Caso você queira que ele fique com todos os pixels brancos, utilize Imagem1.Canvas.FillRect após o uso do Assign. function Interpolar(imagem1, imagem2 :TBitMap): TBitmap; var x, y: integer; Pixel, Pixel2, Pixel3: PByte; begin Result := TBitmap.Create; Result.Assign(Imagem1); for y := 0 to imagem1.Height - 1 do begin Pixel := imagem1.Scanline[y]; Pixel2 := imagem2.Scanline[y]; Pixel3 := Result.Scanline[y]; for x := 0 to (imagem1.Width - 1) * 3 do begin Pixel3^ := round((Pixel^ + Pixel2^) / 2); inc(Pixel); inc(Pixel2); inc(Pixel3); end; end; end;
-
Se seu grid for um StringGrid, altere a propriedade DefaulRowHeight; Já se for um DGBrid, não tem como. As linha aumentam de altura a medida que você aumenta size na propriedade Font. Uma alternativa seria encontrar outro componente que tenha este recurso (sempre tem alguém que já fez isto antes), neste caso tem uma opção neste (link) - procure por Schdbgrid_21.zip Outra opção, talvez grosseira, seria aumentar size na propriedade Font do DBGrid e utilizar o evento OnDrawColumnCell para alterar a propriedade do Font do Canvas de modo a desenhar o grid com o tamanho da font original. Ex. DBGrid->Font->Size = 12, e desenhar com o tamanho 8 (default) procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin DBGrid1.Canvas.Font.Size := 8; DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end;
-
Se você está se referindo ao teste na cláusula WHERE: ResultadoMedico = "", não seria o caso de você utilizar ResultadoMedico IS NULL?