| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | StringGrid farver Fra : Henning Madsen | 
  Dato :  24-11-05 19:22 |  
  |   
            I en StringGrid's kolonne har jeg lavet det så man kan ændre tekstens farve 
 i tilfældige
 seller.
 procedure TForm1.XStringGrid1CellProps(Sender: TObject; Canvas: TCanvas;
   var Alignment: TAlignment; var CellText: String; AState: TGridDrawState;
   Row, Col: Integer);
   Var
   T : Integer;
 begin
   For T := 1 to XStringGrid1.RowCount -1 Do Begin
     If (Col = 6) And (XRow = T) Then Canvas.Font.Color := clGray;
   End;
 end;
 
 procedure TForm1.XStringGrid1SelectCell(Sender: TObject; ACol,
   ARow: Integer; var CanSelect: Boolean);
 begin
   XRow := ARow; // XRow er defineret i private,
 end;
 
 Kan det laves således at når man klikker på en selle der er grå bliver den 
 sort og omvendt.
 Mener det kræver en måde at læse skriftens farve på, har ledt mange steder 
 men entet fundet. Det kan selvfølgelig laves via en Ini fil, men det er ikke 
 lige det der var iden.
 Hvis der er en af jer der kender en løsning, vel det være meget velkommen.
 På forhånd tak.
 mvh
 Henning 
 
 
  
            
             |   |   
            
        
 
            
         
           Tiscali (23-12-2005) 
         
	
            | Kommentar Fra : Tiscali | 
  Dato :  23-12-05 13:06 |  
  |   
            Hej Henning,
 
 jeg håber jeg har forstået dig korrekt. Nederst er noget source kode du kan 
 prøve med. Det er skrevet løst i hånden. Du skal opfinde en datastruktur som 
 kan indholde dine nødvendige oplysninger. Kan ikke helt forstå det du 
 skriver omkring .Ini filen? Grunden til, at jeg har valgt en Record er, at 
 man sagtens kunne forestille sig at du med tiden skulle bruge flere 
 informationer end lige om en Celle har været valgt eller ej.
 
 Jeg ville nok har valgt en dynamisk struktur, så Row og Col størrelsen kunne 
 vokse afhængig hvor mange celler du rent faktisk har brug for. Meeen, det 
 tager lidt længere tid... Du justerer bare const'anterne hvis jeg ikke har 
 afsat nok plads.
 
 Jeg har ikke skrevet koden i Delphi, så hvis der er et par Syntax fejl må du 
 have mig undskyldt (o;
 
 Jeg håber du kan bruge det.
 
 Helt og lykke...
 
 /Brian
 
 const
   CellMaxRow = 10;
   CellMaxCol = 10;
 
 type
   TCellData = record
     Selected: Boolean;
   end;
 
   TCellArray[0..CellMaxRow, 0..CellMaxCol] of TCellData;
 
   TForm1 = class(TForm)
   private
     FCells: TCellArray;
     procedure Clear;
   public
     constructor Create(AOwner: TComponent); override;
   end;
 
 constructor TForm1.Create(AOwner: TComponent);
 begin
   inherited;
   Clear;
 end;
 
 procedure TForm1.Clear;
 var
   Row, Col: Integer;
 begin
   for Row := 0 to CellMaxRow do
     for Col := 0 to CellMaxCol do
       FCells[Row, Col].Selected := False;
 end;
 
 procedure TForm1.XStringGrid1CellProps(Sender: TObject; Canvas: TCanvas;
   var Alignment: TAlignment; var CellText: String; AState: TGridDrawState; 
 Row, Col: Integer);
 begin
   if FCells[Row, Col].Selected then
      Canvas.Font.Color := clGray else
      Canvas.Font.Color := clBlack;
 end;
 
 
  
            
             |   |   
            
        
 
            
         
           Henning Madsen (27-12-2005) 
         
	
            | Kommentar Fra : Henning Madsen | 
  Dato :  27-12-05 16:31 |  
  |   
            
 "Tiscali" <x@x.x> skrev i en meddelelse 
 news:CIRqf.3204$Cl2.92188@news000.worldonline.dk...
 > Hej Henning,
 >
 > jeg håber jeg har forstået dig korrekt. Nederst er noget source kode du 
 > kan prøve med. Det er skrevet løst i hånden. Du skal opfinde en 
 > datastruktur som kan indholde dine nødvendige oplysninger. Kan ikke helt 
 > forstå det du skriver omkring .Ini filen? Grunden til, at jeg har valgt en 
 > Record er, at man sagtens kunne forestille sig at du med tiden skulle 
 > bruge flere informationer end lige om en Celle har været valgt eller ej.
 >
 > Jeg ville nok har valgt en dynamisk struktur, så Row og Col størrelsen 
 > kunne vokse afhængig hvor mange celler du rent faktisk har brug for. 
 > Meeen, det tager lidt længere tid... Du justerer bare const'anterne hvis 
 > jeg ikke har afsat nok plads.
 >
 > Jeg har ikke skrevet koden i Delphi, så hvis der er et par Syntax fejl må 
 > du have mig undskyldt (o;
 >
 > Jeg håber du kan bruge det.
 >
 > Helt og lykke...
 >
 > /Brian
 >
 > const
 >  CellMaxRow = 10;
 >  CellMaxCol = 10;
 >
 > type
 >  TCellData = record
 >    Selected: Boolean;
 >  end;
 >
 >  TCellArray[0..CellMaxRow, 0..CellMaxCol] of TCellData;
 >
 >  TForm1 = class(TForm)
 >  private
 >    FCells: TCellArray;
 >    procedure Clear;
 >  public
 >    constructor Create(AOwner: TComponent); override;
 >  end;
 >
 > constructor TForm1.Create(AOwner: TComponent);
 > begin
 >  inherited;
 >  Clear;
 > end;
 >
 > procedure TForm1.Clear;
 > var
 >  Row, Col: Integer;
 > begin
 >  for Row := 0 to CellMaxRow do
 >    for Col := 0 to CellMaxCol do
 >      FCells[Row, Col].Selected := False;
 > end;
 >
 > procedure TForm1.XStringGrid1CellProps(Sender: TObject; Canvas: TCanvas;
 >  var Alignment: TAlignment; var CellText: String; AState: TGridDrawState; 
 > Row, Col: Integer);
 > begin
 >  if FCells[Row, Col].Selected then
 >     Canvas.Font.Color := clGray else
 >     Canvas.Font.Color := clBlack;
 > end;
 >
 >Tak for svaret Brian
 Har rodet meget med programmet men forstår ikke helt hvor koderne, fra dit 
 navn til første Procedyre(constructor), skal plaseres i hovedet.
 Det er mugligvis en for stor opgave jeg er gået i gang med.
 Mener XStringGridden er bedst egnet til formålet.
 Helt kongret var ideen den at der i kolonne 0 Stod ca. 10 medarbejder navne, 
 med sort skrift.
 Ved klik på et eller flere navne(fraværende) skal skriftfarven ændres til 
 rød og igen ved klik på et rødt navn sætte skriftfarven til sort.
 I de næste kolonner med overskriften Djob1 Djob2 o.s.v. kunne der ud for 
 hvert navn
 sættes et X i den kolonne som representer det djob som medarbejderen var 
 uddannet til.
 Man vælger det eller de djob der skal udføres og klikker på det i Row 0. Og 
 straks bliver navnene på de medarbejder der kan udføre djobbet farvet Grønne 
 dog ikke dem der er røde.(et djob af gangen).
 Der vælges så den medarbejder der skal udfører opgaven med et klik og straks 
 får det
 aktuelle navn farven Grå. Og eventuelle andre grønne navne får farven Sort.
 
 Kan man styrer de mange forskellige farver, mener jeg det giver en nem 
 betjæning af programmet.
 
 Eventuelle ideer vel være meget velkommen.
 mvh
 Henning
 
 
  
            
             |   |   
            
        
 
            
         
            Brian Andersen \(www~ (28-12-2005) 
         
	
            | Kommentar Fra : Brian Andersen \(www~ | 
  Dato :  28-12-05 09:30 |  
  |   
            Som sagt, så har jeg ikke selv testet programmet. Jeg tror nu det burde 
 virke *s'.
 
 Denne del af programmet skal skrives i interface delen:
 
 >> const
 >>  CellMaxRow = 10;
 >>  CellMaxCol = 10;
 >>
 >> type
 >>  TCellData = record
 >>    Selected: Boolean;
 >>  end;
 >>
 >>  TCellArray[0..CellMaxRow, 0..CellMaxCol] of TCellData;
 
 
 Det her er din for, hvor du har din grid. Delphi generer automatisk kode 
 her, men du kan også selv skrive kode:
 
 >>  TForm1 = class(TForm)
 >>  private
 >>    FCells: TCellArray;
 >>    procedure Clear;
 >>  public
 >>    constructor Create(AOwner: TComponent); override;
 >>  end;
 
 
 Den her kode skal du skrive i implementeringsdelen:
 
 >> constructor TForm1.Create(AOwner: TComponent);
 >> begin
 >>  inherited;
 >>  Clear;
 >> end;
 >>
 >> procedure TForm1.Clear;
 >> var
 >>  Row, Col: Integer;
 >> begin
 >>  for Row := 0 to CellMaxRow do
 >>    for Col := 0 to CellMaxCol do
 >>      FCells[Row, Col].Selected := False;
 >> end;
 
 
 Det her er metoden fra din grid, som tegner hvilken tekstfarve de enkelte 
 celler skal have...
 
 >> procedure TForm1.XStringGrid1CellProps(Sender: TObject; Canvas: TCanvas;
 >>  var Alignment: TAlignment; var CellText: String; AState: TGridDrawState; 
 >> Row, Col: Integer);
 >> begin
 >>  if FCells[Row, Col].Selected then
 >>     Canvas.Font.Color := clGray else
 >>     Canvas.Font.Color := clBlack;
 >> end;
 
 Opdager lige, at der ikke er implementeret nogle MouseClick event, så 
 tekstfarven rent faktisk kan skifte (o;
 
 Meeen, koden vil se nogen lunde sådan her ud. Jeg har ikke din XStringGrid, 
 så jeg har taget udgangspunkt i den almindelige StringGrid.
 
 procedure TForm1.XStringGrid1Click(Sender: TObject);
 begin
   FCells[XStringGrid1.Row, XStringGrid1.Col] := not FCells[XStringGrid1.Row, 
 XStringGrid1.Col];
   XStringGrid1.Invalidate;
 end;
 
 Værdierne skal sættes til henholdsvis True/False når der klikkes på en 
 celle. Dette bestemmer tekstfarven i XStringGrid1CellProps. Musen skal så 
 styre værdien og dette gøres via XStringGrid1Click.
 
 Du bliver nok nød til at eksperimentere en del, hvis du skal have et system 
 til gøre som du beskriver.
 
 /Brian 
 
 
  
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |