Ĺadny brzuch
Witam Serdecznie
1. Tworzę 5 TCheckBox którym daję Nazwę " 'thebox' + IntToStr(n) " i teraz kiedy zostaną utworzone jak sprawdzić czy thebox3 jest zaznaczony?
2. Tworzę n TButton'ów
n = liczba wierszy w pliku txt
i każdy z nich ma mieć określony onclick
(pobrany z pliku. oczywiście w programie jest tablica akcji np. msgshow bedzie to ShowMessage(String) ).
Jak nadać każdemu z przycisków określony onclick?
Ad1. FindComponent()
Ad2. Nie widzę problemu. Tworzysz w pętli te n komponentów. W pętli sprawdzasz co ma być podpięte w onclick i podpinasz właściwą rzecz.
np. if cosZCzegoSprawdzasz = 'msg' then stworzonyButton.onclick:= ShowMsgClick;
gdzie
procedure TForm2.ShowMsgClick(Sender: TObject); begin ShowMessage('dsadasd'); end;
Coś w ten deseń - musisz pokombinować.
Użytkownik PcSA edytował ten post 05 kwiecień 2009, 22:00
Dzięki wielkie PcSA. Jak będę miał jeszcze jakieś problemy to napisze ;)
Mam problem ze stworzeniem komponentu przy pomocy biblioteki (dll) na formie która ją importuje.
procedure dynbtn; var przycisk: TButton; begin przycisk:=TButton.Create(***); przycisk.Left:=40; przycisk.Top:=40; przycisk.Width:=100; przycisk.Height:=40; przycisk.Caption:='Buttoni'; przycisk.Parent:=***; przycisk.Visible:=True; przycisk.Name:=btn1; end;
Nie wiem co wstawić w miejsce ***
A drugi problem to: jak umieścić na TPanel'u (ówcześniej stworzonego) np. Button?
Może przekazuj do procedury dynbtn parametr, który będzie odwoływać się do Twojej formy w sensie
procedure dynbtn(Form1 f);
i w gwiazdki wstawiasz f :)
Coś takiego - już nie pamietam za dobrze Delphi.
Co do TPanel. to robisz TwojButton.Parent = TwojPanel;
Użytkownik PcSA edytował ten post 08 kwiecień 2009, 15:54
Procedura w dll'ce
procedure dynbtn(f : TForm);
var
przycisk: TButton;
begin
przycisk:=TButton.Create(f);
przycisk.Left:=40;
przycisk.Top:=40;
przycisk.Width:=100;
przycisk.Height:=40;
przycisk.Caption:='Buttoni';
przycisk.Parent:=f;
przycisk.Visible:=True;
przycisk.Name:= 'btn1';
end;
W programie procedure importuje tak:
procedure dynbtn(f : TForm); external 'bpl0.dll';
i wywołuje:
dynbtn(Form1);
I kompilator wywala mi błąd :(
co robię źle?
[edit]
First chance exception at $7C812AEB. Exception class EConvertError with message 'Cannot assign a TFont to a TFont'. Process App.exe (3220) First chance exception at $7C812AEB. Exception class EInvalidPointer with message 'Invalid pointer operation'. Process App.exe (3220) First chance exception at $7C812AEB. Exception class EAccessViolation with message 'Access violation at address 00467C4B in module 'App.exe'. Read of address 00000008'. Process App.exe (3220)
Zaobserwowałem też że jak usunę linijkę: przycisk.Parent:=f; nie wywala błędów ale button nie pojawia się
Użytkownik bajeczny edytował ten post 08 kwiecień 2009, 17:24
przerobiłem kod: ale nadal nie działa
Procedura w dll'ce
procedure dynbtn(f : TForm; p: TNotifyEvent; b: TButton; d: boolean); begin b:=TButton.Create(f); b.Left:=40; b.Top:=40; b.Width:=20; b.Height:=20; b.Caption:='Buttoni'; b.Parent:=f; b.Visible:=d; b.Name:= 'btn1'; b.onclick:=p; end;
wywołuje w programie tak :
1. --------------------------- Debugger Exception Notification --------------------------- Project App.exe raised exception class EInvalidPointer with message 'Invalid pointer operation'. --------------------------- Break Continue Help --------------------------- 2. --------------------------- Debugger Exception Notification --------------------------- Project App.exe raised exception class EAccessViolation with message 'Access violation at address 00467C4B in module 'App.exe'. Read of address 00000008'. --------------------------- Break Continue Help --------------------------- 3. --------------------------- App --------------------------- Access violation at address 00467C4B in module 'App.exe'. Read of address 00000008. --------------------------- OK --------------------------- 4. --------------------------- App --------------------------- Access violation at address 0042B753 in module 'App.exe'. Read of address 00000028. --------------------------- OK --------------------------- 5. --------------------------- Application Error --------------------------- Exception EInvalidPointer in module plugin.dll at 00003A9D. --------------------------- OK ---------------------------
Co robię znowuż źle? ;(
PS: jak robię to bezpośrednio w aplikacji wszystko działa, ale muszę wywołać do z dll'ki i wtedy już nie działa :(
Użytkownik bajeczny edytował ten post 02 maj 2009, 17:35
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
1. Tworzę 5 TCheckBox którym daję Nazwę " 'thebox' + IntToStr(n) " i teraz kiedy zostaną utworzone jak sprawdzić czy thebox3 jest zaznaczony?
2. Tworzę n TButton'ów
n = liczba wierszy w pliku txt
i każdy z nich ma mieć określony onclick
(pobrany z pliku. oczywiście w programie jest tablica akcji np. msgshow bedzie to ShowMessage(String) ).
Jak nadać każdemu z przycisków określony onclick?
Ad1. FindComponent()
Ad2. Nie widzę problemu. Tworzysz w pętli te n komponentów. W pętli sprawdzasz co ma być podpięte w onclick i podpinasz właściwą rzecz.
np. if cosZCzegoSprawdzasz = 'msg' then stworzonyButton.onclick:= ShowMsgClick;
gdzie
procedure TForm2.ShowMsgClick(Sender: TObject); begin ShowMessage('dsadasd'); end;
Coś w ten deseń - musisz pokombinować.
Użytkownik PcSA edytował ten post 05 kwiecień 2009, 22:00
Dzięki wielkie PcSA. Jak będę miał jeszcze jakieś problemy to napisze ;)
Mam problem ze stworzeniem komponentu przy pomocy biblioteki (dll) na formie która ją importuje.
procedure dynbtn; var przycisk: TButton; begin przycisk:=TButton.Create(***); przycisk.Left:=40; przycisk.Top:=40; przycisk.Width:=100; przycisk.Height:=40; przycisk.Caption:='Buttoni'; przycisk.Parent:=***; przycisk.Visible:=True; przycisk.Name:=btn1; end;
Nie wiem co wstawić w miejsce ***
A drugi problem to: jak umieścić na TPanel'u (ówcześniej stworzonego) np. Button?
Może przekazuj do procedury dynbtn parametr, który będzie odwoływać się do Twojej formy w sensie
procedure dynbtn(Form1 f);
i w gwiazdki wstawiasz f :)
Coś takiego - już nie pamietam za dobrze Delphi.
Co do TPanel. to robisz TwojButton.Parent = TwojPanel;
Użytkownik PcSA edytował ten post 08 kwiecień 2009, 15:54
Procedura w dll'ce
procedure dynbtn(f : TForm);
var
przycisk: TButton;
begin
przycisk:=TButton.Create(f);
przycisk.Left:=40;
przycisk.Top:=40;
przycisk.Width:=100;
przycisk.Height:=40;
przycisk.Caption:='Buttoni';
przycisk.Parent:=f;
przycisk.Visible:=True;
przycisk.Name:= 'btn1';
end;
W programie procedure importuje tak:
procedure dynbtn(f : TForm); external 'bpl0.dll';
i wywołuje:
dynbtn(Form1);
I kompilator wywala mi błąd :(
co robię źle?
[edit]
First chance exception at $7C812AEB. Exception class EConvertError with message 'Cannot assign a TFont to a TFont'. Process App.exe (3220) First chance exception at $7C812AEB. Exception class EInvalidPointer with message 'Invalid pointer operation'. Process App.exe (3220) First chance exception at $7C812AEB. Exception class EAccessViolation with message 'Access violation at address 00467C4B in module 'App.exe'. Read of address 00000008'. Process App.exe (3220)
Zaobserwowałem też że jak usunę linijkę: przycisk.Parent:=f; nie wywala błędów ale button nie pojawia się
Użytkownik bajeczny edytował ten post 08 kwiecień 2009, 17:24
przerobiłem kod: ale nadal nie działa
Procedura w dll'ce
procedure dynbtn(f : TForm; p: TNotifyEvent; b: TButton; d: boolean); begin b:=TButton.Create(f); b.Left:=40; b.Top:=40; b.Width:=20; b.Height:=20; b.Caption:='Buttoni'; b.Parent:=f; b.Visible:=d; b.Name:= 'btn1'; b.onclick:=p; end;
wywołuje w programie tak :
1. --------------------------- Debugger Exception Notification --------------------------- Project App.exe raised exception class EInvalidPointer with message 'Invalid pointer operation'. --------------------------- Break Continue Help --------------------------- 2. --------------------------- Debugger Exception Notification --------------------------- Project App.exe raised exception class EAccessViolation with message 'Access violation at address 00467C4B in module 'App.exe'. Read of address 00000008'. --------------------------- Break Continue Help --------------------------- 3. --------------------------- App --------------------------- Access violation at address 00467C4B in module 'App.exe'. Read of address 00000008. --------------------------- OK --------------------------- 4. --------------------------- App --------------------------- Access violation at address 0042B753 in module 'App.exe'. Read of address 00000028. --------------------------- OK --------------------------- 5. --------------------------- Application Error --------------------------- Exception EInvalidPointer in module plugin.dll at 00003A9D. --------------------------- OK ---------------------------
Co robię znowuż źle? ;(
PS: jak robię to bezpośrednio w aplikacji wszystko działa, ale muszę wywołać do z dll'ki i wtedy już nie działa :(
Użytkownik bajeczny edytował ten post 02 maj 2009, 17:35