PDA

Visualizza la versione completa : [delphi] prelevare una stringa mista da CheckListBox


Lyll0
11-07-2003, 20:37
ciao gente,
mi sapreste dire come si fa aprelevare una strtinga specifica da ua checklist box?

|_| valore 1: 100
[_| valore 2: 50

io vorrei che una volta che l'utente seleziona una check, venisse prelevato solo il valore numerico.
100 o 50 nell'eempio.

mi sapreste aiutare?

perlomeno ditemi come si preleva una stringa intera... "valore 1: 100" per esempio

grgazie

bDaniele
12-07-2003, 14:46
Metti un evento sull'onClick:


Label1.Caption:=CheckListBox1.Items.Strings[CheckListBox1.ItemIndex];


Nella label ti trovi il valore dell'ultima riga che è stata cliccata, non dell'ultima "checkata"

Se vuoi l'ultima "checkata" usa:


if CheckListBox1.Checked[CheckListBox1.ItemIndex]
then Label1.Caption:=CheckListBox1.Items.Strings[CheckListBox1.ItemIndex];


Saluti

Lyll0
14-07-2003, 10:36
ci ho provato, ,ma mi dice che non è possibile applicare un metodo del genere e mi da un errore!


in realtà però non ho provao ad assegnare il valore ad un componente ma ad una variabile...
tipo:

var n:string;
begin
n:=CheckList.Item.etc..



:dhò:

alka
14-07-2003, 10:50
ci ho provato, ,ma mi dice che non è possibile applicare un metodo del genere e mi da un errore!

Che tipo di errore?



in realtà però non ho provao ad assegnare il valore ad un componente ma ad una variabile...

Che sia una proprietà di tipo stringa o una variabile di tipo stringa, la cosa importante è che il valore venga assegnato ad una stringa...



tipo:

var n:string;
begin
n:=CheckList.Item.etc..

C'è il copia e incolla! Come si fa a capire l'errore se nel riportare il codice scrivi etc etc nella parte che probabilmente è responsabile?

Lyll0
14-07-2003, 13:52
ricecvo unn erroer perchè la mia variabile è di tipo integer ma la stringa nella checklist box contiene uuna serie MISTA di tipi:

non c'è infatti n solo valore, bensì del testo:

Valore 1: 100
Valore 2: 667
Valore 3: 6789

io vorrei che cliccando su i check affianco delle stringhe venisse prelevato solo il valore 100 o 667 etc...

capit'?

grazie!

alka
14-07-2003, 14:16
Originariamente inviato da Lyll0
ricecvo unn erroer perchè la mia variabile è di tipo integer ma la stringa nella checklist box contiene uuna serie MISTA di tipi:

Il tipo è sempre stringa, anche se la tua CheckListBox contenesse addirittura solo valori numerici.



non c'è infatti n solo valore, bensì del testo:

Valore 1: 100
Valore 2: 667
Valore 3: 6789

io vorrei che cliccando su i check affianco delle stringhe venisse prelevato solo il valore 100 o 667 etc...


Devi estrarre l'intera stringa memorizzandola all'interno di una variabile, cercare la posizione del carattere ":" tramite la funzione Pos...i caratteri che si trovano 2 posizioni dopo quella restituita da Pos possono essere estratti dalla stringa completa (che include "Valore 1:") tramite la funzione Copy e successivamente convertiti in grandezza numerica intera tramite la funzione StrToInt.

Lyll0
14-07-2003, 15:40
ci sono riuscito!

allora se dovesse servire a qualcuun altro propongo la mia soluzione:

1) creare una variabile di tipo stringa. var testo:strring
2) prelevare il valore della stringa INTERA dalla CheckBox quano l'utente seleziona un check:


procedure CheckBoxClickCheck
var testo:string;
begin
testo:=CheckBox.Items.Strings[CheckBox.ItemIndex];
[...]

3) ho creato una casistica per le stringhe che appaiono nella lista.
infatti mi appare un testo tipo:
Valore 1: 6770
Valore 2: 1
e così via.
siccome Valore è un testo fisso ma il numero seguente è generato da un ciclo for di un'altra proceddura, che ha il compito di scrivere i valori nella Check, alla fine di qusta procedura che riempie la lista ho messo una cosa tipo:


iteratorefor:=numero;
dove numero è dichiarata PUBBLICAMENTE
4) ora, nella proceddura CickCheck ho messo

if numero<10 then //(il numero dopo valore è composto da un solo carattere)
Delete(testo,1,lunghezza che voglio escludere)
else if numero >=10 AND numero<100 then
Delete(testo,1,lunghezza che voglio escludere+1)

5) il valore che rimane lo converto in Integer e ci faccio quello mi pare...

carino no?

Lyll0
14-07-2003, 15:42
oddio alka non ti avevo visto!

non so perchè ma non mi arrivano le notifiche!

cmq grazie per l'idea!

Lyll0
14-07-2003, 16:04
senti colgo l'occasione epr chiedere una piccola cosa, scema ma che non riesco a fare.

vorrei fare una cosa semplice:
tieni conto che quando le stringhe riempiono la check, ,predefinitamente tutte le caselle sono selezionate.
se l'utente clicca su una check box vorrei che questa si deselezionasse e avvenisse una sottrazione dala somma totale,
se questo riclicca sulla stessa il valore si deve SOMMARE...

io ho fatto:


sel:=Check.ItemsIndex
if Chck.Checked[sel]:=true then begin
somma;
check.Checked[sel]:=false; end;
else if check.checked[sel]:=false then begin
sottrai;
check.cheked[sel]:=true end;

ma mi fa solo somme o solo sottrazioni, qualora cambiassi di poco il codice...
dove toppo?

alka
14-07-2003, 16:27
Forse era meglio osservare il codice di Somma o Sottrai, visto che sono le procedure che si occupano effettivamente del calcolo. :cry:

A parte questo, io farei proprio in un altro modo.

Ad ogni clic sulla CheckListBox, richiamerei una procedura singola che si faccia la scansione dei valori inseriti nel controllo ed esegua, partendo da 0 o da un ammontare prefissato, la somma o la sottrazione del singolo valore in base al fatto che sia "checkato" oppure no.

Loading