![]() |
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 :) ? |
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; |
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? |
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 ...... |
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:
Im OnClick des Grids
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;
Delphi-Quellcode:
Kann es sein, dass du Col und Row verwechselt hast
procedure TForm1.Grid1Click(Sender: TObject);
begin ShowMessage(Grid1.Cells[Grid1.Col,Grid1.Row]); end; oder noch viel schlimmer, wird irgendwelchen globalen Variablen hantierst, die falsch gesetzt sind ?? Heiko |
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:
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...
DecodeDate(date,year,month,day);
Kalender.objects[day mod 7,day div 7]:=TObject(1); Thx schon mal |
Re: Angeklicktes Feld in einem String-Grid finden
Hallo,
Zitat:
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:
Heiko// 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; |
Re: Angeklicktes Feld in einem String-Grid finden
Zitat:
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; |
Re: Angeklicktes Feld in einem String-Grid finden
Hmmm.... I-wie klappt das nicht:
Delphi-Quellcode:
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...???
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; |
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:
Der muss auf 0 stehen.
DecodeDate(date,year,month,day);
for lauf := 1 to Tage do begin Inc(Zaehler);
Delphi-Quellcode:
Setz mal per F5 auf die Zeile Kalender.objects[count,row]:=TObject(1);
DecodeDate(date,year,month,day);
Zaehler:= 0; for lauf := 1 to Tage do begin Inc(Zaehler); 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 22:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz