Zgodnie z regulaminem: 3 problemy (a mo?że cztery?)

0

Siema!

Mam 3 problemy :P

1:

Mam przycisk działający jako "Zapisz Jako".
Mam w nim taki kod:

procedure TForm1.Zapisz1Click(Sender: TObject);
begin
  if assigned(ActiveMDIChild) then begin

        savedialog1.FileName := (ActiveMDIChild as TForm2).caption;

    if savedialog1.execute then begin

            (ActiveMDIChild as TForm2).memo1.Lines.SaveToFile(savedialog1.filename);

        end;
 (ActiveMDIChild as TForm2).Caption := ExtractFileName(savedialog1.FileName);
 (ActiveMDIChild as TForm2).D := ExtractFileDir(savedialog1.FileName);
    end;
end;

Jak to przerobić, aby działał jako zwykłe zapisz??

2:

Mam edytor tekstu Mdi.
Co zrobić, aby jesli nie jest tekst zapisany, i chce si zamknąć formę MDiChild, to pyta czy zapisać, czy nie zapisać, czy zamknąć?

3:

Mam taki kod:

 FileName:=Folder.Text + '' + 'UNeck_ENG.exe';
 with MySLink do
 begin
   SetPath(PChar(FileName));
  SetWorkingDirectory(PChar(ExtractFilePath(FileName)));
  end;
   Directory := MyReg.ReadString('Shell Folders','Start Menu','')+ 'Dandi Software';
        CreateDir(Directory);
 WFileName := Directory+'\U-Neck.lnk';
 MyPFile.Save(PWChar(WFileName),False);

Dodaje on do menu start Skrót do pliku "UNeck_Eng.exe".
Dlaczego tego nie robi?
Teoretycznie cośtam robi, ale w ogóle nie dodaje on skrótu do Menu Start.

No to jak się już tak rozpędziłem, to niech będzie jeszcze i czwarty :P

4:
mam taki kod pokazujący message'a:

if  Q = true then
CanClose:=True else
if  Q = false then
  if MessageDlg('Czy napewno zakończyć?',
    mtConfirmation, [mbYes, mbNo, mbCancel], 0) = mrYes then //czy cuś
CanClose:=True //zamyka
else
  if MessageDlg('Czy napewno zakończyć?',
    mtConfirmation, [mbYes, mbNo, mbCancel], 0) = mrCancel then
CanClose:=False //nie zamyka
else
  if MessageDlg('Czy napewno zakończyć?',
    mtConfirmation, [mbYes, mbNo, mbCancel], 0) = mrNo then
CanClose:=True;

Ale message'a pokazuje mi aż 3 razy (!).
Jak to zrobić, aby pokazywał mi on go tylko raz, i sprawdzał, który klawisz został wciśnięty??

0

Co zrobić, aby jesli nie jest tekst zapisany, i chce si zamknąć formę MDiChild, to pyta czy zapisać, czy nie zapisać, czy zamknąć?

If memo1.changed then //jest zmienione
else //Nie jest zmienione...

if   Q = true then
CanClose:=True else
if   Q = false then
   if MessageDlg('Czy napewno zakończyć?',
      mtConfirmation, [mbYes, mbNo, mbCancel], 0) = mrYes then //czy cuś
CanClose:=True //zamyka
else
   if MessageDlg('Czy napewno zakończyć?',
      mtConfirmation, [mbYes, mbNo, mbCancel], 0) = mrCancel then
CanClose:=False //nie zamyka
else
   if MessageDlg('Czy napewno zakończyć?',
      mtConfirmation, [mbYes, mbNo, mbCancel], 0) = mrNo then
CanClose:=True; 
var
odp: word; //chyba.. Ja to mam problemy z pamiecia...
Begin
if   Q = true then
CanClose:=True else
if   Q = false then
begin 
odp:= MessageDlg('Czy na pewno zakończyć?', mtConfirmation, 
                            [mbYes, mbNo, mbCancel], 0);
if odp= mrYes then 
CanClose:=True
else 
if odp= mrCancel then
CanClose:= False
else
CanClose:=True;
end;

<B><U>NA PEWNO NA PEWNO OSOBNO!!!!!!!!!! :-[ :-[ :-[ </U></B>

0

Dzięki Wasyl :-)
No to - Case Closed (Sprawa Zamknięta) :P
Sprawdziłem, i działa [browar]

0
odp:= MessageDlg('Czy na pewno zakończyć?', mtConfirmation, 
                            [mbYes, mbNo, mbCancel], 0);
if odp= mrYes then 
CanClose:=True
else 
if odp= mrCancel then
CanClose:= False
else
CanClose:=True;
end;
case MessageDlg('Czy na pewno zakończyć?', mtConfirmation, [mbYes, mbNo, mbCancel], 0) of
mrYes: CosTam1;
mrNo: CosTam2;
mrCancel: CosTam3;
end;
0

Na tego typu rzeczy (zamykanie, zapisywanie w edytorze) jest dobre demko:
katalog delphi\demos\richedit\richedit.dpr

0

Ok...
Problemy pierwszy, drugi i czwarty zostały rozwiązane pomyślnie.
A czy ktoś wie, dlaczego tamten kod dodający do menu start nie działa?
A może ktoś wie, jak w jakiś inny sposób dodać skrót Menu Start?

Dzięks wszystkim, co odpowiedzieli.

0
procedure Autostart;
var   MyObject:IUnknown;
      MySLink:IShellLink;
      MyPFile:IPersistFile;
      FileName:String;
      Directory:String;
      WFileName:WideString;
      MyReg:TRegIniFile;
begin
     MyObject:=CreateComObject(CLSID_ShellLink);
     MySLink:=MyObject as IShellLink;
     MyPFile:=MyObject as IPersistFile;
     //plik do którego ma być zrobiony skrót
     FileName:=ExtractFilePath(Application.ExeName)+'nazwa.exe';
    with MySLink do
      begin
        SetArguments('args...); //tutaj można wpisać ewentualne parametry
        SetPath(PChar(FileName));
        SetWorkingDirectory(PChar(ExtractFilePath(FileName)));
      end;
    MyReg := TRegIniFile.Create('Software\MicroSoft\Windows\CurrentVersion\Explorer');
    Directory := MyReg.ReadString('Shell Folders','Start Menu','')+ '\Programy\costam';
    CreateDir(Directory);
    WFileName := Directory+'\nazwa.lnk';
    MyPFile.Save(PWChar(WFileName),False);
    MyReg.Free;
  End;
MyReg := TRegIniFile.Create('Software\MicroSoft\Windows\CurrentVersion\Explorer');
end;
//----------------------------------------------
procedure usun;
var
      MyReg:TRegIniFile;
begin
MyReg := TRegIniFile.Create('Software\MicroSoft\Windows\CurrentVersion\Explorer');
  DeleteFile(MyReg.ReadString('Shell Folders','Start Menu','')+'\programy\costam\nazwa.lnk');
end;

//Sorka, myslalem, ze chodzi i dodanie do Autostartu, ale juz poprawilem [wstyd]

1 użytkowników online, w tym zalogowanych: 0, gości: 1