Keresés

Részletes keresés

XtraP Creative Commons License 5 napja 0 1 9031

Nem lehet fogalmad arról, hogy közben esetleg ezer dolgot megoldott, csak azokkal természetesen nem jött ide.

Nekem is mindegy, hogy mit csinál, de teljesen egyoldalú információk birtokában nem szerencsés tanácsot adni.

Előzmény: Fidel Nasztro (9030)
Fidel Nasztro Creative Commons License 6 napja -1 0 9030

Ebben a topikban 32 hsz-ből úgy legalább húsz az több mint évi 2-3. Ráadásul a kérdések jellege is azt mondatja velem, hogy akadna számára olyan terület, ahol a képességei jobban kamatoznának. Nekem egyébként tök mindegy, hogy mit csinál, én csak tanácsot adtam neki.

 

 

Előzmény: XtraP (9029)
XtraP Creative Commons License 6 napja 0 1 9029

Évente 2-3 probléma nálad már ok az elengedésre ...? Remélem, nem sokan követnek.

Előzmény: Fidel Nasztro (9027)
egy hazafi Creative Commons License 6 napja 0 2 9028

Időközben már megoldottam - igaz, segítséggel. :-)

Előzmény: Fidel Nasztro (9027)
Fidel Nasztro Creative Commons License 6 napja -1 0 9027

Te évek óta mindig csak vergődsz.

Ez nem a te bizniszed. Sztem engedd el.

Előzmény: egy hazafi (9026)
egy hazafi Creative Commons License 2024.05.04 0 0 9026

Sziasztok!

Sehogysem boldogulok a következő probléma megoldásával: adott egy ScrollBox-on egy TImage kép, aminek a tartalma és mérete változhat és a ScrollBox gyermekobjektuma. Erre a képre szeretnék kék rácsvonalakat rajzolni gombnyomásra, és szintén arra eltüntetni. De a kirajzolásnál mindig látszódik az erre a célra létrehozott újabb TImage alatt egy fekete téglalap (gondolom a vászna?). Hogyan lehetne csak a vonalakat megjeleníteni a képen?

Ezzel a kóddal próbálkoztam eddig:

 

procedure TForm1.tvracsrajzolas(Sender: TObject);
var vszvonalhely,fugvonalhely: word;
begin
fugvonalhely:=csempeszel;
vszvonalhely:=csempemag;
//with tvracskep do // Ha ezek ki vannak kommentelve, a rács látszódik,
//begin // de nem a tvracskep, hanem a Form1 koordinátáiban és nem is tudom eltüntetni.
canvas.pen.color:=clBlue;
while fugvonalhely<terepVaszon.width do
begin
canvas.line(fugvonalhely,0,fugvonalhely,terepVaszon.height);
inc(fugvonalhely,csempeszel);
end;
while vszvonalhely<terepVaszon.height do
begin
canvas.line(0,vszvonalhely,terepVaszon.width,vszvonalhely);
inc(vszvonalhely,csempemag);
end;
//end;
end;

 

procedure TForm1.racsmutatoGombMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if tvracsmutat=true then
begin
tvracsmutat:=false;
if vantvracs=true then
begin
FreeAndNil(tvracskep);
vantvracs:=false;
end;
end
else
begin
tvracsmutat:=true;
if vantvracs=false then
begin
tvracskep:=TImage.Create(self);
tvracskep.Parent:=tvScrBox;
tvracskep.Left:=0;
tvracskep.Top:=0;
tvracskep.width:=terepVaszon.width;
tvracskep.height:=terepVaszon.Height;
//tvracskep.OnPaint:=@tvracsrajzolas;
//tvracskep.Invalidate;
tvracsrajzolas(tvracskep);
end;
vantvracs:=true;
end;
end;

XNC Creative Commons License 2023.12.24 0 0 9025

Persze ha csak szintaktikai a hiba, akkor nem biztos hogy megéri a váltás.

Előzmény: XNC (9024)
XNC Creative Commons License 2023.12.24 0 0 9024

A kérdezőnek magának kell eldöntenie, hogy mennyire mazochista.....   :)

Előzmény: XtraP (9023)
XtraP Creative Commons License 2023.12.24 0 0 9023

Érdekes lenne, ha ilyesmik miatt 20-30 sornyi próbálkozásonként új nyelvvel próbálkozna az ember ... főleg, hogy kezdetben soronként több hiba jön szembe.

Előzmény: XNC (9020)
XtraP Creative Commons License 2023.12.24 0 0 9022

((Persze arra sincs garancia, hogy a Delphi és a Freepascal ebben megegyezik - de nagyon sokban igen.))

Előzmény: XtraP (9021)
XtraP Creative Commons License 2023.12.24 0 0 9021

https://wiki.freepascal.org/Grids_Reference_Page#property_Columns

 

"Additionally, when using custom columns, the grids do not allow direct modification of grids.colcount; adding or removing columns should be done using the columns property. The explanation is that there is an inconsistency on gradually removing custom columns using ColCount, when ColCount reaches FixedCols, the grid has no more custom columns. If we now increase ColCount, the new column will not be a custom column but a normal column."

 

Úgy emlékszem (túl az idézett mondatokon), hogy oszlopokat egyesével lehet hozzáadni. Az oszlopdarabszám átírása ugyanis nem foglalja le az új oszlopok számára a memóriát. De nem vagyok ebben biztos; mindenesetre próbálkozz a fentebb javasolt columns metódussal.

Előzmény: Endre Szalay (9019)
XNC Creative Commons License 2023.12.23 0 0 9020

Ezt ott kéne megkérdezned, ahol tanulod.

Ha meg csak úgy magadtól, akkor irány 1 másik nyelv!  :)

Előzmény: Endre Szalay (9019)
Endre Szalay Creative Commons License 2023.12.23 0 0 9019

Sajnos az általad megadott URH nálam nem működik, kérlek mondd el szóban

mi a probléma. (kezdő programozó vagyok!)

 

unit Unit1;

 

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids,Menus;

type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
strinURHm1: TForm1;

s1:string;
s2,penz:string;
szoveg,kod:string;
i,j:integer;
be:textfile;
sokpenz:integer;
Stringgrid1:Tstringgrid;

implementation
//uses unit2;
{$R *.dfm}
begin

s2:='C:/users/Kefi/Documents/Pascal/Rezsi20/trezor.txt';
assign (be,s2);
reset(be);
readln(be,sokpenz);
str(sokpenz,s1);
showmessage(s1);
showmessage(s1+' abcdef!');
stringgrid1.Colcount:=3; itt akad ki
Stringgrid1.Width:=350;

NevemTeve Creative Commons License 2023.12.22 0 0 9018
Előzmény: Endre Szalay (9017)
Endre Szalay Creative Commons License 2023.12.22 0 0 9017

És akkor mi van? Pontosan látom, hogy melyik utasításnál akad ki a programom, csak nem tudom, miért.

NevemTeve Creative Commons License 2023.12.22 0 1 9016

Debuggolni. Magadtól ez nem jutott eszedbe?

Előzmény: Endre Szalay (9015)
Endre Szalay Creative Commons License 2023.12.22 0 0 9015

Helló mindenki!

Segítsetek már: Delphi 7.0-m van Win 10-es mellett! Delphi programomban Stringgridet szeretnék használni,de amikor a stringgrid értékadásához ér a program, Access violation hibaüzenettel leáll.

Mit lehet csinálni?

Szalay Endre

Spe-nót Creative Commons License 2023.09.02 -1 0 9014

Spe-nót Creative Commons License 2023.08.30 -1 1 9013

Köszönöm, hasznos volt.

Belenéztem, átfutottam. Arra pont jó volt, hogy igazolást adjon az én általam megalkotott játék-szerkezetről.

 

Nagyon jó kis oldal egyébként az az archívum.

Találtam is benne mást, ami hasznos. 

 

https://colorcomputerarchive.com/repo/Documents/Books/Write%20Your%20Own%20Adventure%20Programs%20(1983)(Usborne).pdf

 

Előzmény: NevemTeve (9011)
XNC Creative Commons License 2023.08.30 0 2 9012

Jó nagy fába vágtad a fejszédet.....

Előzmény: Spe-nót (9010)
NevemTeve Creative Commons License 2023.08.30 0 1 9011
Előzmény: Spe-nót (9010)
Spe-nót Creative Commons License 2023.08.30 -1 0 9010

Egy szöveges, történetmesélős kalandjátékot szeretnék elkövetni.

 

Ehhez milyen adatszerkezeteket ajánlanátok?

Emellett, milyen programszerkezetet ajánlanátok?

 

Válaszaitokat köszönöm.

 

lxt Creative Commons License 2023.08.25 0 1 9009

Egy if is sok
Result:= reláció eredménye

(Egy efféle tömbnek térképnek akkor volna értelme, ha regisztrálni akarnánk a vízcsepp által megtett útvonalat; úgy mindig lenne egy, az aktuálisan érintett vízcsempét azonosító, összehasonlítható értékünk amiként a vízcsepp koordinátái is, valós időben adottak.)

A pontosság érdekében nem csak a vízcsempék, hanem az azokat határoló 'fugák' méretei (...) sem mellékesek - amely adatok tárolására (még ha azok változnának is a folyamat során) pont megfelel egy/több, mindenkor érvényes tartalmú mátrix.
Továbbá: definiálni kell, hogy az 1 pixelnél terjedelmesebb vízcsepp melyik képpontja adja annak érvényes pozícióját; mi történjen akkor, ha e pozíció két vagy több vízcsempe között húzódó 'fuga' területére esik feltéve, hogy a program nem zárja ki azt eleve, mondjuk a vízcsepp következő pozíciójának színkódját vizsgálva… ami ötletet adhat a szemmel nem érzékelhető, vízcsempénként eltérő színkódok alkalmazására; már ugye, a gyorsabb azonosítás érdekében ha már mátrixok.:-)

Előzmény: egy hazafi (9003)
kisspetya Creative Commons License 2023.08.24 0 0 9008

Persze. A byte meg word ugye nem is lehet negatív, meg könnyen túlcsordulhatnak.
Ezer éve nem Delphizek, már nem emlékszem a compiler pontosan hogy csinálja, de én inkább nem szórakoznék ilyenekkel.


Áruld már el, hogy az a két if minek?

Elegánsan ez a kód kb. ennyi lenne:

 

function utkvizzel(xh: integer; yh: integer): boolean;
begin
   if mostterkep[yh div vizmag, xh div vizszel]=1 then Result:=true
   else Result:=false;
end;

 

Ha különböző méreteket akarsz, akkor aztán teljesen más logika kell.
Az már haladó szint. :)

Előzmény: egy hazafi (9007)
egy hazafi Creative Commons License 2023.08.24 0 0 9007

Akkor a típusátalakítások (ha jól tudom, ezt nevezik cast-olásnak) is okozhatnak galibát a kapott értékben?

Egyébként most találtam egy hellyel-közzel jól működő megoldást a problémámra:

 

function utkvizzel(xh: integer; yh: integer): boolean;
var ktxh,ktyh: integer;
begin
if xh<vizszel then ktxh:=0 else
begin
ktxh:=xh div vizszel;
end;
if yh<vizmag then ktyh:=0 else
begin
ktyh:=yh div vizmag;
end;
if mostterkep[ktyh,ktxh]=1 then utkvizzel:=true else utkvizzel:=false;
end;

 

amelyben a vizszel és vizmag a vízcsempe szélessége és magassága. Persze ez bizonyára nem lesz jó azokban az esetekben, amikor különböző méretű csempék vannak a pályán, de most még ez megfelel nekem.

Előzmény: kisspetya (9006)
kisspetya Creative Commons License 2023.08.24 0 1 9006

Jól megbonyolítottál ebben mindent.
Nem kell bele semmi if.

 

Ha xh és yh tényleg 0,0-tól indul, akkor ennyi az egész:
ktxh:=xh div (palyakep.width div tkszel);
ktyh:=yh div (palyakep.height div tkmag);

 

Ha nem jó, akkor máshol van a hiba.

 

Pár tanács:

Az nem egészséges, hogy ennyire kevered a típusokat. Integert div-elsz byte-al, aztán ezt word-be rakod. Nagy meglepetések érhetnek.

Egészhez neked jó az Integer, valóshoz meg a Double.

 

A cellaszélességet és magasságot eleve az elején már változóban kellene tárolni és nem minden pixelmozgásnál újraszámolgatni.

Előzmény: egy hazafi (9005)
egy hazafi Creative Commons License 2023.08.24 0 0 9005

Igen, kiíratom, amit lehet.

Van ugyan egy oldalpanel, ami 128 képpont széles, de ezt sem hozzáadva, sem kivonva nem segít, ráadásul függőlegesen nincs semmi, tehát az az irányú rendellenes eltolódásra ez nem magyarázat.

Egyébként a forráskód letölthető innen: https://prog.hu/tarsalgo/215290/gond-koordinatak-atvaltasaval-kis-es-nagyterkep-kozott?no=5&op=download

Előzmény: kisspetya (9004)
kisspetya Creative Commons License 2023.08.24 0 0 9004

Debugolj mindent.

 

Ugyanazt a koordináta-rendszert használod mindenhol?
Pl. ha xh=0, yh=0 a képernyő bal felső sarka, a térképed bal felső sarka is abban a pozícióban van?
Ha nem, akkor egyiket transzformálnod kell a másikba. Az osztás ilyenkor kevés.

Előzmény: egy hazafi (9003)
egy hazafi Creative Commons License 2023.08.24 0 0 9003

Kedves szakértők!

 

Szeretném tőletek megtudni, hogy ha van egy ilyen alakú térképem:

var terkep: array [0..8,0..8] of byte=(
(0,0,0,1,0,0,0,0,0),
(0,2,0,1,0,0,3,0,3),
(0,0,1,1,1,0,0,0,0),
(0,3,1,0,1,0,3,0,0),
(0,0,1,0,1,0,0,3,0),
(0,0,1,1,1,0,3,0,0),
(0,3,0,0,0,3,0,3,0),
(0,0,0,1,0,0,0,0,0),
(0,0,0,1,0,0,0,0,0)
);

amelyen az 1-es szám a mellékelt képen látható akadályt (vízcsempe) mutatja, akkor a rendes, ennek alapján létrehozott nagy képen mozgó objektum aktuális koordinátái alapján hogyan tudható meg, hogy az éppen az 1-es csempén van-e vagy sem?

Most ezzel a kóddarabbal számítom az elhelyezkedést a terkep-en (a mostterkep-be betöltve), de ez nem jó, mert csak nagyjából adja a helyes koordinátát, és részben belemegy a vízcsempékbe, mintha azok jobbra és lefelé el lennének tolva egy kicsit:

function utkvizzel(xh: integer; yh: integer): boolean;
var ktxh,ktyh: integer;
begin
if xh<(palyakep.width / tkszel) then ktxh:=0 else
begin
ktxh:=round(xh / (palyakep.width / tkszel));
//if ktxh>=1 then ktxh:=ktxh-1;
end;
if yh<(palyakep.height / tkmag) then ktyh:=0 else
begin
ktyh:=round(yh / (palyakep.height / tkmag));
//if ktyh>=1 then ktyh:=ktyh-1;
end;
if mostterkep[ktyh,ktxh]=1 then utkvizzel:=true else utkvizzel:=false;
end;

Próbálkoztam a round-on kívül ceil-lel, floor-ral, trunc-cal, de csak rontottam a helyzeten. A round a legpontosabb ezek közül, de még ez sem eléggé.

Tehát ahol a képen látható a sárga kör, az az 1 és 2 YX koordináta kellene legyen a terkep-en (0-tól indul ugyebár). De ha azt round-dal kerekítem, akkor 2-2 lesz az Y koord és X koord, amint a legfelső kiírás is mutatja.

Szóval nem tudom belőni a megfelelő helyet neki és már semmi ötletem sincs hozzá.

Fidel Nasztro Creative Commons License 2023.06.26 0 0 9002

"Előre is köszönöm, ha van ötletetek!"

 

Van!

 

Inkább foglalkozz valami mással.
Int 10h meg hasolók valós időben, DOS alatt érhetők el, mivel a BIOS részei ezek a rutinok.
BIOS meg védett módban egy nem létező fogalom. A win/linux az ugyanis védett módú opre.

A te bajodra egy pointer-es, scanline-os megvalósítás lenne az orvosság.

 

 

 

Előzmény: Leonetto (8992)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!