Hirdetés
- Milyen Android TV boxot vegyek?
- NVIDIA GeForce RTX 4080 /4080S / 4090 (AD103 / 102)
- Hobby elektronika
- Ennyibe fog kerülni az LG B4 tévé
- Fejhallgató erősítő és DAC topik
- Sony MILC fényképezőgépcsalád
- Minden korábbinál több LED zóna került a TCL új Mini LED tévéjébe
- Leállhatott a PlayStation VR2 gyártása
- Megérkezett az Intel asztali csúcsprocesszora
- AMD Navi Radeon™ RX 6xxx sorozat
Új hozzászólás Aktív témák
-
#95904256
törölt tag
válasz Fire/SOUL/CD #1700 üzenetére
Köszönöm.
-
Torry
addikt
Van nekem egy olyan programom, hogy reakcióidő mérés.A problémám az lenne, hogy a zöld idejét kellene randomizálni.
procedure TForm1.FormActivate(Sender: TObject);
beginLabel3.Caption:='0';
Button1.Enabled:=False;//másodpercenkénti visszaszámlálás
Timer1.Interval:=1000;
Timer1.Enabled:=True;//visszaszámlálás indulási érték
Label1.Caption:='3';
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
//ha kezdeti visszaszámlálás folyik
If StrToInt(Label1.Caption) > 0 then Label1.Caption:=IntToStr(StrToInt(Label1.Caption)-1);//label capt vizsgálat
If Label1.Caption='2' then shape1.Brush.Color:=clRed;
If Label1.Caption='1' then shape2.Brush.Color:=clyellow;
If Label1.Caption='0' then
begin
shape1.Brush.Color:=clwhite;
shape2.brush.Color:=clwhite;
shape3.Brush.Color:=clgreen;
//mérés századmásodpercben
Timer1.Interval:=10;
Button1.Enabled:=True;
Label3.Caption:=IntToStr(StrToInt(Label3.Caption)+1);
end;
end;
Tehát ottan, hogy if Label1.Caption='0' előtt kellene random idővel lassítani a visszaszámlálást.
Hogyan lehetne ezt megtenni?Előre is köszi!
-
labuwx
tag
Sziasztok!
Az lenne a kérdésem, hogy miért áll meg a delphi 2009 telepítője? Az install Aware kétszer végig megy, az ablak eltűnik és nem csinál semmit. Az a hiba jelentkezik: xp(sp3, sp2), win7(x64), vista(sp1,x64,x86), a többinél meg még nem próbáltam.
A segítséget előre is köszönöm. -
félisten
Hali!
Nem írtad hogy full-os dvd van, van csak "simán leszedett" változat. A fulldvd-n minden progi rajt van ami kell a telepítéshez. Olvasd el a HELP-et ott le vagyon írva, hogy miknek kell lenni előtelepítve.
Leggyakrabban két dolog "hiánya" miatt nem indul el a telepítő
MDAC 2.8
.Net 2.0Xp estében egyik sincs telepítve, Vista-nal(Ultimate) a NET 2.0 igen
Szóval első körben ezt a kettőt telepítsd felFire.
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
labuwx
tag
válasz Fire/SOUL/CD #1704 üzenetére
Egyik ismerősöm már ismerte a "hibát": a regionális beállításokat át kell állítani angolra és csak utánna megy rendesen a telepítés. A telepítés után kér egy kódot és egy logint, beírom azt amit e-mailban kaptam(trial), de először azt mondja, hogy hibás, utánna megint ütök egy entert, akkor nem látja hibásnak viszont azt mondja, hogy olyan kódot írjak be ami még nem volt regisztrálva.(ezt már 3db kóddal eljátszotta).
-
labuwx
tag
Sziasztok!
Egy nagyon egyszerű Lazarus-os kérdésem lenne. Van egy formon 3 elem: egy gomb, egy egyszerű szövegbeviteli mező és es box ahova kiírja a bevitt szöveget ha megnyomjuk a gombot. A gombnyomás művelete így néz ki:procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items.AddStrings(Edit1);
end;Ezzel az a gond, hogy az Edit1 nem TString típusú(az AddStringnek az kell), ez idáig nem olyan nagy dolog, csak nem tudom, hogy mivel kellene bővítenem a kódot, hogy működjön.
(Az infó tanárom a maga delphi 7-es tudásával egyből írt egy ilyen programot lazarusban, de sajnos nem emlékszem a kódra)
A segítséget előre is köszönöm. -
félisten
Hali!
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items.Add(Edit1.Text)
end;Fire.
UI: Mondjuk ennek semmi köze a Lazarus-hoz...
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
Prego
senior tag
Asszem némi felvilágosításra szoroluk paraméterátadás terén
Van egy tömböm, golobális változóként: Kepek: array of TImage;
Amikor új képet húzok be a ScrollBoxba, akkor először lementi a képet a megfelelő mappába, majd, kiüriti a tömböt (letörli az összes addigi képet), és újra kipakolja őket.
Ha a következőképpen hívom meg a törlést:
procedure TForm2.EmptyArray (T: array of TImage);
var i : Integer;
begin
for i := Low(T) to High(T) do
begin
T[i].Free;
T[i] := nil;
end;
End;
...
EmptyArray(Kepek);Akkor ugyan megjeleníti az új képeket, viszont úgy, hogy a már létező képek fölé rakja (itt ott kilóg az előző képek széle).
Ha viszont úgy hívom meg hogy:
procedure TForm2.EmptyArray;
var i : Integer;
begin
for i := Low(Kepek) to High(Kepek) do
begin
Kepek[i].Free;
Kepek[i] := nil;
end;
End;
...
EmptyArray;Akkor minden szépen végbemegy.
A baj az hogy nem csak egy képes tömböm van, és az első megoldás valamivel csinosabb lenne ...
Aki másnak vermet ás az a Stack Pointer
-
Prego
senior tag
Mármint az eljárás fejlécét vagy a meghívását?
Közben felmerült egy kis gondocska, leszedtem az európai országok zászlóit és ezeket szeretném ráhúzni a formomra. Mivel ezek nem fognak változni, ezért nem dinamikus komponensekkel kéne dolgoznom, hanem statikus TImage és CheckBox komponensekkel. Van e arra lehetőség hogy a komponenspalettáról egyszerre több komponenest rakja rá a panelra, vagy kénytelen leszek egyesével ráhuzogatni?
Aki másnak vermet ás az a Stack Pointer
-
vz12
tag
Az eljárás hívása nem változik.
Az eljárás fejbe a paraméterlistába beletettem egy "VAR" szócskát mert az most szerintem kell. Módosítani kell a deklarációban is + a kódban is.Én eddig egyszerre 1 komponenst tudtam "lehúzni a formra", de annak nincs semmi akadálya hogy ha már lent van akkor CTRL-C + CTRL-V "módszerrel" szaporítsd őket, így lehet (újrakijelölésekkel) 1-ből 2, 2-ből 4-, 4-ből 8, stb. példány. A végén meg annyi amennyi még hiányzik. Kicsit biztosan egymásra rakja őket, utána el kell húzni a helyére.
[ Szerkesztve ]
-
Yodafon
senior tag
Sziasztok
nekem olyan kérdésem lenne hogy csináltam egy tömböt ami 2 elemű és TStringGrid típusú
mikor meg akarom adni a tul. -ait akkor szépen meg is csinálja csak a scrollbars-t nem tudom eltüntetni.mezo[1].Top:=200;
mezo[1].Left:=500;
mezo[1].FixedCols:=0;
mezo[1].FixedRows:=0;
mezo[1].ColCount:=3;
mezo[1].RowCount:=3;
mezo[1].DefaultColWidth:=20;
mezo[1].DefaultRowHeight:=20;
mezo[1].Ctl3D:=false;
mezo[1].Width:=63;
mezo[1].Height:=63;
mezo[1].ScrollBars:=ssNone;az utolsó sorra azt dobja hogy
[Error] Unit1.pas(64): Undeclared identifier: 'ssNone'
most akkor mit is kéne oda rakni?
Köszi szépen.
I'm gangsta!
-
labuwx
tag
Sziasztok!
Valaki fel tudná tölteni a szűz 2009-es delphi bin/bds.exe-jét?
Előre is köszönöm. -
félisten
válasz Yodafon #1713 üzenetére
Hali!
Arra tudok gondolni, hogy egy másik unit-ban van a kódod, nem a pl Form1-t tartalmazó unit-ban.
Az a lényeg, hogy ebben a unit-ba használd a StdCtrls unit-ot, mivel ebben vannak deklarálva a Scrollbar konstansok (ssNone, ssBoth, ssVertical, ssHorizontal)
uses StdCtrls
Fire.
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
Yodafon
senior tag
Köszi szépen.
Be kellet incudolni amit adtál, csak azt nem értem hogy hogyan tud működni ha nincs beincludolva, csak mert az object inspectorban tudom állítgatni .
Mellesleg a kód a TForm1.FormCreate részben van. Úgyhogy csak 1 unitom van.[ Szerkesztve ]
I'm gangsta!
-
Yodafon
senior tag
Esetleg azt még meg tudnád mondani hogy hogyan néz ki egy ogyan fgv. ami a kiválasztott cellára lefut?
mint pl. ez:
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);csak több dimenzióban?
I'm gangsta!
-
félisten
válasz Yodafon #1718 üzenetére
Hali!
Mondjuk az a "csak több dimenzióban" nem igazán tudom mire gondolsz...
Esetleg, hogy egy tartományt (range) jelölsz ki, azaz több cellát, és azon akarsz valamilyen műveletet végezni?
Ha esetleg erre akkor így lehet példul:
procedure TForm1.StringGrid1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ShowMessage(
'A kiválasztott tartomány kezdőcellája(x,y):'+
IntToStr(StringGrid1.Selection.Left)+','+IntToStr(StringGrid1.Selection.Top)+
Char(13)+'A kiválasztott tartomány utolsó cellája(x,y):'+
IntToStr(StringGrid1.Selection.Right)+','+IntToStr(StringGrid1.Selection.Bottom)
);
end;Fire.
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
Yodafon
senior tag
válasz Fire/SOUL/CD #1719 üzenetére
Nem pont erre gondoltam.
Akkor vázolom a szitut.Deklaráltam ezt a publicban:
mezo:array[1..2] of TStringGrid;
Hozzárendeltem a formhoz őket a FormCreate -ben:
begin
for i:=1 to 2 do
begin
mezo[i]:=TStringGrid.create(form1);
mezo[i].parent:=form1;
end;Majd megadtam az egyes táblázatok tul.-ait szintén ott:
mezo[1].Top:=20;
mezo[1].Left:=50;
mezo[1].FixedCols:=0;
mezo[1].FixedRows:=0;
mezo[1].ColCount:=3;
mezo[1].RowCount:=3;
mezo[1].DefaultColWidth:=20;
mezo[1].DefaultRowHeight:=20;
mezo[1].Ctl3D:=false;
mezo[1].Width:=64;
mezo[1].Height:=64;
mezo[1].ScrollBars:=ssNone;
mezo[2].Top:=20;
mezo[2].Left:=120;
mezo[2].FixedCols:=0;
mezo[2].FixedRows:=0;
mezo[2].ColCount:=3;
mezo[2].RowCount:=3;
mezo[2].DefaultColWidth:=20;
mezo[2].DefaultRowHeight:=20;
mezo[2].Ctl3D:=false;
mezo[2].Width:=64;
mezo[2].Height:=64;
mezo[2].ScrollBars:=ssNone;Majd azt szeretném elérni hogy egy eseményt tudjak hozzárendelni egy táblázathoz:
pl. az 1. táblázat ami a tömb első eleme reagáljon vmit ha kijelölök rajta egy cellát.
ugyanezt a többire is.ha a táblá(i)m nem tömbbel deklarálom akkor simán műxik.
egyáltalán lehetséges ez?
Remélem érthető volt.
[ Szerkesztve ]
I'm gangsta!
-
vz12
tag
válasz Yodafon #1720 üzenetére
Próbáld meg valahogy így:
mezo[1].SelectCell:=Sajat_SelectCell; // paraméterek NÉLKÜL
mezo[2].SelectCell:=Sajat_SelectCell; // paraméterek NÉLKÜL
Valamint szigorúan "eredeti" paraméterlistával:
procedure TForm1.Sajat_SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);Ezt a deklarációs résszel összhangban a kódba is bele kell tenni (természetesen ott kifejtve).
Hozzáteszem hogy nem próbáltam ki, ezen a gépen nincs Delphi sem, de elvileg így kell és ez gyakorlatilag semmiben nem különbözik a "normál" esettől, annak jobb könyvekben benne kell lennie.
Ha már ilyen előrelátó módon tömbbe szervezted az objektumokat akkor azok közös adatait (itt majdnem mind az) én a ciklusban inicializáltam volna a "parent"-hez hasonlóan, tehát pl. mezo[i].Top:=20;
[ Szerkesztve ]
-
félisten
válasz Yodafon #1720 üzenetére
Hali!
vz12 leírta helyesen hogy mire kell odafigyelni.
Valamint szigorúan "eredeti" paraméterlistával:
procedure TForm1.Sajat_SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);Én annyival egészíteném ki, hogy mivel nevet is adtam az objektumoknak(stringgrid1, stringgrid2, stb) ezért van, hogy nem "akármilyen néven" hivatkozok rá(StringGrid1SelectedCell, StringGrid2SelectedCell)
Valamint a progi kilépésekor fel kell szabadítani az objektumokat.
Gyakorlatban ilyen a kód.unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure StringGrid2SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
mezo:array[1..2] of TStringGrid;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
i:Integer;
begin
for i:=1 to 2 do begin
mezo[i]:=TStringGrid.Create(Self);
mezo[i].Parent:=Form1;
mezo[i].Name:='StringGrid'+IntToStr(i);
end;
mezo[1].Top:=20;
mezo[1].Left:=50;
mezo[1].FixedCols:=0;
mezo[1].FixedRows:=0;
mezo[1].ColCount:=3;
mezo[1].RowCount:=3;
mezo[1].DefaultColWidth:=20;
mezo[1].DefaultRowHeight:=20;
mezo[1].Ctl3D:=false;
mezo[1].Width:=64;
mezo[1].Height:=64;
mezo[1].ScrollBars:=ssNone;
mezo[1].OnSelectCell:=StringGrid1SelectCell;
mezo[2].Top:=200;
mezo[2].Left:=120;
mezo[2].FixedCols:=0;
mezo[2].FixedRows:=0;
mezo[2].ColCount:=3;
mezo[2].RowCount:=3;
mezo[2].DefaultColWidth:=20;
mezo[2].DefaultRowHeight:=20;
mezo[2].Ctl3D:=false;
mezo[2].Width:=64;
mezo[2].Height:=64;
mezo[2].ScrollBars:=ssNone;
mezo[2].OnSelectCell:=StringGrid2SelectCell;
end;
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
ShowMessage('Első grid');
end;
procedure TForm1.StringGrid2SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
ShowMessage('Második grid');
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
i:Integer;
begin
for i:=1 to 2 do begin
mezo[i].Free;
end;
end;
end.Fire.
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
Yodafon
senior tag
Pont azt szeretném elkerülni hogy minden mezönek saját SelectCell-je legyen.
Hanem legyen egy mezo[i] SelectCell eljárás ahol csak a kiválasztott mező táblázat Select Cell-je fusson le. Esetleg én tudnám meghívni egy i változóval.
Amit adtatok az sajnos nem jött be:mezo[1].SelectCell:=mezoSelectCell;
Ezt /|\ a FormCreate be raktam. De valószínűbb hogy csak én vok hüle hozzá.
Bocsi ha hüleségnek tűnik csak most kezdtem el nemrég Delphizni. Előtte Pascaloztam meg C-ztem.
I'm gangsta!
-
félisten
válasz Yodafon #1723 üzenetére
Hali!
Oks, akkor figyu. Írd le légyszives, hogy mit szeretnél megvalósítani, de sima hétköznapi nyelven. pl
"Ha rákattintok a stringgrid1-re, akkor formázza le a HDD-t, ha meg a stringgrid2-re, akkor elötte kérdezze is meg, hogy leformázhatja-e...."Szívesen segítek, de most elvesztettem a fonalat pl ezért:
"Pont azt szeretném elkerülni hogy minden mezönek saját SelectCell-je legyen."
A TStringGrid objektunak nincs ilyen tulajdonsága, függvénye, procedúrája, stb
onSelectCell eseménye(event) az van, na ezt meg nem a programozó dönti el, hogy az objektummal létrejöjjön-e vagy sem. Csak azt, hogy felprogramozod vagy sem.Szóval hétköznapi nyelven írd le, hogy mit szeretnél, abból majd rájövök(remélem)
Fire.
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
Yodafon
senior tag
Na szóval:
Van 2 db StringGrid-em a formon. Ezeket bepakoltam egy tömbbe.
Eddig remélem tiszta.És pusztán arra lennék kíváncsi hogy hogy is néz ki mondjuk az 1-es indexű StringGrid SelectCell eljárása.
Én valami indexelt eljárásra gondoltam mert ugye egy tömbbe vannak a StringGridek és az eljáráshoz is meg kell adni a tömb indexét azaz hogy hanyadik StringGrid -nek a SelectCell eljárását adom meg.
Egyáltalán lehetséges ez?
I'm gangsta!
-
vz12
tag
válasz Yodafon #1723 üzenetére
Azt hiszem hogy egy kis hibát vétettem, ezt korrigálom:
mezo[1].OnSelectCell:=Sajat_SelectCell; // paraméterek NÉLKÜL
mezo[2].OnSelectCell:=Sajat_SelectCell; // paraméterek NÉLKÜLHelyesen tehát "OnSelectCell" kell ide ahogy Fire példáján is látszik, ezt tévesztettem el. Ha az értékadás jobb oldalaira azonos eljárás nevet írsz be akkor szerintem megvalósul amit szeretnél, tehát közös OnSelectCell eljárása lesz minden példánynak.
Egyébként ez is belerakható ám a ciklusba, így lesz biztosítva a legegyszerűbben a közös OnSelectCell, tehát:
mezo[i].OnSelectCell:=Sajat_SelectCell; // paraméterek NÉLKÜLA többi rész viszont változatlan, tehát a Sajat_SelectCell eljárást szigorúan a definiálandó eljárás paraméterlistájával (OnSelectCell) deklarálni és definiálni (kifejteni) kell.
procedure TForm1.Sajat_SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);Meghíváskor át kell adni a paramétereket is!
Pl. mezo[1].OnSelectCell(Sender,1,1,bValtozo);
Figyelj rá hogy a 4. paraméternek logikai változónak kell lennie a "VAR" miatt!
Ez át fog irányítódni a form Sajat_SelectCell eljárásába és továbbadja a paramétereket is. Viszont a Sajat_SelectCell-t meg kell írni !!! Tehát le kell reagálni a cella kiválasztódás eseményét, ha nem írsz bele semmit akkor ilyenkor nem fog történni semmi. Legalábbis úgy gondolom, mert ezt sem próbáltam ki.[ Szerkesztve ]
-
Yodafon
senior tag
Köszi szépen de már megoldódott.
Én is ezen a nyomon indultam el, és ez jött ki belőle:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, OleServer, ExcelXP, StdCtrls;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
procedure FormCreate(Sender: TObject);
procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure mezoSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure mezoDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
private
{ Private declarations }
public
k:string[2];
kord:record
osz,sor:integer;
end;
mezo:array[1..9] of TStringGrid;
{ Public declarations }
end;
var
Form1: TForm1;
j:integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
for i:=1 to 9 do
begin
mezo[i]:=TStringGrid.create(form1);
mezo[i].parent:=form1;
end;
mezo[1].Top:=20;
mezo[1].Left:=50;
mezo[1].FixedCols:=0;
mezo[1].FixedRows:=0;
mezo[1].ColCount:=3;
mezo[1].RowCount:=3;
mezo[1].DefaultColWidth:=20;
mezo[1].DefaultRowHeight:=20;
mezo[1].Ctl3D:=false;
mezo[1].Width:=64;
mezo[1].Height:=64;
mezo[1].ScrollBars:=ssNone;
mezo[1].tag:=1;
mezo[2].Top:=20;
mezo[2].Left:=120;
mezo[2].FixedCols:=0;
mezo[2].FixedRows:=0;
mezo[2].ColCount:=3;
mezo[2].RowCount:=3;
mezo[2].DefaultColWidth:=20;
mezo[2].DefaultRowHeight:=20;
mezo[2].Ctl3D:=false;
mezo[2].Width:=64;
mezo[2].Height:=64;
mezo[2].ScrollBars:=ssNone;
mezo[2].Tag:=2;
mezo[3].Top:=20;
mezo[3].Left:=190;
mezo[3].FixedCols:=0;
mezo[3].FixedRows:=0;
mezo[3].ColCount:=3;
mezo[3].RowCount:=3;
mezo[3].DefaultColWidth:=20;
mezo[3].DefaultRowHeight:=20;
mezo[3].Ctl3D:=false;
mezo[3].Width:=64;
mezo[3].Height:=64;
mezo[3].ScrollBars:=ssNone;
mezo[3].Tag:=3;
mezo[4].Top:=90;
mezo[4].Left:=50;
mezo[4].FixedCols:=0;
mezo[4].FixedRows:=0;
mezo[4].ColCount:=3;
mezo[4].RowCount:=3;
mezo[4].DefaultColWidth:=20;
mezo[4].DefaultRowHeight:=20;
mezo[4].Ctl3D:=false;
mezo[4].Width:=64;
mezo[4].Height:=64;
mezo[4].ScrollBars:=ssNone;
mezo[4].tag:=4;
mezo[5].Top:=90;
mezo[5].Left:=120;
mezo[5].FixedCols:=0;
mezo[5].FixedRows:=0;
mezo[5].ColCount:=3;
mezo[5].RowCount:=3;
mezo[5].DefaultColWidth:=20;
mezo[5].DefaultRowHeight:=20;
mezo[5].Ctl3D:=false;
mezo[5].Width:=64;
mezo[5].Height:=64;
mezo[5].ScrollBars:=ssNone;
mezo[5].Tag:=5;
mezo[6].Top:=90;
mezo[6].Left:=190;
mezo[6].FixedCols:=0;
mezo[6].FixedRows:=0;
mezo[6].ColCount:=3;
mezo[6].RowCount:=3;
mezo[6].DefaultColWidth:=20;
mezo[6].DefaultRowHeight:=20;
mezo[6].Ctl3D:=false;
mezo[6].Width:=64;
mezo[6].Height:=64;
mezo[6].ScrollBars:=ssNone;
mezo[6].Tag:=6;
mezo[7].Top:=160;
mezo[7].Left:=50;
mezo[7].FixedCols:=0;
mezo[7].FixedRows:=0;
mezo[7].ColCount:=3;
mezo[7].RowCount:=3;
mezo[7].DefaultColWidth:=20;
mezo[7].DefaultRowHeight:=20;
mezo[7].Ctl3D:=false;
mezo[7].Width:=64;
mezo[7].Height:=64;
mezo[7].ScrollBars:=ssNone;
mezo[7].Tag:=7;
mezo[8].Top:=160;
mezo[8].Left:=120;
mezo[8].FixedCols:=0;
mezo[8].FixedRows:=0;
mezo[8].ColCount:=3;
mezo[8].RowCount:=3;
mezo[8].DefaultColWidth:=20;
mezo[8].DefaultRowHeight:=20;
mezo[8].Ctl3D:=false;
mezo[8].Width:=64;
mezo[8].Height:=64;
mezo[8].ScrollBars:=ssNone;
mezo[8].tag:=8;
mezo[9].Top:=160;
mezo[9].Left:=190;
mezo[9].FixedCols:=0;
mezo[9].FixedRows:=0;
mezo[9].ColCount:=3;
mezo[9].RowCount:=3;
mezo[9].DefaultColWidth:=20;
mezo[9].DefaultRowHeight:=20;
mezo[9].Ctl3D:=false;
mezo[9].Width:=64;
mezo[9].Height:=64;
mezo[9].ScrollBars:=ssNone;
mezo[9].tag:=9;
for i:=0 to 10 do
StringGrid1.Cells[i,0]:=inttostr(i+1);
mezo[1].ONSelectCell:=mezoSelectCell;
mezo[2].ONSelectCell:=mezoSelectCell;
mezo[3].ONSelectCell:=mezoSelectCell;
mezo[4].ONSelectCell:=mezoSelectCell;
mezo[5].ONSelectCell:=mezoSelectCell;
mezo[6].ONSelectCell:=mezoSelectCell;
mezo[7].ONSelectCell:=mezoSelectCell;
mezo[8].ONSelectCell:=mezoSelectCell;
mezo[9].ONSelectCell:=mezoSelectCell;
mezo[1].ONDrawCell:=mezoDrawCell;
mezo[2].ONDrawCell:=mezoDrawCell;
mezo[3].ONDrawCell:=mezoDrawCell;
mezo[4].ONDrawCell:=mezoDrawCell;
mezo[5].ONDrawCell:=mezoDrawCell;
mezo[6].ONDrawCell:=mezoDrawCell;
mezo[7].ONDrawCell:=mezoDrawCell;
mezo[8].ONDrawCell:=mezoDrawCell;
mezo[9].ONDrawCell:=mezoDrawCell;
StringGrid1.OnDrawCell:=mezoDrawCell;
end;
procedure TForm1.mezoSelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
StringGrid1.Visible:=true;
kord.osz:=ACol;
kord.sor:=Arow;
case (Sender as TStringGrid).Tag of
1:begin j:=1;mezo[1].Cells[kord.osz,kord.sor]:=k; end;
2:begin j:=2;mezo[2].Cells[kord.osz,kord.sor]:=k; end;
3:begin j:=3;mezo[3].Cells[kord.osz,kord.sor]:=k; end;
4:begin j:=4;mezo[4].Cells[kord.osz,kord.sor]:=k; end;
5:begin j:=5;mezo[5].Cells[kord.osz,kord.sor]:=k; end;
6:begin j:=6;mezo[6].Cells[kord.osz,kord.sor]:=k; end;
7:begin j:=7;mezo[7].Cells[kord.osz,kord.sor]:=k; end;
8:begin j:=8;mezo[8].Cells[kord.osz,kord.sor]:=k; end;
9:begin j:=9;mezo[9].Cells[kord.osz,kord.sor]:=k; end;
end;
end;
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
mezo[j].Cells[kord.osz,kord.sor]:=StringGrid1.Cells[ACol,Arow];
StringGrid1.Visible:=false;
end;
procedure TForm1.mezoDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
with (Sender as TStringGrid).Canvas do
begin
Font.Color := clBlack;
{ if the cell is selected, or focused then we use the highlight color for the cell }
if (gdSelected in State) or (gdFocused in State) then
brush.Color := clwhite
{ if the cell is FIXED then we just use the color of the face of a button }
else if (gdFixed in State) then
brush.Color := clwhite
{ else it is just the window color - or any other color you want }
else
Brush.Color := clwhite;
FillRect(Rect);
if (gdSelected in State) or (gdFocused in State) then
Font.Color := clBlack;
{ Draw the text in the cell - you could draw anything in there }
TextRect(Rect, Rect.Left+2, Rect.Top+2, (Sender as TStringGrid).Cells[ACol, ARow]);
end;
end;
end.Ez annyit csinál hogy 9 db 3x3 -as cellát készít és ha az egyik cellába belekattintok akkor felugrik egy másik mező, ahol ki lehet választani a bele kerülő számot. Igazából Sudokut akarok csinálni anyámnak mert most nagyon rákattant.
De azért köszi szépen mindkettőtöknek, hogy segítettetek ilyen amatőrnek mint én.
I'm gangsta!
-
vz12
tag
válasz Yodafon #1727 üzenetére
Örülök hogy sikerült megoldani, végülis rájöttél hogy hol a hiba.
Nekem csak ez a rengeteg egyedi értékadó utasítás "bántja" a szememet, ciklusban szebb volna, de persze így is működik ...Sudokut már én is csináltam Delphi-ben de én más úton jártam, semmi szükségem nem volt gridre.
-
labuwx
tag
Sziasztok!
Azt szeretném kérdezni, hogy hogyan lehet egy számot egész kitevős hatványára emelni? -
labuwx
tag
duplapost...
[ Szerkesztve ]
-
labuwx
tag
Még az érdekelne, hogy több ezer számjegyű egész számok kezelése megoldható-e?
-
Gyuri16
senior tag
ehhez kell keszitened egy sajat osztalyt, ami kezelni tudja a nagy szamokat. ilyet tobbnyire ugy szokas, hogy egy (nagy) tomb integert hasznalsz a szamod elraktarozasara. ahhoz hogy igy mukodjon termeszetesen meg kell irnod az aritmetikat is az osztalyodhoz. egy kis szerencsevel talalsz a neten, es akkor nem kell sajatot irni
ezt a dolgot az okosok ugy hivjak, hogy arbitrary length arithmeticNem vagyok egoista, csak uborkagyalu!
-
Prego
senior tag
Most tartok ott hogy nem tudom mi a kérdésem, inkább vázolom a tényeket:
készülődik a szakdoga progim, MS Access adatbázist használ, mellete még vannak képek és Word, Excel doksik, amiket generál.
Fősulin gyönyörűen megvitatjuk a jogosultságkezelés minden csínját - bínját, de gyakorlati megvalósítás nem igazán került még napvilágra.
Jelen pillanatban az adatok egy megosztott meghajtón vannak a 3 számítógép egyikén a hálózatban, ADO komponensekkel dolgozom. Szóval kéne valami jogosultságkezelés hogy ki törölhet, ki írhatja az adatokat, illetve ki csak olvashatja. Ezen kívül valami titkosítás sem ártana, mivel bárki becsatlakozik a hálózatba (nem nehéz), megnyithatja az adatbázist egy MS Accessel.
Milyen úton induljak el?Aki másnak vermet ás az a Stack Pointer
-
labuwx
tag
Sziasztok!
Mióta frissítettem a 2009-es Delphi-t Up4-re ezt a hibaüzenetet kapom indításkor:
"acces violation at address 5000CC82 in module 'rtl120.bpl'. Write of address 2067B5D4"
Hiába kattintok az OK-re nem csinál semmit, ha X-et nyomok az üzi ablakán akkor újból előugrik. -
labuwx
tag
Valaki legyen szíves segíteni a grafikában. Szeretnék írni egy REVERSI játékot, ahoz kellene egy 8x8-s táblázat a táblázat minden rublikájában lenne egy korong(piros, kék, rejtett)
és minden korongnak lenne egy event-je.
Sajnos a grafikát egyáltalán nem ismerem. Nekem elég az is ha belinkeltek egy részletes magyar leírást(sajnos én ilyet nem találtam). -
Gyuri16
senior tag
szerintem legegyszerubb ugy, ha mindent egy TImage-be rajzolsz. Megcsinalod a negyzethalot, es aztan onMouseDown event-et figyeled (koordinatakbol konnyen ki lehet szamolni melyik mezore kattintottal).
ezek jol johetnek: image.canvas.line, image.canvas.draw, image.canvas.ellipse...[ Szerkesztve ]
Nem vagyok egoista, csak uborkagyalu!
-
vz12
tag
Canvas.Line tényleg nincs.
Canvas.MoveTo(x1,y1) odateszi (x1,y1)-ba a kezdőpontot.
Canvas.LineTo(x2,y2) innen húz egy vonalat (x2,y2)-be előzetesen beállított stílussal (szín, vonalvastagság, stb.), ezután a kezdőpont már itt lesz, a következő LineTo már innen fog indulni ha el nem viszed innen. Szerintem érdemes saját Line(x1,y1,x2,y2) eljárást írni a fenti két eljárás felhasználásával, esetleg a színt és vonalvastagságot is érdemes betenni a paraméterekbe majd felhasználni, úgy "szebb", általánosabb eljárást kapsz.
Egyébként egy MxN-es canvas koordinátái (0,0) és (M-1,N-1) között vannak, és a LineTo-nak tapasztalataim szerint (Delphi 5.0-ig) van egy olyan tulajdonsága hogy a VÉGpont utolsó pixelét nem szereti kitenni, lespórolja.A "canvas" tulajdonságait és eljárásait kell nézegetni a help-ben, van téglalap és ellipszis (kör) rajzolási lehetőség is, stb.
Szerk.: Úgy látom hogy beelőztek, de mindegy.
[ Szerkesztve ]
-
labuwx
tag
Köszönöm mindkettőtöknek!
Most viszont olyan gondom van, hogy nem hajlandó a TImage legalsó ill a jobbszélső sorába vonalat húzni, sőt van ilyen parancs akkor a többi vonal mind "szürke" lesz.
489x489-es TImage -
Gyuri16
senior tag
-
vz12
tag
Ez érdekes, ilyet én a D3-ban és D5-ben nem tapasztaltam. Ott simán engedte a vonalat túlhúzni a képen, persze a kívül eső részek nem látszottak. Kellett is ez a lehetőség mert pl. a vonal(0,488,488,488); nem húzná végig a vonalat, a (0,488) még rendben van, de a (488,488) kimaradna, a vonal 1 pixellel hamarabb érne véget, ezért a vonal(0,488,489,488); parancsot kellene alkalmazni a teljes vonal kirajzolásához, ez ugye elvileg 1 pixellel kilógna, de az nem látszik, viszont a (488,488) is jó lenne.
Ilyen új Delphi-vel nincs tapasztalatom, de hátha másnak van. A helyedben addig is bátran kísérletezgetnék, gyűjteném a tapasztalatokat, kis kreativitással gyorsan rá lehet jönni sok mindenre és lehet fejlődni önállóan.
Egy észrevétel: A "vonal" eljárást én nem a "RajzClick" eljárás belső eljárásaként definiálnám.
-
labuwx
tag
-
vz12
tag
Pl.
canvas.Pen.color:=clRed;
canvas.Brush.color:=clBlue;
canvas.Ellipse(5,5,100,100);Ez rajzolni fog egy Piros határvonalú, belül Kék "korongot". RGB is használható.
A vonal (Pen) és kitöltő (Brush) színeket mindig a rajzoló tevékenység ELŐTT kell beállítani, egy adott canvas-on csak 1 Pen és 1 Brush van, ezt a rajzoló utasítások közösen használják. Tehát pl. most egy vonal(50,50,80,80) utasítás Piros vonalat húzna, mert a Pen színe arra lett állítva, itt ugye nincs kitöltés tehát a Brush érdektelen. Szerintem olvasgasd a Help-et, a Delphi-nek elég jó van.
Új hozzászólás Aktív témák
- Samsung Galaxy Watch6 Classic - tekerd!
- Kamionok, fuvarozás, logisztika topik
- Redmi Note 13 Pro+ - a fejlődés íve
- A fociról könnyedén, egy baráti társaságban
- BestBuy topik
- Autós topik
- Vírusirtó topic
- Windows 11
- Kerékpárosok, bringások ide!
- Zsákbamacskaként árulják a lezárt Amazon-csomagokat
- További aktív témák...
- Asus rog strix b650e-f gaming wifi+Samsung 990 pro 1tb+g.skill trident z5 Neo 6000mhz cl30 2x16gb
- Apple Watch Series 8 45mm GPS + Cell
- iPhone 13 Mini 128 GB Midnight, Független! Csak kipróbált! 2025.03.12-ig Apple garancia!
- Precision 3520 15.6" FHD IPS i5-7300HQ M620 16GB 512GB magyar vbill., gar
- Logitech MX Keys Mini + gyári tartozékokkal és dobozával