Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wichtig!!! Fragen zu StringGrid (https://www.delphipraxis.net/1849-wichtig-fragen-zu-stringgrid.html)

Madeleine 27. Dez 2002 12:37


Wichtig!!! Fragen zu StringGrid
 
Hi,
es ist ganz doll wichtig und ich baue auf eure Hilfe!
Problem: Ich möchte das man auf ein bestimmtes Feld eines StringGrid klicken kann und genau in diesem Feld erscheint ein Bitmap! Dieses Feld darf sich dann nicht mehr ändern lassen; wenn man auf ein anderes Feld klickt, soll dort noch ein Bitmap erscheinen(dabei darf das andere aber nicht verschwinden!).
Selbst nach tausend Versuchen klappt es bei mir nicht :( und ich würde mich sehr über Hilfe freuen! :mrgreen:

sakura 27. Dez 2002 13:03

Hört sich an wie das alte Memory...

Schau Dir mal das Ereigniss OnDrawCell an.

Wie und wo hast Du definiert, in welcher Zelle welches Bild erscheint. Wo spiecherst Du, welche Bilder angezeigt werden und welche verdeckt sind?

Madeleine 27. Dez 2002 13:09

StringGrid
 
es handelt sich ja um 4 gewinnt,
das Problem ist, das ich mit OnMouseUp und MouseCoord nicht weiterkomme, das Bitmap wird einfach nicht gezeichnet und abspeichern tu ich das ganze in verschiedene arrays, wenn es das ist, was du meinst! :roll:

Sebastian Nintemann 27. Dez 2002 14:04

Hallo Madeleine, wie versuchst du denn zu zeichnen?
So funktionierts:

Delphi-Quellcode:
var
  r: TRect;
begin
  r := StringGrid1.CellRect(ACol,ARow);
  //ACol und ARow stehen für die Koordinaten der Zelle
  //hiermit weist du r das Rechteck auf der Zeichenfläche des StringGrids zu
  StringGrid1.Canvas.Draw(r.Left,r.Top,ABitmap);
  //Zeichnet das Bitmap "ABitmap" in die Betreffende Zelle
  //Vorsicht wenn das Bild Größer als die Zelle ist
end;
Gruß, Sebastian

Christian Seehase 27. Dez 2002 14:14

Moin Madeleine,

warum nimmst Du eigentlich ein StringGrid und kein DrawGrid?

Madeleine 27. Dez 2002 14:31

hi, und erstma danke :spin:
ich zeichne es auch so, aber ich weiß nur nicht wie man an die Row, Col einer Zelle kommt, wenn man diese anklickt.
Außerdem nehme ich ein Stringgrid, weil soviel ich weiß, gibt es da keine großen Unterschiede zwischen Draw und Stringgrid.
Bin ganz verzweifelt! :?

Christian Seehase 27. Dez 2002 14:34

Moin Madeleine,

mit der Methode MouseToCell geht das eigentlich wunderbar.

Madeleine 27. Dez 2002 14:39

Gibt es diese MousetoCell-Methode nur bei DrawStrings? Wie rufe ich die denn auf? Habe es schon mit MouseCoord und MouseUp versucht, davon habe ich noch nix gehört....
:oops:

Christian Seehase 27. Dez 2002 14:43

Moin Madeleine,

ich kann jetzt gerade nicht unmittelbar nachschauen (Plattendefekt :? ), muss das also mal aus der Erinnerung beantworten:

Der Aufruf könnte innerhalb einer Ereignisroutine erfolgen, in der die Mouse Koordinaten im Stringgrid übergeben werden (ich komm' gerade nicht auf den Namen.

Und dort dann StringGrid1.MouseToCell(x,y,ACol,ARow) wobei auf Grund der Mousekoordinaten x und y die Zellenkoordinaten errechnet werden.

City Light 27. Dez 2002 14:49

Hi @ll

Ich glaub es geht auch so...
Delphi-Quellcode:
    with StringGrid1 do
  begin
    ShowMessage(Cells[0, Col] + Cells[1, Row]);
  end;

Madeleine 27. Dez 2002 14:51

es klappt!!!
 
es hat geklappt!!! Danke :hello:
jetzt nur noch ein ganz kleines Problem: warum verschwindet das Bitmap denn wieder, wenn ich ein anderes Feld anklicke?

Madeleine 27. Dez 2002 14:57

also meine letzte Frage ziehe ich zurück, das klappt mit der DrawCell-Methode!
Könnte jedem von euch um den Hals fallen :party:
Danke, danke

City Light 27. Dez 2002 15:08

Hier noch mal was aus der Delphi Hilfe

Delphi-Quellcode:
procedure TForm1.StringGrid1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  Column, Row: Longint;
begin
  StringGrid1.MouseToCell(X, Y, Column, Row);
  StringGrid1.Cells[Column, Row] := 'Spalte ' + IntToStr(Column) +
    ', Zeile ' + IntToStr(Row);
end;
Viele Grüße ,Tino

Sebastian Nintemann 27. Dez 2002 15:15

Um die zurückgezogene Frage dennoch zu beantworten:
Wenn du auf eine andere Zelle klickst wird das ganze neu gezeichnet, und das was du gezeichnet hast verschwindet, es sei denn du zeichnest es auch wieder neu, zb im OnDrawCell-Ereignis, welches beim neuzeichnen ja aufgerufen wird.

Gruß, Sebastian


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 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