Načtení obsahu txt souboru do SynEditu na další záložce – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Načtení obsahu txt souboru do SynEditu na další záložce – Pascal – Fórum – Programujte.comNačtení obsahu txt souboru do SynEditu na další záložce – Pascal – Fórum – Programujte.com

 

LAZAR
~ Anonymní uživatel
3 příspěvky
5. 3. 2023   #1
-
0
-

Zdravím,

mám prográmek s textovým editorem. Soubory, které chci načítat mám v OS asociované se svým programem. Takže poklepáním na soubor se program spustí, vytvoří novou záložku TabSheet, nový SynEdit a načte obsah souboru do SynEditu.

Mou otázkou je, zda je možné, když mám již svůj editor spuštěný, aby se další soubor otevřel v již spuštěném programu, jen by se vytvořila nová záložka. Zatím mi to funguje tak, že poklepem na další soubor se spustí další editor.

*
*
*
public
  ID_AKTIVNI_ZALOZKY, ID: Integer;
  AKTIVNI_SYNEDIT: String;
  ZALOZKA: TTabSheet;
  SPLITTER: TPairSplitter;
  SPLITTER_SIDE: TPairSplitterSide;
  SYNEDIT: TSynEdit;
*
*
*


PROCEDURE TForm1.FormActivate(Sender: TObject);
begin
  IF ParamStr(1)<>'' THEN
  begin
    //vytvoří novou záložku
    ZALOZKA:= TTabSheet.Create(PageControl1);
    WITH ZALOZKA DO
    begin
     Parent:=     PageControl1;
     Name:= 'TAB_' + IntToStr(ID);
     TabVisible:= TRUE;
     Caption:=    ChangeFileExt(ExtractFileName(ParamStr(1)),'');
     ImageIndex:= 5;
    end;
    PageControl1.ActivePageIndex:= ZALOZKA.TabIndex;
    ID_AKTIVNI_ZALOZKY:= ID;

    //vytvoří splitter
    SPLITTER:= TPairSplitter.Create(Form1);
    WITH SPLITTER DO
    begin
     Parent:=  ZALOZKA; //spliter bude zarovnaný k předem definovanému TabSheetu
     Name:= 'SPLIT_' + IntToStr(ID);
     Enabled:= TRUE;
     //Zarovnání
     AnchorParallel(akTop,   0,ZALOZKA);
     AnchorParallel(akLeft,  0,ZALOZKA);
     AnchorParallel(akRight, 0,ZALOZKA);
     AnchorParallel(akBottom,0,ZALOZKA);
    end;
    SPLITTER.Sides[0].Width:= ROUND(PageControl1.Width /2); //nastaví šířku splitteru

    //vytvoří 1.SynEdit
    SYNEDIT:= TSynEdit.Create(Self);
    WITH SYNEDIT DO
    begin
     Parent:=    SPLITTER.Sides[0];
     Name:=      'SynEdit_' + (IntToStr(ID)) + '_1';
     Enabled:=   TRUE;
     Font.Size:= 12;
     //
     LineHighlightColor.Background:= clYellow;
     HighLighter:= SynAnySyn1;
     Lines.LoadFromFile(ParamStr(1));
     //
     onClick:= @SynEditClick;
     OnKeyUp:= @SynEditKeyUp;
     //Zarovnání
     AnchorParallel(akTop,   0,SPLITTER.Sides[0]);
     AnchorParallel(akLeft,  0,SPLITTER.Sides[0]);
     AnchorParallel(akRight, 0,SPLITTER.Sides[0]);
     AnchorParallel(akBottom,0,SPLITTER.Sides[0]);
    end;
    AKTIVNI_SYNEDIT:= SYNEDIT.Name;

    //vytvoří 2.SynEdit
    SYNEDIT:= TSynEdit.Create(Self);
    WITH SYNEDIT DO
    begin
     Parent:=    SPLITTER.Sides[1];
     Name:=      'SynEdit_' + (IntToStr(ID)) + '_2';
     Enabled:=   TRUE;
     Font.Size:= 12;
     //
     LineHighlightColor.Background:= clYellow;
     HighLighter:= SynAnySyn1;
     Lines.LoadFromFile(ParamStr(1));
     //
     onClick:= @SynEditClick;
     OnKeyUp:= @SynEditKeyUp;
     //Zarovnání
     AnchorParallel(akTop,   0,SPLITTER.Sides[1]);
     AnchorParallel(akLeft,  0,SPLITTER.Sides[1]);
     AnchorParallel(akRight, 0,SPLITTER.Sides[1]);
     AnchorParallel(akBottom,0,SPLITTER.Sides[1]);
    end;

    ID:= ID + 1;
  end;
end;
Nahlásit jako SPAM
IP: 91.221.213.–
gna
~ Anonymní uživatel
1847 příspěvků
5. 3. 2023   #2
-
0
-

Vývoj Windows vůbec nesleduju a možná už jsou lepší způsoby, ale v principu, když se ten tvůj program spustí, tak můžeš detekovat, jestli jiná instance už běží a jen jí poslat požadavek o provedení té akce.

Používá(-val) se na to Mailslot, Named Pipe, Socket... (viz MSDN) Takže něco z toho vytvoříš a čekáš na zprávy. Když se to vytvořit nepodaří, tak nejsi první a jen pošleš zprávu a skončíš.

Nebo okenní zprávy. Vylistuješ seznam oken a podle titulku nebo souvisejícího exáče detekuješ, jestli patří tvému programu. A když jo, tak tomu oknu pošleš zprávu (PostMessage). To bude možná jednodušší.

Nahlásit jako SPAM
IP: 213.211.51.–
JerryM0
Věrný člen
6. 3. 2023   #3
-
0
-

Nevim jak se to dělá v Lazaru, ale v Delphi byla možnost komunikace mezi procesy pomocí tzv. pipes neboli NamedPipes:

https://learn.microsoft.com/en-us/windows/win32/ipc/pipes

https://github.com/Poznamenany/Named_Pipes_in_Delphi

https://howdelphi.com/how-can-i-use-named-pipes-in-delphi/

https://delphi.cjcsoft.net/viewthread.php?tid=48178

jinak pipes jsou implementované už ve WinAPI:

https://stackoverflow.com/questions/2640642/c-implementing-named-pipes-using-the-win32-api

jinak .. tak na okraj ... nejsem si zcela jistý, že Lazarus je to pravé ořechové pro vývoj aplikací pro windows v roce 2023 .. zkoušel si třeba MS VS 2022 C# ? ... tady v čr sice VisualBasic nemá téměř žádné využití a podporu, ale třeba v USA je to jeden z hojně využívaných prog. jaz. pro windows. Taky CodeGearRAD studio 2022 je moc dobrá věc a používá se tam tvůj milovaný "delphi" :)

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:dd8d:e98b:2b7b:8814...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý