GARANTIR DESCONTO

Fórum Capturar conteúdo selecionado no ListView #600845

27/02/2019

0

Usando um listview previamente preenchido com nomes de especialidades médicas, como faço para gravar no BD, em uma situação em que escolho treis opções exemplo: Raio-X de Coluna Lombar / Tomografia / Ultrassom...tenho uma tabela, com os campos respectivos e quero preenche-los com estas seleções feitas no ListView.

Grato.
Sérgio Ferreira

Sérgio Ferreira

Responder

Posts

28/02/2019

Hélio Devmedia

Olá Sergio,

Imagino que você esteja falando do ListView do firemonkey... Então é muito simples...


Crie uma tabela com itens Raio-X de Coluna Lombar / Tomografia / Ultrassom e um ID associado a cada um e mostre no listView.

Faça uma rotina que a medida que o cliente marca ou desmarca, é gravado ou excluido de uma segunda tabela o id da primeria, com outros dados que seja do seu interesse...

Espero ter esclarecido. Um forte abraço e fique com Deus.

Responder

Gostei + 0

28/02/2019

Sérgio Ferreira

Olá Sergio,

Imagino que você esteja falando do ListView do firemonkey... Então é muito simples...


Crie uma tabela com itens Raio-X de Coluna Lombar / Tomografia / Ultrassom e um ID associado a cada um e mostre no listView.

Faça uma rotina que a medida que o cliente marca ou desmarca, é gravado ou excluido de uma segunda tabela o id da primeria, com outros dados que seja do seu interesse...

Espero ter esclarecido. Um forte abraço e fique com Deus.



Perdão! Sou novato aqui e por não saber utilizar este fórum, deixei o texto muito superficial... sou um autodidata e por isso agradeço a paciência de vocês.
Não estava me referindo ao FireMonkey, estou tentando criar uma aplicação para desktop mesmo...agora, devido a minha pouca experiencia, fica difícil para mim criar uma rotina para a minha necessidade.
Responder

Gostei + 0

28/02/2019

Hélio Devmedia

O listView da VCL é bastante complexo em relação ao ListView do firemonkey...

O ListView do firemonkey é o componente da agenda telefônica enquanto o listView da VCL é o Explorer do windows...

Até dá para usar só que fica bem mais complicado... o correto seria você utilizar algo como um TCheckListBox... assim você pode utilizar a mesma idéia que eu mencionei anteriormente...
Responder

Gostei + 0

01/03/2019

Sérgio Ferreira

O listView da VCL é bastante complexo em relação ao ListView do firemonkey...

O ListView do firemonkey é o componente da agenda telefônica enquanto o listView da VCL é o Explorer do windows...

Até dá para usar só que fica bem mais complicado... o correto seria você utilizar algo como um TCheckListBox... assim você pode utilizar a mesma idéia que eu mencionei anteriormente...


Obrigado! Vou verificar e testar.
Responder

Gostei + 0

01/03/2019

Daniel Araújo

Bom dia Sérgio!

O ListView da VCL tem uma propriedade chamada Selected. Tu pode fazer um laço para percorrer os items do ListView, verificar se aquele item está selecionado, e gravá-lo em banco.
Responder

Gostei + 0

01/03/2019

Sérgio Ferreira

Bom dia Sérgio!

O ListView da VCL tem uma propriedade chamada Selected. Tu pode fazer um laço para percorrer os items do ListView, verificar se aquele item está selecionado, e gravá-lo em banco.


Daniel, bom dia!
Veja o código desse form:
unit U_Selecao;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons, Vcl.ComCtrls,
Vcl.ExtCtrls;

type
TfrmSelecao = class(TForm)
Panel1: TPanel;
painel: TPanel;
lblEspecialidades: TLabel;
btnEspecialidades: TBitBtn;
lvEspecialidades: TListView;
Panel2: TPanel;
Label1: TLabel;
lvExames: TListView;
BitBtn1: TBitBtn;
btnSalvar: TBitBtn;
btn_Salvar: TBitBtn;
procedure btnEspecialidadesClick(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure lvEspecialidadesColumnClick(Sender: TObject; Column: TListColumn);
procedure lvEspecialidadesCompare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
procedure lvExamesColumnClick(Sender: TObject; Column: TListColumn);
procedure lvExamesCompare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
procedure lvEspecialidadesCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
procedure lvExamesCustomDrawItem(Sender: TCustomListView; Item: TListItem;
State: TCustomDrawState; var DefaultDraw: Boolean);
procedure btn_SalvarClick(Sender: TObject);
procedure FormShow(Sender: TObject);


private
{ Private declarations }
public
{ Public declarations }
end;

var
frmSelecao: TfrmSelecao;
//var
TForm1: TForm ;
ColIndex: Integer= 0 ;
//Item: TListItem;
implementation

uses
U_ModuloDados;

{$R *.dfm}

procedure TfrmSelecao.BitBtn1Click(Sender: TObject);
var
Item: TListItem;
Begin
with DM.qryExames do
begin
Close;
SQL.Text := 'Select ID_Exame, descricao from exames';
Open;

First;

while not Eof do
begin
Item := lvExames.Items.Add;
Item.Caption := FieldByName('ID_Exame').AsString ;
Item.SubItems.Add(FieldByName('descricao').AsString);
Next;
end;
end;
end;

procedure TfrmSelecao.btnEspecialidadesClick(Sender: TObject);
var
Item: TListItem;
Begin
with DM.qryEspecialidades do
begin
Close;
SQL.Text := 'Select codigo, descricao from Especialidades';
Open;

First;

while not Eof do
begin
Item := lvEspecialidades.Items.Add;
Item.Caption := FieldByName('codigo').AsString ;
Item.SubItems.Add(FieldByName('descricao').AsString);
Next;
end;
end;
end;


procedure TfrmSelecao.btn_SalvarClick(Sender: TObject);
var
Item: TListItem;
i: integer; // declarei aqui a variável local
begin
for i := 0 to lvExames.Items.Count-1 do
begin
DM.fd_Agenda.Append;
DM.fd_Agenda.FieldByName('Exame1').AsString:=lvExames.Items[i].SubItems.Strings[1];
DM.fd_Agenda.FieldByName('Exame2').AsString:=lvExames.Items[i].SubItems.Strings[2];
DM.fd_Agenda.FieldByName('Exame3').AsString:=lvExames.Items[i].SubItems.Strings[3];
DM.fd_Agenda.Post;
end;
end;


procedure TfrmSelecao.FormShow(Sender: TObject);
begin
lvEspecialidadesColumnClick(Sender, lvEspecialidades.Columns[1]);
lvExamesColumnClick(Sender, lvExames.Columns[1]);
end;

procedure TfrmSelecao.lvEspecialidadesColumnClick(Sender: TObject;
Column: TListColumn);
begin
//No evento OnColumnClick do ListView
ColIndex:= Column.Index;
lvEspecialidades.AlphaSort;
end;

procedure TfrmSelecao.lvEspecialidadesCompare(Sender: TObject; Item1,
Item2: TListItem; Data: Integer; var Compare: Integer);
begin
If ColIndex = 0 Then
Compare:= CompareText(Item1.Caption, Item2.Caption)
Else
Compare:= CompareText(Item1.SubItems[ColIndex-1],
Item2.SubItems[ColIndex-1]);
end;

procedure TfrmSelecao.lvEspecialidadesCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
with lvEspecialidades.Canvas.Brush do
begin
if (Item.Index mod 2) = 0 then
Color := clWhite
else
Color := clSilver;
end;
end;

procedure TfrmSelecao.lvExamesColumnClick(Sender: TObject; Column: TListColumn);
begin
//No evento OnColumnClick do ListView
ColIndex:= Column.Index;
lvExames.AlphaSort;
end;

procedure TfrmSelecao.lvExamesCompare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
begin
If ColIndex = 0 Then
Compare:= CompareText(Item1.Caption, Item2.Caption)
Else
Compare:= CompareText(Item1.SubItems[ColIndex-1],
Item2.SubItems[ColIndex-1]);
end;

procedure TfrmSelecao.lvExamesCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
with lvExames.Canvas.Brush do
begin
if (Item.Index mod 2) = 0 then
Color := clWhite
else
Color := clSilver;
end;
end;

end.

Não sei o que está dando errado.....
Responder

Gostei + 0

01/03/2019

Sérgio Ferreira

Bom dia Sérgio!

O ListView da VCL tem uma propriedade chamada Selected. Tu pode fazer um laço para percorrer os items do ListView, verificar se aquele item está selecionado, e gravá-lo em banco.


Daniel, bom dia!
Veja o código desse form:
unit U_Selecao;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons, Vcl.ComCtrls,
Vcl.ExtCtrls;

type
TfrmSelecao = class(TForm)
Panel1: TPanel;
painel: TPanel;
lblEspecialidades: TLabel;
btnEspecialidades: TBitBtn;
lvEspecialidades: TListView;
Panel2: TPanel;
Label1: TLabel;
lvExames: TListView;
BitBtn1: TBitBtn;
btnSalvar: TBitBtn;
btn_Salvar: TBitBtn;
procedure btnEspecialidadesClick(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure lvEspecialidadesColumnClick(Sender: TObject; Column: TListColumn);
procedure lvEspecialidadesCompare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
procedure lvExamesColumnClick(Sender: TObject; Column: TListColumn);
procedure lvExamesCompare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
procedure lvEspecialidadesCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
procedure lvExamesCustomDrawItem(Sender: TCustomListView; Item: TListItem;
State: TCustomDrawState; var DefaultDraw: Boolean);
procedure btn_SalvarClick(Sender: TObject);
procedure FormShow(Sender: TObject);


private
{ Private declarations }
public
{ Public declarations }
end;

var
frmSelecao: TfrmSelecao;
//var
TForm1: TForm ;
ColIndex: Integer= 0 ;
//Item: TListItem;
implementation

uses
U_ModuloDados;

{$R *.dfm}

procedure TfrmSelecao.BitBtn1Click(Sender: TObject);
var
Item: TListItem;
Begin
with DM.qryExames do
begin
Close;
SQL.Text := 'Select ID_Exame, descricao from exames';
Open;

First;

while not Eof do
begin
Item := lvExames.Items.Add;
Item.Caption := FieldByName('ID_Exame').AsString ;
Item.SubItems.Add(FieldByName('descricao').AsString);
Next;
end;
end;
end;

procedure TfrmSelecao.btnEspecialidadesClick(Sender: TObject);
var
Item: TListItem;
Begin
with DM.qryEspecialidades do
begin
Close;
SQL.Text := 'Select codigo, descricao from Especialidades';
Open;

First;

while not Eof do
begin
Item := lvEspecialidades.Items.Add;
Item.Caption := FieldByName('codigo').AsString ;
Item.SubItems.Add(FieldByName('descricao').AsString);
Next;
end;
end;
end;


procedure TfrmSelecao.btn_SalvarClick(Sender: TObject);
var
Item: TListItem;
i: integer; // declarei aqui a variável local
begin
for i := 0 to lvExames.Items.Count-1 do
begin
DM.fd_Agenda.Append;
DM.fd_Agenda.FieldByName('Exame1').AsString:=lvExames.Items[i].SubItems.Strings[1];
DM.fd_Agenda.FieldByName('Exame2').AsString:=lvExames.Items[i].SubItems.Strings[2];
DM.fd_Agenda.FieldByName('Exame3').AsString:=lvExames.Items[i].SubItems.Strings[3];
DM.fd_Agenda.Post;
end;
end;


procedure TfrmSelecao.FormShow(Sender: TObject);
begin
lvEspecialidadesColumnClick(Sender, lvEspecialidades.Columns[1]);
lvExamesColumnClick(Sender, lvExames.Columns[1]);
end;

procedure TfrmSelecao.lvEspecialidadesColumnClick(Sender: TObject;
Column: TListColumn);
begin
//No evento OnColumnClick do ListView
ColIndex:= Column.Index;
lvEspecialidades.AlphaSort;
end;

procedure TfrmSelecao.lvEspecialidadesCompare(Sender: TObject; Item1,
Item2: TListItem; Data: Integer; var Compare: Integer);
begin
If ColIndex = 0 Then
Compare:= CompareText(Item1.Caption, Item2.Caption)
Else
Compare:= CompareText(Item1.SubItems[ColIndex-1],
Item2.SubItems[ColIndex-1]);
end;

procedure TfrmSelecao.lvEspecialidadesCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
with lvEspecialidades.Canvas.Brush do
begin
if (Item.Index mod 2) = 0 then
Color := clWhite
else
Color := clSilver;
end;
end;

procedure TfrmSelecao.lvExamesColumnClick(Sender: TObject; Column: TListColumn);
begin
//No evento OnColumnClick do ListView
ColIndex:= Column.Index;
lvExames.AlphaSort;
end;

procedure TfrmSelecao.lvExamesCompare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
begin
If ColIndex = 0 Then
Compare:= CompareText(Item1.Caption, Item2.Caption)
Else
Compare:= CompareText(Item1.SubItems[ColIndex-1],
Item2.SubItems[ColIndex-1]);
end;

procedure TfrmSelecao.lvExamesCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
with lvExames.Canvas.Brush do
begin
if (Item.Index mod 2) = 0 then
Color := clWhite
else
Color := clSilver;
end;
end;

end.

Não sei o que está dando errado.....


Mensagem de erro:list index out of bounds (1)
Responder

Gostei + 0

08/03/2019

Sérgio Ferreira

Boa noite! Quanto ao problema do ListView, consegui resolver.....agradeço a força!
Mas agora tenho uma dúvida:

Utilizei este código abaixo, a trezentos anos atrás, quando criei BD no Access e utilizei os componentes ADO....

var vTabela:integer;
begin
for vTabela := 0 to ComponentCount - 1 do
begin
if Components[vTabela]is TADOTable then
(Components[vTabela] as TADOTable).Open;
end;
TabelaNaoLocada;
end;

Só que agora estou usando TFDTable, da FireDac.....como adaptar esse código?


Obrigado!

Sergio
Responder

Gostei + 0

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

Aceitar