![]() |
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: |
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? |
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: |
Hallo Madeleine, wie versuchst du denn zu zeichnen?
So funktionierts:
Delphi-Quellcode:
Gruß, Sebastian
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; |
Moin Madeleine,
warum nimmst Du eigentlich ein StringGrid und kein DrawGrid? |
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! :? |
Moin Madeleine,
mit der Methode MouseToCell geht das eigentlich wunderbar. |
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: |
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. |
Hi @ll
Ich glaub es geht auch so...
Delphi-Quellcode:
with StringGrid1 do
begin ShowMessage(Cells[0, Col] + Cells[1, Row]); end; |
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? |
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 |
Hier noch mal was aus der Delphi Hilfe
Delphi-Quellcode:
Viele Grüße ,Tino
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; |
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