Köszönöm.
Gyorskeresés
Legfrissebb anyagok
- Bemutató Spyra: akkus, nagynyomású, automata vízipuska
- Bemutató Route 66 Chicagotól Los Angelesig 2. rész
- Helyszíni riport Alfa Giulia Q-val a Balaton Park Circiut-en
- Bemutató A használt VGA piac kincsei - Július I
- Bemutató Bakancslista: Route 66 Chicagotól Los Angelesig
Általános témák
LOGOUT.hu témák
- [Re:] [D1Rect:] Nagy "hülyétkapokazapróktól" topik
- [Re:] [antikomcsi:] Való Világ: A piszkos 12 - VV12 - Való Világ 12
- [Re:] Elektromos rásegítésű kerékpárok
- [Re:] [gban:] Ingyen kellene, de tegnapra
- [Re:] [Luck Dragon:] Asszociációs játék. :)
- [Re:] [sziku69:] Szólánc.
- [Re:] [Kolondrum:] Éves rezsi
- [Re:] [plevips:] Építkezünk 3. rész (2024)
- [Re:] [Tüzi:] Geek-hatarozo
- [Re:] PLEX: multimédia az egész lakásban
Szakmai témák
PROHARDVER! témák
Mobilarena témák
IT café témák
GAMEPOD.hu témák
Hozzászólások
#95904256
törölt tag
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);
begin
Label3.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.
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.0
Xp 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 fel
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)
labuwx
tag
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.
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
vz12
tag
Ha még él a probléma akkor próbáld meg így:
procedure TForm2.EmptyArray (var T: array of TImage);
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!
Prego
senior tag
Köszi a válaszokat. A var szócskát csak most vettem észre
Aki másnak vermet ás az a Stack Pointer
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.
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!
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
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
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 ]
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!
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
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ÜL
Helyesen 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ÜL
A 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
Ö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?
Gyuri16
senior tag
Math unit -> Power fuggveny
Nem vagyok egoista, csak uborkagyalu!
labuwx
tag
Még az érdekelne, hogy több ezer számjegyű egész számok kezelése megoldható-e?
Keem1
addikt
Valószínű, csak szövegesen tudod. Csak kérdés, milyen módon akarod kezelni
Legjobb tudomásom szerint a legnagyobb változóba pakolható szám nagyjából ez:
Int64 -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
[ Szerkesztve ]
labuwx
tag
Az sajnos nekem nagyon nem elég, mert a 2^62 már sok neki. A progi egy mersenne prím kereső lenne. A mersenne prím egy olyan prím ami felírható 2^p-1 alakban.
Keem1
addikt
Akkor sajnos ebben nem tudok Neked segíteni .
De remélem, lesz aki igen...
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 arithmetic
Nem 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!
labuwx
tag
Köszi!
Az én Delphi-mben nincs canvas.line csak canvas.lineto ami a bal felső sarokból húz egy vonalat a megadott koordinátákra.
Gyuri16
senior tag
moveto viszont kellene hogy legyen (odateszi a kurzort, de nem huz csikot), ezzel a kettovel mar barmilyen csikot tudsz huzni
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
szerintem meghuzta a vonalakat, csak nem latszik, mert a kornyezetnek is ugyanolyan szine van. probalj meg mas szint allitani: image.canvas.pen.color (konstansok pl clRed, clBlue ...). allithatsz neki vastagsagot is: pen.width
Nem vagyok egoista, csak uborkagyalu!
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
Ok, én próbálkoztam folyamatosan. Még utoljára azt szeretném kérdezni, hogy mivel lehet kitölteni egy kört, hogy korong legyen belőle?
Sok helyen olvastam, hogy a 2009-es delphi elég bugos és az updatek sok hibát orvosolnak, de nekem update után sajnos nem indul...
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.
labuwx
tag
Sajnos a help se működik: "Cannot find file %s".
Igen, próbáltam újrarakni, de nem javult meg...