Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Angeklicktes Feld in einem String-Grid finden (https://www.delphipraxis.net/145266-angeklicktes-feld-einem-string-grid-finden.html)

Fussel9 28. Dez 2009 00:40


Angeklicktes Feld in einem String-Grid finden
 
*Gääähhhnn* Man..schon wieder spät geworden... hoffe es ist überhaupt noch jemand wach ;)

Habe noch ordentlich rumgebastelt und so jetzt steh ich vor folgender Frage:

Ich möchte gerne, das eine Prozedur aufgerufen wird wenn der Nutzer auf das String-Grid klickt,
nur soll hierzu vorher das Feld ermittelt werden um zu prüfen, ob es bereits einen Inhalt hat oder nicht...

Wie macht man das :) ?

Gehstock 28. Dez 2009 01:14

Re: Angeklicktes Feld in einem String-Grid finden
 
Zu spät um es zu testen aber versuch mal so
Delphi-Quellcode:
procedure TForm1.StringGrid1Click(Sender: TObject);
begin
if StringGrid1.Cells[StringGrid1.Row,StringGrid1.Col] = '' then ShowMessage ('Feld ist Leer');
end;

Fussel9 28. Dez 2009 01:28

Re: Angeklicktes Feld in einem String-Grid finden
 
Danke für die späte Antwor, klapp aber leider nich: Auf der letzten Reihe reagiert es immer und auf der vorletzten auf allen feldern außer auf den obersten beiden:

als beispiel:

01,02,03,04,05,06,07
08,09,10,11,12,13,14
15,16,17,18,19,20,21
22,23,24,25,26,27,28
29,30,31,xx,xx,xx,xx

reagiert bei 07,14,21,28 und xx in der reihe, nicht aber z.B. bei xx in der reihe 05,12,19,26
außerdem reagiert es noch bei 20,27 und dem in der reihe stehendem xx

[Edit] Ich such auch mehr nach ner function die mir die col und row werte des vom Nutzer angeklickten Feldes ausgibt... kennt da jemand was?

whsd 28. Dez 2009 07:56

Re: Angeklicktes Feld in einem String-Grid finden
 
Hallo
Nutz doch einfach MousetoCell im OnMouseUp Event der Stringgrid
(x und Y sind die Mauskoordinaten, COL und Row musst du als Integer definieren)
Beispiel:
TStringGrid(Sender).Mousetocell(X,Y, Col,Row)
if TStringGrid(Sender).Cells[Col,Row] = '' then
Showmessage ......

hoika 28. Dez 2009 08:05

Re: Angeklicktes Feld in einem String-Grid finden
 
Hallo,

warum so kompliziert ?

Im 2.Thread stand doch die Lösung

Grid.Col -> aktuell markierte Spalte
Grid.Row -> aktuell markierte Zeile

ARGZZZ !!!

gehstock hat die properties vertauscht

Grid.Cells[Grid.Col,Grid.Row] sollte dort stehen


Das sind properties, die also beim Auslesen wie eine Funktion benutzt werden

Mal ein kleines Bsp.

Neue Anwendung
StringGrid drauf

und folgendes in FormCreate

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  iCol    : Integer;
  iRow    : Integer;
  iCounter : Integer;
begin
  Grid1.ColCount:= 7;
  Grid1.RowCount:= 7;

  iCounter:= 0;
  for iRow:= 0 to Grid1.RowCount-1 do
  begin
    for iCol:= 0 to Grid1.ColCount-1 do
    begin
      Inc(iCounter);
      Grid1.Cells[iCol,iRow]:= IntToStr(iCounter);
    end;
  end;
end;
Im OnClick des Grids

Delphi-Quellcode:
procedure TForm1.Grid1Click(Sender: TObject);
begin
  ShowMessage(Grid1.Cells[Grid1.Col,Grid1.Row]);
end;
Kann es sein, dass du Col und Row verwechselt hast
oder noch viel schlimmer, wird irgendwelchen globalen Variablen hantierst,
die falsch gesetzt sind ??


Heiko

Fussel9 28. Dez 2009 14:10

Re: Angeklicktes Feld in einem String-Grid finden
 
:) Dankeschön aber da muss man auch erstmal drauf kommen...^^

anbei noch eine ganz kurze frage lohnt sich glaub ich nicht dafür nen neuen thread aufzumachen:

Delphi-Quellcode:
DecodeDate(date,year,month,day);
Kalender.objects[day mod 7,day div 7]:=TObject(1);
Ich will damit das aktuelle Datum einfärben aber ich glaube das mit ''day mod 7'' stimmt da nicht... ich habe mod so wie so noch nicht verstanden... aber egal hat jemand ne idee wie das funktionieren könnte=? also nur den algorithmus der den col wert der aktuellen datums ausrechnet...

Thx schon mal

hoika 28. Dez 2009 14:17

Re: Angeklicktes Feld in einem String-Grid finden
 
Hallo,

Zitat:

Ich will damit das aktuelle Datum einfärben
Durch ein Objects ? oder was soll diese TObject(1)

mit Date (aus SysUtils) bekommst du das aktuelle Datum.
Das einfachste wäre du setzt das Objects gleich beim "FillGrid",
an dieser Stelle hast du ja dein TDateTime fast da

Bei meinem Code

Delphi-Quellcode:
 


 // das kommt von irgendwoher
  wYear : Word;
  wMonth : Word;

  iCounter:= 0;
  for iRow:= 0 to Grid1.RowCount-1 do
  begin
    for iCol:= 0 to Grid1.ColCount-1 do
    begin
      Inc(iCounter);
      Grid1.Cells[iCol,iRow]:= IntToStr(iCounter);

      if EncodeDate(wYear, wMonth, iCounter)=Date then
      begin
        Grid1.Objects[iCol,iRow]:= TObject(-1);  // merkwürdiger Code ...
      end;

    end;
  end;
Heiko

Fussel9 28. Dez 2009 14:29

Re: Angeklicktes Feld in einem String-Grid finden
 
Zitat:

Grid1.Objects[iCol,iRow]:= TObject(-1); // merkwürdiger Code ...
:o So merkwürdig is der eigendlich gar nicht: Das hab ich aus nem anderen Thread so wie ich das verstanden habe nennt man das ne Flag dazu gehört dieser Code:

Delphi-Quellcode:
procedure TForm1.KalenderDrawCell(Sender: TObject; Col, Row: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  (sender as TStringgrid).canvas.Brush.color:=(sender as TStringgrid).color;
  if integer(Kalender.objects[col,row])=1 then
    (sender as TStringgrid).canvas.Brush.color:=clInfoBk;
  (sender as TStringgrid).canvas.FillRect(rect);
  (sender as TStringgrid).canvas.TextOut(rect.left+2,rect.top+2,(sender as TStringgrid).Cells[col,row]);
end;

Fussel9 28. Dez 2009 15:07

Re: Angeklicktes Feld in einem String-Grid finden
 
Hmmm.... I-wie klappt das nicht:

Delphi-Quellcode:
DecodeDate(date,year,month,day);
for lauf := 1 to Tage do
begin
Inc(Zaehler);
  if count = 7 then
    begin
      count:=0;
      inc(row);
      Kalender.Cells[count,row]:=IntToStr(lauf);
      inc(count);
    end
  else
    begin
      Kalender.Cells[count,row]:=IntToStr(lauf);
      inc(count);
    end;
if EncodeDate(year,month,Zaehler)=date then
  begin
    Kalender.objects[count,row]:=TObject(1);
  end;
end;
Das ist meine Prozedur in der das Stringgrid gefüllt wird darunter hab ich dann die if then abfrage nach EncodeDate gesetzt jetzt wird kein feld eingefärbt...???

hoika 29. Dez 2009 08:48

Re: Angeklicktes Feld in einem String-Grid finden
 
Hallo,

was sagt der Debugger (F5, F7, F8 ...),
was der Compiler (Warnungen ?).

Ausserdem verschweigst du hier , wo Zaehler gesetzt wird.

Delphi-Quellcode:
DecodeDate(date,year,month,day);
for lauf := 1 to Tage do
begin
  Inc(Zaehler);
Der muss auf 0 stehen.

Delphi-Quellcode:
DecodeDate(date,year,month,day);
Zaehler:= 0;
for lauf := 1 to Tage do
begin
  Inc(Zaehler);
Setz mal per F5 auf die Zeile Kalender.objects[count,row]:=TObject(1);
einen Breakpoint und schau an, ob die Zeile überhaupt angesprungen wird.
Wennja, funktioniert eine OnDrawCell nicht.

Das ganze funktioniert nat. auch nur, wenn du den aktuellen Monat als Kalender anzeigst.

Und wo wir gerade bei Code sind ;)
Das Stück hier erscheint 2mal (DRY).

Delphi-Quellcode:
Kalender.Cells[count,row]:=IntToStr(lauf);
inc(count);

Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz