| Autor |
Beitrag |
justifyofgod
      
Beiträge: 19
|
Verfasst: Sa 11.10.08 21:19
Hi ich hab ein Problem:
Also ein einfaches Beispiel für den Sachverhalt:
Ich habe 100 Shapes die von 1-100 durchnummeriert sind (irgendwie im Namen z.B. shape38) wenn ich nun eine Zufallsvariable erzeuge und abhängig von ihr ein Shape z.b. gelb mache, wie gebe ich dann die variable im Befehl an?
Ich hatte es in der Art versucht aber keinen Erfolg gehabt: Shape[a].brush.....
Kann mir bitte einer helfen und sagen wie es wirklich geht??
Gruß Steffen Moderiert von Narses: Topic aus Sonstiges (Delphi) verschoben am Sa 11.10.2008 um 23:34
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Sa 11.10.08 21:48
Hi,
FindComponent() dürfte dir weiterhelfen. Aber da gibt es schon zig Threads zu, einfach mal suchen 
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
LexXis
      
Beiträge: 170
Erhaltene Danke: 3
|
Verfasst: Sa 11.10.08 21:50
Menno, 2 Minuten zu langsam
Aber ich hab noch was anderes:
100 Shapes dürfte so ziemlich das unperformanteste sein, was du machen kannst! Zeichne lieber selber auf ein Image, geht deutlich schneller und dein Arbeitsspeicher freut sich auch drüber.
mfg
|
|
justifyofgod 
      
Beiträge: 19
|
Verfasst: Sa 11.10.08 23:32
hi
Danke super! genau das was ich gesucht habe.
Ja mir ist es bewusst das so viele shapes nicht gerade der brüller sind aber ich brauche die einzelnen Elemente, da ich das anders nicht kann. ich muss quasi ne Button Klick auf die Elemente(einzelnen shapes) ausführen.
Besten Dank
Gruß Steffen
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: So 12.10.08 07:55
Kannste trotzdem anders machen:
- zwei Images
- auf das eine wird gezeichnet, auf das andere dasselbe, bloß mit anderer Farbe pro "Shape"
- Dann kannst du anhand der Farbe, auf die der User klickt, ermitteln, welches Shape das war (das Hilfeshape verstecken!)
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 12.10.08 09:12
Ich hab mal schnell ein kleines Beispiel gebastelt wie es ohne Shapes geht, siehe Anhang  .
Das lässt sich noch beliebig optimieren, Hintergrundbitmap, Verhalten bei Klicks, etc.
Einloggen, um Attachments anzusehen!
|
|
justifyofgod 
      
Beiträge: 19
|
Verfasst: So 12.10.08 13:12
ok vieles leuchtet mir ein manches verstehe ich gar nicht.
also ich muss die shapes ja nicht bewegen, ich muss nur wissen auf welches ich draufdrücke und die Nachbarn vor allem bestimmen.da denke ist es mit shapes doch einfacher oder wenn die von vornherein da sind braucht der Rechner dann zum compilieren 30 min?
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 12.10.08 13:26
Wenn es beim Kompilieren lange dauert, wäre das ja nicht schlimm, die Oberfläche ist halt nur etwas träge, auf älteren PCs vor allem nervt das dann tierisch.
Vor allem ist es so ja nicht schwieriger, denn du kannst ja die einzelnen Rechtecke direkt als zweidimensionales Array speichern und hättest dann direkt die Nachbarn. Viel einfacher geht es ja kaum, vor allem, wenn die gar nicht bewegt werden.
|
|
justifyofgod 
      
Beiträge: 19
|
Verfasst: So 12.10.08 13:43
ja habe es gerade auch bemerkt und wenn ich welche nicht sichtbar haben will kann ich direkt einfach die Hintergrundfarbe nehmen was in dem Spiel dann praktischer weise als Stopper fungiert...
Es geht um das Spiel Iagno(reversi) vielleicht kennt es der ein oder andere.
So vielen dank ich denke das ist mir nun klar.
Die ganze Sache geht aber doch logischerweise auch mit Kreisen (ist dann doch circle oder so)
Gruß mit herzlichem Danke
Steffen
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 12.10.08 13:54
justifyofgod hat folgendes geschrieben : | | ja habe es gerade auch bemerkt und wenn ich welche nicht sichtbar haben will kann ich direkt einfach die Hintergrundfarbe nehmen |
Du kannst unsichtbare einfach gar nicht zeichnen. Du solltest statt TRect einfach einen eigenen Record mit den Koordinaten und diesen Daten und Einstellungen zu den einzelnen Elementen nehmen  .
justifyofgod hat folgendes geschrieben : | | Die ganze Sache geht aber doch logischerweise auch mit Kreisen (ist dann doch circle oder so) |
Das heißt nicht circle sondern Arc, wenn du einen Kreis willst, dann ist das ja nur ein Spezialfall einer Ellipse  .
|
|
justifyofgod 
      
Beiträge: 19
|
Verfasst: So 12.10.08 14:25
ja ok in meinem Fall brauche ich die trotzdem weil ich ohnehin alle brauche und daraufhin dann andere wiederum zeichnen möchte,die ich auch alle brauche. Reversi halt. So danke, falls ich das prog hin bekomme poste ich es, wenn es gewünscht ist...
Nochmals danke an die die sich erbarmt haben und mir geholfen haben.
Gruß Steffen
|
|
justifyofgod 
      
Beiträge: 19
|
Verfasst: So 12.10.08 16:19
so habe nun bei der Umsetzung doch noch ein Problem...
Auf den Befehl: image1.Canvas.Rectangle(fRectangles[i]);
(habe natürlich frectangles deklariert)antwortet dass es einen Konflikt zwischen Trect und integer geben würde.
ab welcher Delphiversion geht das denn??? Ich habe Delphi 3
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 12.10.08 17:17
Dann musst du vermutlich die einzelnen Teile des Rechtecks manuell eintragen. Delphi 3 kennt noch keine überladenen Methoden, deshalb kann man kein TRect übergeben sondern muss Left, Top, etc. selbst angeben: Delphi-Quelltext 1:
| image1.Canvas.Rectangle(fRectangles[i].Left, fRectangles[i].Top, ...); |
|
|
justifyofgod 
      
Beiträge: 19
|
Verfasst: So 12.10.08 18:53
so also Problem ist gelöst ich habe es mit einem Record und einem Array gemacht.
und dann die Parameter übergeben-kommt ja dann aufs selbe raus(oder fast)
so noch mal allen danke ich denke ich sollte nun zurechtkommen.
Steffen
|
|
justifyofgod 
      
Beiträge: 19
|
Verfasst: Mo 13.10.08 20:07
Hi ich habe nun bei der Lösung ein weiteres Problem...es scheint an meinem alten delphi zu liegen...
GetCursorPos(p);
p.x:=Mouse.CursorPos.x;
p.y:=Mouse.CursorPos.y;
das waren meine versuche die Mausposition zu erlangen aber sie sind gescheitert.
Das erste bringt nur die Position auf dem Gesamtbildschirm und beim 2. sagt er mouse währe unbekannt..
wie kann ich das in delphi3 realisieren??Ich brauch doch nur die Position auf dem Formular....(auf meinem Image)
bitte helft mir
Steffen
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Mo 13.10.08 20:21
Delphi-Quelltext 1: 2: 3:
| GetCursorPos(p); p.X := p.X - Form1.Left - 4; p.Y := p.Y - Form1.Top - 30; |
oder:
Delphi-Quelltext 1:
| p := Form1.ScreenToClient(Mouse.CursorPos); |
Die Klasse TMouse findet sich in der Unit Controls.
Zuletzt bearbeitet von Marc. am Mo 13.10.08 21:27, insgesamt 2-mal bearbeitet
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Mo 13.10.08 20:47
Hi,
Wahrscheinlich sollte aber das OnMouseDown-Ereignis der paintbox verwendet werden. Und dort werden die mauskoordinaten ja als X und Y mitgeliefert
mfG,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
justifyofgod 
      
Beiträge: 19
|
Verfasst: Mo 13.10.08 21:05
also Marcs Version funktioniert bestens: Danke
@ Hidden: Ist das das selbe wie wenn ich im Objektinspektor bei Ereignis in onclick die Prozedur rein schmeiße???
Ich wusste nicht wie ich das in Quelltext schreiben kann:
beim klicken auf das Image tue
........
das währe natürlich stilistisch besser...
so allen die mir bis jetzt so gut geholfen haben ein herzliches danke.
Steffen
|
|