Autor Beitrag
AMI
Hält's aus hier
Beiträge: 13


Delphi 7
BeitragVerfasst: Do 20.04.06 15:51 
Hallo,

ich habe mir eine kleine Klasse gebastelt, die a) aus einer DB Tabelle gewisse Informationen ausliest und b) für jedes ausgelesene Objekt eine PaintBox zeichnet. Gezeichnet wird innerhalb einer Zeichenfläche, die vom Typ "Zeichenflaeche: TPaintBox;" ist. Diese fülle die ich dann dynamisch, je nach der Anzahl von Rows die aus meiner Tabelle ausgelesen werden, mit weiteren paintboxes.

Nun habe ich das Problem, daß weder das OnMouseUp noch das OnClick event richtig funktionieren. Nicht richtig heißt, daß sobald ich das Programm ausführe, in der linken oberen Ecke meiner Zeichenfläche ein Rechteck gezeichnet wird und nur darin funktionieren meine events.

Ich hoffe ich habe es einigermaßen verständlich erklären können.

Ich habe mein Code als Attachement dem Post beigefügt. Ein paar stellen habe ich gekürzt um keinen zu verwirren :-)

Also, um noch mal alles zusammen zu fassen:
Ich komme nicht dahinter, warum meine dynamisch gezeichneten paintboxes kein OnClick oder MouseUp event erhalten. Ich hoffe ihr könnt mir helfen.

Danke

AMI

P.S: Ihr habt bestimmt schon gemerkt, daß ich kein Delphi Guru bin :-)
Einloggen, um Attachments anzusehen!
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Fr 21.04.06 07:21 
(a) Variablen in einer Klasse sollten mit einen F anfangen
ausblenden Delphi-Quelltext
1:
2:
  FAnzahlObjekte : Integer;
  FSectionObjekte :TList;

(b) verwende statt x eigener Paintboxen eine eigene neue Klasse, die ein Bitmap erstellt, verwaltet und zeichnet und kopiere dieses im OnPaint-Ereignis der Paintbox auf den Canvas derselben
(c) dann sollte es auch mit OnClick etc. klappen!

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
AMI Threadstarter
Hält's aus hier
Beiträge: 13


Delphi 7
BeitragVerfasst: Mo 24.04.06 08:45 
Hallo Kroko,

danke für die Antwort.
Ich habe das Problem jedoch glaube ich wo anders ausgemacht.
Ich hatte die haupt-paintbox „Zeichenfläche“ in eine scrollbox reingestellt, wodurch meine paintboxen von der scrollbox überdeckt wurden. Außerdem muß ich so wie es scheint, eine eigene paint Methode für meine paintbox Klasse implementieren.
Mit bitmaps hantiere ich nur ungern, weil ich
1. kaum Ahnung von denen habe und
2. dadurch, daß ich mehrere 100 results aus der db haben werde, würde meine Applikation dann viel zu viel Speicher verwenden.

Ich versuche es heute noch mal und teile euch meine Erkenntnisse mit.

Grüße

AMI
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Mo 24.04.06 12:05 
(a) TBitmap bringt Dir genau einen Canvas mit wie eine PaintBox, nur musst Du Width&Height selbst setzen
(b) in OnPaint-Ereignis der PaintBox
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm.PaintBoxPaint (Sender: TObject);
begin
  PaintBox.Canvas.Draw (0,0,Bitmap);
end;

(c) eine Bitmap, die Deine 100 Ergebnisse verwaltet!
(d) vielleicht beschreibst Du mal, was die Ergebnisse inder Zeichnfläche bewirken sollen!

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
AMI Threadstarter
Hält's aus hier
Beiträge: 13


Delphi 7
BeitragVerfasst: Mo 24.04.06 16:59 
Hallo Kroko,

das mit der Bitmap hatte ich falsch verstanden. Das nächste mal mache ich es damit :-)

Also ich versuche den Inhalt eines Lagers darzustellen, daher die ganzen paintboxen. Leider ist es mir bis jetzt nur mittelmäßig gelungen. Nun ja, als ich die paint Methode meiner paintbox klasse überschrieben habe, hat es direkt geklappt. Onclick funktioniert jetzt. Aber jetzt habe ich keine Ahnung, wie ich meine paintboxen in eine scrollbox malen kann, weil ich ja die scrollbars verwenden will.
Hast du/jemand vielleicht eine Idee?


Danke für die Hilfe!

AMI
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Mo 24.04.06 17:07 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  P: TMeinePaintBox;
begin
  P := TMeinePaintBox.Create (Self); //oder Form1 etc.
  P.Owner := ScollBox1;
  // etc.
end;

sollte Dein Problem lösen!

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
AMI Threadstarter
Hält's aus hier
Beiträge: 13


Delphi 7
BeitragVerfasst: Mo 24.04.06 17:29 
Danke, leider klappt es nicht.
Ich bekomme folgende Fehlermeldung: "Cannot assign to a read-only property."

Mein Konstruktor hat folgenden Struktur:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
constructor TPaintBoxBasetype.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

  if AOwner is TWinControl then
  Parent := TWinControl(AOwner);

  // set event handlers
  OnMouseUp   := MouseUp;


end;


Zeile 5-6 dürften das Problem sein, oder?

AMI