Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Uso de StringGrid (https://www.clubdelphi.com/foros/showthread.php?t=92690)

jlalonso1950 31-12-2017 17:06:55

Uso de StringGrid
 
Soy nuevo en estos abatares, y estoy tratando de cargar un stringgrid en base a informaciñon existente en otros, y tengo problemas al usar, mejor dicho, no se bien como usar assign() necesito ayuda al respecto

ecfisa 31-12-2017 18:30:35

Hola jlalonso1950, bienvenido a los foros de Club Delphi :) y como es costumbre con los que comienzan, te invitamos a leer nuestra guía de estilo.

Es necesario que des mas información acerca de tu problema, ayudaría mucho que describieras la situación donde deseas usar el método Assign (que intentas lograr con ese método).
Y si además agregas algún código de ejemplo mucho mejor, cuanta mas información nos brindes mas podremos ayudarte.

Saludos :)

jlalonso1950 31-12-2017 20:43:47

Stringgrid
 
Buenas Tardes, el problema que tengo es que estoy preparando una clase donde vamos a aplicar el método simplex, un metodo de Invetigación de Operaciones, se entra por un form si se va a Maximizar o Minimizar, el número de variables y restricciones, coeficientes de etos últimos datos que se entran por dos StringGrid y que despues se agrupan en un tercero, en codigo:

Código PHP:

StringGrid1->Cells[0][1]="COEF.";
StringGrid1->ColCount=StrToInt(Edit2->Text)+1;
StringGrid2->ColCount=StrToInt(Edit2->Text)+3;
StringGrid2->RowCount=StrToInt(Edit3->Text)+1;
for(
i=1;i<=StrToInt(Edit2->Text);i++){
    
StringGrid1->Cells[i][0]="  X "+IntToStr(i);
    
StringGrid2->Cells[i][0]="  X "+IntToStr(i);
}
StringGrid2->Cells[StrToInt(Edit2->Text)+1][0]="Signo";
StringGrid2->Cells[StrToInt(Edit2->Text)+2][0]="PD";
for(
j=1;j<=StrToInt(Edit3->Text);j++){
   
StringGrid2->Cells[0][j]=" C "+IntToStr(j);
   if(
RadioButton1->Checked){ //simplex puro
     
StringGrid2->Cells[StrToInt(Edit2->Text)+1][j]="<=";
     
Button2->Enabled=true;
   }
   else if(
RadioButton2->Checked){ //existen varias complicacioes+mimizado
     
Button3->Enabled=true;
   }
   else{
     
Button4->Enabled=true// varias complicaciones maximizado
   
}
}

ahora se pasa por un boton a un groupboxpara no salir del forma inicialdonde:
 
int i,j,k,m;
StringGrid3->ColCount=StrToInt(Edit2->Text)+StrToInt(Edit3->Text)+2;
StringGrid3->RowCount=StrToInt(Edit3->Text)+2;
StringGrid3->Cells[0][0]="  VB";
StringGrid3->Cells[0][1]="  Z";
for(
i=1;i<=StrToInt(Edit3->Text);i++){
    
StringGrid3->Cells[0][i+1]="  C"+IntToStr(i);
}
for (
j=1;j<=StrToInt(Edit2->Text);j++){
    
StringGrid3->Cells[j][0]="  X"+IntToStr(j);
}
for(
m=1;m<=StrToInt(Edit3->Text);m++){
   
StringGrid3->Cells[StrToInt(Edit2->Text)+m][0]=" C"+IntToStr(m);
}
StringGrid3->Cells[StrToInt(Edit2->Text)+StrToInt(Edit3->Text)+1][0]="  PD";
[
b]//cargar valores de los stringrid 1 y 2 en el 3 y ejecutar ' mi problema[/b]

GroupBox1->Visible=true


jlalonso1950 31-12-2017 21:09:35

Stringgrid
 
ecfisa

Gracias por su atención hoy fin de año, ya revise todo lo que el foro ha sacado sobre StringGrid, pero uno de los casos que más me ayuda, se habla del assign() pero no pasan codigo de ejemplo, por de sgracia, no tengo ayuda el mi builder y solo cuento con la ayuda que me puedan dar
Yo cargo información en dos StringGrid, la cual debo agrupar en un tercero
De cierta forma estoy tratando de imitar en algo a un programa conocido como WinQSB, pero usando mis propios conceptos del tema.
No se si con esta aclaración y el codigo anterior que subi me puedan ayudar....

Casimiro Notevi 31-12-2017 21:40:51


jlalonso1950 31-12-2017 23:12:20

Agradecido Casimiro pero no entiendo lo que quieres explicarme. Mi problema es sencililo, yo entro por teclado una información en dos stringgrid y después, necesito agruparla toda en un tercero, con variaciones aritmeticas que no tengo problemas con ellas, recuerdo que existe assign() pero no recuerdo el como utilizarla,he tratado de hacerlo por un for y tampoco me da bateo, como decimos aca en Cuba

Casimiro Notevi 31-12-2017 23:20:45

Hola, solamente te informaba de que uses las etiquetas de código cuando pongas código fuente aquí, para que se pueda leer mejor.

En cuanto a tu problema con los stringgrid, exactamente qué problema tienes, ¿algún error? ¿no traspasa los datos?

jlalonso1950 31-12-2017 23:25:20

StringGrid
 
Yo pdoy entrada a dos StringGrid por teclado a la información a utilizar en un cálculo determinado,cuando voy a pasar esa información a la rejilla donde lo voy a trabajar y pongo, por ejemplo StringGrid3->assign(StringGrid1), se detiene el proceso en esa l'inea de codigo

¿Cómo pasar información desde una rejilla a otra?

Casimiro Notevi 01-01-2018 00:10:39

Cita:

Empezado por jlalonso1950 (Mensaje 523837)
... pongo, por ejemplo StringGrid3->assign(StringGrid1), se detiene el proceso en esa l'inea de codigo

¿Qué significa que "se detiene el proceso en esa línea de código"?
¿Algún mensaje de error?

jlalonso1950 01-01-2018 02:24:06

stringgrid
 
la respuesta del sistema es:

Project Project1.exe raised exception class EConvert with menssage "Can not assign a StringGrid to StringGrid"

jlalonso1950 01-01-2018 02:33:53

StringGrid
 
Trate de innovar y pegue las siguientes líneas de código:

Código:


for(i=1;i<=StrToInt(Edit2->Text);i++){
  StringGrid3->Assign(StringGrid1->Cells[i][1]);
}

al compilar da el siguiente error

[C++ Error] Unit1.cpp(98): E2034 Cannot convert 'AnsiString' to 'TPersistent *'
[C++ Error] Unit1.cpp(98): E2342 Type mismatch in parameter 'Source' (wanted 'TPersistent *', got 'AnsiString')

jlalonso1950 01-01-2018 16:02:50

StringGrid
 
Buenos dias y Felicidades.
He buscado en el libro de Chapman y sigo barado, más bien encallado en un banco de dudas....

Casimiro Notevi 01-01-2018 17:29:22

En delphi es más o menos así:
Código Delphi [-]
procedure ...
var
  NewStringGrid: TStringGrid;
begin
  NewStringGrid := TStringGrid.Create(Self);
  try
    NewStringGrid.Assign(OldStringGrid);
    ...
  finally
    NewStringGrid.Free;
  end;
end;

jlalonso1950 01-01-2018 17:45:48

StringGrid
 
Implementando tiu sugerencia Casimiro tengo:

Código:


for(i=1;i<=StrToInt(Edit2->Text);i++){
  StringGrid3->Cells[i][0]=Assign(StringGrid1->Cells[i][0]);
}

y el error que me da es:

Cita:

[C++ Error] Unit1.cpp(98): E2034 Cannot convert 'AnsiString' to 'TPersistent *'
[C++ Error] Unit1.cpp(98): E2342 Type mismatch in parameter 'Source' (wanted 'TPersistent *', got 'AnsiString')
[C++ Error] Unit1.cpp(98): E2109 Not an allowed type

Casimiro Notevi 01-01-2018 17:55:45

Es que no tiene nada que ver tu código con el ejemplo que he puesto.
En mi ejemplo estás asignando un stringgrid a otro stringgrid.
En tu código estás intentando asignar celdas, mediante un bucle.
En tu caso no hay que usar assign.

Será más o menos así:
Código:

for (i=1;i<=columnamayor;i++)
  stringgrid3->cells[i][0]=stringgrid1->cells[i][0];


jlalonso1950 01-01-2018 18:25:21

StringGrid
 
Código:


for (i=1;i <=StrToInt(Edit2->Text);i++){
  StringGrid3->Cells[i][0]=StringGrid1->Cells[i][0];
}

No da error, pero no carga el 3 con la información del 1

Le voy a pasar un correo desde mi correo personal, con las pantallas, que hacen y a ver si asi me puede ayudar mejor

ecfisa 01-01-2018 19:01:08

Hola.

Suponiendo que las dimensiones de los StringGrids son iguales, si deseas copiar el contenido de uno a otro:
Código PHP:

void copySG(TStringGrid *sourceTStringGrid *target)
{
  for(
int r source->FixedRowssource->RowCountr++)
    
target->Rows[r]->AddStrings(source->Rows[r]);
}

// Ejemplo de uso:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  
copySG(StringGrid1StringGrid3);


Si deseas sumar dos TStringGrid y dejar el resultado en un tercero:
Código PHP:

void sumarSG(TStringGrid *s1TStringGrid *s2TStringGrid *s3)
{
  
// (se supone que s1 y s2 contienen datos numéricos válidos)
  
for(int r s1->FixedRowss1->RowCountr++)
    for(
int c s1->FixedColss1->ColCountc++)
      
s3->Cells[c][r] = s1->Cells[c][r].ToDouble() + s2->Cells[c][r].ToDouble();
}

// Ejemplo de uso:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  
sumarSG(StringGrid1StringGrid2StringGrid3);


Son ejemplos orientativos, todo depende de lo que desees hacer y como tengas distribuida la información en los StringGrids...

Saludos :)

Casimiro Notevi 01-01-2018 19:48:05

Cita:

Empezado por jlalonso1950 (Mensaje 523854)
Le voy a pasar un correo desde mi correo personal, con las pantallas, que hacen y a ver si asi me puede ayudar mejor

Nuestra guía de estilo, punto 14.

jlalonso1950 02-01-2018 18:18:34

StringGrid
 
disculpas por mis metidas de pie..... pero con lo último que me dijo Casimiro, me puse a pensar y el StringGrid, no es más que un arreglo bidimensional, por lo que lleve a cabo el uso de esto, por lo que ocasionalmente llegue a lo que me recomendo después Ecfisa, Gracias, me sacaron de un buen agujero negro, ya puedo presentar mi clase con un inicio bien fundamentado

jlalonso1950 06-01-2018 01:48:38

StringGrid
 
Hoy me trae un nuevo problema, al cual no he encontrado respuesta navegando por la página, y es como puedo comparar dos celdas de un mismo StringGrid.He tratado de usar ->Value= pero no me:( da resultados algunos
HELP

ecfisa 06-01-2018 02:49:18

Hola.

Un ejemplo:
Código Delphi [-]
...
 if (StringGrid1.Cells[0,0] = StringGrid1.Cells[1,0]) and 
    not(StringGrid1.Cells[0,0] <> StringGrid1.Cells[2,0]) then
      ShowMessage('Las celdas [0,0], [1,0] y [2,0] tienen igual contenido');
...

Saludos :)

arturoio 09-01-2018 02:54:33

Si no me equivoco para rescatar el valor de una celda bastaría con esto

Código:

variable = stringGrid->Cells[1][1]


La franja horaria es GMT +2. Ahora son las 09:16:40.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi