Fehlermeldung bei canvas.draw

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
Entertainmentberg
Beiträge: 46
Registriert: So 27. Jan 2013, 22:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Fehlermeldung bei canvas.draw

Beitrag von Entertainmentberg »

Hallo, ich habe mal wieder ein Problem, dass es eg. gar nicht geben dürfte - aber ich habe es nun )-:

Ich will ein Menü graphisch verschönern und habe dazu über die Menü-Fläche ein TImage (230x550pixel²) gelegt.
Nun habe ich 72x72pixel² große vorgefertigte Graphikelemente, die dort ausfüllend hineinbringen will. Der Quelltext sieht so aus:

Code: Alles auswählen

FOR x:=1 TO (img_steuer_graph.Width  DIV 72) DO    // Hintergrundpic ist 72x72pix
      FOR y:=1 TO (img_steuer_graph.Height DIV 72) DO
      BEGIN
         graph.LoadFromFile(pfad.graph+'Komponente\hintergrund_menü.bmp');
         img_steuer_graph.Canvas.Draw(x*72,y*72,graph);
      end;




WOBEI graph:TGraphic;


Das wird von Lazarus auch angenommen - aber sobald nach Programmstart auch nur einer der beiden Zeilen
graph.LoadFromFile(pfad.graph+'Komponente\hintergrund_menü.bmp');
img_steuer_graph.Canvas.Draw(x*72,y*72,graph);
aufgerufen wird, erhalte ich die berüchtigte Fehlermeldung: Exception-Klasse >>External: SIGSEGV<< ausgelöst. Was ist da falsch? Dieser Fehler ist kein unbekannter - aber noch nie hat ihn jemand eichtig fassen können. Bei mir trat er bisher schon öfter auf: v.a. wenn man aus einem array eine Position abrufen wollte, die gar nicht im Bereich vorkommt...

Ich hoffe, ihr könnt mir weiterhelfen.
Liebe Grüße





Präzisierung der Frage: Wie kann ich auf eine Komponente an bestimmte Stellen Bild(chen) aus einer Datei malen?
Gibt es noch andere Möglichkeiten, die Standardoptik zu verändern?

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Fehlermeldung bei canvas.draw

Beitrag von theo »

Entertainmentberg hat geschrieben:Ich will ein Menü graphisch verschönern

Aua, riecht nach Augenkrebs. Wie kommst du denn auf sowas?


Entertainmentberg hat geschrieben:WOBEI graph:TGraphic;

Woher kommt das? TGraphic ist eine abstrakte Basisklasse und kann nicht direkt instanziiert werden

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2640
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Fehlermeldung bei canvas.draw

Beitrag von m.fuchs »

theo hat geschrieben:Woher kommt das? TGraphic ist eine abstrakte Basisklasse und kann nicht direkt instanziiert werden

Kann schon, aber man sollte es nicht machen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Entertainmentberg
Beiträge: 46
Registriert: So 27. Jan 2013, 22:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Fehlermeldung bei canvas.draw

Beitrag von Entertainmentberg »

Möglicherweise auch deswegen der Fehler.

Augenkrebs? Wieso das? Ich will ein kleines Spiel machen und will nicht, dass diese Windowskomponenten die Athmosphäre kaputt machen... Soll mittelalterlich sein - und da soll das Menü nicht so grau-in-grau sein, sondern stilvoll düsterer. Nicht einfach ne andere Farbe, sondern halt wie es so in Spielen ist . optisch angemessen... :roll: Aber wie...

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Fehlermeldung bei canvas.draw

Beitrag von theo »

Was verstehst du überhaupt unter "Menu"? Ein TMainMenu?
Davon würde ich die Finger lassen. Das ist nicht gedacht zum Malen, jedenfalls nicht cross-platform.

Entertainmentberg
Beiträge: 46
Registriert: So 27. Jan 2013, 22:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Fehlermeldung bei canvas.draw

Beitrag von Entertainmentberg »

Nein... ich hab da ne Groupbox mit einigen Buttons und Infos über den Spieler und dessen Dorf. So einige Anzeigen, Einstellungen und Buttons - so ein Steuerbrett oder wie man das nennt... Halt ein Menü... wo man was einstellen kann. Und Runde beenden kann... Ein ... Menü eben...

Und dieses will ich schön gestalten, das soll nicht so PC-haft / Windowsartig aussehen. Vielleicht rankt da Eveu hoch und einige Münzen liegen "auf dem Boden" etc. halt, dass es ansprechend ist und ein schönes Spielgefühl aufkommt...

Also sowas, wie auf diesem Bild rechts zu sehen ist
Bild

Oder auf diesem Bild
Bild

Oder hier
Bild


Jippie! Hab grad herausgefunden, wie es funktioniert hier im Forum Bilder einzufügen - hab ich neulich nicht hingekriegt... meine Javakenntnisse sind großteils nicht existent...


Am nähesten kommt das Menü hier links
Bild

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Fehlermeldung bei canvas.draw

Beitrag von theo »

Man sieht fast etwas auf den Mikrobildern. :wink:

Ich verstehe immer noch nicht, was du nun genau brauchst. Ein TSpeedButton mit einem Glyph drauf?

Entertainmentberg
Beiträge: 46
Registriert: So 27. Jan 2013, 22:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Fehlermeldung bei canvas.draw

Beitrag von Entertainmentberg »

Speedbuttons mit Glyphs auf jedem Fall - aber auch der Hintergrund des Menüs soll schön sein. Aktuell ist das so ne Groupbox, auf der ich ein TImage platziert habe - sodass ich da die Gestaltung raufzeichnen lassen kann. Gibt es da aber noch bessere Möglichkeiten, ein schönes Menü incl. schönem Hintergrund zu erzeugen?

Vielen Dank für die rege Beteiligung, ich bin gespannt, was sich für Möglichkeiten auftun

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Fehlermeldung bei canvas.draw

Beitrag von theo »

Grundsätzlich kann du alles selber machen.
Du kannst von TCustomControl ausgehend, deine eigene Komponente erstellen.
Dort drauf (Canvas) kannst du zeichnen was du willst, Mauskoordinaten auswerten und auf Clicks und Tastatur reagieren wie du willst etc.
Am Ende kannst du die Komponente auch installieren, damit sie in der IDE zur Auswahl steht.

Für "Quick & Dirty" ist aber die Variante mit z.B. Speed- oder BitBtn und Image wohl ausreichend.

Entertainmentberg
Beiträge: 46
Registriert: So 27. Jan 2013, 22:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Fehlermeldung bei canvas.draw

Beitrag von Entertainmentberg »

Das klingt ja interessant. TCustomControl habe ich noch nie gehört - es scheint so, als müsste ich mich da mal einarbeiten :D

Wo wir dabei sind: wie findet man die Mauskoordinaten raus?

Gibt es einen Unterschied zwischen:
Mouse.CursorPos.X bzw. y
GetCursorPos(P);
?

Oder können die äquivalent gebraucht werden?

Danke für die Anregungen.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Fehlermeldung bei canvas.draw

Beitrag von theo »

Im geeigneten Event (OnMouseMove, OnMouseDown...) kommen die als Parameter mit.

Antworten