Autor Beitrag
der organist
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 467
Erhaltene Danke: 17

WIN 7
NQC, Basic, Delphi 2010
BeitragVerfasst: Mo 28.07.08 19:25 
Neuestes Problem weiter unten, in meinem 3. Post.

ich schreibe gerade an einem Programm mit mehreren Units. Nun will ich aus einer Unit mit der Paintbox (einer anderen Unit) einen Kreis zeichnen.

Was muss ich beachten, wie rufe ich den entsprechenden Canvas auf?

Danks schonmal im Vorraus.


Moderiert von user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am Mo 28.07.2008 um 19:29


Zuletzt bearbeitet von der organist am Mi 30.07.08 21:45, insgesamt 2-mal bearbeitet
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Mo 28.07.08 20:35 
Naja, zunächst mal muss die unit in der die Paintbox deklariert ist in die uses-Klausel der unit aufgenommen werden, aus der der Aufruf erfolgen soll. Gewöhlicherweise genügt hier ein aufruf in der uses-Klausel im implementation-Teil.

Sodann kannst du die fremde Paintbox ansprechen, über das Formular auf der sie sich befindet:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
unit unit2;
interface
..
implementation
uses unit1;
..
form1.paintbox1.canvas.machwas();



Solange du kein Multithreading benutzt musst du soweit ich weiß weiter nix beachten.

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)


Zuletzt bearbeitet von Tilman am Di 29.07.08 15:28, insgesamt 2-mal bearbeitet
der organist Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 467
Erhaltene Danke: 17

WIN 7
NQC, Basic, Delphi 2010
BeitragVerfasst: Di 29.07.08 07:23 
wenn ich die Unit in die Uses-Klausel aufnehme, dann habe ich aber circuläre deklaration, da ich in der PaintboxUnit schon die andere in der Uses-Klausel habe, bzw, wenn ich es nicht aufnehme, dann habe ich undeklarierte Bezeichner (Form1, PaintBox1...):

P.S.
Was ist Multithreading?
iKilledKenny
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 8

Win XP
D5 Prof, C# Express 2005
BeitragVerfasst: Di 29.07.08 08:43 
Also ich würde ja empfehlen, die PaintBox als Parameter zu übergeben.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 29.07.08 09:01 
Ja, das fände ich auch sinnvoller.

Aber: schau dir mal den Schnipsel von user profile iconTilman genauer an. Dein Code sieht anders aus, wenn du diesen Fehler bekommst. ;-)

_________________
We are, we were and will not be.
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Di 29.07.08 15:28 
user profile iconTilman hat folgendes geschrieben:
Naja, zunächst mal muss die unit in der die Paintbox deklariert ist in die uses-Klausel der unit aufgenommen werden, aus der der Aufruf erfolgen soll. Gewöhlicherweise genügt hier ein aufruf in der uses-Klausel im implementation-Teil.

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
der organist Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 467
Erhaltene Danke: 17

WIN 7
NQC, Basic, Delphi 2010
BeitragVerfasst: Mi 30.07.08 21:44 
So, mitlerweile hat das gefunzt. Aber nun stehe ich vor einem neuen Problem. Ich kann nicht auf Methoden und Felder in anderen Units zugreifen, wie in folgendem Beispiel, ich habs in der uses-Klausel drin^^.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
[....]

private
  BallNr : Array [1..10of TBall;  
[....]

implementation

[....]
procedure TFSpiel.FormClose(Sender: TObject; var Action: TCloseAction);
var I : Integer;
begin
  for I := 1 to 10 do
  BallNr[i].Free;
end;

[....]

im markierten Bereich gibt es eine Fehlermeldung:
Project Project 1.exe raised eception class EAccessViolation with message 'Acces violation at address 0045B995 in module 'Project 1.exe'. Read of address 0000001C'.

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Zuletzt bearbeitet von der organist am Mi 30.07.08 21:51, insgesamt 1-mal bearbeitet
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 30.07.08 21:49 
Warum ist BallNr als private deklariert, wenn es doch public sein soll? ;-)

_________________
We are, we were and will not be.
der organist Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 467
Erhaltene Danke: 17

WIN 7
NQC, Basic, Delphi 2010
BeitragVerfasst: Mi 30.07.08 21:53 
is ne gute Frage, hab ich geändert, hilft aber leider nichts. Gleich Fehlermeldung. :(

Die andere Unit beinhaltet die Klasse TBall.

_________________
»Gedanken sind mächtiger als Waffen. Wir erlauben es unseren Bürgern nicht, Waffen zu führen - warum sollten wir es ihnen erlauben, selbständig zu denken?« Josef Stalin


Zuletzt bearbeitet von der organist am Mi 30.07.08 22:20, insgesamt 2-mal bearbeitet
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Mi 30.07.08 22:07 
Hm, vielleicht ist beim überschreiben von tBall.Destroy irgendwas schief gelaufen? *mutmaß*

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
der organist Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 467
Erhaltene Danke: 17

WIN 7
NQC, Basic, Delphi 2010
BeitragVerfasst: Mi 30.07.08 22:10 
übergelaufen klingt gut: im Call-Stack findet sich ein "To Large Integer", aber ich benutze keine großen zahlen in der richtung.

_________________
»Gedanken sind mächtiger als Waffen. Wir erlauben es unseren Bürgern nicht, Waffen zu führen - warum sollten wir es ihnen erlauben, selbständig zu denken?« Josef Stalin
wazup
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 101

Windows XP
Delphi 2009
BeitragVerfasst: Do 31.07.08 03:52 
Wenn der Fehler auftritt benutzt doch einfach Int64 statt einem normalen Integer
Logikmensch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 390

Win XP
Delphi 2007 Prof., XE2, XE5
BeitragVerfasst: Do 31.07.08 05:33 
Zitat:
im markierten Bereich gibt es eine Fehlermeldung:
Project Project 1.exe raised eception class EAccessViolation with message 'Acces violation at address 0045B995 in module 'Project 1.exe'. Read of address 0000001C'

Ich kann zwar auch nur mutmaßen, aber vielleicht sind die 10 Elemente des Arrays nicht ordentlich mit sowas ähnlichem wie
ausblenden Delphi-Quelltext
1:
2:
for i:=1 to 10 do
  BallNr[i]:=TBall.Create(..);

im FormCreate-Ereignis initialisiert worden. Solche AccessViolations treten mitunter auf, wenn das Objekt, welches Du mit Free freigeben möchtest, nicht gültig ist oder schon vorher geFreet worden ist.

_________________
Es gibt keine Probleme - nur Lösungen!
der organist Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 467
Erhaltene Danke: 17

WIN 7
NQC, Basic, Delphi 2010
BeitragVerfasst: Do 31.07.08 09:39 
user profile iconLogikmensch hat folgendes geschrieben:
[...]
aber vielleicht sind die 10 Elemente des Arrays nicht ordentlich [...] initialisiert worden. [...]


Ich kann mich nur bedanken, es hat geholfen und ein paar Stunden Zeitlichem Abstand und ein paar Stunden Gartenarbeit haben geholfen; Es lag am "ordentlich", ich habe for-Schleife "ballanzahl" oft durchgeführt, der Variablen aber den Wert erst nachher zugewiesen (beim Create also 0).

_________________
»Gedanken sind mächtiger als Waffen. Wir erlauben es unseren Bürgern nicht, Waffen zu führen - warum sollten wir es ihnen erlauben, selbständig zu denken?« Josef Stalin