Autor Beitrag
justifyofgod
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: 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 user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Sa 11.10.2008 um 23:34
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 170
Erhaltene Danke: 3



BeitragVerfasst: Sa 11.10.08 21:50 
Menno, 2 Minuten zu langsam :x

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 12.10.08 13:54 
user profile iconjustifyofgod hat folgendes geschrieben Zum zitierten Posting springen:
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 ;-).

user profile iconjustifyofgod hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
image1.Canvas.Rectangle(fRectangles[i].Left, fRectangles[i].Top, ...);					
justifyofgod Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Mo 13.10.08 20:21 
ausblenden Delphi-Quelltext
1:
2:
3:
 GetCursorPos(p);
 p.X := p.X - Form1.Left - 4; // Die Ränder links & rechts sind jeweils 2px breit (€: und nicht 4 ...)
 p.Y := p.Y - Form1.Top - 30; // Leiste + Rand = 30px

oder:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: 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