AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Angeklicktes Feld in einem String-Grid finden
Thema durchsuchen
Ansicht
Themen-Optionen

Angeklicktes Feld in einem String-Grid finden

Ein Thema von Fussel9 · begonnen am 28. Dez 2009 · letzter Beitrag vom 29. Dez 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Fussel9
Fussel9

Registriert seit: 25. Mai 2009
322 Beiträge
 
Turbo Delphi für Win32
 
#1

Angeklicktes Feld in einem String-Grid finden

  Alt 28. Dez 2009, 01:40
*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 ?
  Mit Zitat antworten Zitat
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Angeklicktes Feld in einem String-Grid finden

  Alt 28. Dez 2009, 02:14
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;
Marcel
  Mit Zitat antworten Zitat
Benutzerbild von Fussel9
Fussel9

Registriert seit: 25. Mai 2009
322 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Angeklicktes Feld in einem String-Grid finden

  Alt 28. Dez 2009, 02:28
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?
  Mit Zitat antworten Zitat
whsd

Registriert seit: 30. Nov 2007
Ort: Bad Krozingen
7 Beiträge
 
#4

Re: Angeklicktes Feld in einem String-Grid finden

  Alt 28. Dez 2009, 08:56
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 ......
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Angeklicktes Feld in einem String-Grid finden

  Alt 28. Dez 2009, 09:05
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
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Fussel9
Fussel9

Registriert seit: 25. Mai 2009
322 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Angeklicktes Feld in einem String-Grid finden

  Alt 28. Dez 2009, 15:10
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Angeklicktes Feld in einem String-Grid finden

  Alt 28. Dez 2009, 15:17
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
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Fussel9
Fussel9

Registriert seit: 25. Mai 2009
322 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Angeklicktes Feld in einem String-Grid finden

  Alt 28. Dez 2009, 15:29
Zitat:
Grid1.Objects[iCol,iRow]:= TObject(-1); // merkwürdiger Code ...
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;
  Mit Zitat antworten Zitat
Benutzerbild von Fussel9
Fussel9

Registriert seit: 25. Mai 2009
322 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Angeklicktes Feld in einem String-Grid finden

  Alt 28. Dez 2009, 16:07
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...???
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Angeklicktes Feld in einem String-Grid finden

  Alt 29. Dez 2009, 09:48
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
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:41 Uhr.
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